C语言的按键开关防抖程序~

检测到按键之后,防抖程序延时一定时间之后是继续检测按键是按下还是检测按键已经松开?... 检测到按键之后,防抖程序延时一定时间之后是继续检测按键是按下 还是检测按键已经松开? 展开
 我来答
li446729462
推荐于2018-03-01 · TA获得超过131个赞
知道小有建树答主
回答量:130
采纳率:100%
帮助的人:91万
展开全部
key为按键,规定按下为低电平
if(key==0)
{
delay(50); //延时50ms,消抖
if(key==0) //再判断是否按下
{
while(!key); 松手检测
··················································
该按键按下要实现的功能程序
··················································
}
}
我的习惯是这样写
手机用户30605
2011-09-24 · TA获得超过231个赞
知道答主
回答量:864
采纳率:33%
帮助的人:289万
展开全部
外部中断,要求是低电平/下降沿触发。
你应该把按键改成接地,不要接电源。

另外,程序缺少延时,这样,按一下键,会加上很多次的。
试试如下程序:
#include <reg52.h>
unsigned char code tab[] = {
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
unsigned char a, b, c;
//-------------------------------
void delay(unsigned int k)
{
unsigned int i, j;
for(i = 0; i < k; i++)
for(j = 0; j < 121; j++);
}
//-------------------------------
void main()
{
IT0 = 1;
EX0 = 1;
EA = 1;
while(1) {
P0 = tab[c];
}
}
//-------------------------------
void key()interrupt 0
{
c++;
if(c > 10) c = 0;
delay(200); //延时一会
}
//-------------------------------
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
枫啦啦
2011-09-24 · TA获得超过2395个赞
知道小有建树答主
回答量:680
采纳率:0%
帮助的人:795万
展开全部
两个思路:
第一个是,若有按键按下,添加延迟程序,延迟过后若按键还是按下,则判断为确定按下

第二个是,若你用的硬件有中断,则用中断。中断设置为下降沿有效(低电平有效的话就是出现一次低电平就中断一次,达不到防抖效果)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lcwang0635
2011-09-24 · TA获得超过111个赞
知道答主
回答量:49
采纳率:0%
帮助的人:42.8万
展开全部
自己定义
前者类似PC键盘,长时间按键被当做按了多次
后者则是将一对“按下-释放”动作当做按键一次
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式