PD_ODR_bit.ODR4=0;//初始化状态
if((s1==0)&&(s2==1)) {delay(200); if((s1==0)&&(s2==1)){while((s1==0)&&(s2==1));PD_ODR_bit.ODR4 = !PD_ODR_bit.ODR4;}}
if(Data > S_Data) //超值时LED灯闪烁,
在else里如果不加PD_ODR_bit.ODR4=0;这个语句的话,超值时LED灯闪烁,不超值时正好led在亮的状态,那么led就一直亮,现在我把在else里加上PD_ODR_bit.ODR4=0;这个语句后,按键时led亮一下就灭了
是不是有冲突啊,怎么解决?
你的程序没有冲突,就是逻辑的问题,你的if((s1==0)&&(s2==1)) {delay(200); if((s1==0)&&(s2==1)){while((s1==0)&&(s2==1));PD_ODR_bit.ODR4 = !PD_ODR_bit.ODR4;}} if中的问题在于如果你按住s2那么会闪烁,按一下,可能是常亮爷可能是长灭,这个东西随机和你按的时间有关,(Data > S_Data时,led处在翻转状态,在这段程序外面应该还有循环所以是闪烁的,如果不超时,进入else就把led关闭了自然是量一下就灭了。
如果你想要改变这个状态的话,你应该把按键哪里做一个变量,用于处理一直按住的情况,识别出是按一下还是一直按住,接下来的处理就好弄了
你这里的程序只有片段,没办法判断具体原因,我估计是你没有加延时的问题
你尝试一下在PD_ODR_bit.ODR4=0;之后加一句delay(50),看看怎么样
if(Data > S_Data) //超值时LED灯闪烁, {delay(50); PB_ODR_bit.ODR3 = 0; PC_ODR_bit.ODR0 = 0; printf("呵呵呵呵");PD_ODR_bit.ODR4 =!PD_ODR_bit.ODR4 ;}
依照您的邏輯,應該是要先判斷有無超值,來決定閃爍或者按鍵觸發才對,因此改為以下即可
PD_ODR_bit.ODR4=0;//初始化状态 if(Data > S_Data) //超值时LED灯闪烁, { delay(50); PB_ODR_bit.ODR3 = 0; PC_ODR_bit.ODR0 = 0; PD_ODR_bit.ODR4 =!PD_ODR_bit.ODR4 ; } // PD_ODR_bit.ODR4=1时LED亮 else { PC_ODR_bit.ODR0 = 1; if((s1==0)&&(s2==1)) { delay(200); if((s1==0)&&(s2==1)){ while((s1==0)&&(s2==1)); PD_ODR_bit.ODR4 = !PD_ODR_bit.ODR4; } } }