4767|5

110

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【求助】各位老师能否提供给我一个独立按键的C子程序啊? [复制链接]

各位老师,我在做设计的时候用到的几个独立按键总是存在抖动干扰的问题,我不知道如何用软件的方法来消除抖动的影响,大家能否给我提供用C 语言编写的独立按键防抖动子程序啊,不胜感激。

最新回复

键盘软件设计,还要考虑更多:组合键、短按键、长按键,相应的就还有非法按键  详情 回复 发表于 2005-8-8 16:53
 
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
建议使用延时加二次判断。
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
要给按键去抖,需要多方权衡,采取最合适的办法,不能在“一棵树上吊死”。
1、用扫描键盘,使用使用上拉(下拉电阻)和金属弹片式按键
2、如果用中断键盘,则要去抖。硬件:上拉(下拉)电阻 + 电容;软件:延时
3、键盘不光需要去抖,还需要防人体感应。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
看看下面的程序:
unsigned char keybuf; //键值缓存器
unsigned char p1keyj(void) //判键子程序
{unsigned char x;
x=(P1IN&0X07); //P10--P12接有按键
return(x); //有按键返回 非0
}

unsigned char keycode() //哪个按键被按下,查键值子程序
{
unsigned char x;
if((P1IN&0x07)= = 1) //是否第一个按键
then x=0;
else
if((P1IN&0x07)= = 2) //是否第二个按键
then x=1;
else
if((P1IN&0x07)= = 4) // 是否第三个按键
x=2;
return(x);
}

interrupt[PORT1_VECTOR] void port1key(void)
{ //端口1的中断服务程序
while(p1keyj()!=0)
{
delay(500); //延时消除抖动
while(p1keyj()!=0)
{
keybuf = keycode();//确信有按键按下,找按键得键值,送到全局变量keybuf
while(p1keyj()= =0) //等待按键松开
;
}
}
}
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 
判断出按下后,key_counter计数。计数满足要求再处理。

键值也可以通过多次判断解决。多设几个变量。old_key new_key
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 
键盘软件设计,还要考虑更多:组合键、短按键、长按键,相应的就还有非法按键
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表