单键长按短按时遇到的问题(C语言)

[复制链接]
3614|6
手机看帖
扫描二维码
随时随地手机跟帖
zico1998|  楼主 | 2009-9-1 16:36 | 显示全部楼层 |阅读模式
本帖最后由 zico1998 于 2009-9-2 08:34 编辑

遇到的问题,始终只显示长按,不知为何

//均为全局变量,其他程序里定时KeyT每10ms扫描一次P06口的T按键,k_temp送数码管显示,长按2秒显示2,短按显示1
// bit KeyT;

uchar KeyT_Scan()
{

if(!KeyT)    //T按键按下
{
  if(fsong==0)   //松开标志,表示之前送开过
  {
   k_cnt++;  //按下后计数
   K_cnt_l=0;
   if(k_cnt>=200)  //2S到?
   {
    k_cnt=0;
    fsong=1;
    fchang=1; //2S到则置长按标志
   }
  }
}

else      //松开
{
  k_cnt_l++;    //松开后计数
  if(k_cnt_l>=50)
  {
   k_cnt_l=0;
   fsong=0;
   k_cnt=0;
  }
}
if(fsong)k_temp=2;    //长按显示2
if(k_cnt) k_temp=1;   //短按显示1
return k_temp;
}

相关帖子

zico1998|  楼主 | 2009-9-1 16:39 | 显示全部楼层
思路是有键按下,计数到2S,则置长按标志,并显示2
否则短按,显示1。
松开后,计数一段时间仍然松开,则清各种计数。等待下次按入。

使用特权

评论回复
s46410864| | 2009-9-1 17:30 | 显示全部楼层
计数有问题,就是说,你这个计数是和晶振有关系,和时间没关系,最好用定时计数,才能知道是2秒还是1秒

使用特权

评论回复
zico1998|  楼主 | 2009-9-2 08:38 | 显示全部楼层
谢谢楼上,是我没表达清楚,其他程序里定时KeyT每10ms扫描一次P06口的T按键。

这样,就每10ms扫描一次,计数计一次,等到200次就设置长按标志位fchang或到50次时候设置松开标志fsong

使用特权

评论回复
shuiqinghan2012| | 2014-4-14 21:15 | 显示全部楼层
调试了好久,才做好,可以使用

8个按键控制8个LED灯_长按键与短按键.zip

1.22 MB

使用特权

评论回复
gxycszl| | 2016-5-10 09:35 | 显示全部楼层
学习了

使用特权

评论回复
supershingo| | 2019-8-20 09:55 | 显示全部楼层
学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

36

帖子

0

粉丝