📄 lcdshow.asm
字号:
*[LCD引脚定义]
LcdData EQU PTB ;Lcd显示数据传送口
LcdData_D EQU DDRB ;数据口方向寄存器
LcdCtrl EQU PTC ;Lcd控制信号传送口
LcdCtrl_D EQU DDRC ;控制口方向寄存器
LcdRS EQU 0 ;Lcd寄存器选择信号PTC0
LcdRW EQU 1 ;读写信号接PTC1
LcdE EQU 2 ;Lcd使能信号接PTC2
*LCDShow:在HD44780显示屏上显示数据--------------------*
*功能描述:在HD44780显示屏上显示HX所指向的32个数据 *
*入口:HX=待显示数据的首地址 *
*出口:无 *
*堆栈深度:2+8+2=12 *
*内部调用:InitLCD,LCDCommand *
*------------------以上为子程序说明-------------------*
LcdShow:
PSHA ;保护A
AIS #-!1 ;开辟临时变量
JSR InitLcd ;调用Lcd初始化子程序
;显示第1行16个字符
BCLR LcdRS,LcdCtrl ;RS、R/W=00 设置显示首地址
BCLR LcdRW,LcdCtrl
LDA #%10000000 ;后7位为DDRAM地址,=$00
JSR LcdCommand
LDA #!16 ;临时变量初值=16(1行显示个数)
STA !1,SP
BSET LcdRS,LcdCtrl ;RS、R/W=10 写数据到DDRAM
BCLR LcdRW,LcdCtrl
LcdShow1:
LDA ,X ;取待显示的数据
JSR LcdCommand
AIX #!1 ;指向下一个待显示的数据
DBNZ !1,SP,LcdShow1 ;显示完毕?否,继续
;显示第2行16个字符
BCLR LcdRS,LcdCtrl ;RS、R/W=00 设置显示首地址
BCLR LcdRW,LcdCtrl
LDA #%11000000 ;后7位为DDRAM地址,=$40
JSR LcdCommand
LDA #!16 ;临时变量初值=16(1行显示个数)
STA !1,SP
BSET LcdRS,LcdCtrl ;RS、R/W=1 0 写数据到DDRAM
BCLR LcdRW,LcdCtrl
LcdShow2:
LDA ,X ;取待显示的数据
JSR LcdCommand
AIX #!1 ;指向下一个待显示的数据
DBNZ !1,SP,LcdShow2 ;显示完毕?否,继续
AIS #!1 ;释放临时变量
PULA ;恢复A
RTS
*InitLcd:初始化Lcd(HD44780)----------------------------*
*功能描述:初始化Lcd(HD44780),设置显示方式,清屏,AC自动+1*
*入 口:无 *
*出 口:无 *
*堆栈深度:2+3+3=8 *
*内部调用:LcdCommand *
*------------------------------------------------------*
InitLcd:
PSHH ;保护HX、A
PSHX
PSHA
LDA #%11111111 ;数据口为输出
STA LcdData_D
LDA LCDCtrl_D ;控制口低三位为输出
ORA #%00000111
STA LCDCtrl_D
BSET LcdE,LcdCtrl
;进行LCD设置
BCLR LcdRS,LcdCtrl ;RS、R/W=00
BCLR LcdRW,LcdCtrl
LDA #%00111000 ;8位数据,2行显示,5*7点阵
JSR LcdCommand
LDA #%00001000 ;关显示,关光标显示,不闪烁
JSR LcdCommand
LDA #%00000001 ;清屏
JSR LcdCommand
LDHX #$03DF ;等待清屏完毕,时间>1.6ms
Delay2ms: ;延时
AIX #-1
CPHX #0
BNE Delay2ms
LDA #%00000110 ;AC自动增1,显示不移动,光标左移
JSR LcdCommand
LDA #%00010100 ;光标右移一个字符AC自动+1
JSR LcdCommand
LDA #%00001100 ;开显示,关光标显示,不闪烁
JSR LcdCommand
PULA ;恢复HX、A
PULX
PULH
RTS
*LcdCommand:执行A中的Lcd命令---------------------------*
*功能描述:执行A中的Lcd命令,且延时 *
*入 口:A,存放指令码或数据 *
*出 口:无 *
*堆栈深度:2+1=3 *
*------------------------------------------------------*
LcdCommand:
PSHX ;保护X
LDX #$30 ;等待>40us
DBNZX *
STA LcdData ;A->LcdData
BSET LcdE,LcdCtrl ;LcdE=1,为了获得E下降沿
NOP
NOP
NOP
BCLR LcdE,LcdCtrl ;LcdE=0,E下降沿,Lcd获得数据
LDX #$30 ;等待>40us
DBNZX *
PULX ;恢复X
RTS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -