标题: 51单片机键控菜单程序 按键没用 [打印本页]

作者: 旭旭龙    时间: 2020-2-6 20:38
标题: 51单片机键控菜单程序 按键没用
初始化能反白到第二行,也就是case 0 ,但是按键按下没有反应。

{
    uint a ;
if(key_down==0)
{
    delay(30);         //消抖
      if(key_down==0)
       a = 0;  
        a++;
        while(!key_down);     //等待按键松开
         
}
          switch(a)//第一层
          {   
              case 0:
            lcd_block(32,16,79,31);     break;    //第2行反白:贪吃蛇  

            case 1:
            lcd_block(32,16,79,31);     //清除第2行反白:贪吃蛇
            delay(20);
            lcd_block(16,32,95,47);     //第3行反白:俄罗斯方块              
            break;
            case 2:
            lcd_block(16,32,95,47);     //清除第3行反白:俄罗斯方块
            delay(20);
            lcd_block(48,48,79,63);     //第4行反白:闹钟/返回            
            break;
            case 3:
            lcd_block(48,48,79,63);     //取消第4行反白:闹钟/返回   
            delay(20);
            lcd_block(32,16,79,31);     //第2行反白:贪吃蛇
            break;               //返回第一行
            case 4: a = 0;break;
          }               
     while(1);     
}        
}

作者: 小小大虾    时间: 2020-2-7 01:07
新手吧,初始化时就执行到case 0 ,然后就在while(1); 死循环了当然没反应啦
作者: wulin    时间: 2020-2-7 09:06
按键程序只能执行1次,死在while(1); ,a也不可以每次清0,否则switch(a)只能执行1。给你改一下你试试。
void key_scan()
{
        static uint a=0;//静态变量
        if(key_down==0)
        {
                delay(30);         //消抖
                if(key_down==0)
                {
//                        a=0;  
                        while(!key_down);     //等待按键松开
                        switch(a)//第一层
                        {   
                                case 0:
                                lcd_block(32,16,79,31);     //第2行反白:贪吃蛇         
                                break;
                                case 1:
                                lcd_block(32,16,79,31);     //清除第2行反白:贪吃蛇
                                delay(20);
                                lcd_block(16,32,95,47);     //第3行反白:俄罗斯方块              
                                break;
                                case 2:
                                lcd_block(16,32,95,47);     //清除第3行反白:俄罗斯方块
                                delay(20);
                                lcd_block(48,48,79,63);     //第4行反白:闹钟/返回            
                                break;
                                case 3:
                                lcd_block(48,48,79,63);     //取消第4行反白:闹钟/返回   
                                delay(20);
                                lcd_block(32,16,79,31);     //第2行反白:贪吃蛇
                                break;               //返回第一行
//                                case 4: a = 0;break;
                        }               
                        a++;
                        if(a>=4)
                                a=0;
//                        while(1);     
                }
        }        
}





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1