|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
;1602指令
;端口按照开发板定义
RS EQU P2.4 ;RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
RW EQU P2.5 ;RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
E EQU P2.6 ;E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
DATE EQU P0
//当RS和RW共同为低电平时,可以写入指令或者显示地址
//当RS为低电平,RW为高电平时,可以读忙信号
//当RS为高电平,RW为低电平时,可以写入数据
/*******************************************************************************************************
各种指令:
//功能设置命令,显示模式
MOV DATE, #20H ;20H~23H都可以。4位总线,单行显示,显示5x7的点阵字符
MOV DATE, #24H ;24H~27H都可以。4位总线,单行显示,显示5x10的点阵字符
MOV DATE, #28H ;28H~2BH都可以。4位总线,双行显示,显示5x7的点阵字符
MOV DATE, #2CH ;2CH~2FH都可以。4位总线,双行显示,显示5x10的点阵字符
MOV DATE, #30H ;30H~33H都可以。8位总线,单行显示,显示5x7的点阵字符
MOV DATE, #34H ;34H~37H都可以。8位总线,单行显示,显示5x10的点阵字符
MOV DATE, #38H ;38H~3BH都可以。8位总线,双行显示,显示5x7的点阵字符
MOV DATE, #3CH ;3CH~3FH都可以。8位总线,双行显示,显示5x10的点阵字符
//显示开关控制
MOV DATE, #08H ;08H~0BH都可以。关显示
MOV DATE, #0CH ;不显示光标,光标不闪烁
MOV DATE, #0DH ;不显示光标,光标闪烁,明显不可能//
MOV DATE, #0EH ;显示光标,光标不闪烁
MOV DATE, #0FH ;显示光标,光标闪烁
//输入模式
MOV DATE, #04H ;光标左移,文字不移
MOV DATE, #05H ;光标左移,文字左移
MOV DATE, #06H ;光标右移,文字不移
MOV DATE, #07H ;光标右移,文字右移
//光标或显示的字符移位
MOV DATE, #10H ;10H~13H都可以。光标右移
MOV DATE, #14H ;14H~17H都可以。光标左移
MOV DATE, #18H ;18H~1BH都可以。文字右移
MOV DATE, #1CH ;1CH~1FH都可以。文字左移
//清屏
MOV DATE, #01H
//光标返回到起始位置
MOV DATE, #02H ;也可以是03H
//要显示字符时要先输入显示字符地址,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是80H+地址
;16x2的屏幕地址为:
;第一行16个字符:00H,01H, 02H ...... 0FH
;第二行16个字符:40H,41H, 42H ...... 4FH
MOV DATE, A
*****************************************************************************************************/
//读忙标志
CHECKBUSY: PUSH ACC
MOV DATE,#0FFH
CLR RS
SETB RW
SETB E
BUSYLOOP: JB DATE.7,BUSYLOOP
CLR E
POP ACC
RET
//写指令,要写的指令在寄存器A中
INSTRUCTION: PUSH ACC
CLR RS
CLR RW
MOV DATE, A
SETB E
CLR E
POP ACC
ACALL DELAY40US ;1602大部分指令执行时间都是40us
RET
//写数据到CGRAM或DDRAM,要写的数据在寄存器A中
WRITEDATE: PUSH ACC
SETB RS
CLR RW
MOV DATE, A
SETB E
CLR E
POP ACC
ACALL DELAY40US ;1602大部分指令执行时间都是40us
RET
//清屏
CLRS: ACALL CHECKBUSY
MOV A, #01H
ACALL INSTRUCTION ;清屏
ACALL DELAY5MS ; 清屏程序执行时间是1.64ms
RET
//从CGRAM或DDRAM读数据,读出的数据放在寄存器A中
READDATE: PUSH ACC
SETB RS
SETB RW
MOV A, DATE
SETB E
CLR E
POP ACC
ACALL DELAY40US ;1602大部分指令执行时间都是40us
RET
/******************************************************
初始化化过程(复位过程)
1.延时15ms,等待VDD大于4.5V
2.写指令38H(不检测忙信号),功能设置,8位数据线
3.延时5ms,等待时间大于4.1ms
4.写指令38H(不检测忙信号),功能设置,8位数据线
5.延时5ms,等待时间大于100us
6.写指令38H(不检测忙信号),功能设置,8位数据线
液晶显示模块是一个慢显示器件,在执行每条指令前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
以后都要检测忙信号
7.显示模式设置
8.关显示
9.清屏
10.光标、显示等设置
******************************************************/
//初始化
INITI: ACALL DELAY5MS
ACALL DELAY5MS
ACALL DELAY5MS ;延时15ms,等待VDD大于4.5V
MOV A, #30H
ACALL INSTRUCTION
ACALL DELAY5MS
ACALL INSTRUCTION
ACALL DELAY5MS
ACALL INSTRUCTION ;以上为初始化前的一些操作
ACALL CHECKBUSY
MOV A, #30H
ACALL INSTRUCTION ;8位总线,单行显示,显示5x7的点阵字符
ACALL CHECKBUSY
MOV A, #08H
ACALL INSTRUCTION ;关显示
ACALL CLRS ;清屏
ACALL CHECKBUSY
MOV A, #07H
ACALL INSTRUCTION ;光标右移,文字右移
ACALL CHECKBUSY
MOV A, #0FH
ACALL INSTRUCTION ;显示光标,光标闪烁
RET |
|