野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20241|回复: 9

按键和led灯的故事

[复制链接]
发表于 2014-7-15 23:50:04 | 显示全部楼层 |阅读模式
大神们好,小弟刚刚学stm32,在学到按键的时候,想用不同按键按下显示不同led灯的变化。比如说,按下按键1,显示流水灯,按键2,显示二进制流水灯。但是啊,怎么让它一按就变化呢。我发现是要等到for语句之后,才能按其他按键。给跪了,想不懂。附上程序图,希望各位大大给点提示。
QQ截图20140715234644.png
QQ截图20140715234708.png
QQ截图20140715234746.png
QQ截图20140715234757.png
回复

使用道具 举报

发表于 2014-7-15 23:55:52 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-16 08:55:51 | 显示全部楼层
顶起来啊
回复 支持 反对

使用道具 举报

发表于 2014-7-16 09:41:34 | 显示全部楼层
会散步的鱼 发表于 2014-7-16 08:55
顶起来啊

按键使用中断,在中断里设置标志位,for循环的时候检测标志位
回复 支持 反对

使用道具 举报

发表于 2014-7-16 11:05:45 | 显示全部楼层
你直接按键进入中断啊,建议你先学会中断,那样的话就很简单了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-16 23:09:53 | 显示全部楼层
恩,谢谢大家,我用中断弄出来了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-17 00:12:07 | 显示全部楼层
如下面这个函数所示,我发现在按下按键1,即EXTI_line11,的时候,虽然EXTI_line11的标志位清除了,但是还是会运行EXTI_line12,而10到15的中断向量名就只有它,那怎么办呢?

void EXTI15_10_IRQHandler(void)
{
        uint8_t count=0,value=0,value_a=0,value_b=0;
        if(EXTI_GetITStatus(EXTI_Line11) != RESET) //确保是否产生了EXTI Line中断
        {
                  for(count=0;count<3;count++)
                                   {
                                           LED_Sets(0xff);
                                        Delay(10);
                                        LED_Sets(0x00);
                                        Delay(10);
                                   }
                EXTI_ClearITPendingBit(EXTI_Line11);     //清除中断标志位
        }
        if(EXTI_GetITStatus(EXTI_Line12) != RESET) //确保是否产生了EXTI Line中断
        {
                  value_a=0x01;value_b=0x80;
                                   for(count=0;count<8;count++)
                                   {       
                                                   LED_Sets(value);
                                                value_a<<=1;
                                                value_b>>=1;
                                                value=value_a|value_b;
                                                Delay(10);               
                                   }
                EXTI_ClearITPendingBit(EXTI_Line12);     //清除中断标志位
        }
       
}

回复 支持 反对

使用道具 举报

发表于 2014-7-17 15:36:56 | 显示全部楼层
111xian 发表于 2014-7-15 23:55
走过路过,不能错过

好像哪里都能见到你!!!
回复 支持 反对

使用道具 举报

发表于 2014-8-12 15:57:52 | 显示全部楼层
不能用 switch 语句么?
回复 支持 反对

使用道具 举报

发表于 2014-8-14 06:33:35 来自手机 | 显示全部楼层
可是为什么上面的switch语句不可以呢,求教
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-26 01:00 , Processed in 0.044912 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表