STM32实验 使用库函数的方法用按键控制一个LED灯的取反

2023-05-16

**

要求:当按键按下的时候,对LED的状态进行取反

装备:电脑,MDK5,STM32F103ZET6开发板,USB线

**
**

首先自己配置一个工程模板,如下所示**

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二步:电路图

在这里插入图片描述

第三步:写代码

主函数:

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"

 int main(void)
 {	

	delay_init(); //延时函数初始化
	Led_Init(); //LED初始化
	key_init(); //按键初始化
  
	while(1)
	{
		key1();	
	}//判断按键是否按下,按键按下所执行的程序
 }


按键函数:

#include "key.h"
#include "delay.h"
#include "led.h"

void key_init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO的结构体变量
 
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//开启GPIOE使能

	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2;//使用GPIOE.2引脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置GPIOE的工作模式为带上拉输入
 	GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE寄存器
}//按键初始化函数

void key1(void)
{
	 if(KEY1==0)//判断按键是否按下,如果按下则满足KEY1==0,否则继续判断按键是否按下
	 {
		 delay_ms(500);//按键消抖程序和防止按键是误触的
	 	 if(KEY1==0)//再次判断按键是否按下
		 {	
			LED1=!LED1;//如果按下则执行按键取反(利用逻辑取反)
		 } 		
	 }
	
}//按键按下所执行程序


LED初始化:

#include "led.h"
#include "stm32f10x.h"

void Led_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO的结构体变量
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//打开GPIOC的时钟
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//设置GPIOC的端口,使用GPIOC.1
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置工作速度为50MHz
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//普通推挽输出模式
	GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC寄存器
	
}//LED初始化函数


按键头文件:

#ifndef _key_
#define _key_

#include "sys.h"

#define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)//宏定义GPIOE.2

void key_init(void);
void key1(void);

#endif


LED头文件:

#ifndef _led_
#define _led_
#include "sys.h"

void Led_Init(void);

#define LED1 PCout(1)// LED1等价GPIOC.0

#endif

发现缺少一个延时函数,自己写喽。可以使定时器写,也可以是简单的一个计数器。这里就不多介绍。

第四步:结果
按键的时间得按久一些否则会有问题,主要还是消抖的问题。长按500ms就会出现取反,如果太快就会发现一些很神奇的现象,感觉会自闭的。

