STM32独立按键控制LED亮灭---软键篇(内置代码+注释解析+部分库函数代码)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: STM32独立按键控制LED亮灭---软键篇(内置代码+注释解析+部分库函数代码)

1.LED独立按键代码部分:

a:LED.c代码


#include "stm32f10x.h" // Device header
void LED_Init(void)//LED初始化函数
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2);//此行代码是使默认变为高电平,灯不亮的情况
}
void LED1_ON(void)//打开LED1
{
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}
void LED1_OFF(void)//关闭LED1
{
GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
void LED2_ON(void)//打开LED2
{
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}
void LED2_OFF(void)//关闭LED2
{
GPIO_SetBits(GPIOA,GPIO_Pin_2);
}
void LED1_Turn(void)//反转GPIO按键,按下LED1熄灭,再按点亮
{
if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)==0)//如果GPIO输出0,
{
GPIO_SetBits(GPIOA,GPIO_Pin_1);//则使用SetBits使之变为1
}
else//如果GPIO输出1,
{
GPIO_ResetBits(GPIOA,GPIO_Pin_1);//则使用SetBits使之变为0
}
}
void LED2_Turn(void)//反转GPIO按键,按下LED2熄灭,再按点亮
{
if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)==0)//如果GPIO输出0,
{
GPIO_SetBits(GPIOA,GPIO_Pin_2);//则使用SetBits使之变为1
}
else//如果GPIO输出1,
{
GPIO_ResetBits(GPIOA,GPIO_Pin_2);//则使用SetBits使之变为0
}
}

c376b21092d8418f8bbbe7cfebe5f2e4.png

fcea2f7812ff4261a65b8e4f2c687713.png


b:LED.h代码


#ifndef __LED_H
#define __LED_H
void LED_Init(void);
void LED1_ON(void);//按下点亮,再按熄灭
void LED1_OFF(void);
void LED1_Turn(void);//反转LED1,按下熄灭,再按点亮
void LED2_ON(void);//按下点亮,再按熄灭
void LED2_OFF(void);
void LED2_Turn(void);//反转LED2,按下熄灭,再按点亮
#endif

007560697fd0428e99fc5472e7ae9a38.png


2.独立按键Key代码部分:

a:key.c部分


#include "stm32f10x.h" // Device header
#include "Delay.h"
void Key_Init(void)//初始化按键
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//按键连接在GPIOB上,使能管脚
GPIO_InitTypeDef GPIO_InitStucture;
GPIO_InitStucture.GPIO_Mode=GPIO_Mode_IPU;//读取按键需要上拉输入,GPIO_Mode_IPU
GPIO_InitStucture.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_11;//接在GPIO1和GPIO11
GPIO_InitStucture.GPIO_Speed=GPIO_Speed_50MHz;//GPIO的输出速度(输入速度没用)
GPIO_Init(GPIOB,&GPIO_InitStucture);
}
uint8_t Key_GetNum(void)//独立按键---1管脚的控制---按下点亮,再按,熄灭
{
uint8_t Key_Num=0;
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0)
{
Delay_ms(20);
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0);
Delay_ms(20);
Key_Num=1;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)//独立按键---11管脚的控制---按下点亮,再按,熄灭
{
Delay_ms(20);
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0);
Delay_ms(20);
Key_Num=2;
}
return Key_Num;
}

34a0a1e0253541a4a9020d92f13dcdf9.png


b:Key.h部分


#ifndef __Key_H
#define __Key_H
void Key_Init(void);
uint8_t Key_GetNum(void);
#endif

907b3db12c8449219249f73676e6cfc3.png


3.主函数main代码部分:


#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"
int main(void)
{
uint8_t KeyNum=0;
LED_Init();//初始化LED之后灯就亮了,说明默认为低电平
Key_Init();//初始化按键
while(1)
{
KeyNum=Key_GetNum();
if(KeyNum==1)
LED1_Turn();//按键按下,LED1熄灭点亮
if(KeyNum==2)
LED2_Turn();//按键松开,LED1熄灭
}
}

d563fd8713334a428bedffff3991fc22.png


4.部分库函数补充:


//注:


//GPIO_ReadInputDataBit---读取输入数据寄存器的某一位(第二个参数)


//GPIO_ReadInputData------读取整个输入数据寄存器


//GPIO_ReadOutputDataBit--读取输入数据寄存器的某一位


//GPIO_ReadOutputData------读取整个输出数据寄存器


相关文章
|
2月前
|
存储 前端开发 JavaScript
前端基础(十二)_函数高级、全局变量和局部变量、 预解析(变量提升)、函数返回值
本文介绍了JavaScript中作用域的概念,包括全局变量和局部变量的区别,预解析机制(变量提升),以及函数返回值的使用和类型。通过具体示例讲解了变量的作用域、函数的返回值、以及如何通过return关键字从函数中返回数据。
22 1
前端基础(十二)_函数高级、全局变量和局部变量、 预解析(变量提升)、函数返回值
|
1月前
|
存储
atoi函数解析以及自定义类型经典练习题
atoi函数解析以及自定义类型经典练习题
28 0
|
1月前
|
数据处理 Python
深入探索:Python中的并发编程新纪元——协程与异步函数解析
深入探索:Python中的并发编程新纪元——协程与异步函数解析
26 3
|
1月前
stm32学习 3-2 LED流水灯
stm32学习 3-2 LED流水灯
69 4
|
1月前
stm32学习3-1 LED闪烁
stm32学习3-1 LED闪烁
34 4
|
1月前
|
机器学习/深度学习 算法 C语言
【Python】Math--数学函数(详细附解析~)
【Python】Math--数学函数(详细附解析~)
|
2月前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与应用在软件开发的浩瀚海洋中,PHP以其独特的魅力和强大的功能吸引了无数开发者。作为一门历史悠久且广泛应用的编程语言,PHP不仅拥有丰富的内置函数和扩展库,还支持面向对象编程(OOP),为开发者提供了灵活而强大的工具集。在PHP的众多特性中,设计模式的应用尤为引人注目,它们如同精雕细琢的宝石,镶嵌在代码的肌理之中,让程序更加优雅、高效且易于维护。今天,我们就来深入探讨PHP中使用频率颇高的一种设计模式——策略模式。
本文旨在深入探讨PHP中的策略模式,从定义到实现,再到应用场景,全面剖析其在PHP编程中的应用价值。策略模式作为一种行为型设计模式,允许在运行时根据不同情况选择不同的算法或行为,极大地提高了代码的灵活性和可维护性。通过实例分析,本文将展示如何在PHP项目中有效利用策略模式来解决实际问题,并提升代码质量。
|
3月前
|
SQL 数据处理 数据库
|
3月前
|
SQL 关系型数据库 数据处理
|
5月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
423 2

推荐镜像

更多