《按键处理的几种方法.pdf》由会员分享,可在线阅读,更多相关《按键处理的几种方法.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、按按 键键 处处 理理 的的 几几 种种 方方 法法(共共-本页仅作为文档封面,使用时请直接删除即可-内页可以根据需求调整合适字体及大小-3 3 页页)新型的按键扫描程序核心算法:unsigned char Trg;unsigned char Release;unsigned char Cont;void KeyRead(void)unsigned char ReadData=PINB0 xff;这里具个简单例子,为了只是说明原理,PB0是模式按键,短按则切换模式,PB1就是加,如果长按的话则连加(玩过电子表吧没错,就是那个!)#define KEY_MODE 0 x01 .while if(
2、time_10ms_ok)./点亮C_LED,关闭 A_LED 和 B_LED =2单个按键复用:单击,长按,双击。2011-09-16 11:13闲着无事在网上逛,产生按键复用的想法。前些天找按键复用程序,在网上很难找到,有些收费的代码是我们不会买的。所以借鉴了一位老师的代码,自己改了改。刚开始调试不成功,后来成了。/*实验目的:按键的长按,短按,双击检测*/#include#define uint unsigned int#define uchar unsigned charuchar key_num;/按键计数变量 bit key_long_flag,key_short_flag,key
3、_double_flag;/长按标志位,短按标志位,双击标志位 sbit key=P10;/独立按键接 P10/*ms 延时函数*/void delay_ms(uintms)uchar x;while(ms-)for(x=0;x123;x+);/*按键扫描*/void key_scan()uchar key_down_time,key_up_time;/”按下“时长key_down_time=0;/“按下”时长计数器清零 key_up_time=0;/“释放”时长计数器清零 if(key=0)/如按键 key 按下 delay_ms(20);/延时消抖 if(key=0)/如按键 key 按下
4、do /“按下”计数器开始计数 key_down_time+;delay_ms(10);while(key=0);if(key_down_time50)/如“按下”计数小于设定值(短击的最大限制值)delay_ms(20);/延时消抖do /“释放”计数器开始计数 key_up_time+;delay_ms(10);while(key_up_time40)&(key=1);/当超出设定值或再次有“按下”事件发生,结束计数 delay_ms(20);/延时(消抖)3 do /待到第二次的“按下”事件结束 while(key=0);if(key_up_time40)key_double_flag=1;else key_short_flag=1;/在释放期间提前结束的为双击,否则为短击 else key_long_flag=1;/长击标志位置“1”/*主函数*/voidmain()while(1)/不断循环,检测按键 key_scan();if(key_short_flag=1)P0=0 xfe;/单击亮1个灯 key_short_flag=0;/清零标志位 if(key_long_flag=1)P0=0 x00;/长按全亮key_long_flag=0;if(key_double_flag=1)P0=0 xf0;/双击亮4个灯key_double_flag=0;4