STM32
直播中

李宛蔓

7年用户 981经验值
私信 关注
[问答]

基于mini板的程序是如何去完成按键控制LED的功能呢

基于mini板的程序是如何去完成按键控制LED的功能呢?有哪些步骤?

回帖(1)

李娜

2021-11-16 15:03:47
0.前言
基于正点原子mini板的程序设计,完成按键控制LED的功能。
在STM32F103实验一:点亮LED灯的基础下(已经建立好led.h和led.c文件),添加头文件key.h和源文件key.c到HARDWARE文件夹下。
1.原理图参照:

3.程序开发思路:
编写头文件key.h,声明相关调用和函数
在key.c文件中编写按键初始化函数
在key.c中编写按键检测函数
在主函数main()中编写按键控制led的程序
3.1编写key.h文件
#ifndef __KEY_H_
#define __KEY_H_
#include “stm32f10x.h”
#include “sys.h”
//声明按键返回值
#define KEY_0 1
#define KEY_1 2
#define WK_UP 3
//声明按键引脚
#define key_0 PCin(5)
#define key_1 PAin(15)
#define wk_up PAin(0)
void KEY_Init(void);
u8 KEY_Scan(void);
#endif
3.2编写key.c文件
#include “key.h”
#include “delay.h”
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);
//WK_UP初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //下拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//KEY_1初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//KEY_0初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //上拉输入
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
//按键扫描函数
u8 KEY_Scan()
{
if(wk_up){
delay_ms(10);
if(wk_up){
while(wk_up);
return WK_UP;
}
}
if(!key_1){
delay_ms(10);
if(!key_1){
while(!key_1);
return KEY_1;
}
}
if(!key_0){
delay_ms(10);
if(!key_0){
while(!key_0);
return KEY_0;
}
}
return 0;//默认返回值
}
3.3编写主函数main()
#include “stm32f10x.h”
#include “led.h”
#include “delay.h”
#include “key.h”
int main(void)
{
u8 key;
LED_Init();
KEY_Init();
delay_init();
while(1){
key = KEY_Scan();
switch(key){
case KEY_0: LED0=!LED0 ; break;
case KEY_1: LED1=!LED1 ; break;
case WK_UP: LED1=!LED1, LED0=!LED0; break;
}
}
}
3.4效果
按下KEY_0键后,LED0的状态反转,按下KEY_1键后,LED1的状态反转,按下WK_UP后,LED0和LED1的状态都反转。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分