LCD1602的读忙标志BF到底有用吗?
我看网上有些人读BF标志一直都是1(1表示忙),我自己读也总是1。在实践中有读过BF标志的来说说那个标志到底有没有用? 反正我写的程序里都是检测BF标志的,不读也是可以的,利用延时代替 8位并行控制的时候我每次都用,4位控制的时候用延时 BF标志 肯定是有用的,没用拿来干嘛。搞设计的又不是BC 是不是任何时候读BF都有用,还是要初始化以后才有用? 回复【楼主位】facat-----------------------------------------------------------------------
我读的不是1,不检查忙的话有可能会出现字符丢失,乱码等情况
顺便贴上我的代码,呵呵。
(等待空闲那条写得不好,万一1602神了单片机会死等,应加入时间限制)
/************ 位变量定义 *********/
sbit RS=P3^6;
sbit RW=P3^5;
sbitE=P3^4 ;
sbit BF=P1^7;
/************ 检查忙 *************/
bit busy_check()
{
bit bf;
LCD=0xff;
RS=0;
RW=1;
E=0;
E=1;
bf=BF;
return (bf);
}
/************ 等待空闲 *************/
void busy_wait()
{
while (busy_check())
{
busy_check();
};
}
1602驱动ourdev_574702.txt(文件大小:1K) (原文件名:LCD1602.txt) 读BF信号,更严谨一些。
楼上的程序,如果LCD屏有问题的话,那就进入死循环了。可以加一个检测计数在里面控制。
//////////////////////////////////////
/************ 检查忙 *************/
bit busy_check()
{
bit bf;
LCD=0xff;
RS=0;
RW=1;
E=0;
E=1;
bf=BF;
return (bf);
}
/************ 等待空闲 *************/
#define BF_COUT 50 /////////////检测次数
void busy_wait()
{
unsigned char _cBF;
while (busy_check() && _cBF<BF_COUT) ////////////控制检测次数
{
busy_check();
_cBF++;
};
} 回复【6楼】rock man
-----------------------------------------------------------------------
正解!! 我用D口做数据口。读忙标志后PIND=0b11111111,这个信息对解决我的问题有帮助吗? 回复【5楼】qq335702318 昌少
回复【楼主位】facat
-----------------------------------------------------------------------
我读的不是1,不检查忙的话有可能会出现字符丢失,乱码等情况
顺便贴上我的代码,呵呵。
(等待空闲那条写得不好,万一1602神了单片机会死等,应加入时间限制)
/************ 位变量定义 *********/
sbit rs=p3^6;
sbit rw=p3^5;
sbite=p3^4 ;
sbit bf=p1^7;
/************ 检查忙 *************/
bit busy_check()
{
bit bf;
lcd=0xff;
rs=0;
rw=1;
e=0;
e=1;
bf=bf;
return (bf);
}
/*......
-----------------------------------------------------------------------
LCD=0xff是什么意思?我用的是WinAVR 因为液晶控制器执行指令需要时间,其间又不能做其它事,所以就有忙检测说法。无论有没有忙检测,都会给出指令执行时间。 回复【9楼】facat
-----------------------------------------------------------------------
#define LCD P1 // P1口作LCD I/O
.........
LCD就是1602的数据口
LCD=0xff 是使1602 DB0~DB7全为高电平
不知道你的速度达到多少?读写速度太快可能是单片机一直忙的原因
或者你试试给DB0~DB7下拉电阻
另外AVR单片机好像要配置IO脚? using the bf flag makes the code slightly faster and more robust. However, it limits the hardware design choices greatly. cat_li 发表于 2010-8-13 07:57 static/image/common/back.gif
反正我写的程序里都是检测BF标志的,不读也是可以的,利用延时代替
你好,我是刚开始学单片机的,我想问一下检测BF标志前需要让EN位下跳变吗?还是直接把RS置0,RW置1就能读BF了?真心希望得到回答。 xinfa190 发表于 2010-8-13 08:06 static/image/common/back.gif
8位并行控制的时候我每次都用,4位控制的时候用延时
8位时是写指令0x28对不对,因为DL低电平为8位嘛,但是我为什么看到别人也是8位却写0x38的,自己写的0x28也不行。 rock_man 发表于 2010-8-13 10:20 static/image/common/back.gif
读BF信号,更严谨一些。
楼上的程序,如果LCD屏有问题的话,那就进入死循环了。可以加一个检测计数在里面控 ...
那个E=0;E=1;应该是让E脚上跳变吧以执行命令吧,但是不是下跳变才是执行命令吗?想不明白呀,希望有人能解答一下。 不读忙的话,用速度快的单片机,1602是跟不上节奏的 判忙我也是看时序用汇编写的,调试了好久还是不通,看了别人的c例子,和汇编的时序一样,但就是不通!最后搜了一个汇编的发现可以 热带鱼工作室 发表于 2013-6-17 16:25 static/image/common/back.gif
你好,我是刚开始学单片机的,我想问一下检测BF标志前需要让EN位下跳变吗?还是直接把RS置0,RW置1就能读 ...
按正常的读操作流程就好
页:
[1]