uint8_t KEY_Scan(uint8_t mode) { static uint8_t key_up=1;//按键按松开标志 if(mode)key_up=1; //支持连按 if(key_up&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0)) { HAL_Delay(20);//去抖动 key_up=0; if(KEY1==0) return 1; else if(KEY2==0) return 2; else if(KEY3==0) return 3; else if(KEY4==0) return 4; } else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)key_up=1; return 0;// 无按键按下 }使用这样的函数为什么无法读取到按键
时间: 2023-09-30 15:01:56 浏览: 75
C实现与 uint64_t 相同功能的类
这个函数的作用是扫描按键并返回按下的按键编号,但是可能存在一些问题导致无法正确读取到按键。
首先,要确保KEY1、KEY2、KEY3、KEY4这些按键引脚已经正确地连接到了开发板上,并且通过适当的电平转换电路连接到了MCU上。
其次,该函数中使用了一个静态变量key_up来记录按键是否松开的状态。在函数内部首次执行时,key_up会被初始化为1。如果之后没有其他地方修改key_up的值,那么每次调用函数时,key_up都会保持为1,导致无法进入按键按下的判断条件。所以,确保在其他地方没有修改过key_up的值。
另外,函数中使用了延时函数HAL_Delay(20)来进行去抖动处理,但是要确保该延时函数能够正常工作。如果延时函数未正确实现或者被其他中断或任务占用,可能会导致延时时间不准确,从而无法正确去抖动。
最后,还要确保在调用该函数之前已经初始化了相应的引脚和外设,如GPIO和中断等。
如果以上问题都已经检查过并且没有解决问题,可以尝试使用调试工具(如串口输出)来查看按键引脚的电平变化情况,以确定是否存在硬件问题。如果硬件没有问题,可以考虑使用其他方法来读取按键状态,如直接读取引脚的电平状态或者使用外部中断来触发按键检测。
阅读全文