#ifndef __KEYS_H #define __KEYS_H #include "TypeDef.h" /* 类型定义 ------------------------------------------------------------------*/ typedef struct aa { u8 CS: 1 ; u8 JS: 1 ; u8 CS_L: 1 ; u8 JS_L: 1 ; u8 e: 1 ; u8 f: 1 ; u8 g: 1 ; u8 h: 1 ; } pKeyState ; extern pKeyState GROUP_KEY; enum KEY_SIG_DEF { KEY_CLICK_CS, //测试 KEY_CLICK_JS, //计时 KEY_LONG_CS, //长按测试 KEY_LONG_JS, //长按计时 KEYSIG_MAX }; /* 常量定义 ------------------------------------------------------------------*/ enum KEY_DEF { KEY_CS, //测试 KEY_JS, //计时 KEY_MAX }; enum KeyState { KEY_UP_FLAG, KEY_DOWN_FLAG }; enum KeyRes { NO_KEY_FLAG, ONE_HITS_KEY_FLAG, TWO_HITS_KEY_FLAG, THREE_HITS_KEY_FLAG, LONG_KEY_FLAG, MAX_KEY_FLAG }; typedef struct { unsigned char ID; //按键号 unsigned char State; //状态 unsigned short DnTime; //down计时 unsigned short UpTime; //up计时 unsigned char HitNum; //单击计次 unsigned char Res; //最后结果 } pKey; /* 宏定义 --------------------------------------------------------------------*/ /* 短按: 1次,80ms~280ms(down) 长按: 1200ms~>>(down) 双击: 2次,80ms~280ms(down) -> 0ms~280ms(up) -> 80ms~280ms(down) */ #define KEY_TIME (20) //10ms任务,扫描一次 #define CANCEL_KEY_DOWN (60/KEY_TIME) //按下<80ms,取消 #define SHORT_KEY_DOWN (320/KEY_TIME) //短按80ms-280ms #define LONG_KEY_DOWN (3000/KEY_TIME) //长按3s #define CANCEL_KEY_UP (80/KEY_TIME) //松开超过80ms,取消 #define MAL_KEY_DOWN (10000/KEY_TIME) //长按超过10s,故障 #define HANDLE_KEY_TIME (100/KEY_TIME) //按键处理时间 /* 函数定义------------------------------------------------------------------ */ extern void ScanKey ( void ); extern void Keys_Init( void ); extern void Keys_All_Handler(void); #endif