[菜农助学交流] 求助:按键的松手检测

[复制链接]
 楼主| 毅如靳往 发表于 2011-10-5 21:52 | 显示全部楼层 |阅读模式
本帖最后由 毅如靳往 于 2011-10-5 21:54 编辑

菜农大叔的助学板上有两个用户按键,通过函数DrvGPIO_GetBit (E_GPB, 15);可以获得按键的当前状态,
加上按键消抖则可以进行相应的按键响应程序。
然而如果想要做松手检测怎么做呢 ?
请看我下面所写的代码
  1.        
  2. KEY1_ST = DrvGPIO_GetBit (E_GPB, 15);         //获取KEY1的值,KEY1_ST是代表KEY1的状态变量
  3. //按键KEY1的响应动作
  4. if (KEY1_ST == 0)
  5. {
  6.      delay_loop();                 //消抖
  7.      if (KEY1_ST == 0)
  8.     {
  9.         if(++LED1_ST>5)        LED1_ST=0;
  10.         didi(1);                        //形参传递为几  则蜂鸣器响几声
  11.         while(!KEY1_ST)                          //按键松手检测
  12.        {
  13.             display();         //显示函数,应用状态机的显示,按键每次按下则LED灯1,2,3,4分别点亮
  14.         }
  15.     }
  16. }




这个while()的用法是我在PIC单片机程序中使用过的,然而在keil中编程的时候写这个语句会卡死在这个while循环里.
想了一段时间,不知道怎么做松手检测了,请教大家.敬请各位不吝赐教.
nixianmin 发表于 2011-10-5 22:00 | 显示全部楼层
一般松手检测不就是判断该位的电平吗,按下为低电平,松手就是高电平呗
还有你这程序,没有读取端口的状态当然会陷入死循环
改成这个试试,要不断读端口状态
while(!DrvGPIO_GetBit (E_GPB, 15))                          //按键松手检测
{
          display();         //显示函数,应用状态机的显示,按键每次按下则LED灯1,2,3,4分别点亮
}

评分

参与人数 1威望 +1 收起 理由
毅如靳往 + 1

查看全部评分

 楼主| 毅如靳往 发表于 2011-10-5 22:12 | 显示全部楼层
2# nixianmin

thanks
之前貌似我这么写过
忘了怎么就不成功了

唉~
总之
谢了哈~
已然成功
hotpower 发表于 2011-10-6 11:16 | 显示全部楼层
这句话不对:while(!KEY1_ST)

必须要硬件读引脚的指令才行,KEY1_ST永远是上次读出的值。

你的DrvGPIO_GetBit (E_GPB, 15)只用了一次是不对的。
必须要在while()里用才是。
总之KEY1_ST是上次读出的值
 楼主| 毅如靳往 发表于 2011-10-7 07:22 | 显示全部楼层
4# hotpower
KEY1_ST = DrvGPIO_GetBit (E_GPB, 15);         //获取KEY1的值,KEY1_ST是代表KEY1的状态变量


嗯 疏忽了  当时写这句话一是出于可移植性的考虑     二是确实不想写DrvGPIO_GetBit (E_GPB, 15);  这么长的东西   
却疏忽了   必须用硬件读引脚指令~
或者写到宏定义去可行  回头试试   
谢谢大叔指点
hotpower 发表于 2011-10-7 09:23 | 显示全部楼层
你用while去读一个值,而这个值永远不变化。那么只有死路一条。
一般读一个值,这个值由中断改写,这样不会死机的。
所以你的程序是不对的。因为你测试不到管脚的变化的。
hotpower 发表于 2011-10-7 09:23 | 显示全部楼层
你用while去读一个值,而这个值永远不变化。那么只有死路一条。
一般读一个值,这个值由中断改写,这样不会死机的。
所以你的程序是不对的。因为你测试不到管脚的变化的。
hotpower 发表于 2011-10-7 09:23 | 显示全部楼层
你用while去读一个值,而这个值永远不变化。那么只有死路一条。
一般读一个值,这个值由中断改写,这样不会死机的。
所以你的程序是不对的。因为你测试不到管脚的变化的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

176

帖子

1

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