STM32实战篇:按键控制LED

news2024/11/14 13:44:05

按键控制LED

功能要求

有两个按键,分别控制两个LED灯。当按键按下后,灯的亮暗状态改变。实物如下图所示:

由图可知,按键一端直接接地,故另一端所对应IO引脚的输入模式应该为上拉输入模式


实现代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

unsigned int KEY()      //判断按键是否按下
{
	unsigned int Key;
	
	if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0)
	{
		Delay_ms(10);
		while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0);//等待按键松手
		Delay_ms(10);
		Key=1;
	}
	if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)==0)
	{
		Delay_ms(10);
		while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)==0);//等待按键松手
		Delay_ms(10);
		Key=2;
	}
	
	return Key;
}

void LED1_Turn()  //LED1灯的亮暗翻转
{
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==0)
	{
		GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET);
	}
	else
	{
		GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET);
	}
}

void LED2_Turn()  //LED1灯的亮暗翻转
{
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)==0)
	{
		GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET);
	}
	else
	{
		GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_RESET);
	}
}

int main()
{
	uint16_t KeyNum;
	
	//开启时钟
	RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	//IO引脚PA1、PA2初始化,推挽输出模式
	GPIO_InitTypeDef GPIO_InitStruct_Out;
	GPIO_InitStruct_Out.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;
	GPIO_InitStruct_Out.GPIO_Speed=GPIO_Speed_2MHz;
	GPIO_InitStruct_Out.GPIO_Mode=GPIO_Mode_Out_PP;
	
	GPIO_Init(GPIOA, &GPIO_InitStruct_Out);
	
	//IO引脚PB1、PB11初始化,上拉输入模式
	GPIO_InitTypeDef GPIO_InitStruct_In;
	GPIO_InitStruct_In.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_11;
	GPIO_InitStruct_In.GPIO_Speed=GPIO_Speed_2MHz;
	GPIO_InitStruct_In.GPIO_Mode=GPIO_Mode_IPU;
	
	GPIO_Init(GPIOB, &GPIO_InitStruct_In);
	
	while(1)
	{
		KeyNum=KEY();
		if(KeyNum==1){LED1_Turn();}
		if(KeyNum==2){LED2_Turn();}
	}
}

 

 

 

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

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

相关文章

WEB安全基础:网络安全常用术语

一、攻击类别 漏洞:硬件、软件、协议,代码层次的缺陷。 后⻔:方便后续进行系统留下的隐蔽后⻔程序。 病毒:一种可以自我复制并传播,感染计算机和网络系统的恶意软件(Malware),它能损害数据、系统功能或拦…

接口测试(3)

接口自动化 # 获取图片验证码import requestsresponse requests.get(url"http://kdtx-test.itheima.net/api/captchaImage")print(response.status_code) print(response.text) import requestsurl "http://kdtx-test.itheima.net/api/login" header_da…

【自动驾驶/机器人面试C++八股精选】专栏介绍

目录 一、自动驾驶和机器人技术发展前景二、C在自动驾驶和机器人领域的地位三、专栏介绍四、订阅需知 一、自动驾驶和机器人技术发展前景 随着人工智能、机器学习、传感器技术和计算能力的进步,自动驾驶和机器人的技术水平不断提升,使得它们更加智能、可…

国际网课平台Udemy上的亚马逊云科技AWS免费高分课程和创建、维护EC2动手实践

亚马逊云科技(AWS)是全球云行业最🔥火的云平台,在全球经济形势不好的大背景下,通过网课学习亚马逊云科技AWS基础备考亚马逊云科技AWS证书,对于找工作或者无背景转行做AWS帮助巨大。欢迎大家关注小李哥,及时了解世界最前…

Clickhouse的联合索引

Clickhouse 有了单独的键索引,为什么还需要有联合索引呢?了解过mysql的兄弟们应该都知道这个事。 对sql比较熟悉的兄弟们估计看见这个联合索引心里大概有点数了,不过clickhouse的联合索引相比mysql的又有些不一样了,mysql 很遵循最…

信息技术课上的纪律秘诀:营造有序学习环境

信息技术课是学生们探索数字世界的乐园,但同时也是课堂纪律管理的挑战场。电脑、网络、游戏等元素可能分散学生的注意力,影响学习效果。本文将分享一些有效的策略,帮助教师在信息技术课上维持课堂纪律,确保教学活动顺利进行。 制…

