📄 lcd_dis.asm
字号:
;单片机和液晶模块的连线为:
;P0 <=======> D0-D7
;P2.0 <=======> C/D
;P2.1 <=======> /CE
DAT1 EQU 30H ;第一参数单元
DAT2 EQU 31H ;第二参数单元
COM EQU 32H ;指令代码单元
C_ADD EQU 8100H ;指令通道地址
D_ADD EQU 8000H ;数据通道地址
LCALL MAIN
;读状态字程序
R_ST: MOV DPTR,#C_ADD ;设置指令通道地址
MOVX A,@DPTR
RET
;判状态位STA1,STA0程序
STO1: LCALL R_ST
JNB ACC.0,STO1
JNB ACC.1,STO1
RET
;判状态位STA2程序
ST2: LCALL R_ST
JNB ACC.2,ST2
RET
;判状态位STA3程序
ST3: LCALL R_ST
JNB ACC.3,ST3
RET
;判状态位STA3程序
ST6: LCALL R_ST
JNB ACC.6,ST6
RET
;写指令与数据程序
PR1: LCALL STO1 ;写双字节参数指令
MOV A,DAT1
LCALL PR13
PR11: LCALL STO1 ;写单字节参数指令
MOV A,DAT2
LCALL PR13
PR12: LCALL STO1 ;写单字节参数指令
MOV A,COM
MOV DPTR,#C_ADD ;;;;;自己加的
LCALL PR14
RET
PR13: MOV DPTR,#D_ADD ;设置数据通道地址
PR14: MOVX @DPTR,A
RET
;读数据程序
PR2: LCALL STO1
MOV DPTR,#D_ADD
MOVX A,@DPTR
MOV DAT2,A ;数据存入第二参数单元
RET
;初始化程序
INT: MOV DAT1,#00H ;设置文本显示区域首地址
MOV DAT2,#00H
MOV COM,#40H
LCALL PR1
MOV DAT1,#1EH ;设置文本显示宽度
MOV DAT2,#00H
MOV COM,#41H
LCALL PR1
MOV DAT1,#00H ;设置图形显示区域首地址
;MOV DAT2,#08H
MOV DAT2,#08H
MOV COM,#42H
LCALL PR1
MOV DAT1,#1EH ;设置图形显示宽度
MOV DAT2,#00H
MOV COM,#43H
LCALL PR1
MOV COM,#0A7H ;光标形状设置
LCALL PR12
MOV COM,#84H ;显示方式设置;或
LCALL PR12
MOV COM,#9CH ;图形文本显示方式
LCALL PR12
RET
;清显示RAM程序
CLEAR: MOV DAT1,#00H ;设置显示RAM首地址
MOV DAT2,#00H
MOV COM,#24H
LCALL PR1
MOV R3,#00H ;设置衔环变量
MOV R4,#20H
MOV COM,#0B0H ;设置自动写方式
LCALL PR12
CLEAR1: LCALL ST3
MOV A,#00H
LCALL PR13
DJNZ R3,CLEAR1
DJNZ R4,CLEAR1
MOV COM,#0B2H
LCALL PR12
RET
;西文显示程序
DIS: MOV COM,#9CH
LCALL PR12
MOV COM,#84H
LCALL PR12
MOV DAT1,#00H
MOV DAT2,#00H
MOV COM,#24H
LCALL PR1
MOV R2,00H
PR81: MOV DPTR,#DTAB
MOV A,R2
MOVC A,@A+DPTR
MOV DAT2,A
MOV COM,#0C0H
LCALL PR11
INC R2
CJNE R2,#11,PR81
MOV COM,#00
MOV DAT2,#08
MOV COM,#24H
LCALL PR1
MOV R2,#00H
PR82: MOV DPTR,#TAB
MOV A,R2
MOVC A,@A+DPTR
MOV DAT2,A
MOV COM,#0C0H
LCALL PR11
INC R2
CJNE R2,#11,PR82
RET
;建立CGRAM字符字库
;西文字符(8*8点阵)个数
CGRAM: MOV DAT1,#03H ;设置CGRAM偏置地址
MOV DAT2,#00H
MOV COM,#22H
LCALL PR1
MOV DAT1,#00H ;设置RAN地址指针
MOV DAT2,#1CH
MOV COM,#24H
LCALL PR1
MOV COM,#0B0H ;设置自动写方式
LCALL PR12
MOV R2,#00H ;计算写入的字节数
CGRAM1: LCALL ST3 ;判自动写状态
MOV DPTR,#CGATB
MOV A,R2
MOVC A,@A+DPTR ;取数据
LCALL PR13 ;写入CGRAM
INC R2 ;字符库指针加一
CJNE R2,#32,CGRAM1
MOV COM,#0B2H ;写入结束自动写指令
LCALL PR12
RET
CGATB: DB 000H,040H,037H,010H,081H,061H,022H,00AH ;液
DB 016H,02BH,0E2H,022H,022H,022H,023H,022H
DB 080H,044H,0FEH,020H,020H,03CH,044H,064H
DB 098H,048H,050H,020H,050H,08EH,004H,000H
;DB 00FH,008H,008H,00FH,008H,008H,00FH,008H ;晶
;DB 07EH,042H,042H,07EH,042H,042H,07EH,042H
;DB 0E0H,020H,020H,0E0H,020H,020H,0E0H,024H
;DB 0FEH,084H,084H,0FCH,084H,084H,0FCH,084H
;汉字写入程序
CHIANDIS: MOV DAT1,#30
MOV DAT2,#00
MOV COM,#24H
LCALL PR1
MOV DAT2,#80H
MOV COM,#0C0H ;写数据,地址加1指令
LCALL PR11 ;DAT2在主程序中设定,如DAT2=80H
INC DAT2
INC DAT2
LCALL PR11 ;DAT2=82H
DEC DAT2
MOV R2,#28
MOV COM,#0C1H ;读数据,地址加1指令
CHINA: LCALL PR12
DJNZ R2,CHINA ;地址指针移到汉字左下角
MOV COM,#0C0H
LCALL PR11
INC DAT2
INC DAT2
LCALL PR11
RET
MAIN: LCALL INT
LCALL CLEAR
LCALL DIS
LOOP: LCALL CGRAM
LCALL CHIANDIS
JMP LOOP
DTAB: DB 57H,45H,4CH,43H,4FH,4DH,45H,00H,39H,4FH,55H ;Welcom you
;TAB: DB 0DH,0DH,0DH,0DH,0DH,0DH,0DH,0DH,0DH,0DH,0DH ;;
TAB: DB 08H,08H,08H,08H,08H,08H,08H,08H,08H,08H,08H ;;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -