单片机/MCU论坛
直播中

幻昼夜空

4年用户 57经验值
私信 关注
[问答]

请教下各位大神,用switch case检测按键该怎么加延时程序

我打算用switch case语句做一个按键检测程序。
switch(P1)//检测几号按键按下
        {
                case 0xfe://1号
                beep = 1;        //蜂鸣器响
                delay50ms(20);
                beep = 0;
我想加个10ms的延时程序,该怎么加啊?
我直接在  case 0xfe://1号后面加
delay10ms();
P1=0xfe;
发现按下1号键后P1一直处于低电平,无法恢复。
该怎么加啊
  • mmexport1583497159192.jpg

回帖(1)

jiciwi

2020-3-6 21:43:46

最佳答案

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

更多回帖

发帖
×
20
完善资料,
赚取积分