key_temp=key_scan(0); 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; }优化这段代码使save_value可以加到669
时间: 2023-09-02 20:13:02 浏览: 65
要实现`save_value`从0加到669,需要对代码进行如下优化:
```
key_temp = key_scan(0);
switch (key_temp) {
case KEY1_PRESS:
at24c02_write_one_byte(EEPROM_ADDRESS, save_value);
break;
case KEY2_PRESS:
save_value = at24c02_read_one_byte(EEPROM_ADDRESS);
break;
case KEY3_PRESS:
if (save_value < 669) {
save_value++;
}
break;
case KEY4_PRESS:
save_value = 0;
break;
default:
break;
}
```
这里主要是将对`save_value`的操作改为在范围内进行,即在KEY3按键处理中增加一个范围检查,以避免`save_value`超过669的情况。
相关问题
优化这段代码key_temp=key_scan(0); 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; }
这段代码的作用是根据按键输入来对一个变量`save_value`进行操作,具体来说:
- 如果检测到KEY1按键被按下,将`save_value`写入EEPROM;
- 如果检测到KEY2按键被按下,从EEPROM中读取数据并更新到`save_value`变量;
- 如果检测到KEY3按键被按下,将`save_value`加1,但是加到255时不再增加;
- 如果检测到KEY4按键被按下,将`save_value`重置为0。
这段代码可以进行如下优化:
```
key_temp = key_scan(0);
switch (key_temp) {
case KEY1_PRESS:
at24c02_write_one_byte(EEPROM_ADDRESS, save_value);
break;
case KEY2_PRESS:
save_value = at24c02_read_one_byte(EEPROM_ADDRESS);
break;
case KEY3_PRESS:
if (save_value < 255) {
save_value++;
}
break;
case KEY4_PRESS:
save_value = 0;
break;
default:
break;
}
```
使用`switch`语句可以使代码更加清晰易读,同时在KEY3按键的处理中增加了一个范围检查,以避免`save_value`超过255的情况。
修改C51代码将显示的数字变为285: #include "public.h" #include "24c02.h" #include "key.h" #include "smg.h" #include "lcd1602.h" #define EEPROM_ADDRESS 0 //定义数据存入EEPROM的起始地址 void main() { u8 key_temp=0; u8 save_value=197; u8 save_buf[3]; lcd1602_init(); while(1) { key_temp=key_scan(0); save_value=at24c02_read_one_byte(EEPROM_ADDRESS); if(key_temp==KEY3_PRESS) { save_value++; } else if(key_temp==KEY4_PRESS) { save_value--; } save_buf[0]=save_value/100+48; save_buf[1]=save_value%100/10+48; save_buf[2]=save_value%100%10+48; lcd1602_show_string(0,0,save_buf); at24c02_write_one_byte(EEPROM_ADDRESS,save_value); } }
要将显示的数字变为285,可以将保存的初始值改为285,即将 `u8 save_value=197;` 改为 `u8 save_value=285;`。同时,将显示的位数也要相应地增加,可以将 `u8 save_buf[3];` 改为 `u8 save_buf[4];`,并在计算每位数字时进行相应的修改,具体地,可以将 `save_buf[0]=save_value/100+48;` 改为 `save_buf[0]=save_value/1000+48;`,将 `save_buf[1]=save_value%100/10+48;` 改为 `save_buf[1]=save_value%1000/100+48;`,将 `save_buf[2]=save_value%100%10+48;` 改为 `save_buf[2]=save_value%100/10+48;`,将 `lcd1602_show_string(0,0,save_buf);` 改为 `lcd1602_show_string(0,0,save_buf+1);`。最后,将修改后的代码烧录到目标板上即可。
阅读全文