问题描述: 按动key_0按键,跑马灯亮,再按一次。跑马灯灭。
解题思路; 每一次按key_0键。触发中断。中断要做的事就是变量+1.
然后主函数中判断变量的奇偶性。选择停止还是继续。
我觉得自己的思路没有问题啊。老师也说很简单。但是对菜鸟来说真的会出问题。
前边不是刚学过串口吗?那里边好像有个buffer在中断中出现过,也在主函数中出现过。抄抄那个应该没问题。可是。。。。。。。
出现问题;写了半天一直出现问题。buffer[]一直显示为声明什么的。提示错误。弄半天忘复制.h了。总之是编译过了。 已经快疯了。
然后又来调试。发现中断后处理的数据返回的不对。进不到if里。退而求其次按一次按键LED1转变一次状态。结果还是不行。
这是中断
void EXTI4_IRQHandler(void)
{ int t=0;
delay_ms(10);
if(KEY0==0)
{ t++;
b[1]=t;
}
EXTI_ClearITPendingBit(EXTI_Line4);
}
这是主函数
n=0;
while(1)
{
if(n==0)
{LED1=!LED1;
n=b[1];
}
if(n==1)
{LED1=!LED1;
n=b[1];
}
if(n==2)
{LED1=!LED1;
n=b[1];
}
}
为什么要这样写。因为stlink调试不会用。不知道中断怎样进中断看值。
然后单步执行发现按键后连第二个if都进不去。。。
如果这个都执行不了的话。那跑马灯更执行不了了,因为没办法判断返回来的值。
一个人学代码好难啊。没人讨论。求教。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
对的。每次中断过来都是0。忘记了,没写过多少行代码。错误比较多。谢谢您。
主函数只把重要的贴了。前边的定义。初始化没贴
不是左键吗?想一步一步跟踪看下去。比如走到判断之前按一下键。怎么走到中断里边去看
问题已经解决了。static这里真的错了。
主程序里是自己逻辑不清楚。
手动跑了一遍知道哪里错了。谢谢各位!
没想到这么多人回复哈。虽然是小问题。
但是一个人想真的会疯掉。新手。上学的时候就没写过多少代码。
stlink调试器还是不太会用。如果原子哥能出个视频,领着调试几个程序。完全走一边就更好了。再次谢谢大家。
一周热门 更多>