写的一个按键长短按的程序,但却实现不了,大家帮我看下

2020-01-27 11:29发布

这样写有问题吗?我实在不知道哪的问题,就是运行不了


sbit        KEY_SET         = P1^3;
sbit        KEY_UP         = P1^2;
sbit        KEY_DOWN = P1^0;

/*********************************************
;文件名:keyscan();
;功  能:按键扫描函数
;输  入:无
;输  出:;调  用:无
;*********************************************/       
uchar keyscan(void)
{
        if(KEY_SET==0||KEY_UP==0||KEY_DOWN==0) //有任一键按下,进入按键检测
        {
                keystar=1;                         //进入计时器,开始计时
                if((KEY_SET==0)&&keytemp>=20)        set_down=1;  //设置键按下20ms
                if((KEY_UP==0)&&keytemp>=20)         up_down=1;
                if((KEY_DOWN==0)&&keytemp>=20)        down_down=1;

                if((KEY_SET==0)&&keytemp>=2000)                         //2S 设置键被长按
                {
                         set_down=0;         
                         set_down_long=1;       
                }         
                if((KEY_UP==0)&&keytemp>=2000)
                {
                        up_down=0;         
                        up_down_long=1;       
                 }
                if((KEY_SET==0)&&keytemp>=2000) //2S
                {
                         down_down=0;         
                         down_down_long=1;       
                }
        }
        else        //松手等待按键抬起
        {
                if((KEY_SET==1)&&(set_down==1))
                {
                        set_down=0;
                        set_shot_flag=1;        //一个完整的按键操作完成

                }
                if((KEY_SET==1)&&(set_down_long==1))
                {                       
                        set_down_long=0;
                        set_long_flag=1;        //一个完整的长按键操作完成
       
                }
                if((KEY_UP==1)&&(up_down==1))
                {
                        up_down=0;
                        up_shot_flag=1;
                }
             if((KEY_UP==1)&&(up_down_long==1))
                {
                        up_down_long=0;
                        up_long_flag=1;
                }
                if((KEY_DOWN==1)&&(down_down==1))
                {
                        down_down=0;
                        down_shot_flag=1;
                }
             if((KEY_DOWN==1)&&(down_down_long==1))
                {
                        down_down_long=0;
                        down_long_flag=1;

                }
                keystar=0;
        }
  //  return key_flag;
}


定时时器10sm扫一次

        if (keystar)
        {
                keytemp++;
                if (keytemp>=30000) keytemp=30000; //3S
        }
        else
        {
                keytemp=0;
        }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
liuzhengyaAVR
1楼-- · 2020-01-29 03:34
最近也在学习这个呢!!思路很有用的。谢谢了。
jxchen
2楼-- · 2020-01-29 06:25
 精彩回答 2  元偷偷看……
国防大学
3楼-- · 2020-01-29 06:59
学习了
……………………………………………………………………………………
liaogang1314
4楼-- · 2020-01-29 08:00
我测试了下你的代码 能实现长按 但不能实现短按

一周热门 更多>