1602读忙信号一直都是忙呀,有没有人帮我看一下
void wfree(void){
DDRA=0X00;
RS0;
RW1;
EN0;
EN1;
uchar i;
while(1)
{
i= PINA&0X80;
if(0x00==i) //全为0则BF为低,跳出函数
{
DDRA=0XFF;
return;
}
}
} 我用的时候都是延时,没读过BF。 完全看不懂啊,0x00==i为啥这样写,又来了个return是啥?
我给你一个可以用的吧
#define DATA_1206 PORTB //数据口
#define DATA_DIRECT DDRB //IO口方向
#define BUSY_DATA PINB //忙检查
#define Busy 0x80
#define RS0 CLR(PORTC,0)
#define RS1 SET(PORTC,0)
#define RW0 CLR(PORTC,1)
#define RW1 SET(PORTC,1)
#define EN0 CLR(PORTC,7)
#define EN1 SET(PORTC,7)
void waitfor(void)
{
u8 val;
DATA_DIRECT=0XFF;
DATA_1206=0xFF;
RS0;
RW1;
EN1;
DATA_DIRECT=0x00;
val=BUSY_DATA;
while(val&Busy)
{val=BUSY_DATA;}
EN0;
DATA_DIRECT=0xff;
} 我看到很多人都是这样写的
/************ 位变量定义 *********/
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();
};
}
还是用延时吧,0802 ,1602的忙都不好判。 话说0x00 == i;这个是不是有问题?
我的印象里好像linux下这样写会报错,因为我一直写i == 0x00{:smile:} kyughanum 发表于 2013-6-17 18:08 static/image/common/back.gif
话说0x00 == i;这个是不是有问题?
我的印象里好像linux下这样写会报错,因为我一直写i == 0x00 ...
应该没有问题,但是看起来怪怪的 hyghyg1234 发表于 2013-6-17 18:23 static/image/common/back.gif
应该没有问题,但是看起来怪怪的
原来我真是记错了,果然是可以的!只是一般人的思维看这个等式比较怪吧,哈
你用几M的主频?在使能信号之间加点延时试试。
void lcd_mbm()
{
P0=0xff;
rs=0;
rw=1;
e=1;
_nop_();
while(P0&0x80);
e=0;
} hyghyg1234 发表于 2013-6-17 18:23
应该没有问题,但是看起来怪怪的
这样写是为了避免漏掉一个等号,但编译器却不会报错的情况。。
页:
[1]