lcd1602 不显示怎么回事?

[复制链接]
4402|1
 楼主| lkkjob 发表于 2008-3-16 19:58 | 显示全部楼层 |阅读模式
我最近在学习使用液晶显示,先选了比较简单的lcd1602.程序编译已经成功了,但烧进板子之后却没什么反应了,不知道怎么回事,请大家帮我看一下啊。程序如下:p0为8位数据口,<br />#include&ltreg52.h&gt<br />#include&ltintrins.h&gt<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />#define&nbsp;uint&nbsp;unsigned&nbsp;int<br />sfr&nbsp;p0=0x80;<br />sfr&nbsp;p2=0xA0;<br />sbit&nbsp;EN1602=p2^5;<br />sbit&nbsp;RS1602=p2^7;<br />sbit&nbsp;RW1602=p2^6;<br /><br />char&nbsp;code&nbsp;str1[]=&quot;Welcom!&quot;;<br />void&nbsp;delay_10us(uchar&nbsp;n)<br />{do<br />&nbsp;&nbsp;&nbsp;{_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;}while(--n);<br />}<br />void&nbsp;delay_ms(uint&nbsp;n)&nbsp;&nbsp;<br />{do<br />&nbsp;&nbsp;&nbsp;{delay_10us(131);<br />&nbsp;&nbsp;&nbsp;&nbsp;}while(--n);<br />}<br />bit&nbsp;lcd1602_test()&nbsp;&nbsp;/*忙测试<br />{uchar&nbsp;status;<br />&nbsp;p0=0xff;<br />&nbsp;RS1602=0;<br />&nbsp;RW1602=1;<br />&nbsp;EN1602=1;<br />&nbsp;_nop_();<br />&nbsp;status=p0;<br />&nbsp;_nop_();<br />&nbsp;EN1602=0;<br />&nbsp;return&nbsp;status&0x80;<br />}<br />void&nbsp;lcd1602_wr_cmd(uchar&nbsp;cmd,bit&nbsp;test)&nbsp;&nbsp;/*写命令<br />{if(test)&nbsp;while(lcd1602_test());<br />&nbsp;RS1602=0;<br />&nbsp;RW1602=0;<br />&nbsp;p0=cmd;<br />&nbsp;EN1602=1;<br />&nbsp;_nop_();<br />&nbsp;EN1602=0;<br />}<br />void&nbsp;lcd1602_wr_dat(uchar&nbsp;dat)&nbsp;&nbsp;/*写数据<br />{while(lcd1602_test());<br />&nbsp;RS1602=1;<br />&nbsp;RW1602=0;<br />&nbsp;p0=dat;<br />&nbsp;EN1602=1;<br />&nbsp;_nop_();<br />&nbsp;EN1602=0;<br />}<br />void&nbsp;lcd1602_xy(uchar&nbsp;x,uchar&nbsp;y)&nbsp;/*定位<br />{uchar&nbsp;ramaddr=y*0x40+x;<br />&nbsp;lcd1602_wr_cmd(ramaddr|0x80,1);<br />}<br /><br />void&nbsp;lcd1602_wr_str1(uchar&nbsp;*ptr,uchar&nbsp;n)&nbsp;/*写n个字符<br />{uchar&nbsp;i;<br />for(i=0;i&ltn;i++)&nbsp;lcd1602_wr_dat(*ptr++);<br />}<br /><br />void&nbsp;main()<br />{&nbsp;EN1602=1;<br />&nbsp;delay_ms(200);<br />&nbsp;EN1602=0;<br />&nbsp;lcd1602_wr_cmd(0x38,0);&nbsp;&nbsp;/*初始化<br />&nbsp;delay_ms(5);<br />&nbsp;lcd1602_wr_cmd(0x38,0);<br />&nbsp;delay_ms(5);<br />&nbsp;lcd1602_wr_cmd(0x38,0);<br />&nbsp;delay_ms(5);<br />&nbsp;lcd1602_wr_cmd(0x08,1);<br />&nbsp;lcd1602_wr_cmd(0x01,1);<br />&nbsp;lcd1602_wr_cmd(0x06,1);<br />&nbsp;lcd1602_wr_cmd(0x0c,1);<br />&nbsp;while(1)<br />&nbsp;{lcd1602_wr_cmd(0x01,1);<br />&nbsp;lcd1602_xy(0,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*从第一行第一列开始写welcom<br />&nbsp;lcd1602_wr_str1(str1,8);<br />}<br />&nbsp;}<br />
sutie2008 发表于 2008-3-16 22:27 | 显示全部楼层

PO口是否有上拉电阻

我没看你的程序,首先看一下你的硬件问题,P0口做I/O使用时是要加上拉电阻的,否则无法做I/O使用。如果还点不亮发送邮件到suxungang@tom.com,我回复给你一份程序。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

36

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部