首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

经典按键检测程序-带长按(3)

2013-09-05 
经典按键检测程序-带长按(三)/* uint8 KLSTuint8 KNOW本次按键的状态uint8 KSTBL 按键滤波时间 uint8 KSTB

经典按键检测程序-带长按(三)

/* uint8 KLST   uint8 KNOW  本次按键的状态  uint8 KSTBL 按键滤波时间 uint8 KSTB    uint8 KAVL  按键按下有效结果寄存器  本按键检测程序的优缺点 优点: 1、思路明晰,滤波次数可轻松调整 2、长按检测方便,代码量少 3、一次可检测8个按键缺点: 1、此按键检测程序不适合应用在有组合按键的场合*///***************************************// 函数名称:CTestKey// 函数功能:按 键 检测程序// 入口参数:无// 出口参数:无//***************************************void CheckKey(void){uint8 R_KeyStatu = 0;if(P_K1 == 0) //读IO1状态  1有效{R_KeyStatu |= 0X01;}if(P_K2 == 0) //读IO2状态  1有效{R_KeyStatu |= 0X02 ;}if(P_K3 == 0) //读IO3状态  1有效{R_KeyStatu |= 0X04 ;}...if(P_K8 == 0) //读IO8状态  1有效   总共一次性检测8个按键{R_KeyStatu |= 0X80 ;}KNOW = R_KeyStatu ;if((KNOW & 0Xff) == 0)//无键按下{//KNOW = 0 ;KLST = 0 ;KSTB = 0 ;KSTBL = 0 ;KAVL = 0 ;}else if(KNOW != KLST) //第一次按下{KLST = KNOW ;KSTBL = 252 ; //(256-252) 为按键滤波次数}else if(KNOW != KSTB)//单次按    {if(++KSTBL == 0){KSTB = KNOW ;KAVL = KSTB ;  //按键确认标志KSTBL = 156 ;  //(256-156)=100 为长按键响应时间 100*10MS=1S}}else {if(++KSTBL == 0)//长按 160MS 有效一次{KAVL = KNOW ; //置按键确认标志KSTBL = 240 ;//(256-240)=16 *10MS=160MS 置一次按键确认标志//F_KQkyENB = 1 ;}}}//按键处理程序 处理第一个按键void CmdK1(void){if((KAVL & 0x01) == 0) return ;KAVL &= ~0x01 ;//处理按键内容}//按键处理程序 处理第二个按键void CmdK1(void){if((KAVL & 0x02) == 0) return ;KAVL &= ~0x02 ;//处理按键内容}//---实例应用----------void main(void){while(1){while(!F_10MS); //10MS跑一次主程序F_10MS = 0 ;CheckKey() ;//检测按键CmdK1() ; //处理第一个按键CmdK2() ; //处理第二个按键}}

热点排行