📄 ex26a_lcd.asm
字号:
;********************************Copyright (c)********************************
;** 广州周立功单片机发展有限公司
;** 研 究 所
;** http://www.zlgmcu.com
;*********************************文件信息************************************
;文件名:
; EX26A_LCD.asm
;目的 :
; 1.学习使用DP-51h实验的仿真调试程序的方法;
; 2.学习LCD液晶显示器的驱动方法和程序设计方法;
; 3.在第1行显示"DP-51H",在第2行
; 显示"2003年7月12日"并不断滚动。
;硬件设置:
; LCD液晶显示屏数据口地址为400xH~4FFxH之间,在此数据地址为4002H,而命令口地址
; 为4000H。
;最后修改时间:
; 2003年7月2
;******************************************************************************
WR_COM EQU 4000H ;写指令地址
RD_STA EQU 4002H ;读状态地址
WR_DAT EQU 4001H ;写数据地址
RD_DAT EQU 4003H ;读数据地址
ORG 8000H
AJMP MAIN
ORG 8100h
MAIN:
MOV SP,#60h ;设置SP
ACALL DELAY ;延时
ACALL INIT_LCD ;初始化液晶模块
ACALL WRITE_CGRAM ;设置CGRAM
MOV A,#84H ;从第一行第5位开始
ACALL WRITE_COM
MOV R6,#06 ;显示DP-51S
MOV DPTR,#TABLE1 ;读取DP-51S数据表地址
DISP1:
CLR A
MOVC A,@A+DPTR
ACALL WRITE_DAT
INC DPTR
DJNZ R6,DISP1
MOV A,#0C2H ;第二行第二位开始显示
ACALL WRITE_COM
MOV R6,#13 ;显示ZLG2003年3月26日
MOV DPTR,#TABLE2 ;读取数据表2地址
DISP2:
CLR A
MOVC A,@A+DPTR
ACALL WRITE_DAT
INC DPTR
DJNZ R6,DISP2
DISP_LOOP:
MOV A,#07H ;设置左移模式
ACALL WRITE_COM
MOV A,#8FH ;从第一行第16位开始
ACALL WRITE_COM
MOV R6,#16 ;左移16个 空格
DISP_LEFT:
MOV A,#10H
ACALL WRITE_DAT
ACALL DELAY ;延时
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
DJNZ R6,DISP_LEFT
MOV A,#05H ;设置右移模式
ACALL WRITE_COM
MOV A,#80H ;从第一行第1位开始
ACALL WRITE_COM
MOV R6,#16
DISP_RIGHT:
MOV A,#10H
ACALL WRITE_DAT
ACALL DELAY ;延时
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
DJNZ R6,DISP_RIGHT
SJMP DISP_LOOP ;循环移动
;初始化液晶模块
INIT_LCD:
MOV A,#38H ;设置为8位数据总线,16*2,5*7点阵
ACALL WRITE_COM
MOV A,#01H ;清屏幕
ACALL WRITE_COM
MOV A,#06H ;光标移动,显示区不移动,读写操作后AC加1
ACALL WRITE_COM
MOV A,#0CH ;开显示,关光标,不闪烁
ACALL WRITE_COM
RET
;写指令子程序
WRITE_COM:
PUSH DPH ;保存DPTR
PUSH DPL
MOV DPTR,#WR_COM ;设置写指令地址
MOVX @DPTR,A ;输出指令
ACALL DELAY ;延时
POP DPL ;恢复DPTR
POP DPH
RET
;写数据子程序
WRITE_DAT:
PUSH DPH ;保存DPTR
PUSH DPL
MOV DPTR,#WR_DAT ;设置写数据地址
MOVX @DPTR,A ;输出数据
ACALL DELAY ;延时
POP DPL ;恢复DPTR
POP DPH
RET
;设置自定义字符
WRITE_CGRAM:
PUSH ACC ;保护现场
PUSH DPL
PUSH DPH
PUSH PSW
MOV A,#40H ;设置CGRAM开始地址为00H
ACALL WRITE_COM
MOV R7,#24 ;输出3个自定义字符(3×8=24)
MOV DPTR,#CGRAM_TABLE
WRITE_CGRAM1:
CLR A
MOVC A,@A+DPTR ;读取表数据
ACALL WRITE_DAT ;把数据写到CGRAM中
INC DPTR
DJNZ R7,WRITE_CGRAM1
ACALL DELAY ;延时
POP PSW ;现场恢复
POP DPH
POP DPL
POP ACC
RET
;延时子程序
DELAY:
MOV R5,#100
DELAY1:
MOV R4,#100
DJNZ R4,$
DJNZ R5,DELAY1
RET
;定义代码
CGRAM_TABLE:
DB 08H,0FH,12H,0FH,0AH,1FH,02H,02H ;年
DB 0FH,09H,0FH,09H,0FH,09H,11H,00H ;月
DB 0FH,09H,09H,0FH,09H,09H,0FH,00H ;日
TABLE1:
DB 44H,50H,2DH,35H,31H,48H;DP-51H
TABLE3:
DB 10H,10H,10H,10H,10H,10H,10H,10H,10H,10H,10H,10H,10H,10H,10H,10H,10H;空格
TABLE2:
DB 5AH,4CH,47H,32H,30H,30H,33H,00H,37H,01H,31H,32H,02H
; Z l G 2 0 0 3 年 7 月 1 2 日
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -