facat 发表于 2010-8-13 01:40:47

LCD1602的读忙标志BF到底有用吗?

我看网上有些人读BF标志一直都是1(1表示忙),我自己读也总是1。在实践中有读过BF标志的来说说那个标志到底有没有用?

cat_li 发表于 2010-8-13 07:57:46

反正我写的程序里都是检测BF标志的,不读也是可以的,利用延时代替

xinfa190 发表于 2010-8-13 08:06:57

8位并行控制的时候我每次都用,4位控制的时候用延时

jiabin1024 发表于 2010-8-13 09:10:33

BF标志 肯定是有用的,没用拿来干嘛。搞设计的又不是BC

facat 发表于 2010-8-13 09:52:45

是不是任何时候读BF都有用,还是要初始化以后才有用?

qq335702318 发表于 2010-8-13 09:59:37

回复【楼主位】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)

rock_man 发表于 2010-8-13 10:20:52

读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++;
};
}

qq335702318 发表于 2010-8-13 10:22:54

回复【6楼】rock man
-----------------------------------------------------------------------

正解!!

facat 发表于 2010-8-13 12:41:05

我用D口做数据口。读忙标志后PIND=0b11111111,这个信息对解决我的问题有帮助吗?

facat 发表于 2010-8-13 12:42:43

回复【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

bluefeel 发表于 2010-8-13 14:21:43

因为液晶控制器执行指令需要时间,其间又不能做其它事,所以就有忙检测说法。无论有没有忙检测,都会给出指令执行时间。

qq335702318 发表于 2010-8-13 15:32:02

回复【9楼】facat
-----------------------------------------------------------------------

#define LCD P1       // P1口作LCD I/O
.........


LCD就是1602的数据口
LCD=0xff 是使1602 DB0~DB7全为高电平
不知道你的速度达到多少?读写速度太快可能是单片机一直忙的原因
或者你试试给DB0~DB7下拉电阻
另外AVR单片机好像要配置IO脚?

millwood0 发表于 2010-8-13 18:10:04

using the bf flag makes the code slightly faster and more robust. However, it limits the hardware design choices greatly.

热带鱼工作室 发表于 2013-6-17 16:25:27

cat_li 发表于 2010-8-13 07:57 static/image/common/back.gif
反正我写的程序里都是检测BF标志的,不读也是可以的,利用延时代替

你好,我是刚开始学单片机的,我想问一下检测BF标志前需要让EN位下跳变吗?还是直接把RS置0,RW置1就能读BF了?真心希望得到回答。

热带鱼工作室 发表于 2013-6-17 16:33:33

xinfa190 发表于 2010-8-13 08:06 static/image/common/back.gif
8位并行控制的时候我每次都用,4位控制的时候用延时

8位时是写指令0x28对不对,因为DL低电平为8位嘛,但是我为什么看到别人也是8位却写0x38的,自己写的0x28也不行。

热带鱼工作室 发表于 2013-6-17 16:37:24

rock_man 发表于 2010-8-13 10:20 static/image/common/back.gif
读BF信号,更严谨一些。
楼上的程序,如果LCD屏有问题的话,那就进入死循环了。可以加一个检测计数在里面控 ...

那个E=0;E=1;应该是让E脚上跳变吧以执行命令吧,但是不是下跳变才是执行命令吗?想不明白呀,希望有人能解答一下。

hyghyg1234 发表于 2013-6-17 16:44:07

不读忙的话,用速度快的单片机,1602是跟不上节奏的

dz20062008 发表于 2013-6-19 22:41:12

判忙我也是看时序用汇编写的,调试了好久还是不通,看了别人的c例子,和汇编的时序一样,但就是不通!最后搜了一个汇编的发现可以

cat_li 发表于 2013-6-20 08:58:01

热带鱼工作室 发表于 2013-6-17 16:25 static/image/common/back.gif
你好,我是刚开始学单片机的,我想问一下检测BF标志前需要让EN位下跳变吗?还是直接把RS置0,RW置1就能读 ...

按正常的读操作流程就好
页: [1]
查看完整版本: LCD1602的读忙标志BF到底有用吗?