再次被跑马灯虐到。请教!

2019-07-20 22:54发布

问题描述:        按动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都进不去。。。
如果这个都执行不了的话。那跑马灯更执行不了了,因为没办法判断返回来的值。





一个人学代码好难啊。没人讨论。求教。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
jpf487424
1楼-- · 2019-07-21 03:24
 精彩回答 2  元偷偷看……
xuande
2楼-- · 2019-07-21 03:27
 精彩回答 2  元偷偷看……
jpf487424
3楼-- · 2019-07-21 07:01
你写的好像啥也不是啊再往下看
xuande
4楼-- · 2019-07-21 10:07
本帖最后由 xuande 于 2016-4-13 11:11 编辑

首先,t应当定义为全局变量,
但贴出来的程序看不到这一点。

xuande
5楼-- · 2019-07-21 12:01
本帖最后由 xuande 于 2016-4-13 11:12 编辑

最关键的是,
按键即使只按一下,波形也有巨多毛刺,不会是很漂亮的方波。

程序中虽然加了10ms延时,但延时之后还会有毛刺,
按一下,可能已经进了n次中断了!
有处理吗?






xuande
6楼-- · 2019-07-21 12:57
 精彩回答 2  元偷偷看……

一周热门 更多>