一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
楼主: WOSS1001
收起左侧

[51单片机] 还是请教C51的问题

[复制链接]
发表于 2011-9-1 21:21 | 显示全部楼层 |阅读模式
在书上看到下面这一段矩阵按钮扫描程序 这样2次判断TEMP的值能有消抖动的效果吗?个人感觉是不行的,请大家指教
void scankey()
{
unchar temp;
p1=0xff;
p1_0=0;//拉低第一行
temp=p1;
temp=temp&0xf0;//屏蔽4位列线
if(temp!=0xf0)
{
delay10ms;//延时10MS,消除抖动
if(temp!=0xf0)  //判断是否真的按下
{
switch(temp)
{
case 0xec;c=1;break
.......  //多分支判断,省略了
}
}
}
}
发表于 2011-9-1 21:26 | 显示全部楼层
10ms足以
发表于 2011-9-1 22:20 | 显示全部楼层
这样靠延时来削除键抖很划不来,空耗了CPU时间。
发表于 2011-9-1 22:52 | 显示全部楼层
支持楼上的。
 楼主| 发表于 2011-9-1 23:02 | 显示全部楼层
谢谢!我想问的是if(temp!=0xf0)
{
delay10ms;//延时10MS,消除抖动
if(temp!=0xf0)  //判断是否真的按下
这两句。TEMP中的值一直是第一次的值,延时后再判断一次有作用吗?
发表于 2011-9-1 23:06 | 显示全部楼层
谢谢!我想问的是if(temp!=0xf0)
{
delay10ms;//延时10MS,消除抖动
if(temp!=0xf0)  //判断是否真的按下 ...
WOSS1001 发表于 2011-9-1 23:02 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]



    这个肯定是有用的呀
发表于 2011-9-2 16:00 | 显示全部楼层
不用延时来消除抖动还有什么更好的方法,可以交流一下
 楼主| 发表于 2011-9-2 19:18 | 显示全部楼层
我觉得这根本不是延时消抖。比如一个干扰拉低了P1口高4位中的某一位,这时程序把P1口的值赋予TEMP,再延时10MS后TEMP中的值还是10MS前P1口的值,而不是现在P1口的值,这样也有用吗?
 楼主| 发表于 2011-9-2 19:22 | 显示全部楼层
上面表述的不清楚,我的意思是应该实时判断P1口的状态
发表于 2011-9-4 21:03 | 显示全部楼层
用状态机的方式就实现0耗时。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-4-28 23:07 , Processed in 0.063028 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表