关于lcd显示的问题
贾熊猫 2011-05-14 04:14:29 我想的是让lcd显示出一个‘#'可是总是显示不出来。不知道出了什么问题。希望各位给出答案啊,小弟在这里 先谢过了。下面是程序。用的是汇编。
;规定:用a来传递命令代码和数据代码。
E BIT P3.3;lcd的e端口与p3.3相连接。
RW BIT P3.4;lcd的读写端口与p3.4相连接。
RS BIT P3.5;lcd的rs端与p3.5相连接
ORG 0000H
AJMP MIAN
MIAN: ACALL INIT;调用初始化函数
MOV A,#01H
ACALL WRITE_COM;让lcd清屏的命令
MOV A,#02H;让lcd的指针回到首行的首列
ACALL WRITE_COM
MOV A,#23H;‘#’的asc2码,做测试用的,其他的也可以的。
ACALL WRITE_DATA; 把‘#、写入lcd
AJMP $;死循环,主程序到此结束。
INIT:MOV A,#038H; 初始化函数。
ACALL WRITE_COM
MOV A,#0CH
ACALL WRITE_COM
MOV A,#06H
ACALL WRITE_COM
RET ;初始化完毕
WRITE_COM:CLR RW ;写命令函数。
CLR RS
SETB E
MOV P1,A
NOP
NOP; 有个小小的延时
CLR E
NOP
NOP
ACALL BUSY
JB F0,WRITE_COM;如果lcd忙则再次写命令。如果不忙,回到ret,回到原来的函数。
ret;;;;;;;;;;;;;weiwan;写命令函数结束。
WRITE_DATA:CLR RW ;写数据函数。
SETB RS
SETB E
MOV P1,A
NOP
NOP
CLR E
NOP
NOP
SETB RW
ACALL BUSY
JB F0,WRITE_COM
RET ; 写数据函数。
BUSY: PUSH ACC ;判断lcd是否处于忙的状态的函数。
PUSH PSW
PUSH P1
PUSH P3
CLR RS
SETB RW
SETB E
NOP
NOP
NOP
MOV C,P1.7 ; 由于p1.7的值不可以直接传递给f0 所以借助c来传递。
MOV F0,C ; 把p1.7的值给f0
CLR E
POP P3
POP P1
POP PSW
POP ACC
RET;
DELAY: ;延时函数,最小延时1ms,由r7的值来决定延时的时间。
PUSH ACC
DELAY0:MOV R2,#4
DELAY1:MOV R4,#2H ;
DELAY2:DJNZ R4,$
DJNZ R2,DELAY1 ;延时1ms
DJNZ R7,DELAY0
;MOV P2,#0F0H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
POP ACC
RET ;延时函数结束。
END