TC1602液晶模块与单片机接口字符显示试验
ORG 0000H
AJMP START
ORG 0033H
START: MOV SP,#60H
MAIN: LCALL DELAY ;判断液晶忙状态?
ACALL ENABLE
MOV P1,#00000001B ;写指令01H,清屏
ACALL ENABLE
MOV P1,#00111000B ;写指令38H,设定LCD为16×2显示,5×7点阵,8位数据接口
ACALL ENABLE
MOV P1,#00001111B ;写指令0FH,显示ON,光标ON,闪烁ON
ACALL ENABLE
MOV P1,#00000110B ;写指令06H,文字不动,光标自动右移
ACALL ENABLE
MOV P1,#80H ;第一行第1个字符地址
ACALL ENABLE
MOV P1,#01000001B ;字母A的代码(#41H)
SETB RS ;RS=1
CLR RW ;RW=0
CLR E ;E=0
ACALL DELAY ;判断液晶忙状态?
SETB E ;E=1
AJMP $
;-----------------
ENABLE: CLR RS ;写入控制命令的子程序
CLR RW
CLR E
ACALL DELAY
SETB E
RET
;-----------------
DELAY: MOV P1,#0FFH ;判断液晶显示器是否忙的子程序
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P1.7,DELAY ;如果为高电平表示忙就循环等待
RET
END
程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。注意显示字符时光标是自动右移的,无需人工干预,每次输入指令都先调用判断液晶模块是否忙的子程序DELAY,然后输入显示位置的地址80H(第一行第1字符),最后输入要显示的字符"A"的代码41H,显示效果下面如图3所示。
图3: 1602液晶显示一个字符“A”
前面我们进行了液晶显示一个字符“A”的实验,接下来再来编一个稍复杂点的多字符显示程序,相信你有了第一个程序的经验,下面的程序也就没有什么难度了,毕竟程序都差不多。下面程序实现两行显示:第1行显示"welcme!",第2行显示"www.ourmpu.com"。显示效果见下图4。
;******** TC1602液晶模块字符显示试验单片机汇编程序 ********
;******** 第一行显示“welcme! ********
;******** 第二行显示“www.ourmpu.com” ********
RS EQU P3.4
RW EQU P3.5
E EQU P3.6
ORG 0000H
AJMP START
ORG 0033H
START: MOV SP,#60H
MAIN: LCALL DELAY ;延时一段时间
MOV P1,#01H ;写指令01H,清屏
LCALL ENABLE
MOV P1,#38H ;写指令38H,设定LCD为16*2显示,5*7点阵,8位数据接口
LCALL ENABLE
MOV P1,#0FH ;写指令0FH,显示ON,光标ON,闪烁ON
LCALL ENABLE
MOV P1,#06H ;写指令06H,光标输入方式增量移位
LCALL ENABLE
MOV P1,#80H ;第一行起始字符地址
LCALL ENABLE
MOV DPTR,#TABLE1 ;第一行显示字符表头地址
LCALL DISP ;显示第一行数据
MOV P1,#0C0H ;第二行起始字符地址
LCALL ENABLE
MOV DPTR,#TABLE2 ;第二行显示字符表头地址
LCALL DISP ;显示第二行数据
AJMP MAIN ;返回主程序循环
;-----------------
ENABLE: CLR RS ;写指令子程序(请参照1602LCD使用说明书)
CLR RW
CLR E
LCALL DELAY
SETB E
RET
;-----------------
DISP: MOV R1,#16 ;准备显示一行16个字符
LOOP: MOV A,#00H ;将ACC清零
MOVC A,@A+DPTR ;查表取得要显示的数据
LCALL DISP1 ;写入一个数据
INC DPTR ;数据表指针加1,准备取下一个数据
DJNZ R1,LOOP ;一行没有显示完就继续
RET
;-----------------
DISP1: MOV P1,A ;写1字节数据到显示端口
SETB RS ;写数据时序(请参照1602LCD使用说明书)
CLR RW
CLR E
LCALL DELAY
SETB E
RET
;-----------------
DELAY: MOV R7,#255 ;延时子程序
D1: MOV R6,#255
D2: DJNZ R6,D2
DJNZ R7,D1
RET
- 设定1602字符的显示位置(11-21)
- 基于AT89S52的串口通信控制LCM显示(01-07)
- AT89S51单片机实验系统的开发与应用(06-21)
- 基于单片机数控直流稳压电源的设计与实现(09-08)
- 基于AT89S51单片机的角度测量仪的设计(07-11)
- AT89S51与AT89C2051单片机引脚介绍(12-03)