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

简介: 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------读取整个输出数据寄存器


相关文章
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
398 4
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1567 29
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
数据采集 JavaScript API
网页解析库:BeautifulSoup与Cheerio的选择
网页解析库:BeautifulSoup与Cheerio的选择
|
SQL Oracle 关系型数据库
SQL整库导出语录:全面解析与高效执行策略
在数据库管理和维护过程中,整库导出是一项常见的需求,无论是为了备份、迁移还是数据分析,掌握如何高效、准确地导出整个数据库至关重要
stm32学习 3-2 LED流水灯
stm32学习 3-2 LED流水灯
290 4
stm32学习3-1 LED闪烁
stm32学习3-1 LED闪烁
230 4
|
前端开发 JavaScript
pyquery:一个灵活方便的 HTML 解析库
pyquery:一个灵活方便的 HTML 解析库
271 1
|
XML JSON 网络协议
超级好用的C++实用库之字节流解析器
超级好用的C++实用库之字节流解析器
316 3
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
499 3

推荐镜像

更多
  • DNS