开发者学堂课程【嵌入式之RFID开发与应用2020版:按键中断演示】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/665/detail/11157
按键中断演示
接下来就给大家演示一下,首先要明确的是代码里面增加了几个文件,在APP里面把新增加的文件再追加进来,除了main文件,还增加了一下几个文件,添加完后关闭。
除此之外,lib之前只是单纯的jbl操作,现在用到了扩函数,用到了中断,所以还需要在library里面找到有关中断的,misc属于中断,外部中断exti也是,就这两个文件添加进去。然后再点击ok,重新编译一下。
编译通过,代码多一点,下载的时间也稍微长一点。接下来打开视频,还是之前的代码,还是之前的蜂鸣器,先复位一下,唯一不同的就是现在是中断起作用。而且这里是常亮的,常鸣。
按一下,按一下亮,按一下灭,这是中断的演示。
接下来再看一下代码,led-flick,代码上要么是on,要么是off,并不是滴滴声。
代码如下:
LED_XXX_OFF();
//初始化结束熄灭LED}
void led flicker(void){
if(led_flag == 1){
led_flag = 0; LED_XXX_ON();
else{
led_flag = 1; LED_XXX_OFF();
void buzzer_init(void)
因为这个地方只检测了on的时候
While(1){
If(get_key_status()){
就是按下去了的时候检测,抬起来的时候检测不了,如果要坚持抬起来的时候,就要设置双源触发,就要把代码改一下。把上面的触发方式改成下面的触发方式
代码如下:
EXTI Trigger Rising_Falling = 0x10
让它变成双源触发。双元触发就意味着按下去会检测一次,抬起来也会检测一次,如果按下去也会等于一,但是抬起来不会等于一,这就出现问题了。
代码如下:
EXTI1_IRQHandler(void)
f(EXTI_GetITstatus(GPIO XXX KEY LINE)!= RESET)
delay_ms(KEY_SHAKE);//
去抖
if(XXX_KEY_STATUS_GET()== 1){
key_status = 1;
SET_BUZZER_FLICKER(5);
EXTI ClearITPendingBit(GPIO XXX KEY LINE);
判断和去抖在这里就会变得非常尴尬,按下去要设置为1,抬起来也要设置成1,这里判断就会显得非常多余。可以把这个判断去掉如果加上判断,抬起来就是不执行的,就没有意义。编写一下,此时的现象可以推测一下,按一下蜂鸣器就响,就可以灯亮,一旦松开就不亮了。现在按下去松开,按下去不松,松开没有起作用,是因为去抖没有起作用。
去抖没有起作用,就会导致明明是按下去了,但是还是会弹起来,所以如果用双源触发这里就要修改一下。
那么不管使用什么方式,建议自行尝试一下。以上为按键中断的演示。