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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 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------读取整个输出数据寄存器


相关文章
|
23天前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
18天前
|
C语言 开发者
【C语言】断言函数 -《深入解析C语言调试利器 !》
断言(assert)是一种调试工具,用于在程序运行时检查某些条件是否成立。如果条件不成立,断言会触发错误,并通常会终止程序的执行。断言有助于在开发和测试阶段捕捉逻辑错误。
27 5
|
17天前
|
PHP 开发者 容器
PHP命名空间深度解析:避免命名冲突与提升代码组织####
本文深入探讨了PHP中命名空间的概念、用途及最佳实践,揭示其在解决全局命名冲突、提高代码可维护性方面的重要性。通过生动实例和详尽分析,本文将帮助开发者有效利用命名空间来优化大型项目结构,确保代码的清晰与高效。 ####
18 1
|
25天前
|
机器学习/深度学习 存储 人工智能
强化学习与深度强化学习:深入解析与代码实现
本书《强化学习与深度强化学习:深入解析与代码实现》系统地介绍了强化学习的基本概念、经典算法及其在深度学习框架下的应用。从强化学习的基础理论出发,逐步深入到Q学习、SARSA等经典算法,再到DQN、Actor-Critic等深度强化学习方法,结合Python代码示例,帮助读者理解并实践这些先进的算法。书中还探讨了强化学习在无人驾驶、游戏AI等领域的应用及面临的挑战,为读者提供了丰富的理论知识和实战经验。
50 5
|
24天前
|
机器学习/深度学习 自然语言处理 语音技术
揭秘深度学习中的注意力机制:兼容性函数的深度解析
揭秘深度学习中的注意力机制:兼容性函数的深度解析
|
1月前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
128 10
|
1月前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
37 1
|
2月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
95 2
|
2月前
|
SQL 监控 关系型数据库
SQL错误代码1303解析与处理方法
在SQL编程和数据库管理中,遇到错误代码是常有的事,其中错误代码1303在不同数据库系统中可能代表不同的含义
|
6月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
472 2

推荐镜像

更多
下一篇
DataWorks