按键扫描16Hz-单片机通用模板

  • 一、按键扫描的原理
    • 1、直接检测高低电平类型
    • 2、矩阵扫描类型
    • 3、ADC检测类型
  • 二、key.c的实现
    • 1、void keyScan(void) 按键扫描函数
      • ①void FHiKey(void) 按键按下功能
      • ②void FSameKey(void) 按键长按功能
      • ③void FLowKey(void) 按键释放功能
  • 三、key.h的功能和变量外部接口
  • 四、keyScan()的使用和Note

一、按键扫描的原理

1、直接检测高低电平类型

  • 单片机的IO设置下拉读取高电平,或设置上拉读取低电平;通过判断IO的高低电平从而判断按键状态。

2、矩阵扫描类型

  • 设置3个IO上拉输入,先扫描第一列对地按键是否检测到低电平;KEY1输出低电平检测SW6是否是低电平,是低电平–>KEY1设置上拉,KEY2输出低电平验证SW6是否按下;同理SW7、SW8也是正反扫判断是否按下。

3、ADC检测类型

  • 通过硬件搭建分压电阻电路,通过按键按下电阻分压读取ADC判断范围从而判断哪个按键按下。

二、key.c的实现

1、void keyScan(void) 按键扫描函数

/** *Key Define */#defineIO_MitKeyP21#defineIO_TemKeyP13#defineIO_TimeKeyP14#defineIO_ModeKeyP16#defineIO_StrAddKeyP17#defineIO_StrDecKeyP35//自定义按键引脚IO#define MicKey0x01#define TemKey0x02#define TimeKey0x04#define ModeKey0x08#define StrAddKey0x10#define StrDecKey0x20 //自定义按键标志//全局变量bit b_KeyTone_Flag=0;//按键声标志bitb_KeepUp_Flag=0;//按键保持标志bitb_Skip_Flag=0;//按键非法标志u8keyNum