这是干嘛的 void keyscan() { if(TR1==1&&setn==0&&setNZn==0&&(add==0||dec==0)) NZ_sdgb=0; if(led1==1) //背光暗时,按下任意按键打开背光 { if(seeNL_NZ==0||set==0||add==0||dec==0) led1=0; } else if(led1==0) { if(seeNL_NZ==0) { delay(9); if(seeNL_NZ==0) { led1=0; bltime=0; if((setn==0)&&(setNZn==0)) //在没有进入调时模式时才可按动 { buzzer=0;//蜂鸣器短响一次 delay(20); buzzer=1; if(TR1==1) { TR1=0; } else { T_NL_NZ++; NZ_sdgb=1; if(T_NL_NZ==3) { setn=0; setNZn=0; T_NL_NZ=0; } } } while(seeNL_NZ==0); } }
时间: 2023-09-30 11:02:47 浏览: 46
这段代码是一个按键扫描函数,用于检测按键的状态并作出相应的响应。具体来说,这个函数实现了以下功能:
1. 如果定时器 TR1 开启且没有进入设置模式,并且没有进行加减操作,就将 NZ_sdgb 置为 0。
2. 如果背光灯处于关闭状态,且按下了任意按键,就打开背光灯。
3. 如果背光灯处于打开状态,且没有在显示 NL_NZ,就关闭背光灯。
4. 如果背光灯处于关闭状态,且按下了任意按键,就进行相应的操作。具体来说,如果没有进入设置模式并且没有进行加减操作,就让蜂鸣器短响一次;如果 TR1 没有启动,就启动 TR1;否则,T_NL_NZ 加 1,并将 NZ_sdgb 置为 1。如果 T_NL_NZ 达到了 3,就退出设置模式。
5. 如果正在显示 NL_NZ,就等待 NL_NZ 显示完毕。
相关问题
void main() { init_eeprom(); P1=0xff; // delay(2000); lcd_init(); ds1302_init(); init(); led1=0; buzzer=0; delay(100); buzzer=1; init_eeprom(); while(1) { keyscan(); led=led1; if(timerOn==1) alarm(); if((fen==0)&&(miao==0)) { if(shi>12) temp_hour=shi-12; else { if(shi==0) temp_hour=12; else temp_hour=shi; } shangyimiao=miao; baoshi=1; } if(baoshi==1) { ZD_baoshi(); do keyscan(); while(shangyimiao==miao); shangyimiao=miao; } } }
这段代码是一个嵌入式系统的主函数。主要功能是实现一个时钟闹钟功能,其中使用了DS1302时钟芯片和LCD屏幕等外设。具体分析如下:
1. `init_eeprom()` 函数是初始化EEPROM存储器的函数。
2. `P1 = 0xff;` 设置P1口为输入模式,这是为了避免悬空引脚的影响。
3. `lcd_init()` 函数初始化LCD屏幕。
4. `ds1302_init()` 函数初始化DS1302时钟芯片。
5. `init()` 函数初始化其他外设,包括按键、LED和蜂鸣器等。
6. `led1 = 0; buzzer = 0; delay(100); buzzer = 1;` 控制LED和蜂鸣器的亮灭,用于开机提示。
7. `while(1)` 表示一直循环执行以下代码。
8. `keyscan()` 函数用于检测按键输入,根据按键输入进行相应的操作。
9. `led = led1;` 控制LED的亮灭,根据 `led1` 变量的值设置LED的状态。
10. `if(timerOn == 1) alarm();` 如果定时器开启,则执行 `alarm()` 函数,即闹钟响铃。
11. `if((fen == 0) && (miao == 0))` 如果当前时间是整点,则进入设置闹钟模式。
12. `if(baoshi == 1)` 如果已经设置了闹钟,则执行 `ZD_baoshi()` 函数,即闹钟到时时的提示操作。
13. `do keyscan(); while(shangyimiao == miao); shangyimiao = miao;` 在设置闹钟模式下,等待用户设置完毕。当分钟数发生变化时,说明用户已经完成了设置,退出设置模式。
解释这行代码 void main() { lcd_init(); //LCD初始化 while(1) { keyscan(); //按键扫描 if(pill1==0 && pill2==0 && pill3==0 && pill4==0) //如果没有药量 { //判断是否时间到 有一个时间到,就报警提示 if(((shi==shi1) || (shi==shi2) || (shi==shi3) || (shi==shi4) ) &&shi!=0 && (timeflag!=shi) && fen==0) { pill1=dsg1; //将要吃的药片赋值给变量 pill2=dsg2; pill3=dsg3; pill4=dsg4; timeflag=shi; //喂食标志清零 } // fm=1; } else //蜂鸣器报警提示,如果有药没吃 { fm=0; fm=1; delay(600); } if(pill1!=0) //如果时间到了提示,有药量,对应的led闪烁 { led1=~led1; } if(pill2!=0) { led2=~led2; } if(pill3!=0) { led3=~led3; } if(pill4!=0) { led4=~led4; }
这行代码定义了一个 main 函数,函数返回值类型为 void,即不返回任何值。函数中首先调用 lcd_init 函数,用于初始化 LCD 屏幕。接着进入一个无限循环 while(1),在循环内部调用 keyscan 函数进行按键扫描。当检测到 pill1 为 0,即检测到某个按键按下时,程序会执行后续的代码。但由于这行代码被截断,无法得知后续代码的具体内容。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)