最后小小的总结一下:
利用库函数写一个简单的程序也许体会不到他的便捷性,但是慢慢地你就会发现他真的好用。不要放弃学习。emmmmm…大概就这样了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32实验 使用库函数的方法用按键控制一个LED灯的取反 的相关文章

  • java线程编排CompletableFuture

    在开发中偶尔也会需要用到线程编排 比如查询商品数据 查询商品规格信息和商品图片耗时分别是1 2s和5s 如果是异步执行 那么就可以使用5s完成查询了 而不是6 2s 这里记录一下 CompletableFuture完成线程编排 import
  • dump数据库导表线上服务无响应

    有时候 有些场景下 我们需要拷贝线上的数据 进行本地测试 如果你用的是dbeaver工具操作数据库 在拷贝数据库的时候容易导致服务器没响应 看服务正常运行 但是前端访问就是没反应 服务器也没欠费 这是什么情况呢 就是mysql在进行dump
  • 多线程之如何设计线程数量

    创建多少线程合适 xff0c 要看多线程具体的应用场景 一般来说 xff0c 我们可以将程序分为 xff1a CPU密集型程序和I O密集型程序 xff0c 而针对于CPU密集型程序和I O密集型程序 xff0c 其计算最佳线程数的方法是不
  • P1825 [USACO11OPEN]Corn Maze S 题解

    这道题就是一道普通的搜索题 xff0c 非常非常普通 xff0c 普通的不能再普通那种 xff0c 和以前的bfs一样 xff0c 不过这个bfs要注意一个特判 xff0c 当弹出的那个元素的是大写字母的时候 xff0c 要窜梭到对应的大写
  • 向CentOS7虚拟机中复制文件报错error when getting information

    xff08 安装过程中 xff0c 所有询问 xff0c 都是 yes 或者按 Enter 同意默认路径 xff0c 其中的一个要注意的见下图 xff09
  • 程序设计思维与实践week12作业

    文章目录 A 必做题 1 HDU 1029描述输入输出样例想法代码 B 必做题 2 POJ 2251描述输入输出样例想法代码 C 必做题 3 HDU 1024描述东东每个学期都会去寝室接受扫楼的任务 xff0c 并清点每个寝室的人数 输入输
  • nginx安装时/ngx_murmurhash.c:37:11: error: this statement may fall through [-Werror=implicit-fallthroug

    nginx安装时 ngx murmurhash c 37 11 error this statement may fall through Werror 61 implicit fallthroug如图报错 nginx 1 8 objs M
  • vmware如何把虚拟机和本地主机如何设置在同一网段

    我的本地系统是win10系统 xff0c 其它系统方法没试过 xff0c 应该差不多 一 前提是你此时已经安装好了vmware与操作系统了 二 首先在本地系统上操作 xff1a 1 2 3 4 右键该选择查看属性 ip4 不用做其它操作 5
  • 树莓派3B+指南(十五)omxplayer的安装与使用

    omxplayer的安装与使用 需要用python来控制播放视频 xff0c 所以就找到了这个播放器 xff0c 很好用 看了官网文档 xff0c 安装使用都写的比较明白了 官网地址 xff1a https python omxplayer
  • 使用ffmpeg将实时流保存为AVI

    项目中需要将编码器编码出的H264数据保存为avi格式文件 使用ffmpeg接口进行实现 ffmpeg一般是直接打开本地视频文件 如avi mp4等 或者网络视频流 如 xff1a rtmp流媒体等 xff0c 只需要直接将本地视频文件名或
  • 电脑发热严重:禁用独立显卡(Nvidia)/ TLP解决cpu占用率大

    引言 CPU温度经常居高不下 xff0c 每天风扇嗡嗡响 xff0c 尝试过许多办法都没有解决 xff0c 最后用了一个工具 xff0c 并禁用独显 xff0c 明显改善 xff01 1 禁用独立显卡 参考 xff08 真正帮我解决问题的方
  • 网易云音乐网络问题修复 (加载失败)

    问题 网易云一切网络功能正常 xff0c 唯有在线播放时出现问题 xff0c 提示加载失败 问题解决 查看log xff0c 发现是不能建立到m7 music 126 net 原因不知道 联系舍友问能不能听歌 xff0c 舍友说可以 xff
  • ibus-setup-sunpinyin 打不开

    ibus setup sunpinyin 打不开 提示 Traceback most recent call last File 34 usr share ibus sunpinyin setup main py 34 line 42 in
  • 编译原理 Tiny编译器和TM虚拟机

    编译器与解释器的设计流程 编译器前端部分 词法分析 字符流 gt 记号流 词法分析也称作扫描 xff0c 是编译器的第一个步骤 xff0c 词法分析器读入组成源程序的字符流 xff0c 并且将它们组织成为有意义的词素的序列 xff0c 对于
  • Markdown emoji 收藏

    表情符的使用 人物 syntaxpreviewsyntaxpreviewsyntaxpreview bowtie bowtie smile x1f604 laughing x1f606 blush x1f60a smiley x1f603
  • Powershell中解决win10无法打开设置等应用问题

    在powershell中 选择run as administer 输入 Get AppxPackage AllUsers Foreach Add AppxPackage DisableDevelopmentMode Register spa
  • Arduino设计 有害气体检测小车

    有害气体检测小车 从代码已经可以看得出电路应该怎么接了 具体电路就不放上来了 Arduino控制部分代码 span class token macro property span class token directive keyword
  • xpath —— 父子、兄弟、相邻节点定位方式详解

    1 由父节点定位子节点 最简单的肯定就是由父节点定位子节点了 xff0c 我们有很多方法可以定位 xff0c 下面上个例子 xff1a 对以下html代码 span class token tag span class token tag
  • Wireshark Lab: TCP v7.0

    Wireshark Lab TCP v7 0 Answer the following questions by opening the Wireshark captured packet file tcpethereal trace 1
  • org.openqa.selenium.UnableToSetCookieException: unable to set cookie

    1 当尝试添加cookies时抛出selenium unable to set cookie错误 大多情况是在一个webDriver空域 xff08 没有访问任意一个页面 xff09 中添加cookies xff0c 我们要做的就是在赋值c

随机推荐