📄 t6963.txt
字号:
;===============================================================================
; 用6963C控制器驱动的LCD的程序(带详细注释)
;===============================================================================
;--------------------------------------------------------
; 液晶初始化程序
;--------------------------------------------------------
INT_LCD:
MOV DAT1,#00H ;设置文本显示区首地址。
MOV DAT2,#00H
MOV LCD_COM,#40H
LCALL PR1
MOV DAT1,#20H ;设置文本显示区宽度,即每行显示所占字节数。
MOV DAT2,#00H
MOV LCD_COM,#41H
LCALL PR1
MOV DAT1,#00H ;设置文本显示区首地址,或为文本属性区首地址。
MOV DAT2,#08H
MOV LCD_COM,#42H
LCALL PR1
MOV DAT1,#20H ;设置图形显示区宽度,或为文本属性区宽度。
MOV DAT2,#00H ;即每行显示所占字节数。
MOV LCD_COM,#43H
LCALL PR1
MOV LCD_COM,#0A7H ;光标形状设置。
LCALL PR12
MOV LCD_COM,#80H ;显示方式设置,逻辑“或”合成。
LCALL PR12
MOV LCD_COM,#9CH ;显示开关设置。
LCALL PR12
RET
;--------------------------------------------------------
; 液晶清屏程序
;--------------------------------------------------------
CLEAR_LCD:
MOV DAT1,#00H ;设置显示RAM首地址。
MOV DAT2,#00H ;
MOV LCD_COM,#24H
LCALL PR1
MOV R3,#00H ;设置循环量。
MOV R4,#20H ;
MOV LCD_COM,#0B0H ;设置自动写方式。
LCALL PR12
CLEAR_LCD1:
LCALL ST3 ;判断状态位S2。
MOV A,#01H ;置数据0。修改这个数据,可以在屏幕上看到满屏的变化。
LCALL PR13 ;写入数据。
DJNZ R3,CLEAR_LCD1 ;循环。
DJNZ R4,CLEAR_LCD1
MOV LCD_COM,#0B2H ;设置自动写结束指令。
LCALL PR12
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 以下是文本方式下的汉字显示
;--------------------------------------------------------
; 建立CGRAM程序
;--------------------------------------------------------
; COUNT EQU 34H ;西文字符(8x8点阵)个数。
CGRAM:
MOV DAT1,#03H ;设置CGRAM偏置地址。
MOV DAT2,#00H
MOV LCD_COM,#22H
LCALL PR1
MOV DAT1,#00H ;设置RAM地址指针。
MOV DAT2,#1CH
MOV LCD_COM,#24H
LCALL PR1
MOV LCD_COM,#0B0H ;设置自动写入方式。
LCALL PR12
MOV A,COUNT ;计算写入的字节数。
MOV B,#08H
MUL AB
MOV COUNT,A ;计算低8位数据。
INC B ;计算高8位数据。
MOV DPTR,#CGTAB ;取字符库首地址。
PUSH DPH ;保存字符库指针。
PUSH DPL
CGRAM1:
LCALL ST3 ;判断自动写状态位。
POP DPL ;取字符库指针。
POP DPH
CLR A
MOVC A,@A+DPTR ;取数据。
INC DPTR ;字符库指针+1。
PUSH DPH ;保存字符库指针。
PUSH DPL
LCALL PR13 ;写入数据。
DJNZ COUNT,CGRAM1 ;计算循环。
DJNZ B,CGRAM1
MOV LCD_COM,#0B2H ;写入“结束自动写”命令。
LCALL PR12
POP ACC ;修正堆栈指针。
POP ACC
RET
CGTAB: (这里存放你的字库)
;--------------------------------------------------------
; 液晶文本方式下汉字显示程序
;--------------------------------------------------------
C_CODE EQU 33H ;汉字字符代码。
; O_Y EQU 35H ;Y坐标(0-15)。
; O_X EQU 36H ;X坐标(0-29)。
WRI_CT:
MOV A,O_Y
MOV B,#20H
MUL AB
ADD A,O_X
MOV O_X,A
MOV DAT1,A
MOV A,B
ADDC A,#00H ;文本显示区首地址为0000H。
MOV O_Y,A
MOV DAT2,A ;设置显示RAM地址。
MOV LCD_COM,#24H
LCALL PR1
MOV A,C_CODE ;取显示代码。
MOV DAT2,A ;写入左上半部汉字代码。
MOV LCD_COM,#0C0H
LCALL PR11
MOV A,C_CODE ;
ADD A,#02H
MOV DAT2,A ;写入右上半部汉字代码。
LCALL PR11
MOV A,#20H ;修改显示RAM地址。
ADD A,O_X
MOV DAT1,A
CLR A
ADDC A,O_Y
MOV DAT2,A
MOV LCD_COM,#24H ;设置显示RAM地址。
LCALL PR1
MOV A,C_CODE
INC A
MOV DAT2,A ;写入左下半部汉字代码。
MOV LCD_COM,#0C0H
LCALL PR11
MOV A,C_CODE
ADD A,#03H
MOV DAT2,A ;写入右下半部汉字代码。
LCALL PR11
RET
;--------------------------------------------------------
; 液晶文本方式显示汉字调用方法(举例)
;--------------------------------------------------------
MOV C_CODE,#80H ;
MOV O_X,#00H
MOV O_Y,#00H
LCALL WRI_CT
MOV C_CODE,#84H ;
MOV O_X,#07H
MOV O_Y,#02H
LCALL WRI_CT
SJMP $
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 图形方式下的汉字显示程序
;-----------------------------------------------------
CC_CODE EQU 33H ;汉字字符代码。
O_Y EQU 35H ;Y坐标(0-127)
O_X EQU 36H ;X坐标(0-29)
COUNT EQU 34H ;计数器。
WRI_CC:
MOV A,O_Y ;计算图形显示RAM地址。
MOV B,#20H ;图形显示区宽度为20H。
MUL AB
ADD A,O_X
MOV O_X,A
MOV A,B
ADDC A,#08H ;图形显示区首地址为0800H。
MOV O_Y,A
MOV DPTR,#CCTAB ;计算汉字库字符首地址。
MOV A,CC_CODE
MOV B,#20H
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
PUSH DPH ;保存字库地址指针。
PUSH DPL
MOV COUNT,#10H ;计数器设置为16次。
WRI_CC1:
MOV DAT1,O_X ;设置显示RAM地址。
MOV DAT2,O_Y
MOV LCD_COM,#24H
LCALL PR1
POP DPL ;取字库地址指针。
POP DPH
CLR A
MOVC A,@A+DPTR ;取左部字模数据。
MOV DAT2,A ;设置数据。
MOV A,#10H ;偏置地址为16。
MOVC A,@A+DPTR ;取右部字模数据。
MOV DAT1,A ;暂存数据。
INC DPTR ;字库地址指针+1。
PUSH DPH ;保存字库地址指针。
PUSH DPL
MOV LCD_COM,#0C0H ;设置一次性写数据指令代码。
LCALL PR11 ;写入数据。
MOV DAT2,DAT1 ;设置右部数据。
LCALL PR11 ;写入数据。
MOV A,#20H ;修改显示RAM地址。
ADD A,O_X ;
MOV O_X,A
CLR A
ADDC A,O_Y
MOV O_Y,A
DJNZ COUNT,WRI_CC1 ;计数器循环。
POP ACC ;修正堆栈指针。
POP ACC
RET
CCTAB: (字库存放位置)
;--------------------------------------------------------
; 液晶图形方式下汉字显示演示程序(举例)
;--------------------------------------------------------
MOV CC_CODE,#00H ;
MOV O_X,#00H
MOV O_Y,#00H
LCALL WRI_CC
MOV CC_CODE,#01H ;
MOV O_X,#03H
MOV O_Y,#00H
LCALL WRI_CC
MOV CC_CODE,#02H ;
MOV O_X,#06H
MOV O_Y,#00H
LCALL WRI_CC
MOV CC_CODE,#03H ;
MOV O_X,#09H
MOV O_Y,#00H
LCALL WRI_CC
SJMP $
;----------------------------------------------------
; 向LCD中写指令和数据子程序
;----------------------------------------------------
PR1:
LCALL ST01 ;双字节参数指令写入入口。
MOV A,DAT1 ;取第一参数单元数据。
LCALL PR13 ;
PR11:
LCALL ST01 ;单字节参数指令写入入口。
MOV A,DAT2 ;取第二参数单元数据。
LCALL PR13 ;
PR12:
LCALL ST01 ;无参数指令写入入口。
MOV A,LCD_COM ;取指令代码单元数据。
LJMP PR14 ;
PR13:
MOV DPTR,#D_ADD ;
PR14:
MOVX @DPTR,A ;
RET
;----------------------------------------------------
; 读状态字子程序。
;----------------------------------------------------
R_ST:
MOV DPTR,#C_ADD ;设置指令通道地址。
MOVX A,@DPTR
RET
;----------------------------------------------------
; 状态STA1、STA0检测程序
;----------------------------------------------------
ST01:
LCALL R_ST
JNB ACC.0,ST01
JNB ACC.1,ST01
RET
;----------------------------------------------------
; 状态位STA2检测子程序
;----------------------------------------------------
ST2:
LCALL R_ST
JNB ACC.2,ST2
RET
;----------------------------------------------------
; 状态位STA3检测子程序
;----------------------------------------------------
ST3:
LCALL R_ST
JNB ACC.3,ST3
RET
;----------------------------------------------------
; 根据当前光标所在条目,算出相应地址,显示出光标
; 入口:A--地址表号码。
;----------------------------------------------------
CURSOR:
CJNE A,#01H,NEXT_POS1 ;
MOV DPTR,#POSITION1 ;指向各条对应地址。
LJMP CURSOR_COM
NEXT_POS1:
CJNE A,#02H,NEXT_POS2 ;
MOV DPTR,#POSITION2 ;指向各条对应地址。
LJMP CURSOR_COM
NEXT_POS2:
CURSOR_COM:
MOV A,TERM ;取出当前的条数。
CLR C ;
RLC A ;X2
MOVC A,@A+DPTR ;取出第1操作数。
MOV R2,A ;保存到R2.
INC DPTR ;指向下一个操作数。
MOV A,TERM ;取出当前的条数。
CLR C ;
RLC A ;X2
MOVC A,@A+DPTR ;取出第2操作数。
MOV R3,A ;第2个操作数放到R3中。
MOV R4,#21H ;光标指针设置指令码。
LCALL PR1 ;执行指令。
RET
POSITION1:
DB 11H,22H,33H,44H,55H,66H ;画面2中选择条目。
POSITION2:
DB 11H,22H,33H,44H,55H,66H ;输入口令时选择数字位数。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -