STM32实战篇:按键控制LED

按键控制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.mfbz.cn/a/787528.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

昇思25天学习打卡营第1天|小试牛刀

这里写自昇思25天学习打卡营第1天|小试牛刀定义目录标题 昇思25天学习打卡营第1天学习了初学入门之基本介绍。了解了昇思MindSpore和华为昇腾AI全栈。训练营中的教程丰富,有初学入门、应用实践和量子计算等。学习打卡营是很好的提升自己的机会。 昇腾计算&#xff…

电脑清理c盘内存空间怎么清理免费 怎么清理c盘的垃圾文件又不删除有用文件

在计算机使用过程中,随着时间的推移,C盘空间可能会被各种临时文件、缓存和无用的注册表项占用。这不仅会导致C盘空间不足,还可能影响计算机的性能。那么怎么样清理C盘内存空间,怎么样清理C盘的垃圾避开系统文件呢? 一…

JVM原理(二三):JVM虚拟机线程安全的实现方法

1. 互斥同步 互斥同步(MutualExclusion&Synchronization)是一种最常见也是最主要的并发正确性保障手段。同步是指在多个线程并发访问共享数据时,保证共享数据在同一个时刻只被一条(或者是一些,当使用信号量的时候)线程使用。而互斥是实现同步的一种…

Msfvenom制作自己的专属Shell

Msfvenom制作自己的专属Shell 如何通过Msfvenom来生成用户自己的专属Shell?有时候我们上传Shell到目标主机后,不仅我们自己可以连接,其他用户也可以连接,有时候会导致我们丢失该Shell,甚至该shell被用户发现并查杀。 实验环境 …

数据仓库哈哈

数据仓库 基本概念数据库(database)和数据仓库(Data Warehouse)的异同 整体架构分层架构方法论ER模型(建模理论)维度模型 何为分层第一层:数据源(ODS ER模型)设计要点日志…

C++进阶:继承和多态

文章目录 ❤️继承🩷继承与友元🧡继承和静态成员💛菱形继承及菱形虚拟继承💚继承和组合 ❤️多态🩷什么是多态?🧡多态的定义以及实现💛虚函数💚虚函数的重写&#x1f499…

图论·Day01

P3371 P4779 P3371 【模板】单源最短路径(弱化版) 注意的点: 边有重复,选择最小边!对于SPFA算法容易出现重大BUG,没有负权值的边时不要使用!!! 70分代码 朴素板dijsk…

打卡第7天-----哈希表

继续坚持✊,我现在看到leetcode上的题不再没有思路了,真的是思路决定出路,在做题之前一定要把思路梳理清楚。 一、四数相加 leetcode题目编号:第454题.四数相加II 题目描述: 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j…

蚁群算法(Ant Colony Optimization,ACO)讲解+代码实现

1.蚁群算法来源 蚁群算法(Ant Colony Optimization,简称ACO)是一种模拟自然界中蚂蚁寻找食物路径行为的优化算法,主要用于解决组合优化问题。它的灵感来源于意大利学者Marco Dorigo在1992年提出的蚂蚁系统模型。 蚁群算法的灵感来…

应急响应——勒索病毒

先上搜索引擎上搜 也可以用360来杀 但是都无法解密 可以解密的: linux

LeNet原理及代码实现

目录 1.原理及介绍 2.代码实现 2.1model.py 2.2model_train.py 2.3model.test.py 1.原理及介绍 2.代码实现 2.1model.py import torch from torch import nn from torchsummary import summaryclass LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__…

uniapp 去掉小数末尾多余的0

文章目录 在uniapp或者一般的JavaScript环境中,要去掉小数末尾的0,可以使用以下几种方法: 使用parseFloat()函数 let num 123.4500; let result parseFloat(num); console.log(result); // 输出: 123.45字符串处理 将数字转换为字符串&am…

02day-C++学习(const 指针与引用的关系 inline nullptr)

02day-C学习 1. 使用const注意事项 注意事项 • 可以引⽤⼀个const对象,但是必须⽤const引⽤。const引⽤也可以引⽤普通对象,因为对象的访 问权限在引⽤过程中可以缩⼩,但是不能放⼤。 • 不需要注意的是类似 int& rb a3; double d 1…

代码随想录——合并区间(Leecode LCR74)

题目链接 贪心 排序 class Solution {public int[][] merge(int[][] intervals) {ArrayList<int[]> res new ArrayList<>();// 先将数组按照左区间排序Arrays.sort(intervals, new Comparator<int[]>() {public int compare(int[] intervals1, int[] in…

模板语法之插值语法{{}}——01

<主要研究&#xff1a;{{ 这里可以写什么}} 1.在data中声明的变量函数都可以 2.常量 3.只要是合法的JavaScript的表达式&#xff0c;都可以 4. 模板表达式都被放在沙盒中&#xff0c;只能访问全局变量的一个白名单&#xff0c;如 Math 和 Date <body> <div i…

STM32智能仓库管理系统教程

目录 引言环境准备智能仓库管理系统基础代码实现&#xff1a;实现智能仓库管理系统 4.1 数据采集模块 4.2 数据处理与控制算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;仓库管理与优化问题解决方案与优化收尾与总结 1. 引言 智能仓库管理系统通…

深入理解循环神经网络(RNN)

深入理解循环神经网络&#xff08;RNN&#xff09; 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一类专门处理序列数据的神经网络&#xff0c;广泛应用于自然语言处理、时间序列预测、语音识别等领域。本文将详细解释RNN的基本结构、工作原理以及其优…

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

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

香橙派AIpro初体验:搭建无线随身NAS

文章目录 1.引言2. 香橙派 AIPro概述3. 开发准备3.0 烧录镜像3.1 需要准备的硬件3.2 需要准备的软件3.3 启动并连接香橙派 AIPro3.3.1 初始化启动香橙派 AIPro3.3.2 无线连接香橙派 AIPro3.3.3.3 VNC连接香橙派 AIPro 3.4 设置固定ip3.4.1 设置开机自动连接WIFI3.4.1 设置香橙派…

遍历请求后端数据引出的数组forEach异步操作的坑

有一个列表数据&#xff0c;每项数据里有一个额外的字段需要去调另外一个接口才能拿到&#xff0c;后端有现有的这2个接口&#xff0c;现在临时需要前端显示出来&#xff0c;所以这里需要前端先去调列表数据的接口拿到列表数据&#xff0c;然后再遍历请求另外一个接口去拿到对应…