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分别控制三位数码管如何修改
时间: 2023-07-12 12:21:34 浏览: 119
可以将原来的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;
}
}
}
```
阅读全文