关于程序冲突的问题
if(!(P11 & 0x01) && iskey11 == 0) {Delay5ms();
iskey11 = 1;
flag11 = 1;
keyPadData |= 0x08;
}
else if((P11 & 0x01) && iskey11 == 1) {
Delay5ms();
iskey11 = 0;
flagt = 1;
keyPadData |= 0x08;
}
if(!(P17 & 0x01) && iskey17 == 0) {
Delay5ms();
iskey17 = 1;
flag17 = 1;
keyPadData |= 0x08;
}
else if((P17 & 0x01) && iskey17 == 1) {
Delay5ms();
iskey17 = 0;
flag17t = 1;
keyPadData |= 0x08;
}
问一下大佬们,这段程序正常运行是没问题的,但是如果两个按钮几乎同时按下的时候,会写入冲突导致丢失一次触发,问一下有什么方法,类似于排队触发,或者先将按键存起来怎么实现
外部中断 PWM硬件移相测试卡教程(一)按键点灯测试@STC8H2K12U系列
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7023
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)
参考这个按键的写法,非阻塞的按键就可以了
延时耽误了 本帖最后由 xiangzichen 于 2024-3-29 00:40 编辑
//都在一个端口上,为何不把端口读取了,然后用 && 去判断到底是哪个口?
u8 GetKey() {
u8 k_tmp = P1 & 0x81; //读取P1口,如果有不用的口, P11 P17为按键
u8 rt = 0;
if(k_tmp) { //有数值,
_delay_ms(10); //延时消抖
if(k_tmp == P1) { //再次判断,且相等
if(~k_tmp & 0x80) { //P17 有按下
rt = 7;
}
else if(~k_tmp & 0x01) { //P11 有按下
rt = 1;
}
.
.
.
}
}
return rt; //返回按键
页:
[1]