STM32F4之按键(二)

2023-11-01 130浏览
百检网是一家专业的第三方检测平台,汇聚众多拥有权威资质的第三方检测机构为你提供一站式的检测服务,做检测就上百检网。百检网让检测从此检测,一份报告全国通用,专业值得信赖。

STM32寄存器模式实现按键控制LED灯的状态

使用正点原子的开源代码,保证了程序的简洁性和可读性。

key.h文件:

#ifndef __KEY__HH__

#define __KEY__HH__

#include "sys.h"

//KEY端口初始化

#define KEY0PHin(3)

#define KEY1PHin(2)

#define KEY2PCin(13)

#define WK_UPPAin(0)

//声明动作宏

#define KEY0_PRES1//KEY0按下

#define KEY1_PRES2//KEY1按下

#define KEY2_PRES3//KEY2按下

#define WKUP_PRES4//KEY_UP按下

//函数声明

void KEY_Init(void);

u8KEY_Scan(u8);

#endif

key.c文件:

#include "key.h"

#include "delay.h"

void KEY_Init(void)

{

//使能时钟 PORTA、PORTC、 PORTH

RCC -> AHB1ENR |= 1 << 0;//A是首位

RCC -> AHB1ENR |= 1 << 2;//C是三位

RCC -> AHB1ENR |= 1 << 7;

//设置GPIOx模式 GPIOA、GPIOC、GPIOH

GPIO_Set(GPIOA, PIN0, GPIO_MODE_IN, GPIO_OTYPE_PP, GPIO_SPEED_2M, GPIO_PUPD_PD);

GPIO_Set(GPIOC, PIN13, GPIO_MODE_IN, GPIO_OTYPE_PP, GPIO_SPEED_2M, GPIO_PUPD_PU);

GPIO_Set(GPIOH, PIN2|PIN3, GPIO_MODE_IN, GPIO_OTYPE_PP, GPIO_SPEED_2M, GPIO_PUPD_PU);

}

//按键扫描函数

u8KEY_Scan(u8 mode)

{

//定义按键松开标志

static u8 key_up = 1;

//连按模式支持

if(mode)

{

key_up = 1;

}

if(key_up && (0 == KEY0 | 0 == KEY1 | 0 == KEY2 | 1 == WK_UP))

{

//去抖动

delay_ms(10);

key_up = 0;

if(0 == KEY0)

{

return 1;

}

else if(0 == KEY1)

{

return 2;

}

else if(0 == KEY2)

{

return 3;

}

else if(1 == WK_UP)

{

return 4;

}

}

else if(1 == KEY0 | 1 == KEY1 | 1 == KEY2 | 0 == WK_UP)

{

key_up = 1;

}

return 0;

}

main.c文件:

#include "sys.h"

#include "delay.h"

#include "key.h"

#include "led.h"

int main(void)

{

//定义键值变量

u8 key;

//设置时钟

Stm32_Clock_Init(360, 25, 2, 8);

//初始化延时函数

delay_init(180);

//初始化LED

LED_Init();

//初始化KEY

KEY_Init();

//点亮LED0

LED0 = 0;

while(1)

{

//得到键值

key = KEY_Scan(0);

if(key)

{

switch (key)

{

case WKUP_PRES:

LED1 = !LED1;

LED0 = !LED1;

break;

case KEY2_PRES:

LED1 = !LED1;

break;

case KEY1_PRES:

LED0 = !LED0;

break;

case KEY0_PRES:

LED1 = !LED1;

LED0 = !LED0;

break;

}

}

else

{

delay_init(10);

}

}

}


百检网秉承“客户至上,服务为先,精诚合作,以人为本”的经营理念,始终站在用户的角度解决问题,为客户提供“一站购物式”的新奇检测体验,打开网站,像挑选商品一样简单,方便。打破行业信息壁垒,建构消费和检测机构之间高效的沟通平台