首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 理工论文 → 电子通信 |
|
|||||
一种软件去除键抖动的方法 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 22:16:49 点击数:[] ![]() |
|||||
复键格式*/ sbit endebounce=flag^0; sbit getkey=iag^1; sbit kprocess=flag^2; sbit ACC_7=ACC^7; void main(void); void debounce(void); void get_key_value(void); void main(void) { /*初始化*/ kinput=Ktemp=kready=Kstore=0; endebounce=0; getkey=0; kprocess=0; TMOD=0x01; TL0=0xe0; TH0=0xb1; TR0=1; ET0=1; EA=1; /*……*/ while(1)/*循环*/ { debounce();/*调用去除键抖动函数*/ get_key_value();/*调用获取键值函数*/ key_processing();/*调用键处理函数*/ /*other functions*/ } } void debounce(void) { if (endebounce) { /*以下是去除键抖动表达式*/ Kreqdy=Ktemp & Kinput Kready & (Ktemp^Kinput); Ktemp=Kinput; /*以下表示式用于输出重复键和非重复键*/ Koutput=Kready &(~Kstore Kconst); Kstore=Kready; if (Koutput ! =0)/*如果有键按下,置标志准备获取键值*/ getkey=1; } } void get_key_value(void) { if(getkey) { unsigned char temp; unsigned char j; getkey=0;/*清标志*/ for(j=0;j<8;j++) { temp=_cror_(koutput,1);/*循环右移寻找按下的键*/ if(_testbit_(ACC_7))/*如果ACC_7=1,找到了按下的键*/ { key_value=j;/*获得键值*/ j=8;/*找到按下的键就退出循环*/ kprocess=1;/*置标志,准备进行键处理*/ } else Koutput=temp;/*准备下一次寻找*/ } } } void timer0_interrupt_handler(void) interrupt using1 { TL0=0xe0;/*加载定时器参数,使晶振频率12MHz时中断周期为20ms*/ TH0=0xb1; /*键扫描*/ P2_0;/*使能键扫描位*/ Kinput=~P0;/*从P0读入按键信息,反相后保存*/ endebounce;/*置标志位准备去抖动*/ /*其它与定时器有关的语句*/ } |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |