void busy(void) { uchar temp; s_ms(500); PORTD&=~(1<<RS); //RS=7 s_ms(500); PORTD|=(1<<RW); //RW=6 s_ms(500); while(temp) { PORTD|=(1<<EN); //EN=5 s_ms(500); DDRC=0x00; //A口变输入 PORTC=0xff; //上拉使能 s_ms(500); temp = PINC&0x80; //读取C口 s_ms(500); DDRC=0xff; PORTC=0xff; //C口变输出 s_ms(500); PORTD&=~(1<<EN); //EN=0 s_ms(500); } } 解释意思
时间: 2024-03-03 07:52:20 浏览: 58
这段代码是一个函数,函数名为busy,没有参数和返回值。该函数的目的是检测LCD1602是否处于忙状态。
函数中使用了一些引脚控制和延时操作,具体解释如下:
1. s_ms(500); //延时500毫秒
2. PORTD &= ~(1<<RS); //将PD7口清零,RS=7
3. s_ms(500); //延时500毫秒
4. PORTD |= (1<<RW); //将PD6口置1,RW=6
5. s_ms(500); //延时500毫秒
6. while(temp) //进入循环,直到temp值为0才退出
7. {
8. PORTD |= (1<<EN); //将PD5口置1,EN=5
9. s_ms(500); //延时500毫秒
10. DDRC = 0x00; //将PC口设置为输入
11. PORTC = 0xff; //将PC口上拉
12. s_ms(500); //延时500毫秒
13. temp = PINC & 0x80; //读取PC7口的值,temp为0表示忙状态结束
14. s_ms(500); //延时500毫秒
15. DDRC = 0xff; //将PC口设置为输出
16. PORTC = 0xff; //将PC口置1
17. s_ms(500); //延时500毫秒
18. PORTD &= ~(1<<EN); //将PD5口清零,EN=5
19. s_ms(500); //延时500毫秒
20. }
总体来说,该函数的作用就是不断地读取LCD1602的忙状态,直到其处于空闲状态为止。其中的具体实现方式是通过设置不同的引脚状态和延时操作来达到目的。
阅读全文