附录B.2 LCM1602的应用程序
程序1. 使LCD在不同位置显示字符
功能说明:单片机接有液晶显示器,开机后在显示器第一行第二个位置上显示“L”,在第二行第五个位置显示“G”。本节电路见图3.3.
本节程序由主程序,初始化子程序,写指令子程序,判忙子程序和写数据子程序所构成,再设定第一行显示数据位置显示“A”后,又设定了第二行显示 数据的位置并输出显示数据“B”
(1)主程序流程图下图所示
附图2 LCM1602显示两个字符的程序流程图
(2)主程序
;********89C51引脚定义********
RS BIT P3.3
R_W BIT P3.4
E BIT P3.5
DB0_DB7 EQU P1
;*******程序开始********
ORG 0000H
LJMP MAIN
;*******主程序*******
ORG 0030H
MAIN:MOV LCD,#00000001B;清屏,光标复位
ACALL WR_COM; 调用写指令子程序
ACALL INITIAL; 调用初始化子程序
MOV LCD #81H; 写入第一行第二个位置
ACALL WR_COM; 调用写指令子程序
www.751com.cn ACALL WR_DATA; 调用写数据子程序
JMP $; 文持当前输入状态
; *******初始化子程序*******
INITIAL:MOV A,#00111000B; 设置8位,2行,5*7点阵
LCALL WRITE_COM; 调用写指令子程序
MOV A,#00001110B ; 显示器开,允许光标闪烁
LCALL WRITE_COM ; 调用写指令子程序
MOV A,#00000110B ; 文字不动,光标自动右移
LCALL WRITE_COM ; 调用写指令子程序
RET
;******写命令子程序***********
WRITE_COM:
CLR RS ; RS=0,选择指令寄存器
CLR R_W; RW=0,选择写模式
CLR E; E=0,禁止读/写LCM
LCALL CHECK_BUSY; 调用判断忙碌子程序
SETB E; E=1 ,允许读/写LCM
RET; 子程序返回
;*********查忙子程序***********
CHECK_BUSY:
MOV LCD,#0FFH; 此时不接受外来指令
SETB R_W; RW=1, 选择写模式
CLR RS; RS=0,选择指令寄存器
CLR E; E=0,禁止读/写LCM
NOP ; 延时1us
SETB E; E=1,允许读/写LCM
JB LCD.7,CHECK_BUSY;若忙碌则循环等待
RET; 子程序返回
;*********写数据子程序************
WRITE_DATA:
SETB RS ; RS=1,选择数据 寄存器
CLR R_W; RW=0,选择写模式
CLR E; E=0,禁止读/写LCM
LCALL CHECK_BUSY; 调用判断忙碌子程序
SETB E; E=1 ,允许读/写LCM
RET; 子程序返回
<< 上一页 [11] [12] [13] [14] [15] 下一页