给你看看我的实际工程中的做法:
获取按键键值- uint8 KeyGet(void)
- {
- return (GetADC_8(5)+8)/16;//AD按键
- }
- uint8 KeyGet(void) //独立按键
- {
- uint8 i;
- i=VOID_KEY;
- if(p10_pin==0) //呼叫键
- i|=1;
- if(p37_pin==0) //系统卡设置键
- {
- p37_pin=1;
- DELAY_uS(5);
- if(p37_pin==0)
- i|=2;
- p37_pin=0;
- }
- return i;
- }
和按键处理有关的几个定义
- #define VOID_KEY 0 //无键键值
- //和按键时间有关的常数(mS)
- #define DLY_XD 40 //消抖
- #define DLY_NO_KEY 120 //无键
- #define DLY_RPT_START 1000 //重发首键
- #define DLY_RPT 200 //重发间隔
- #define DLY_LONG 10000 //长按
按键执行程序.keyvalue++;是为了去除编译警告用的,
- void Key_Down_short(uint8 keyvalue) //短按
- {keyvalue++;
- }
- void Key_Down_long_rpt(uint8 keyvalue) //长按连发
- {keyvalue++;
- }
- void Key_Down_long(uint8 keyvalue) //长按20S
- {//keyvalue++;
- if(keyvalue==8)//监视键当老化键
- {
- }
- }
- void Key_Up_long(uint8 keyvalue) //长按抬起
- {keyvalue++;
- }
- void Key_Up_short(uint8 keyvalue) //短按抬起
- {//keyvalue++;
- uint8 i;
- switch (keyvalue)
- {
- case 2://电控锁 1 开锁(电控锁)键
- {
- }break;
- case 4://电磁锁/摄像头 2 开锁(电磁锁)键
- {//对讲时,开锁作用。开关3#mkj
- }break;
- case 6://菜单 3 铃声选择键
- {
- }break;
- case 8://监视/-
- {
- }break;
- case 10://5 对讲/户户通键
- {//
- }break;
- case 1://hht 6 铃声音量键
- {//
- }break;
- default:
- {
- }break;
- }
- }
|