mini板子做的按键问题

2019-08-14 04:07发布

新手跟着原子的视频做的按键实验(mini版,就是按键控制LED灯的那个),做完之后发现有两个问题:
1、出现了一个警告, snipaste_20170830_160741.png snipaste_20170830_160822.png
2、把程序下进单片机后发现,第一次按下按键效果是对的,但是再一次按下按键就没反应了。我的程序是刚开始初始化为LED0、LED1都是熄灭,按下KEY0则LED0状态翻转,按下KEY1则KEY1状态翻转,按下WK_UP则LED0、LED1都翻转,但是下了程序之后按下按键发现第一次按下按键KEY0,LED0亮,此时现象正确,再按按键KEY0,LED0就没反应,还是亮,复位后,按下KEY1和WK_UP也是同样现象 snipaste_20170830_161738.png (主函数), snipaste_20170830_161914.png (按键初始化和扫描)
希望大神讲解一下,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
不要这样啦
1楼-- · 2019-08-14 23:08
huanghan 发表于 2017-8-30 19:08
这函数里你改错了, 没有按键按下,不会有返回值
u8 KEY_Scan(u8 mode)
{

我知道我的第一个有问题,但是我感觉两个是一样的啊,第一个判断按键没按下时,key_up=1;返回0,和下面的那个程序有什么区别呢?能不能详细解释一下
huanghan
2楼-- · 2019-08-15 02:11
本帖最后由 huanghan 于 2017-8-30 19:55 编辑

u8 KEY_Scan(u8 mode)
{
        static u8 key_up=1;   //按键松开标志
        if(mode) key_up=1;  //支持连按
        if(key_up&&(KEY1==0||KEY1==0||KEY2==0||WK_UP==0)) //有按键按下
        {
                delay_ms(10);  //按键去抖
                key_up=0;
                if(KEY2==0) return 1;
                else if(KEY1==0) return 2;
//                else if(KEY0==0) return 3;
                else if(WK_UP==0) return 4;
        }
         else if(KEY1==1&&KEY1==1&&KEY2==1&&WK_UP==1)                
         
          {
          key_up=1;
          return 0; //这里放在外面,                                                                                                                                                                                               }}

标准函数内形,编译器只认识这个,语法上的错
u8 KEY_Scan(void)   
{....;
....;
....;
     return 0;
}






不要这样啦
3楼-- · 2019-08-15 03:59
huanghan 发表于 2017-8-30 19:32
u8 KEY_Scan(u8 mode)
{
        static u8 key_up=1;   //按键松开标志

能不能详细解释一下呢
huanghan
4楼-- · 2019-08-15 05:07
 精彩回答 2  元偷偷看……
Xums
5楼-- · 2019-08-15 08:39
......

一周热门 更多>