楼上的程序比起以下这种方式肯定强了不止一点:
按键函数(void)
{
如果按键等于0
{
延时10毫秒;
如果按键还是等于0
{
触发按键;
等待按键松手;
}
}
}
说下这种按键函数的问题。
如果按键按下,其他函数都在等那10毫秒延时,比如:有些不是用定时器扫描数码管的程序数码管就灭了。或者显示乱码,或者闪一下。这要是做个产品试问谁要?
不光数码管,再比如有个示波器,按了下按键,结果10毫秒延时,那波形就断了10毫秒,这示波器谁要?等等东西同理就不一一举例了。。
再说那个等待按键松手。我看别人写的都是while(按键==1)这样,问题在于一旦按键卡住或者坏了,从此程序就卡在等待按键等于1那了,相当于死机了。
上面的按键程序只是一种,还有其他多种方式,比如:扫描io状态,以返回值形式返回按键是双击,长按,组合状态等等,还有矩阵方式就不一一举例了。
总而言之,像网上这种按键程序是千万不能用的,自己弄来玩玩要求不高是可以的。搞成产品的话就是坑自己。坑客户了。
reg51不是stc89XX5152的头吗?
你用的不是51 52,应该包含下边的。
赞同下建议,能用硬件消抖,就不用软件,软件做实验可以,实际使用问题太多,最起码会耽误你主线程的任务流。
如果对及时性有要求,那果断上中断,如果中断太少,可以用电阻分压法,共享中断,不过得需要单片机支持adc吧。https://cdn.jsdelivr.net/gh/hishis/forum-master/public/images/patch.gif 膜拜大神! iffi123 发表于 2020-12-29 13:54
突然对一个电阻电容较起真来,你设计多密的电路板,连2个元件都放不下,呵呵
刚才在按键两端并联一个0.1uF电容器,结果不起作用,反而按键失灵了,可能容量不合适,也或者需要电阻配合,再或者需要把P1.0切换到高阻输入再配合电阻器实现,暂时没有深入测试了。 isoimg2130 发表于 2020-12-29 14:20
楼上的程序比起以下这种方式肯定强了不止一点:
按键函数(void)
{
用您提供的程序立马生效,效果非常好!
我才刚开始学习,有些函数的用法还有点生疏,待我把相关函数的拼写格式和含义学明白之后,再来反刍这段代码。再次致谢! Fireflying 发表于 2020-12-30 22:18
刚才在按键两端并联一个0.1uF电容器,结果不起作用,反而按键失灵了,可能容量不合适,也或者需要电阻配 ...
直接并电容是不行,放电太快起不到作用 iffi123 发表于 2020-12-30 22:20
直接并电容是不行,放电太快起不到作用
电容器上串联了100欧电阻再并联到按键开关两端也还是不管用。 本帖最后由 iffi123 于 2020-12-31 10:02 编辑
Fireflying 发表于 2020-12-31 08:09
电容器上串联了100欧电阻再并联到按键开关两端也还是不管用。
参考一下,RC参数不严格,图上时间常数几ms
iffi123 发表于 2020-12-31 09:58
参考一下,RC参数不严格,图上时间常数几ms
收到,感谢!后面找时间试试。
页:
1
[2]