请问,出现这样的问题该怎样解决?

[复制链接]
 楼主| tdhlq 发表于 2007-10-26 17:16 | 显示全部楼层 |阅读模式
用89C52的P20--P23这四个I/O口分别控制四个数码管的字位口,其余四个I/O口通过四个按键接地,用动态扫描方式控制数码管.现在的问题是当按下任意一个按键时,四个数码管就会同时闪烁一下,如果长按,就会不停的闪,该如何解决?
xwj 发表于 2007-10-26 17:27 | 显示全部楼层

程序问题

 楼主| tdhlq 发表于 2007-10-26 17:37 | 显示全部楼层

的确是程序问题,我把按键消抖时间减小后,效果有

明显的改变,现在是按下按键后会多次扫描按键.
zusen 发表于 2007-10-26 17:57 | 显示全部楼层

用定时器扫描数码管

可解决问题
5_0_5 发表于 2007-10-26 20:42 | 显示全部楼层

是没有检测按键松开吧

sanwa_chen 发表于 2007-10-26 21:52 | 显示全部楼层

明显的程序问题!

程序结构问题。
数码管扫描过程是连续的过程,你按键扫描是去抖动又做成了软件延时,当你扫描到按键时会延时来销抖动,这时扫描数码管的连续过程被打断,自然会闪烁。
建议修改程序:
按键消抖不要用软件延时在傻傻的等,用其他方法。建议去看看坛内大侠的**,怎么扫描及处理按键。怎么样安排数码管的扫描!
grady1125 发表于 2007-10-26 21:57 | 显示全部楼层

yes

ls说得对要等待按键放开!
ayb_ice 发表于 2007-10-27 08:01 | 显示全部楼层

程序架构不合理

computer00 发表于 2007-10-27 09:03 | 显示全部楼层

扫描键盘和刷新LED应该放在定时器中断里面处理

starlite_jason 发表于 2007-10-27 10:34 | 显示全部楼层

刷新LED最好还是在中断里做

按键扫描还是不在中断里吧,中断中尽量不要长代码
computer00 发表于 2007-10-27 10:46 | 显示全部楼层

按键扫描也放在中断处理里好,扫描键盘代码很少的。

xwj 发表于 2007-10-27 11:19 | 显示全部楼层

按键程序中不要延时,要靠多次扫描来判断啊

关于按键程序的讨论太多了,去看我的帖子或搜索论坛旧贴吧
ayb_ice 发表于 2007-10-27 15:22 | 显示全部楼层

全部在主循环里也是可以的。。。

但不能调用软件延时程序。。。
dcp 发表于 2007-10-28 13:47 | 显示全部楼层

找HOTPOWER上一上"零耗时"的课

要学会用定时中断来管理程序

程序中不能有 
Delay(unsigned char i)
{
    while(i--);
}
之类的延时程序

如要延时,可在定中断中做
sanwa_chen 发表于 2007-10-29 11:28 | 显示全部楼层

其实,LED也是扫描,按键也是扫描

完全可以在同一个时候处理调这两个扫描嘛
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

47

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部