单片机怎么从lcd1602读取数据?

这个函数读回来的数据是乱码,为什么?unsignedcharRead_Lcd_Data(){unsignedcharbyte=0;Busy_Test();Lcd_E=0;... 这个函数读回来的数据是乱码,为什么?
unsigned char Read_Lcd_Data()
{
unsigned char byte = 0;
Busy_Test();
Lcd_E = 0;
Lcd_RW = 1;
Lcd_RS = 1;
Lcd_E = 1;
byte = P0;
Lcd_E = 0;
return byte;
}
这个是测忙函数:
void Busy_Test()
{
Lcd_RW = 1;
Lcd_RS = 0;
Lcd_E = 0;
Lcd_E = 1;
while(Lcd_Busy);
Lcd_E = 0;
}
展开
 我来答
a765458686
2017-03-10
知道答主
回答量:5
采纳率:0%
帮助的人:2.2万
展开全部

首先延时函数不能忘 那么你说加了延时也不行,回头看看你的代码。那么问题来了,你P0端如果全是低电平他怎么发送数据,单片机接收的都是全被拉低的数据吧,也就是还是低电平,加一个P0=0xff看看;还有一个问题就是你的代码里面e引脚多了一条(个人建议)e为底电平的时候才读高电平就不读 所以byte = P0;return byte;这两条要紧跟在在e=0后面。不然一旦e=1 P0就不是读出来的数据了。 头一次认真回答问题,也刚研究1602这个功能,帮助到你的话希望采纳下,谢谢

unsigned char Read_Lcd_Data()
{
unsigned char byte;
Busy_Test();
P0 = 0xff;       //防止低电平干扰拉低数据位
Lcd_RW = 1;
Lcd_RS = 1;
delay();        //写个延时程序 为什么加延时请看时序图
Lcd_E = 0;
byte = P0;
return byte;
Lcd_E = 1;

}
融火IC
2016-08-11 · TA获得超过522个赞
知道小有建树答主
回答量:412
采纳率:77%
帮助的人:148万
展开全部
程序语句之间要加延时的,不然Lcd_E高低跳变的太快,无法正常执行。自己写一个us级别的延时函数delayms(),代码改下试试(具体延时多少,需要参考1602的读操作时序图)
Lcd_E = 0;
Lcd_RW = 1;
Lcd_RS = 1;
delayus(100);
Lcd_E = 1;
delayus(100);
Lcd_E = 0;
追问
还是没用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
薛逢军6
2016-08-11
知道答主
回答量:9
采纳率:0%
帮助的人:9533
展开全部
加我QQ!采纳!我给你发好使的程序!876081368
追问
可以告诉我这个为什么不对吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LSY_Studio
2016-08-10 · TA获得超过396个赞
知道答主
回答量:206
采纳率:33%
帮助的人:89.9万
展开全部
每两条语句间加一个1us延时。再试试?
更多追问追答
追问
没用的。
追答
你让LCD显示一个字符,能正常显示吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
201810800849
2016-08-08 · TA获得超过221个赞
知道答主
回答量:104
采纳率:0%
帮助的人:50.6万
展开全部
读取时是不是应该加延时?
追问
怎么延时?加在哪里?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式