/// flag=(bit)(P0&0x80); //状态位第7位为1时禁止读写,为0时可读写
问题1. 就是P0&0x80怎么转换位bit的???
//while(judge_lcd()); //检测LCD是否为忙碌状态
问题2. 这里面要是上面的要是为flag=1的话那就是要执行程序了,但是lcd就是为1的话就是为忙碌的状态。怎么可以执行呢???
这里面是不是程序错了,是否应该改为if(flag==0);
单片机源程序如下:
- /***********************lcd1602忙碌判断子程序*******************/
- bit judge_lcd()
- {
- bit flag;
- e = 0;//
- rs = 0;
- rw = 1;
- e = 1;//
- delay_ms(1);
- flag=(bit)(P0&0x80); //状态位第7位为1时禁止读写,为0时可读写
- e = 0;//
- return flag;
- }
- /**********************lcd1602写指令子程序*******************/
- void write_com(uchar addr)
- {
- while(judge_lcd()); //检测LCD是否为忙碌状态
- rw=0;
- rs=0;
- P0=addr;
- delay_us(5);
- e=0;
- delay_us(5);
- e=1;
- delay_us(5);
- e=0;
- }
- /***********************lcd写数据子程序*******************/
- void write_date(uchar date)
- {
- while(judge_lcd()); //检测LCD是否为忙碌状态
- rw=0;//写操作
- rs=1;//写数据模式
- P0=date;//将要写的命令字送到数据总线上
- delay_us(5);
- e=0;//将使能端置低电平
- delay_us(5);
- e=1;//将使能端置高电平
- delay_us(5);
- e=0;//将使能端置低电平
- }
- /***********lcd1602写指令及数据********************************/
- void write_com_date(uint addr,uint date)
- {
- write_com(addr);
- delay_ms(1);
- write_date(date);
- }
复制代码
|