用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

一种软件去除键抖动的方法

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间: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;/*置标志位准备去抖动*/

/*其它与定时器有关的语句*/

}




上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:1,078.12500 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号