Featured image of post 按键控制led

按键控制led

按键控制led

这次我们来实现用按键控制led
不带中断的方式
当然实例来源网络
加上自己整合
先熟悉流程

0.添加一个自己写的驱动库文件

为什么添加
笔者想的是一个项目工程希望能适应很多个应用场景需要什么直接在里面调用分装好的函数就行

1.如何添加文件以及编写驱动后编译

用之前案例讲到的实例工程添加一个Hardware文件夹 :

1.封装LED库函数

Led.C
引脚按需配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "stm32f10x.h"                  // Device header

// LED 初始化 
void LED_Init(void){

	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStruct);
	// 初始化 置1 
	GPIO_SetBits(GPIOC,GPIO_Pin_13);
}

void LED_ON(void){
	GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
void LED_OFF(void){
	GPIO_SetBits(GPIOC,GPIO_Pin_13);
}

// 高低电平反转 
void LED_Turn(void)
{
	if(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_13)==0)
	{
		GPIO_SetBits(GPIOC,GPIO_Pin_13);
	}
	else
	{
		GPIO_ResetBits(GPIOC,GPIO_Pin_13);
	}
}

Led.h

1
2
3
4
5
6
7
8
9
#ifndef __LED_H
#define __LED_H

void LED_Init(void);   // led 引脚初始化
void LED_ON(void);     // led 开
void LED_OFF(void);    // led 关
void LED_Turn(void);   // led 反转

#endif

2.封装Key函数库

和上步相同
Key.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "stm32f10x.h"                  // Device header
#include "Delay.h"

// 初始化接地按键
void Key_Init(void){
	GPIO_InitTypeDef  GPIO_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_12;
	
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	
	
}



uint8_t Key_GetNum(void){
	uint8_t Key_Num = 0;
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)== 0){
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)== 0);
		Delay_ms(20);
		Key_Num = 1;	
	}
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)== 0){
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)== 0);
		Delay_ms(20);
		Key_Num = 2;
	}


	return  Key_Num;
}

key.h

1
2
3
4
5
6
7
8
9
#ifndef __KEY_H
#define __KEY_H


void Key_Init(void);

uint8_t Key_GetNum(void);
		
#endif

编写功能需求

main.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"

uint8_t KeyNum;
uint8_t StaNum=0;
int main(void)
{
	LED_Init();
	Key_Init();
	
	while (1)
	{
		KeyNum = Key_GetNum();
		if (KeyNum == 1)
		{
			LED_Turn();
		}

	}
}

现象就是按一下按键led pc13状态反转一次

编译下载看现象

就是按一下按键led pc13状态反转一次

编译下载看现象

这里的项目配置不要出错

最后更新于 Mar 21, 2025 15:42 +0800
世界是你们
使用 Hugo 构建
主题 StackJimmy 设计