我打算用switch case语句做一个按键检测程序。
switch(P1)//检测几号按键按下
{
case 0xfe://1号
beep = 1; //蜂鸣器响
delay50ms(20);
beep = 0;
我想加个10ms的延时程序,该怎么加啊?
我直接在 case 0xfe://1号后面加
delay10ms();
P1=0xfe;
发现按下1号键后P1一直处于低电平,无法恢复。
该怎么加啊
2020-3-6 21:43:46
最佳答案
你不要直接switch(P1),在这个之前,你定义一个变量,可以延迟10ms检测一下P1的状态,赋值给变量,再switch(变量)
你不要直接switch(P1),在这个之前,你定义一个变量,可以延迟10ms检测一下P1的状态,赋值给变量,再switch(变量)
7
举报
-
幻昼夜空:
我做的是一个抢答器,我打算的是用switch case 来直接检测P1口的电平变化,以此来判断是哪号按下了按键。我觉得这样比检测按键来的简单。但是后来看到网上一些都有加防抖程序,我想问下按照我的思路可不可以不加防抖程序。如果不加防抖会出现什么问题。我感觉我在仿真时没有出现过系统误判断。
-
-
幻昼夜空
回复
jiciwi:
那我问下我直接在 case 0xfe://1号后面加 delay10ms(); P1=0xfe;应该也是可以防抖的吧
-
-
幻昼夜空
回复
jiciwi:
if(P1!=0xff) //P1端口电平发生变化,表示有按键按下 { delay10ms(); //延迟10ms switch(P1)//再次检测是哪位选手按下抢答按钮 { case 0xfe://1号 beep = 1; //蜂鸣器响 delay50ms(20); beep = 0;
-
幻昼夜空
回复
jiciwi:
这样可以达到延时防抖效果吗,我先检测P1口各引脚电平是否发生变化,如果变了,说明有按键按下了,然后我延时10ms,再检测是哪号引脚电平发生了变化。
-