#include "key.h" #include "stm32f10x_gpio.h" #include "ctrl.h" //#include "CTRL.H" //#include "dc2ac.h" //#include "task.h" unsigned char gcOldKey = 0; unsigned int gcKeyFilter = 0; unsigned char gcKeyStack[MAX_KEY_STACK] = {"\0"}; unsigned char gcKeySavePtr= 0; unsigned char gcKetGetPtr = 0; signed char gcBLTimer = -1; unsigned char gcKey = 0; //键盘键值 void TaskScanKey(void) { unsigned char Key ; //按键输入 //去掉LOCK,上下到位 半降全降信号 Key = KEY&KEY_MAP; if(Key!=0x0) { if(Key!=gcOldKey) //digit filter { gcOldKey=Key; gcKeyFilter=0; //Beep(1,100); } else { //长按不放的情况 gcKeyFilter++; if(gcKeyFilter>5000/20) //长按2.5S 上升就变成了调试按键 { gcKeyFilter=0; if(Key==KEY_UP) //长按2.5S 上升就变成了调试按键 gcKeyStack[gcKeySavePtr]=KEY_DEBUG; else if(Key==KEY_STOP) //长按2.5S 停止就变成了中停2按键 gcKeyStack[gcKeySavePtr]=KEY_STOP2; gcKeySavePtr=(gcKeySavePtr+1)%MAX_KEY_STACK; Beep(1,50); //beep 10ms } if( gcKeyFilter>MAX_KEY_FILTER) //save key to stack { //if((Key&KEY_LOCK)!=KEY_LOCK) //键值过滤 锁定键不允许连击 if(((Key&KEY_STOPWARN)==KEY_STOPWARN) || ( (Key&KEY_DEBUG)==KEY_DEBUG) || ( (Key&KEY_SELFTEST)==KEY_SELFTEST)) { gcKeyFilter=0; gcKeyStack[gcKeySavePtr]=Key; gcKeySavePtr=(gcKeySavePtr+1)%MAX_KEY_STACK; Beep(1,50); //beep 10ms } } } } else { if(gcKeyFilter>10) //延时去抖动 ,按键松开的情况 { gcKeyFilter=0; gcKeyStack[gcKeySavePtr]=gcOldKey; gcKeySavePtr=(gcKeySavePtr+1)%MAX_KEY_STACK; Beep(1,100); //beep 10ms } } #ifdef _DEBUG //printf("Key = 0x%X \n",(int)Key); #endif } /************************************************************************** get key code,return 0 if no key ***************************************************************************/ unsigned char GetKey(void) { unsigned char ret; if(gcKetGetPtr!=gcKeySavePtr) { ret=gcKeyStack[gcKetGetPtr]; gcKetGetPtr=(gcKetGetPtr+1)%MAX_KEY_STACK; } else ret=0; return ret; }