关于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









...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
炼气士 2011-05-15
  • 打赏
  • 举报
回复
汇编,看着就烦,等高人解
lr2131 2011-05-15
  • 打赏
  • 举报
回复
汇编表示很有压力的路过
贾熊猫 2011-05-15
  • 打赏
  • 举报
回复
现在是不是很少有人用汇编写程序了呀?汇编太难了
猪皮冻 2011-05-15
  • 打赏
  • 举报
回复
汇编看不懂,是1602吗,c 的我到知道,注意时序e要在rs和rw之后使能,在rs和rw之前归零 ,先初始化,再写命令,再写数据

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