论坛风格切换切换到宽版
  • 2361阅读
  • 2回复

请问这个键盘扫描程序是不是有问题? [复制链接]

上一主题 下一主题
离线BG4ABM
 
发帖
1139
只看楼主 倒序阅读 0楼 发表于: 2006-08-27
我有一块单片机实验板和附加的演示程序。最近我想根据演示程序中的一个电子计时程序设计一个产品,我仔细研究了这个程序,觉得程序中的键盘扫描模块可能有点问题,想向大家请教:
main:
.
.
.
clr tr0
.
.
.
clock:
.
.
.
jb p3.5 scankeys-next4      
lcall stopclock
scankeys-next4:
ajmp clock
.
.
.
stopclock:
cpl tr0
mov p1,#0ffh(清屏幕)
lcall delay(0.15秒左右的延时程序)
ret

end
程序原来的设计意图应该是:程序启动后,首先关闭tr0,然后在主程序之间来回扫描,一旦发现p3.5键被按下了,就去执行cpl tr0,启动定时器计数,如果在计数过程中又发现p3.5键被按下了,再执行cpl tr0, 暂停定时器计数。
  现在的问题是:如果p3.5键被按下的时间稍微长一点,那么就有可能被多次扫描到,p3.5键释放后,tr0就处于不确定状态。请问是不是存在这个问题?有没有什么好的解决方法?
离线BD7QX
发帖
301
只看该作者 1楼 发表于: 2006-08-27
你的程序确实存在你所说的问题。这主要是你在进入stopclock子程序的时候没有去监测按键的释放情况造成的。解决的方法可以是这样的:
stopclock:
cpl tr0
mov p1,#0ffh(清屏幕)
jnb p3.5,$ ;如果按键未释放则等待释放(注:如有看门狗电路应在此循环里有喂狗的操作,否则会引起程序复位的)
lcall delay(0.15秒左右的延时程序)
ret
离线BG4ABM
发帖
1139
只看该作者 2楼 发表于: 2006-08-27
谢谢你的回答,实验板在单位里,明天上班后就去试一下,看看能否解决这个问题