求问:我把按键例程改了两句后按键就不灵敏了

2019-10-14 22:27发布

  下面是原代码和我改了两句的代码,除了main函数不一样其他地方如KEY_Scan(u8 mode)都没改,但下载后无论是按哪个按键都时好时坏,按下去几下或者十几下可能才会有反应(体现在lcd屏上数值的变化),这是什么情况?
  谢谢。

这是例程的代码:
        while(1)
        {
                key=KEY_Scan(0);
                   if(key)
                {                                                  
                        switch(key)
                        {                                 
                                case WKUP_PRES:
                                        BEEP=!BEEP;
                                        break;
                                case KEY1_PRES:
                                        LED1=!LED1;
                                        break;
                                case KEY0_PRES:
                                        LED0=!LED0;
                                        LED1=!LED1;
                                        break;
                        }
                }else delay_ms(10);
        }         

这是我改写的代码:
while(1)
{
   key=KEY_Scan(0);
   if(key)
   {                                                  
      switch(key)
     {                                 
        case KEY1_PRES:                 
          count=count+1;
        break;
        case KEY0_PRES:       
          count=count+10;
        break;
       }
        LCD_ShowNum(50,60,count,8,24);
               
        }else delay_ms(10);                
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
正正杨
1楼-- · 2019-10-15 03:01
最后的问题时还是因为我的代码问题,我在KEY_Init()中没有初始化WK_UP(则默认为0),但是在KEY_Scan()中我是用的例程里一模一样的写法
u8 KEY_Scan(u8 mode)
{         
        static u8 key_up=1;
        if(mode)key_up=1;                   
        if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
        {
                delay_ms(10);
                key_up=0;
                if(KEY0==0)return KEY0_PRES;
                else if(KEY1==0)return KEY1_PRES;
                else if(WK_UP==1)return WKUP_PRES;
        }else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1; //问题在这我改成if(KEY0==1&&KEY1==1&&WK_UP==1)key_up=1;     
        return 0;
}

谢谢各位的帮助
BMN李
2楼-- · 2019-10-15 06:01
因为你加了个LCD显示。按键是轮询的,在处理LCD_ShowNum(50,60,count,8,24);这个的时候,你按键就不灵了。
正正杨
3楼-- · 2019-10-15 06:56
BMN李 发表于 2017-2-28 09:50
因为你加了个LCD显示。按键是轮询的,在处理LCD_ShowNum(50,60,count,8,24);这个的时候,你按键就不灵了。

那该怎么写?
BMN李
4楼-- · 2019-10-15 09:37
正正杨 发表于 2017-2-28 09:52
那该怎么写?

用中断扫描按键咯。
sodermalm
5楼-- · 2019-10-15 15:24
 精彩回答 2  元偷偷看……
正正杨
6楼-- · 2019-10-15 19:55
BMN李 发表于 2017-2-28 09:54
用中断扫描按键咯。

我按你说的 LCD那个思路写成这样了
if(key)
                {                                                  
                        switch(key)
                        {       
                                case WKUP_PRES:       
                                        LED1=!LED1;
                                        break;                                
                                case KEY1_PRES:                 
                                        count=count+1;
                                LCD_ShowNum(50,60,count,8,24);
                                        break;
                                case KEY0_PRES:       
                                        count=count+10;
                                LCD_ShowNum(50,60,count,8,24);
                                        break;
                        }
但是那个亮灯的按键依旧不灵敏,这又是为啥?

一周热门 更多>