如何将按键按下一次作为一次输入

tunganzu1014 2016-10-31 10:38:22
我用的是扫描法检测按键 但是按下一次就会扫描很多次 如何更改函数使得按下抬起一次作为一次的输入

char keyScan(void)
{
char key = 0;
char row,col;
// char key_now ;
// char key_past;

P9DIR = 0XF0;
P9REN = 0X0F;
P9OUT = 0X0F;
if((P9IN & 0X0f) != 0X0f) //判断是否有有键按下(检测输入是否全部为高),若有 往下执行
{
delays();
if((P9IN&0x0f)!=0x0f) //再次判断列中是否是干扰信号,不是则向下执行
{
row = P9IN&0x0f;

P9DIR = 0X0F;
P9REN = 0XF0;
P9OUT = 0XF0;
col = P9IN&0xf0;
// if((key_past==0)&&(key_now==1))
{ key = row|col;
// key_past = key_now;
// key_now = 0;
}
}
}
return key;
}
...全文
744 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
大头苍蝇 2016-11-02
  • 打赏
  • 举报
回复
key_past 全局化或者static;检测抬起信号,清除key_past。 下边沿,上边沿都要检测。
默寞 2016-11-01
  • 打赏
  • 举报
回复
需要加一个等待按键抬起的判别 比如 while((P9IN&0x0f)!=0xf0)

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