STM32单片机入门学习(五)-按钮控制LED

news2024/9/23 13:30:30
按钮和LED接线

LED负极接B12,正极接VCC

按钮一端接B13,一端接GND,按下为低电平,松开为高电平

如图:

主程序代码:main.c
#include "stm32f10x.h"
#include "Delay.h"     //delay函数所在头文件
#include "LED.h"
#include "KEY.h"

int main(void)
{
	int isdown;
	
	LED_Init();   //初始化LED
	LED_OFF();		//默认LED灭
	
	KEY_Init(); 	//初始化KEY
	
	while(1)
		{
			isdown  = Key_IsDown();	//循环判断按钮是否被按下
			if(isdown == 1)
				{
					LED_ON();
				}
				else
				{
					LED_OFF();
				}
		}
}
 LED.h和LED.c

LED.h

#ifndef __LED_H
#define __LED_H


void LED_Init(void);
void LED_ON(void);
void LED_OFF(void);

#endif

LED.c

#include "stm32f10x.h"

void LED_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //设置时钟
	
	GPIO_InitTypeDef GPIOInitStruct;
	
	GPIOInitStruct.GPIO_Mode = GPIO_Mode_Out_PP;    //推挽模式
	GPIOInitStruct.GPIO_Pin = GPIO_Pin_12;     //B12
	GPIOInitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB, &GPIOInitStruct);
	
	GPIO_SetBits(GPIOB, GPIO_Pin_12); // 不亮
	
}

void LED_ON(void)
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_12); // 亮
}


void LED_OFF(void)
{
	GPIO_SetBits(GPIOB, GPIO_Pin_12); // 不亮
}

KEY.h和KEY.c

KEY.h

#ifndef __KEY_H
#define __KEY_H


void KEY_Init(void);
unsigned char Key_IsDown(void);
	
#endif

KEY.c

#include "stm32f10x.h"
#include "Delay.h" 


//初始化KEY
void KEY_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //设置时钟
	
	GPIO_InitTypeDef GPIOInitStruct;
	
	GPIOInitStruct.GPIO_Mode = GPIO_Mode_IPU;    //上拉模式
	GPIOInitStruct.GPIO_Pin = GPIO_Pin_13;     //B13
	GPIOInitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB, &GPIOInitStruct);
}



//判断key是否被按下
uint8_t Key_IsDown(void)
{
	uint8_t isdown = 0;
	if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0)   //判断是否按下
	{
		Delay_ms(20);    //消抖
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0)    //判断是否确实被按钮
		{
			isdown = 1;
		}
		else
		{
			isdown = 0;
		}
	}
	else
	{
		isdown = 0;
	}
	return isdown;
;
}
整体工程文件如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1075281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Springboot实现影视影院订票选座管理系统【项目源码+论文说明】

基于Springboot实现影视影院订票选座管理系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个影城管理系统 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论…

域信息收集

DMZ,是英文“demilitarized zone”的缩写,中文名称为“隔离区”,也称“非军事化区”。它是为了解决安装防火墙后外部网络的访问用户不能访问内部网络服务器的问题,而设立的一个非安全系统与安全系统之间的缓冲区。该缓冲区位于企业…

Git Pull failure 【add/commit】

操作页面 操作步骤 1. 打开项目所在 在.git目录下右击打开Git Bssh Here 2. git add . 3. git commit -m "提交" 4. 成功提交到本地, 这下就可以拉取代码了

选择适合您的项目管理软件:哪个更好?

对于项目管理而言,一个优秀的项目管理工具可以达到事半功倍的效果。Zoho Projects 是一款功能强大,适用于各行业的标准化项目管理工具,具备适用度高的特点,丰富的功能模块可以匹配各行各业的项目管理。 一,任务管理 通…

JUC第十八讲:JUC集合-BlockingQueue 详解

JUC集合-BlockingQueue 详解 JUC里的 BlockingQueue 接口表示一个线程安全放入和提取实例的队列。本文是JUC第十八讲,将给你演示如何使用这个 BlockingQueue,不会讨论如何在 Java 中实现一个你自己的 BlockingQueue。 文章目录 JUC集合-BlockingQueue 详…

Linux是什么,有哪些特点?Linux和UNIX的关系及区别(详解版)

与大家熟知的 Windows 操作系统软件一样,Linux 也是一个操作系统软件,其 logo 是一只企鹅(如图 1 所示)。与 Windows 不同之处在于,Linux 是一套开放源代码程序的、可以自由传播的类 Unix 操作系统软件。 图 1 Linux 操…

Atcoder Regular Contest 166

