预备
概述
中断是嵌入式中断的灵魂,使用中断可以避免不必要的软件等待,以及实现多任务的同步执行,中断分为看门口,定时器中断,串口中断,外部中断等,今天我们会说最简单的外部中断,同时也会提到电平触发,沿触发,中断分组等基本概念。触发外部中断最简单的方式就是使用按键,所以我们还会讲到如何进行最基本的输入。 我对同学们的要求依然是会使用,会改代码即可。
按键输入
本来准备说一下矩阵按键的输入,但是在如今,大家都会发现有一个趋势,那就是触摸屏输入取代了传统的多按键输入,所以在此我不准备说矩阵按键的操作,有兴趣的同学们可以自行查询资料,之后遇到类似的应用场景我们将使用触摸屏取而代之。
key.c
正点原子的按键代码包括了支持连按
和不支持连按
两种模式,但是我个人觉得没有什么必要,此外我们仅仅使用一个按键,更多按键同学们照葫芦画瓢就可以。修改后的代码如下。
#include "key.h"
#include "delay.h"
//PC5 设置成输入
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//PORTC时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试,有可能是因为引脚被占用
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PC5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入,输入都默认设置为上拉
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC5
}
u8 KEY_Scan(u8 mode)
{
if(KEY0==0)
{
delay_ms(10);//去抖动
if(KEY0==0)return 1;