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

2019-07-15 12:42发布

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

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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
lee_st
1楼-- · 2019-07-16 11:57
加中断或者读按键用IO口状态,赋给变量
lee_st
2楼-- · 2019-07-16 15:10
把变量带进判断,触发就好了
骓风
3楼-- · 2019-07-16 19:21
蜡笔小Q 发表于 2016-11-1 11:06
第二个if语句里加上这句话
while((P9IN&0x0f)==0x0f);//等待按键抬起

我加的是  while((P9IN&0xf0)!=0xf0);//等待按键抬起
多谢指点
骓风
4楼-- · 2019-07-16 22:53
 精彩回答 2  元偷偷看……
执剑守心
5楼-- · 2019-07-17 03:50
学习学习。。。。
李春明
6楼-- · 2019-07-17 04:39
骓风 发表于 2016-11-1 14:28
我用的端口没有中断  已经解决  谢谢指点

这个中断的确容易忘记 我都是先用笔记在本子上 编完后再对照着找一下 看看有没有忘记

一周热门 更多>