本帖最后由 hu9jj 于 2020-8-19 17:48 编辑
之前测试过按键的轮询方式,继而自然要测试按键的中断方式。从原理图上可以看出是键按下时引脚为低电平:
配置MCC时在引脚管理中选择下降沿触发:
生成代码之后,在pin_manager.c文件中可以指定中断处理的函数,我使用默认的,未作修改:
在中断处理函数中写上代码:
首先延时20ms,再读取PC7的电平。为了防止重复进入按键处理,我设置了一个keyok的标志,只有keyok=0时才接收按键,接收按键后标志置1,然后在主循环中处理按键,处理之后又将标志归0,以便可以接收下次按键,代码如下:
while (1){
ms++;
if(ms > wait){
LED_Y_Toggle();
ms = 0;
}
if(1 == keyok){
wait <<= 1;
if(wait > 40000)
wait = 2000;
keyok = 0;
keys = 0;
}
上述的步骤貌似没有问题,原来设想是每按一次按键就将wait变量翻倍,以达到改变LED闪烁时间的效果。可是编译下载之后,没有按键动作,LED灯却自动改变闪烁频率并周期性变化,如同按下按键一般。反复检查了多次,没有发现问题所在,本次测试又没有成功。
2020.08.19
在大家的热心帮助下,参照了6楼的代码,按键中断方式的问题已经解决,测试通过了,详见8楼。
|