LCD1602读忙检测的问题~?

2020-01-27 11:28发布

刚接触LCD显示的问题..对LCD1602的忙检测不是很理解..看一些相关的例子这部分的程序基本都是这样写的
uchar LCD_Check_Busy(void)
{
  LCD_DATA=0xFF;  //LCD_DATA 为P0口.接LCD的D0~D7   ??这里为什么要给赋一个FF呢.?
  LCD_RS=0;            //LCD_RS 对应接LCD的RS
  LCD_RW=1;          //LCD_RW对接到LCD的R/W
  LCD_E=0;             //LCD_E对应接到LCD的使能端E
  LCD_Delay(5);
  LCD_E=1;
  while(LCD_DATA & 0x80);//这里LCD_DATA不是等于刚刚赋值的0xFF么?
  return(LCD_DATA);      //我查了很多资料,人家说赋值后会从LCD里读出新的值,但是读值的时候要在E的下降沿才能读啊..
}
以上是我的两个疑问..谁可以给我解答一下么?若能再介绍一下相关的.更加感谢!~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
lizhong
1楼-- · 2020-01-27 16:51
怎么没人帮忙啊。。。
lizhong
2楼-- · 2020-01-27 19:22
....
ruizhixing
3楼-- · 2020-01-27 23:17
我也很困惑啊~~help~~~
AAVVRR
4楼-- · 2020-01-28 04:53
 精彩回答 2  元偷偷看……
1021477601
5楼-- · 2020-01-28 10:24
LCD_DATA=0xFF;  //LCD_DATA 为P0口.接LCD的D0~D7   ??这里为什么要给赋一个FF呢.?
答:这句我也不知道为什么这样写。
while(LCD_DATA & 0x80);//这里LCD_DATA不是等于刚刚赋值的0xFF么
答:这句的意思是当LCD_DATA的最高位等于1时就不停的等待,只有等于0时才跳到下一步。而LCD_DATA的最高位就是忙状态字即STA7,STA7=1表示忙,0表示空闲
return(LCD_DATA);      //我查了很多资料,人家说赋值后会从LCD里读出新的值,但是读值的时候要在E的下降沿才能读啊..  
答:我查了一下资料,确实是E的下降沿才读的,这个我也不明白。
另附一程序
uchar BUSY_CHECK()
{
    uchar lcd_status;
    RS=0;
    RW=1;
    EN=1;
    delayms(1);
    lcd_status=P0;
    EN=0;
    return lcd_status;
}
小弟新手,欢迎指教
shudexin
6楼-- · 2020-01-28 16:19
P0口作为I/O时, 系统自动关闭内部的上拉场效应管,内部多路开关使得内部锁存器的负Q端与下拉场效应管接通, 因此,当P0口作为输入口使用时,应先向口地址写入1,使得内部内部负Q端输出低电平,以截至下拉场效应管,保证外部高电平能够输入到P0引脚上,从而程序能读到外部器件输出的高电平. 这就是为什么要读1602的状态需先输出0FF的原因. 不仅P0口,所有其它3个口,在作为输入口使用时,都应先输出1(可以在程序初始化部分设置一次,只要那个口不是交替做为输入和输出口就可以).

一周热门 更多>