![]() |
0426 发表于 2025-5-22 17:14 void mianban_Key(void)//10ms扫描周期 { static u8 count=0; static bit sign=0; if(!K1_KEY)//IO { if(++count >= 2)&&(sign==0) { sign=1; K1=++K1%2; } } else { count=0; sign=0; } } |
小点点1 发表于 2025-5-21 09:27 void mianban_Key(void) { static u8 K1cnt1=0,K1cnt2=0; if(K1_KEY)//IO { if(++K1cnt2 > 2) { K1cnt2=3; K1cnt1 = 0; K1 = 0; // } } else { if(++K1cnt1 > 2) { K1cnt1 = 3; K1cnt2=0; K1 = 1;// } } /////////////////////////// } |
|
1你的按键逻辑很有问题。K1_jishuqi只有++没有--,只有自增没有自减,一旦长按超过 3S就会失效,而且也没有起到软件滤波的作用,硬件上你有没有做硬件滤波,如果也没有的话,你这个按键程序基本废了,轻轻碰一下,她接收到一个误触发信号就会工作 2就是你的 if(ChannelSet++ >= 2){ChannelSet = 0;}这个逻辑很有问题啊。在这个逻辑下ChannelSet能是0或者是1或者2 .但是你的想法里貌似只有两个按键效果 3一般很少见到 K1 == 1用来判读按键按下的, K1 == 0用来判断按键弹起的。你看下硬件别搞反了。 |
按键没有防抖动,按下一次,单片机扫描过快,判断按键按下不止一次,不是自动走的 |
按键检测程序有问题, |
很明显按键检测有问题,逻辑不太对 |