51单片机1602汇编语言
时间: 2023-10-18 18:22:08 浏览: 124
以下是51单片机使用1602液晶显示屏的汇编语言代码示例:
```
; 定义1602液晶屏I/O口
#define LCD1602_DB P0 ; 数据口
#define LCD1602_RS P2.0 ; RS引脚
#define LCD1602_RW P2.1 ; RW引脚
#define LCD1602_E P2.2 ; E引脚
; 定义命令码
#define LCD1602_CLEAR 0x01 ; 清屏
#define LCD1602_HOME 0x02 ; 光标返回起始位置
#define LCD1602_ENTRY 0x06 ; 光标自动右移
#define LCD1602_DISPLAY 0x0C ; 开启显示,关闭光标
#define LCD1602_FUNCTION 0x38 ; 8位数据总线,2行显示,5x8点阵字符
; 初始化1602液晶屏
InitLCD1602:
mov LCD1602_DB, #LCD1602_FUNCTION ; 发送功能设置命令
clr LCD1602_RS ; RS=0,选择命令寄存器
clr LCD1602_RW ; RW=0,写模式
setb LCD1602_E ; 使能E
clr LCD1602_E
acall Delay5ms ; 延时
mov LCD1602_DB, #LCD1602_FUNCTION ; 再次发送功能设置命令
setb LCD1602_E
clr LCD1602_E
acall Delay5ms
mov LCD1602_DB, #LCD1602_FUNCTION ; 再次发送功能设置命令
setb LCD1602_E
clr LCD1602_E
acall Delay5ms
mov LCD1602_DB, #LCD1602_DISPLAY ; 发送显示设置命令
setb LCD1602_E
clr LCD1602_E
acall Delay5ms
mov LCD1602_DB, #LCD1602_CLEAR ; 发送清屏命令
setb LCD1602_E
clr LCD1602_E
acall Delay5ms
mov LCD1602_DB, #LCD1602_ENTRY ; 发送光标右移命令
setb LCD1602_E
clr LCD1602_E
acall Delay5ms
ret
; 向1602液晶屏写入一个字符
WriteCharLCD1602:
mov LCD1602_DB, A ; 将要写入的字符送入数据口
setb LCD1602_RS ; RS=1,选择数据寄存器
clr LCD1602_RW ; RW=0,写模式
setb LCD1602_E ; 使能E
clr LCD1602_E
ret
; 向1602液晶屏写入一个字符串
WriteStringLCD1602:
push ACC ; 保存ACC
mov R7, DPL ; R7指向字符串首地址
acall Delay5us
WriteStringLoop:
mov A, @R7 ; 从内部RAM读出一个字符
inc R7 ; 指向下一个字符
orl A, A ; 判断字符是否为0
jz WriteStringEnd ; 如果是0,结束
acall WriteCharLCD1602 ; 向1602液晶屏写入一个字符
sjmp WriteStringLoop ; 继续写入
WriteStringEnd:
pop ACC ; 恢复ACC
ret
; 延时5ms
Delay5ms:
mov R6, #0FFh
Delay5msLoop1:
mov R5, #0FFh
Delay5msLoop2:
djnz R5, Delay5msLoop2
djnz R6, Delay5msLoop1
ret
; 延时5us
Delay5us:
mov R6, #01h
Delay5usLoop1:
mov R5, #0FFh
Delay5usLoop2:
djnz R5, Delay5usLoop2
djnz R6, Delay5usLoop1
ret
```
使用方法:
1. 在主程序中调用InitLCD1602初始化1602液晶屏。
2. 要显示字符时,调用WriteCharLCD1602向1602液晶屏写入一个字符。如果要显示字符串,调用WriteStringLCD1602向1602液晶屏写入一个字符串。
3. 在需要清屏时,调用WriteCharLCD1602向1602液晶屏写入LCD1602_CLEAR命令码。
4. 在需要光标返回起始位置时,调用WriteCharLCD1602向1602液晶屏写入LCD1602_HOME命令码。
阅读全文