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连续在闪烁呢? 最直观的方法就是仿真调试,在LED反转处设断点,查看各参数是否预期,从而逐步查错及排除,这样印象最深刻! armok 发表于 2015-8-25 00:44
“求助各位大神”不是合格的标题。
版规1.发表主题帖子时,标题不能充分说明帖子的内容(即标题不合格), ...
新人报道不好意思,下次一定注意!
按键控制LED反转,结果却出现异常,导致LED一直闪烁??
本帖最后由 ZhangFei1990//. 于 2015-8-25 20:26 编辑jackrich 发表于 2015-8-25 09:05
最直观的方法就是仿真调试,在LED反转处设断点,查看各参数是否预期,从而逐步查错及排除,这样印象最深刻 ...
CVAVR好像不能仿真调试! 兄弟,赶紧改标题啊。 定时器初始化在哪里? if(key_press=0x13)改为if(key_press==0x13) 楼上正解,是基本的语法问题 minier 发表于 2015-9-4 20:18
楼上正解,是基本的语法问题
哪里的问题? ZhangFei1990//. 发表于 2015-9-4 20:20
哪里的问题?
兄台把判定语句,些成了赋值语句。 rundream 发表于 2015-9-5 12:21
兄台把判定语句,些成了赋值语句。
哦哦知道了,只是编译的时候不知道为什么不提示!! ZhangFei1990//. 发表于 2015-9-5 12:37
哦哦知道了,只是编译的时候不知道为什么不提示!!
兄台,这种错误编译器不提示的。
这类错误很常见,细心核对就好了。 rundream 发表于 2015-9-5 14:41
兄台,这种错误编译器不提示的。
这类错误很常见,细心核对就好了。
谢谢,下次得仔细检测了!
页:
[1]