串口通信51单片机按键扫描后将键值返回并传给串口助手,但是我明明只按了一下但是却接受了4个值

比如我按K1,应该得到01,但是却接受了4个01,有时是00、01.这是为什么?
还有,我明明开启了T0,定时,10秒内进行按键扫描,如果没有键按下就给串口助手发数字0,如果有键按下就把键值发给串口助手;但是我一按键定时器就像失效了一样,起不到定时的作用了,按了一次按键后已经超过10秒了,但单片机并没有发送0给串口

我觉得是按键时不稳定导致的,有时候即使加了按键去抖动的函数可能还会出现你说的现象。

如果你想证明按一次键,传送一个数值的话,你可以使用独立键盘扫描,单片机产生一个周期性的方波(比如信号由P1^0输出),再将P1^0的信号接到独立键盘的任何一个接受端口(比如是p3^1),观察串口是不是定时接受数值且每次只是接受一个。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-16
按一下发四个,很可能是按键处理程序在发送键值后,没有判断按键弹起就返回了。这样就出现按键还没有弹起就退出按键处理程序,然后再次判断为按键按下的情况。追问

可是我按的键是同一个,它怎么会出现两个不同的键值,而且我也判断按键是否弹起了代码如下只粘贴了一段:

#define Com P3//P3口

#define keytime 5//按键消抖时间

 

 

   while(temp!=0xf0)

   {

        temp=Com;

        temp=temp&0xf0;

 }

    flag=1;

第2个回答  2012-09-16
你的按键去抖动了吗追问

去了啊

相似回答