key.h文件的代码与led.h类似,首先是条件编译伪指令,之后是GPIO的初始化函数与按键扫描函数的声明。程序代码如下:
按键驱动代码在key.c文件内编写,与key.h相呼应,首先是按键的初始化函数,之后是按键扫描函数。程序代码如下:
1.KEY-GPIO-Config()函数
我们首先看KEY_GPIO_Config()函数。GPIO初始化函数与led.c初始化函数类似,步骤也一模一样。
第一步,开启GPIO时钟。由于按键一个接在PA0,另一个接在PC13,涉及GPIOA与GPIOC,即要打开两组GPIO的时钟,可以使用RCC_AHB1PeriphClockCmd函数一次性打开,具体方法如下:
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOC,ENABLE);
这里使用一个或运算“|”,将RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOC作为第一个实参,同时打开两个总线时钟。
第二步,建立GPIO初始化结构体:
GPIO_InitTypeDef GPIO_InitStruct;
第三步,配置GPIO结构体的成员:
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;(www.xing528.com)
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
第四步,使用初始化函数对PA0进行初始化:
GPIO_Init(GPIOA,& GPIO_InitStruct);
完成了PA0初始化后继续完成PC13的初始化,省略前两步,同样执行第三步,配置结构体成员:
由于都是配置GPIO输入,PC13与PA0的MODER与PUPDR配置一样,相同配置的语句可以不必重复。
第五步,对PC13初始化:
GPIO_Init(GPIOC,& GPIO_InitStruct);
至此,PAO与PC13初始化完成。
2.KEY-Scan(GPIO-TypeDef*GPIOx,uint16-t GPIO-Pin)函数
按键扫描函数主要用于扫描按键状态,把扫描结果返回给函数调用者。返回值是无符号字符型变量,有GPIOx与GPIO_Pin两个形参,分别代表GPIO组与引脚号。
函数首先使用if语句对GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)进行判断,如果是KEY_ON(已经宏定义,相当于1),说明按键被按下,则使用延时函数,执行软件去抖处理,然后使用While语句等待按键松开,当按键松开后返回KEY_ON;如果按键未被按下,返回KEY_OFF(宏定义为0)。函数的返回值是无符号字符型变量。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。