C++笔试强训3

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 如图所示,如图所示p-3指向的元素是6,printf里面的是%s,从6开…

BurpSuite抓IOS设备HTTPS流量

一、简述: Burp 这个工具做过 web 安全的人都应该用过,是个非常强大的抓包工具。在 PC 的浏览器上直接配置代理就行了,本篇文章就来介绍一下如何用 Burp 抓 IOS 设备上的流量,很多文章都介绍过怎么抓包,但是很多坑都没…

计算机网络之WPAN 和 WLAN

上一篇文章内容:无线局域网 1.WPAN(无线个人区域网) WPAN 是以个人为中心来使用的无线个人区域网,它实际上就是一个低功率、小范围、低速率和低价格的电缆替代技术。 (1) 蓝牙系统(Bluetooth) &#…

汇川CodeSysPLC教程03-2-14 与HMI通信

硬件连接 PLC与HMI连接采用何种连接方式,通常是参考双方支持哪些接口。PLC(可编程逻辑控制器)与HMI(人机界面)之间的通讯方式主要有以下几种: 串行通讯(Serial Communication)&…

redis学习(007 实战:黑马点评:登录)

黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第25p-第p34的内容 文章目录 短信登录功能session 共享问题 短信登录功能 接口编写 这里是Result的封装 过滤器在拦截器的外层…

ISO/OSI七层模型

ISO:国际标准化/ OSI:开放系统互联 七层协议必背图 1.注意事项: 1.上三层是为用户服务的,下四层负责实际数据传输。 2.下四层的传输单位: 传输层; 数据段(报文) 网络层: 数据包(报…

【MATLAB源码-第232期】基于matlab的 (204,188) RS编码解码仿真,采用QPSK调制输出误码率曲线。

操作环境: MATLAB 2022a 1、算法描述 Reed-Solomon码(RS码)是一类广泛应用于数字通信和存储系统中的纠错码,尤其在光盘、卫星通信和QR码等领域有着重要作用。RS码是一种非二进制的纠删码,由Irving S. Reed和Gustave…

vue缓存页面,当tab切换时保留原有的查询条件

需求: 切换tab时,查询条件不变 路由页面: 单个页面上加这句话:

一文带你彻底搞懂什么是责任链模式!!

文章目录 什么是责任链模式?详细示例SpingMVC 中的责任链模式使用总结 什么是责任链模式? 在我们日常生活中,经常会出现一种场景:一个请求需要经过多个对象的处理才能得到最终的结果。比如,一个请假申请,需…

vue打包terser压缩去除控制台打印和断点

情况一: 1、vue-cli搭建 代码压缩工具terser在vue-cli里面是自动支持的,所以直接在vue.config.js里面加入下面配置: const {defineConfig} require(vue/cli-service) module.exportsdefineConfig({transpileDependencies:true,terser:{te…

火灾疏散逃生3d消防模拟演练教学系统助您轻松打造专业的消防培训基地

消防VR仿真教学系统将真实世界的消防挑战带入虚拟的训练环境,为您打造了一个前所未有的消防培训体验。在这里,您可以模拟现实中难以搭建的复杂场景,如工厂火灾、地下室逃生、人员密集场所的紧急疏散等。 深圳VR公司华锐视点研发的消防VR仿真教…

品牌文化五大维度,构建品牌竞争力的秘诀!

品牌文化对于企业的发展和成功至关重要。 品牌文化不仅是企业和消费者之间的纽带,也是企业内部员工的凝聚力。 在当今竞争激烈的市场环境中,建立一个有活力和影响力的品牌文化是每个企业都需要认真思考和实践的事情。 品牌文化的五大维度包括价值观、…

【PyTorch][chapter 26][李宏毅深度学习][attention-1]

前言: attention 在自然语言处理,声音处理里面是一个很重要的技巧. attention 要解决的是输入的向量长度不定. 根据输入输出的不同,分为三种场景: 输入N个向量,输出N个向量,这是本章的重点 输入N个向量,输出向量不定 输…

React setState

老生常谈之setState 是同步的还是异步的? 设想setState是同步的,那也就是每次调用setState都要进行新旧虚拟DOM的对比,然后将差异化的dom更新到页面上,性能损耗很大 所以react把setState设置为了异步,当状态更新时不…