程序目的是在 lcd1602 第一行最后一格显示字符 “A”
硬件p0口作为8位数据线
我调试了好几天了,要么满屏幕跑A,要么乱码,要么就不显示,
程序如下,请老师指导一下
EN BIT P2.7 ; 程序主要目的是在lcd1602 在第一行最后一格显示A
RW BIT P2.5
RS BIT P2.6
SJMP MAIN
WRCMD: ;写指令程序,用R3寄存器中转指令值
CLR EN
CLR RS
CLR RW
MOV P0,R3 ;将R3的值赋给P0口
lcall DE5MS
SETB EN ;使能
NOP
NOP
NOP
CLR EN
LCALL DE5MS
RET
WRDAT: ;写数据程序,用R4寄存器中转数据值
CLR EN
SETB RS
CLR RW
MOV P0,R4 ;将R4的值赋给P0口
lcall DE5MS
SETB EN ;使能
NOP
NOP
NOP
CLR EN
LCALL DE5MS
RET
INIT:
MOV R3,#0X38 ;初始化程序
LCALL WRCMD
LCALL DE5MS
MOV R3,#0X38
LCALL WRCMD
LCALL DE5MS
MOV R3,#0X38
LCALL WRCMD
LCALL DE5MS
MOV R3,#0X38
LCALL WRCMD
LCALL DE5MS
MOV R3,#0X08
LCALL WRCMD
LCALL DE5MS
MOV R3,#0X01
LCALL WRCMD
LCALL DE5MS
MOV R3,#0X06
LCALL WRCMD
LCALL DE5MS
MOV R3,#0X0C
LCALL WRCMD
LCALL DE5MS
RET
MAIN: ;主程序开始的地方
LCALL INIT ;调用初始化程序
D1:
LCALL DE5MS
MOV r3,#0X80 ;将lcd1602第一行07位地址0x80用r3寄存器转给p0口
LCALL WRCMD
LCALL DE5MS
MOV r4,#0X41 ;将lcd1602第一行07位地址,要显示数据用r4寄存器转给p0口
LCALL WRDAT
LCALL DE5MS
SJMP d1
DE5MS: MOV 51H,#20 ;延时程序
D2: MOV 52H,#123
DJNZ 52H,$
DJNZ 51H,D2
RET
END
|