原创 键盘程序的惊世发现

2007-11-3 23:19 2314 1 4 分类: MCU/ 嵌入式

本人在做proteus仿真时发现一个秘密,也许很多朋友在做键盘时不能得到预期结果,可能就是因为此原因,希望对你有帮助。


在键盘输入时,proteus会对输入端口的数字做一定时间保持模拟现实输入,如果你的延时程序或者处理程序很短,在下一次按键程序就会自动执行未知按键,从而发生未知错误,例如 :


uchar keyscan(void)
{ uchar i="1";
 uchar scancode,tmpcode;


p2=0xf0


while(i)


{   if ((P2&0xf0)!=0xf0)     


 {   
   delay();
   scancode = 0xfe;
   while((scancode&0x10)!=0)  // 逐行扫描
   {
    P2 = scancode;    // 输出行扫描码
    if ((P2&0xf0)!=0xf0)  // 本行有键按下
    {
     tmpcode = (P2&0xf0)|0x0f;


     /* 返回特征字节码,为1的位即对应于行和列 */
     return((~scancode)+(~tmpcode));
     scancode=0x00;
    }
    else scancode = (scancode<<1)|0x01;  // 行扫描码左移一位
   }
  }
 


}


此程序如果第一次按键,处理按键程序很短的话,第二次执行时就会p2=0xf0就会执行错误,从而产生未按键也会执行下面的程序,产生错误按键结果。


如果在p2=0xf0改为 while(P2!=0xf0)   
  {P2=0xff;
  P2=0xf0;
     }


就不会产生错误 。


多提意见

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户1534261 2008-10-27 22:55

那个电子锁里面都有这段程序

huli184_389376486 2008-10-7 11:37

可否将你的原码以及Proteus仿真作品上传上来,研究一下.很感兴趣.我也有点想法,不过要先看了你的实验效果才能发表.谢谢!或者发我邮箱也行,email:huli184@126.com

huli184_389376486 2008-10-7 11:28

学习了.
相关推荐阅读
用户1534261 2007-11-14 18:09
此日志皆为原创,欢迎转载
此日志皆为原创,欢迎转载...
用户1534261 2007-11-05 16:03
电子锁
本人近日费了好大的劲,才完成这个电子锁。真可谓费尽千辛万苦,调试过程中的错误既奇怪有隐蔽,还好终于完成了他的基本功能。按一进入,用户编号为0——9,只有一位,密码为六位和用户编号相同的数字。例如用户编...
用户1534261 2007-10-30 18:49
zhaoyanbin16@163.com
zhaoyanbin16@163.com...
用户1534261 2007-10-30 18:35
模拟电路
学模拟电路的时候没怎么有意思,现在连一些基本的电路或用到一些常用元器件的时候才发现很难选择,这才发现模拟电路如此有魅力,但是模拟电路也是最难需学好的,一本书上看到“一年数字,十年模拟”,说学好数字电路...
用户1534261 2007-10-30 18:23
彩灯
后来想做一个彩灯,想想很好笑,但是精神值得学习啊,因为那个led 很多,两线真的好麻烦,那时又不会网络标号,后来那金山词霸查到了帮助:那些连线不知费了我多长时间,但最终还是time step too ...
EE直播间
更多
我要评论
3
1
关闭 站长推荐上一条 /3 下一条