基于AT32(STM32)单片机的模块化代码之按键模块化
1.环境介绍
平台:AT32F415单片机,雅特力公司的AT32系列单片机其实跟STM32系列单片机大同小异,包括库函数等基本都是一样的,所以这款代码无论是AT32还是STM32都是适用的。
开发环境:MDK V5 for arm
简介:最近做项目经常用得到按键模块,包括按键扫描,按键长按,短按,组合按的判定,所以特地把按键模块做了整理,让其模块化更加好,方便于其它项目的移植。
2.代码模块化的思路
2.1 在key.h文件中通过枚举类型,枚举各个用得到的按键
typedef enum
{
KEY_1,
KEY_2,
KEY_3,
KEY_4,
KEY_5,
KEY_6,
NUM_KEY
}ENUM_KEY;
2.2将每个用得到的按键跟其实际用途做映射
//按键实际功能映射
#define KEY_Z1LEVUP KEY_1 //区域1档位+
#define KEY_Z1LEVDW KEY_2 //区域1档位-
#define KEY_Z2LEVUP KEY_3 //区域2档位+
#define KEY_Z2LEVDW KEY_4 //区域2档位-
#define KEY_POWER KEY_5 //电源键
#define KEY_ACARID KEY_6 //其它功能按键
这样,当在app逻辑层需要对哪个按键进行操作时,直接用KEY_Z1LEVUP 这些宏定义去获取,如果某些个按键在后续改版中功能进行了互换,只需要在功能映射宏定义这边做一下修改,其它其它地方都不用动,方便又省事。
2.3在key.h文件中定义按键数据结构体,用来描述某个具体按键的各个参数
//按键状态枚举类型
typedef enum
{
KEY_STANONE, //按键没有按下
KEY_STAPRESS,//按键处于按住状态
KEY_STASHORT, //按键短按
KEY_STALONG, //按键长按
}ENUM_KEYSTA;
//按键数据结构体
typedef struct
{
ENUM_KEYSTA sta;
u16 keyCnt;
u8 flgPressed;
u8 flgReset;
//u16 startTime;//如果用得到组合按键,需要定义这个成员
}ST_KEYDAT;
2.4在key.c文件中定义数个全局变量,用来作为配置功能,或者存储功能等用途
ST_KEYDAT gs_Keydata[NUM_KE