搜索
bottom↓
回复: 13

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

[复制链接]

出0入0汤圆

发表于 2015-8-25 00:16:40 | 显示全部楼层 |阅读模式
本帖最后由 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连续在闪烁呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
头像被屏蔽

出0入0汤圆

发表于 2015-8-25 00:44:31 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2015-8-25 12:30:56 | 显示全部楼层
armok 发表于 2015-8-25 00:44
“求助各位大神”不是合格的标题。

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

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

出0入0汤圆

 楼主| 发表于 2015-8-25 12:32:12 | 显示全部楼层
本帖最后由 ZhangFei1990//. 于 2015-8-25 20:26 编辑
jackrich 发表于 2015-8-25 09:05
最直观的方法就是仿真调试,在LED反转处设断点,查看各参数是否预期,从而逐步查错及排除,这样印象最深刻 ...


CVAVR好像不能仿真调试!

出0入8汤圆

发表于 2015-8-25 20:01:03 来自手机 | 显示全部楼层
兄弟,赶紧改标题啊。

出0入0汤圆

发表于 2015-9-4 13:46:06 | 显示全部楼层
定时器初始化在哪里?

出0入0汤圆

发表于 2015-9-4 14:59:18 来自手机 | 显示全部楼层
  if(key_press=0x13)改为if(key_press==0x13)

出0入0汤圆

发表于 2015-9-4 20:18:32 | 显示全部楼层
楼上正解,是基本的语法问题

出0入0汤圆

 楼主| 发表于 2015-9-4 20:20:33 | 显示全部楼层
minier 发表于 2015-9-4 20:18
楼上正解,是基本的语法问题

哪里的问题?

出0入0汤圆

发表于 2015-9-5 12:21:48 来自手机 | 显示全部楼层
ZhangFei1990//. 发表于 2015-9-4 20:20
哪里的问题?

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

出0入0汤圆

 楼主| 发表于 2015-9-5 12:37:11 | 显示全部楼层
rundream 发表于 2015-9-5 12:21
兄台把判定语句,些成了赋值语句。

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

出0入0汤圆

发表于 2015-9-5 14:41:22 来自手机 | 显示全部楼层
ZhangFei1990//. 发表于 2015-9-5 12:37
哦哦  知道了,只是编译的时候不知道为什么不提示!!

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

出0入0汤圆

 楼主| 发表于 2015-9-6 15:24:10 | 显示全部楼层
rundream 发表于 2015-9-5 14:41
兄台,这种错误编译器不提示的。
这类错误很常见,细心核对就好了。

谢谢,下次得仔细检测了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 12:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表