欢迎来到天天文库
浏览记录
ID:39563032
大小:31.50 KB
页数:4页
时间:2019-07-06
《独立按键程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include"stc89rc52.h"sbitkey_sr1=P2^0;sbitkey_sr2=P2^2;sbitkey_sr3=P2^3;sbitkey_sr4=P2^1;#defineucharunsignedchar#defineuintunsignedint#definekey_delay_time10//按键去抖动延时的时间ucharkey_flge=0;//按键操作标志位ucharkey_value=0;//按键值#definecomtin_delaytime40//按键长按的设定时间#definecomtin_ke
2、yvalue65//按键长按后,均匀触发的时间间隔uintkey2_sr_comtin_count=0;//按键2连续触发的间隔延时计数器uintkey3_sr_comtin_count=0;//按键3连续触发的间隔延时计数器uintkey1_count_time=0;//按键1去抖动延时计数器uintkey2_count_time=0;//按键2去抖动延时计数器uintkey3_count_time=0;//按键3去抖动延时计数器uintkey4_count_time=0;//按键4去抖动延时计数器ucharkey1_lock=0
3、;//按键1触发后自锁的变量标志ucharkey2_lock=0;//按键2触发后自锁的变量标志ucharkey3_lock=0;//按键3触发后自锁的变量标志ucharkey4_lock=0;//按键4触发后自锁的变量标志/***按键扫描程序****/voidkey_scan(){if(key_sr1==1)//IO是高电平,说明按键没有被按下{key1_lock=0;//清零自锁的变量标志key1_count_time=0;//清零去抖动延时计数器}elseif(key1_lock==0)//有按键按下,且是第一次被按下{key
4、1_count_time++;//去抖动延时计数变量自加if(key1_count_time>key_delay_time)//自加超过设定的值,则按键在效{key1_count_time=0;//清零去抖动延时计数器key1_lock=1;//自锁的变量标志置1,避免一直触发key_value=1;//获取按键值key_flge=1;}}if(key_sr2==1)//IO是高电平,说明按键没有被按{key2_lock=0;//清零自锁的变量标志key2_count_time=0;//清零去抖动延时计数器}elseif(key2_
5、lock==0)//有按键按下,且是第一次被按下{key2_count_time++;//去抖动延时计数变量自加if(key2_count_time>key_delay_time)//自加超过设定的值,则按键在效{key2_count_time=0;//清零去抖动延时计数器key2_lock=1;//自锁的变量标志置1,避免一直触发key_value=2;//获取按键值key_flge=1;}}elseif(key2_count_time6、按{key2_count_time++;}else{key2_sr_comtin_count++;//连续触发延时计数器累加if(key2_sr_comtin_count>comtin_keyvalue)//连续触发延时计数器累加到长按均匀触发值{key2_sr_comtin_count=0;//连续触发延时计数器清零key_value=2;//获取按键值key_flge=1;}}if(key_sr3==1)//IO是高电平,说明按键没有被按{key3_lock=0;//清零自锁的变量标志key3_count_time=0;//清零7、去抖动延时计数器}elseif(key3_lock==0)//有按键按下,且是第一次被按下{key3_count_time++;//去抖动延时计数变量自加if(key3_count_time>key_delay_time)//自加超过设定的值,则按键在效{key3_count_time=0;//清零去抖动延时计数器key3_lock=1;//自锁的变量标志置1,避免一直触发key_value=3;//获取按键值key_flge=1;}}elseif(key3_count_time8、时计数器累加超过短按的去抖动值的值,进入长按{key3_count_time++;}else{key3_sr_comtin_count++;//连续触发延时计数器累加if(key3_sr_comtin_count>comtin_key
6、按{key2_count_time++;}else{key2_sr_comtin_count++;//连续触发延时计数器累加if(key2_sr_comtin_count>comtin_keyvalue)//连续触发延时计数器累加到长按均匀触发值{key2_sr_comtin_count=0;//连续触发延时计数器清零key_value=2;//获取按键值key_flge=1;}}if(key_sr3==1)//IO是高电平,说明按键没有被按{key3_lock=0;//清零自锁的变量标志key3_count_time=0;//清零
7、去抖动延时计数器}elseif(key3_lock==0)//有按键按下,且是第一次被按下{key3_count_time++;//去抖动延时计数变量自加if(key3_count_time>key_delay_time)//自加超过设定的值,则按键在效{key3_count_time=0;//清零去抖动延时计数器key3_lock=1;//自锁的变量标志置1,避免一直触发key_value=3;//获取按键值key_flge=1;}}elseif(key3_count_time8、时计数器累加超过短按的去抖动值的值,进入长按{key3_count_time++;}else{key3_sr_comtin_count++;//连续触发延时计数器累加if(key3_sr_comtin_count>comtin_key
8、时计数器累加超过短按的去抖动值的值,进入长按{key3_count_time++;}else{key3_sr_comtin_count++;//连续触发延时计数器累加if(key3_sr_comtin_count>comtin_key
此文档下载收益归作者所有