if(key_can == 3) //减键 { if(flag_lj_en <= 3) t_low -- ; //按键按下未松开减1 减三次 else t_low -= 10; //按键按下未松开减三次后减10 if(t_low <= 10) t_low = 10; }
时间: 2024-03-15 08:41:48 浏览: 32
这段代码看起来是在处理一个键盘输入事件,当按下“减键”时,会根据一个计数器的值来决定减少多少。如果计数器的值小于等于3,则每次减少1,最多减少3次;否则每次减少10,表示已经长按了减键。最后还有一个判断,保证t_low的值不会小于10。但是这段代码的上下文缺失,无法确定t_low和flag_lj_en的含义和用途。
相关问题
if(menu_1==1) //设置温度上限报警值 { if(key_can==2) //加键 { if(flag_lj_en<=3) TempH++; //按键按下未松开加1 加三次 else TempH+=10; //按键按下未松开加三次后加10 if(TempH>999) TempH=999; }
这是一段C语言代码,主要是用来设置温度上限报警值的。下面是具体的解析:
首先,判断变量menu_1是否等于1,如果是,则执行花括号内的代码。
在花括号内,首先判断变量key_can是否等于2,如果是,则执行花括号内的代码。
在第二个花括号内,首先判断变量flag_lj_en是否小于等于3,如果是,则将变量TempH加1。
如果变量flag_lj_en不小于等于3,则将变量TempH加10。
最后,判断变量TempH是否大于999,如果是,则将变量TempH赋值为999。
需要注意的是,该代码片段中的变量及其含义需要上下文的支持才能更好地理解。
void main() { u8 key_temp=0; u8 save_value=0; u8 save_buf[3]; while(1) { key_temp=key_scan(1); //??????????? //?????? if(key_temp==KEY1_PRESS) { at24c02_write_one_byte(EEPROM_ADDRESS,save_value); } else if(key_temp==KEY2_PRESS) { save_value=at24c02_read_one_byte(EEPROM_ADDRESS); } else if(key_temp==KEY3_PRESS) { save_value++; if(save_value==255) { save_value=255; } } else if(key_temp==KEY4_PRESS) { save_value=0; } //?????? if(IND_KEY1==0) //??????????1 { save_value+=10; //?save_value??10 if(save_value>255) { save_value=255; } IND_KEY1=1; //??????1????? } else if(IND_KEY2==0) //??????????2 { save_value-=10; //?save_value??10 if(save_value<0) { save_value=0; } IND_KEY2=1; //??????2????? } else if(IND_KEY3==0) //??????????3 { save_value+=1; //?save_value??1 if(save_value==255) { save_value=255; } IND_KEY3=1; //??????3????? } else if(IND_KEY4==0) //??????????4 { save_value-=1; //?save_value??1 if(save_value<0) { save_value=0; } IND_KEY4=1; //??????4????? } //?????????? if(IND_KEY1==1 && IND_KEY2==1 && IND_KEY3==1 && IND_KEY4==1) { IND_KEY1=0; IND_KEY2=0; IND_KEY3=0; IND_KEY4=0; } //?save_value??????????? save_buf[0]=save_value/100; save_buf[1]=save_value%100/10; save_buf[2]=save_value%100%10; //???????save_value smg_display(save_buf,6); } }用独立按键K1,K2,K3分别控制三位数码管如何修改
可以将原来的IND_KEY1、IND_KEY2、IND_KEY3等变量改为k1_pressed、k2_pressed、k3_pressed等更具有意义的变量名。同时,可以在每次按键操作结束后,将对应的按键状态清零,避免影响下一次按键操作。
修改后的代码如下:
```c
void main() {
u8 key_temp=0;
u8 save_value=0;
u8 save_buf[3];
u8 k1_pressed=0, k2_pressed=0, k3_pressed=0;
while(1) {
key_temp=key_scan(1); //获取按键值
//按下K1,将当前值写入EEPROM中
if(key_temp==KEY1_PRESS) {
at24c02_write_one_byte(EEPROM_ADDRESS,save_value);
}
//按下K2,从EEPROM中读取上次保存的值并显示
else if(key_temp==KEY2_PRESS) {
save_value=at24c02_read_one_byte(EEPROM_ADDRESS);
save_buf[0]=save_value/100;
save_buf[1]=save_value%100/10;
save_buf[2]=save_value%100%10;
smg_display(save_buf,6);
}
//按下K3,将当前值加1并显示
else if(key_temp==KEY3_PRESS) {
save_value++;
if(save_value==255) {
save_value=255;
}
save_buf[0]=save_value/100;
save_buf[1]=save_value%100/10;
save_buf[2]=save_value%100%10;
smg_display(save_buf,6);
}
//按下K4,将当前值清零并显示
else if(key_temp==KEY4_PRESS) {
save_value=0;
save_buf[0]=0;
save_buf[1]=0;
save_buf[2]=0;
smg_display(save_buf,6);
}
//K1按下,将当前值加10并显示
if(k1_pressed == 1) {
save_value+=10;
if(save_value>255) {
save_value=255;
}
save_buf[0]=save_value/100;
save_buf[1]=save_value%100/10;
save_buf[2]=save_value%100%10;
smg_display(save_buf,6);
k1_pressed = 0;
}
//K2按下,将当前值减10并显示
else if(k2_pressed == 1) {
save_value-=10;
if(save_value<0) {
save_value=0;
}
save_buf[0]=save_value/100;
save_buf[1]=save_value%100/10;
save_buf[2]=save_value%100%10;
smg_display(save_buf,6);
k2_pressed = 0;
}
//K3按下,将当前值加1并显示
else if(k3_pressed == 1) {
save_value+=1;
if(save_value==255) {
save_value=255;
}
save_buf[0]=save_value/100;
save_buf[1]=save_value%100/10;
save_buf[2]=save_value%100%10;
smg_display(save_buf,6);
k3_pressed = 0;
}
//判断按键是否释放,释放后才能继续检测按键
if(k1_pressed==0 && IND_KEY1==0) {
k1_pressed = 1;
}
else if(k2_pressed==0 && IND_KEY2==0) {
k2_pressed = 1;
}
else if(k3_pressed==0 && IND_KEY3==0) {
k3_pressed = 1;
}
//释放所有按键
if(IND_KEY1==1 && IND_KEY2==1 && IND_KEY3==1 && IND_KEY4==1) {
IND_KEY1=0;
IND_KEY2=0;
IND_KEY3=0;
IND_KEY4=0;
}
}
}
```