void key() //按键函数 { if(change==0) //模式切换按下时 { delay(50); //去抖 if(change==0) //再次判断是否按下 { Mode=!Mode; //切换模式 auto_led=Mode; //控制模式指示灯的亮灭 hand_led=!Mode; if(Mode==1&&LED_out==0) //切换到手动模式时如果灯是亮的 就熄灭灯 { light_led=1; sound_led=1; } else if(Mode==1&&LED_out==1) //切换到手动模式时如果灯是灭的 就点亮灯 { LED_out=0; light_led=1; sound_led=1; } else if(Mode==0) //切换到自动模式时如果灯是亮的就计时sec后熄灯 { light_led=0; sound_led=1; if(LED_out==0) { TR0=1; sec=0; } } while(!change); //按键释放 } } if(LED_onoff==0&&Mode==1) //手动开关灯按键 { delay(50); if(LED_onoff==0&&Mode==1) { LED_out=!LED_out; //控制灯的开关 while(!LED_onoff); //按键释放 } } if(AUTO_change==0&&Mode==0) //自动开关灯按键 { delay(50); if(AUTO_change==0&&Mode==0) { AUTO_Mode=AUTO_Mode+1; LED_out=1; while(!AUTO_change); //按键释放 } if(AUTO_Mode==0) { light_led=0; sound_led=1; } if(AUTO_Mode==1) { light_led=1; sound_led=0; } if(AUTO_Mode==2) { light_led=0; sound_led=0; } if(AUTO_Mode>2) { AUTO_Mode=0; light_led=0; sound_led=1; } } }
时间: 2024-02-16 12:00:58 浏览: 29
这段代码实现了一个按键控制灯的开关和模式切换的功能,具体实现如下:
1. 首先判断模式切换按键是否按下,如果按下则进行模式切换,同时控制模式指示灯的亮灭。如果切换到手动模式并且灯是亮的,则熄灭灯;如果切换到手动模式并且灯是灭的,则点亮灯;如果切换到自动模式并且灯是亮的,则计时sec后熄灯。
2. 如果是手动模式,则判断手动开关灯按键是否按下,如果按下则控制灯的开关。
3. 如果是自动模式,则判断自动开关灯按键是否按下,如果按下则进行模式切换,同时控制灯的开关和指示灯的亮灭。自动模式有三种模式,分别是灯常亮、声音常亮和灯声都灭,按下自动开关灯按键可以切换到下一个模式。如果超过三种模式则重置为第一种模式。
需要注意的是,在按键检测时需要进行去抖处理,避免因为机械震动等原因导致按键的误触发。此外,在手动模式下控制灯的开关时,需要等待按键释放,避免因为按键一直按下导致灯的状态一直在改变。
相关问题
void Canshu_Change(u8 key)//改变参数显示按键调节哪个参数 { u8 obj=0; if(key==3)//向下 { BEEP=0; //OLED_Clear(); while(1) { key = KEY_Scan(0); if(key==3) { obj++; if(obj>=3) { obj=0 ; } } if(key==4)//向上 { obj--; if(obj) { obj=2; } }如何让这段函数的向上按键到顶部之后可以返回底部
你可以改变 if(key==4) 中的逻辑,使其到达顶部时回到底部。以下是代码示例:
```
void Canshu_Change(u8 key)//改变参数显示按键调节哪个参数
{
u8 obj=0;
if(key==3)//向下
{
BEEP=0;
//OLED_Clear();
while(1)
{
key = KEY_Scan(0);
if(key==3)
{
obj++;
if(obj>=3)
{
obj=0 ;
}
}
if(key==4)//向上
{
obj--;
if(obj>2) // 到达顶部时回到底部
{
obj=0;
}
}
}
}
}
```
现在,当 obj 为 2 时,按下向上键将会返回到 obj 为 0 的位置。
void Canshu_Change(u8 key)//改变参数显示按键调节哪个参数 { u8 obj=1;u8 obj2=1; if(key==3&&display_contrl%2==1) { //delay_ms(10);//消抖 BEEP=! BEEP; //本来响取反后不响 //OLED_Clear(); while(1) { key = KEY_Scan(0); //delay_ms(10);//消抖 if(key==3)//向下 { //delay_ms(10);//消抖 obj++; if(obj>=4) { obj=1 ; } } if(key==4)//向上 { //delay_ms(10);//消抖 obj--; if(obj<=0) { obj=3; } } if(obj==1) { OLED_ShowString(112,0,"<",16);//: OLED_ShowCHinese(112,2,39); OLED_ShowCHinese(112,4,39); } if(obj==2) { OLED_ShowCHinese(112,0,39); OLED_ShowString(112,2,"<",16); OLED_ShowCHinese(112,4,39); } if(obj==3) { OLED_ShowCHinese(112,0,39); OLED_ShowCHinese(112,2,39); OLED_ShowString(112,4,"<",16); } if(key==2) { OLED_Clear(); break; } } 这段函数的代码已经可以上下选择,那要怎么写才能在选择处进入下一个界面
你可以在选择处增加一个判断语句,当用户按下确定键时,根据选择的参数进入相应的下一个界面。例如:
```
if(key==1)//确定
{
if(obj==1)//第一个参数
{
//进入第一个参数的下一个界面
}
else if(obj==2)//第二个参数
{
//进入第二个参数的下一个界面
}
else if(obj==3)//第三个参数
{
//进入第三个参数的下一个界面
}
}
```
在进入下一个界面时,你可以使用类似于上面的代码,在下一个界面中增加类似的参数选择功能,让用户可以调节参数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)