void temp_hum_Set() { SetSelect=0; KeyNumber=Key(); if(KeyNumber==3) { _TH[4]=tm1668_get_digit(set[0]/10); _TH[5]=tm1668_get_digit(set[0]%10); display(_TH); } KeyNumber=Key(); if(KeyNumber==3) { SetSelect++; _HU[4]=tm1668_get_digit(set[1]/10); _HU[5]=tm1668_get_digit(set[1]%10); display(_HU); KeyNumber=Key(); if(KeyNumber==2) { int oldValue = set[SetSelect]; set[SetSelect]++; if(set[1]>99){set[1]=0;} _HU[4]=tm1668_get_digit(set[1]/10); _HU[5]=tm1668_get_digit(set[1]%10); if(oldValue != set[SetSelect]) { display(_HU); } } KeyNumber=Key(); if(KeyNumber==1) { int oldValue = set[SetSelect]; set[SetSelect]--; if(set[1]<1){set[1]=99;} _HU[4]=tm1668_get_digit(set[1]/10); _HU[5]=tm1668_get_digit(set[1]%10); if(oldValue != set[SetSelect]) { display(_HU); } } } else if(KeyNumber==2) { int oldValue = set[SetSelect]; set[SetSelect]++; if(set[0]>60){set[0]=0;} if(oldValue != set[SetSelect]) { display(_TH); } } else if(KeyNumber==1) { int oldValue = set[SetSelect]; set[SetSelect]--; if(set[0]<1){set[0]=60;} if(oldValue != set[SetSelect]) { display(_TH); } } } 这个代码KeyNumber==2一次没有马上看到执行效果可能原因而是要KeyNumber==3一次才看到前面的效果,可能是什么原因
时间: 2024-03-22 18:40:35 浏览: 18
这个问题需要一些背景知识才能回答。根据代码中的变量名,我猜测这段代码是用来设置温湿度传感器的阈值的。在代码中,通过按键输入来改变阈值的值,并在数码管上显示出来。根据代码的逻辑,当按键输入为2时,会增加阈值的值,当按键输入为1时,会减小阈值的值。而当按键输入为3时,会确认当前阈值的值。这个问题指出,当按键输入为2时,有时候需要按两次才能看到效果,而按键输入为3时则没有这个问题。这可能是因为按键的抖动导致的。按键在按下时会反复弹跳,导致按键电路产生多次短暂的开关信号。这种现象称为按键抖动。在代码中,只有当按键输入为2或1时才会改变阈值的值,而当按键输入为3时只是确认当前阈值的值,不需要改变任何变量的值。因此,当按键抖动时,可能会多次执行按键输入为2或1时的代码,导致阈值的值增加了多次,但是在按键输入为3时,只会一次性显示最后一次的变化,因此看到的效果有时候需要按两次才能看到。解决这个问题的方法是在代码中增加按键抖动的处理,可以在按键输入时增加一段短暂的延时,以避免多次执行按键输入时的代码。
相关问题
void temp_hum_Set() { SetSelect=0; KeyNumber=Key(); if(KeyNumber==3) { _TH[4]=tm1668_get_digit(set[0]/10); display(_TH); } KeyNumber=Key(); if(KeyNumber==3) { SetSelect++; _HU[4]=tm1668_get_digit(set[1]/10); _HU[5]=tm1668_get_digit(set[1]%10); display(_HU); KeyNumber=Key(); if(KeyNumber==2) { set[SetSelect]++; if(set[1]>99){set[1]=0;} _HU[4]=tm1668_get_digit(set[1]/10); _HU[5]=tm1668_get_digit(set[1]%10); display(_HU); } KeyNumber=Key(); if(KeyNumber==1) { set[SetSelect]--; if(set[1]<1){set[1]=99;} _HU[4]=tm1668_get_digit(set[1]/10); _HU[5]=tm1668_get_digit(set[1]%10); display(_HU); } } else if(KeyNumber==2) { int oldValue = set[SetSelect]; set[SetSelect]++; if(set[0]>60){set[0]=0;} if(oldValue != set[SetSelect]) { display(_TH); } } else if(KeyNumber==1) { set[SetSelect]--; if(set[0]<1){set[0]=60;} display(_TH); } } 这段代码怎么修改才能使set[SetSelect]加或者减一次,display(_TH)就执行一次
你可以将 display(_TH) 的执行放在 set 值改变的 if 语句块里面,这样只有当 set 值改变时才会执行 display(_TH)。修改后的代码如下:
void temp_hum_Set() {
SetSelect=0;
KeyNumber=Key();
if(KeyNumber==3)
{
_TH[4]=tm1668_get_digit(set[0]/10);
display(_TH);
}
KeyNumber=Key();
if(KeyNumber==3)
{
SetSelect++;
_HU[4]=tm1668_get_digit(set[1]/10);
_HU[5]=tm1668_get_digit(set[1]%10);
display(_HU);
KeyNumber=Key();
if(KeyNumber==2)
{
int oldValue = set[SetSelect];
set[SetSelect]++;
if(set[1]>99){set[1]=0;}
if(oldValue != set[SetSelect])
{
display(_HU);
}
}
KeyNumber=Key();
if(KeyNumber==1)
{
int oldValue = set[SetSelect];
set[SetSelect]--;
if(set[1]<1){set[1]=99;}
if(oldValue != set[SetSelect])
{
display(_HU);
}
}
}
else if(KeyNumber==2)
{
int oldValue = set[SetSelect];
set[SetSelect]++;
if(set[0]>60){set[0]=0;}
if(oldValue != set[SetSelect])
{
display(_TH);
}
}
else if(KeyNumber==1)
{
int oldValue = set[SetSelect];
set[SetSelect]--;
if(set[0]<1){set[0]=60;}
if(oldValue != set[SetSelect])
{
display(_TH);
}
}
}
if(++Hum_Analog_Cnt >= HUM_CYCLE) { Hum_Analog_Cnt = 0; }代码优化
上述代码可以优化为:
```c
if (++Hum_Analog_Cnt >= HUM_CYCLE) {
Hum_Analog_Cnt = 0;
}
```
其中,`Hum_Analog_Cnt` 会先自增 1,然后与 `HUM_CYCLE` 进行比较,如果大于等于 `HUM_CYCLE`,则将其重置为 0。这样可以避免使用额外的判断语句,使代码更加简洁。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)