只打了半场。 A. Replace C or Swap AB 首先如果存在某个 \(i\),使得 \(Y_i\) 是 C 且 \(X_i\) 不是,那么显然是不合法的,可以直接判掉。 那么除去上述情况 \(Y\) 中为字符 C 的位置 \(X\) 也只能是 C。它们把字符串分成了若干段,…

LVGL_基础控件timer

LVGL_基础控件timer 1、创建基础控件定时器 /* 下面创建三个timer,最后创建的timer会被放在timer list的最前面, lvgl的任务处理器会从timer list从头到尾按顺序遍历检查,执行满足执行条件的timer。 因此,如果三个定时器的周期设…

帮微软语音助手纠正“阿弥陀佛”“e”字错误发音的技巧

一、前言 微软AI文字转语音助手,现已被大家普便应用。最近在传统文化佛学名词的发音转换应用中,发现了一个致命的错误。那就是“阿弥陀佛”中的“阿”字的“a”发音,被误读为“e”。说起这个重大的错误,佛门大德南怀瑾老师也一再…

排序算法——选择排序

一、介绍: 选择排序就是按照一定的顺序从选取第一个元素索引开始,将其储存在一个变量值中,根据排序规则比较后边每一个元素与这个元素的大小,根据排序规则需要,变量值的索引值进行替换,一轮遍历之后&#x…

【RabbitMQ】docker rabbitmq集群 docker搭建rabbitmq集群

docker rabbitmq集群 docker搭建rabbitmq集群 RabbitMQ提供了两种常用的集群模式 1.普通集群模式 2.镜像集群模式 普通集群模式只能同步主节点上的交换机和队列信息,但对于队列中的消息不做同步,主节点宕机也不能进行切换(故障转移&#xff…

socket can查看详细信息 命令 ip -details -statistics link show can0

ip -details -statistics link show can0 ip -details link show can0 ip -statistics link show can0 也可以像第一行那样结合使用

C语言应用:Linux与Windows的系统化

作为一种广泛应用于软件开发的编程语言,C语言在工业应用领域也发挥着重要的作用。在本文中,我们将深入探索C语言在工业应用中的应用场景和价值,并重点关注它在Linux和Windows系统中的工业化之路。希望本文能为您介绍C语言在工业领域的实际应用…

SpringBoot-黑马程序员-学习笔记(二)

22.读取yaml文件中的属性 3个步骤: 1.写yaml文件 2.在控制类里面定义变量 3.在变量上面用 " Value注解 ${} " 获取yaml文件的属性 代码演示: yaml文件 控制类: 访问网址books后: 读取到了对应了值 23.yaml文件中…

msvcp120.dll文件下载安装,学习msvcp120.dll文件三种重新安装方法

在计算机使用过程中,我们可能会遇到各种意想不到的问题,其中 msvcp120.dll 丢失就是一种比较常见的情况。msvcp120.dll 是微软 Visual Studio 2013 编译的程序所依赖的一个动态链接库文件,它包含了 C标准库的一些功能,如输入输出、…

QT信号与槽机制 和 常用控件介绍

QT信号与槽机制 1、信号(signal): 所谓信号槽 (观察者模式)信号本质是事件。信号展现方式就是函数。当某一个事件发生之后,则发出一个信号(signal). 2、槽(slot): 就是对信号响应的函数,槽就是一个函数。槽函数与普通函数区别槽函数可以与一个信号关联&…

Bootstrap中固定某一个元素不随滚动条滚动

可以利用类sticky-top实现固定某个元素在顶部的效果&#xff0c;示例代码如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>固定某一个元素不随滚动条滚动</title><meta name"viewport&quo…

vue3 antv 静态登录页面

效果图 <template> <!-- 内容区域 --><div class"main"><div class"from"><!-- 表单 model是antv里边的绑定表单数据 --><a-form :model"formState" ref"formRef"><!-- 切换 --><a-tabs…

06-进程间通信

学习目标 熟练使用pipe进行父子进程间通信熟练使用pipe进行兄弟进程间通信熟练使用fifo进行无血缘关系的进程间通信使用mmap进行有血缘关系的进程间通信使用mmap进行无血缘关系的进程间通信 2 进程间通信相关概念 2.1 什么是进程间通信 Linux环境下&#xff0c;进程地址空间…

FPGA设计时序约束四、多周期约束

目录 一、背景 二、set_multicycle_path a)Targets界面 b)options界面 c)setup与hold关系 三、多周期约束场景 3.1 单时钟域的多周期约束 3.2 多周期路径与时钟相移 3.3 慢时钟到快时钟的多周期约束 3.4 快时钟到慢时钟的多周期约束 四、工程示例 五、参考 一、背景…