ZhangFei1990//. 发表于 2015-8-25 00:16:40

AVR按键控制LED反转,结果为什么出现异常导致LED闪烁?

本帖最后由 ZhangFei1990//. 于 2015-8-25 20:29 编辑

uchar read_key(void)
{
    static uchar key_state=0;
    uchar key_press,key_return=0;
   
    key_press = key_input;
   switch (key_state)
   {
      case key_state0:
               
                        if(key_press!=0x13)
                        {   
                                key_state = key_state1;
                }
            break;
      case key_state1:
            if(key_press!=0x13)
            {   
                key_state = key_state2;   
                switch(key_press)   //确定按键已经按下的信号
                {   
                   case 0x03:         
                   key_return=3; break;//key3
                   case 0x11:
                   key_return=2; break;//key2
                   case 0x12:
                   key_return=1; break;//key1
                }
                        
                        }
                        else key_state = key_state0;               
                        break;
                case key_state2:
                        if(key_press=0x13)
                        {   
                                key_state = key_state0;
                        }
            else key_state=key_state2;
                        break;
        }
        return key_return;
}

void key_control(uchar key_num)
{
   uchar camera_flag=0;
   switch(key_num)
   {
      case 1: camera_flag=1;PORTB.1=~PORTB.1;PORTB.2=~PORTB.2;break; //LED取反
      case 2:PORTB.1=~PORTB.1;break;
      case 3:PORTB.2=~PORTB.2;break;      
   }
}

void main(void)
{      
    DDRB=0xff;
    PORTB=0xff;
    Init();
    while (1);
      {   
         if(timer_10ms_ok)
         {   
            timer_10ms_ok=0;
            key_control(read_key());                                                            
         }
      }                  
}

程序的本意是按键按一次LED反转一次,,但是实际情况为什么是按键按一次LED连续在闪烁呢?

armok 发表于 2015-8-25 00:44:31

jackrich 发表于 2015-8-25 09:05:58

最直观的方法就是仿真调试,在LED反转处设断点,查看各参数是否预期,从而逐步查错及排除,这样印象最深刻!

ZhangFei1990//. 发表于 2015-8-25 12:30:56

armok 发表于 2015-8-25 00:44
“求助各位大神”不是合格的标题。

版规1.发表主题帖子时,标题不能充分说明帖子的内容(即标题不合格), ...

新人报道不好意思,下次一定注意!

ZhangFei1990//. 发表于 2015-8-25 12:32:12

按键控制LED反转,结果却出现异常,导致LED一直闪烁??

本帖最后由 ZhangFei1990//. 于 2015-8-25 20:26 编辑

jackrich 发表于 2015-8-25 09:05
最直观的方法就是仿真调试,在LED反转处设断点,查看各参数是否预期,从而逐步查错及排除,这样印象最深刻 ...

CVAVR好像不能仿真调试!

tongdayusu 发表于 2015-8-25 20:01:03

兄弟,赶紧改标题啊。

rundream 发表于 2015-9-4 13:46:06

定时器初始化在哪里?

rundream 发表于 2015-9-4 14:59:18

if(key_press=0x13)改为if(key_press==0x13)

minier 发表于 2015-9-4 20:18:32

楼上正解,是基本的语法问题

ZhangFei1990//. 发表于 2015-9-4 20:20:33

minier 发表于 2015-9-4 20:18
楼上正解,是基本的语法问题

哪里的问题?

rundream 发表于 2015-9-5 12:21:48

ZhangFei1990//. 发表于 2015-9-4 20:20
哪里的问题?

兄台把判定语句,些成了赋值语句。

ZhangFei1990//. 发表于 2015-9-5 12:37:11

rundream 发表于 2015-9-5 12:21
兄台把判定语句,些成了赋值语句。

哦哦知道了,只是编译的时候不知道为什么不提示!!

rundream 发表于 2015-9-5 14:41:22

ZhangFei1990//. 发表于 2015-9-5 12:37
哦哦知道了,只是编译的时候不知道为什么不提示!!

兄台,这种错误编译器不提示的。
这类错误很常见,细心核对就好了。

ZhangFei1990//. 发表于 2015-9-6 15:24:10

rundream 发表于 2015-9-5 14:41
兄台,这种错误编译器不提示的。
这类错误很常见,细心核对就好了。

谢谢,下次得仔细检测了!
页: [1]
查看完整版本: AVR按键控制LED反转,结果为什么出现异常导致LED闪烁?