【江科大STM32合集】day2按键控制LED光敏传感器控制峰鸣器

【STM32合集】day2按键控制LED&光敏传感器控制峰鸣器

    • 电路基础
    • c语言基础
      • main.c
        • key.c
        • 结果
      • 实现一个键开关灯
      • 实验结果+避坑

电路基础

运算放大器-在江科大51单片机b站视频(AD/DA)复习
原理:两个极端
同相输入端电压 》反相输入端 电压输出最大值 接Vcc
同相输入端电压《 反向输入端 电压输出最小值 接GNd

c语言基础

LED.c用来存放驱动程序的主体代码 (ps:逻辑运算代码都在这
LED.h用来存放驱动程序可以对外提供的函数或变量的声明 (ps:相当于java接口的概念

1.3.1 c文件模块化规范演示-主体代码

这里注意是GPIO_Mode_Out_PP别用成了GPIO_Mode_AF_PP模式
在这里插入图片描述

1.3.2 h头文件模块化-外部可以调用声明
在这里插入图片描述

使用模块化的函数

在这里插入图片描述

记得编译下载一下,检查有没有报错

main.c

#include "stm32f10x.h" // Device header
#include "delay.h"
#include "LED.h"
#include "Key.h"

uint8_t KeyNum;//变量存键码返回值

int main(void)
{
		LED_Init();
		Key_Init();
		while(1)
		{
					KeyNum=Key_GetNum();
					if(KeyNum==1)
					{
						LED1_ON();

					}	
					if(KeyNum==2)
					{
						LED1_OFF();
					}	
		}
}
key.c
#include "stm32f10x.h"                  // Device header
#include	"Delay.h"
void Key_Init(void)
{
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
		
		GPIO_InitTypeDef GPIO_InitStructure;
		GPIO_InitStructure.GPIO_Mode	=	GPIO_Mode_IPU;
		GPIO_InitStructure.GPIO_Pin		=	GPIO_Pin_1	| GPIO_Pin_11;
		GPIO_InitStructure.GPIO_Speed	=	GPIO_Speed_50MHz;
	
		GPIO_Init(GPIOB,	&GPIO_InitStructure);
	
}
//按键读取
uint8_t Key_GetNum(void)
{
		uint8_t KeyNum=0;//按键默认返回0,默认低电平
		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)	==0){//按下B1端口的键
				Delay_ms(20);//消抖
				while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)	==0);
				Delay_ms(20);//消抖
				KeyNum=1;
		}
		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)	==0){//按下B11端口的键
				Delay_ms(20);//消抖
				while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)	==0);
				Delay_ms(20);//消抖
				KeyNum=2;
		}
		return KeyNum;
}	


结果
按一下B1键实现亮灯,B2键关灯

实现一个键开关灯

led.c

#include "stm32f10x.h"

void LED_Init(void){

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode =	GPIO_Mode_Out_PP;//别快捷键成了GPIO_Mode_AF_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);//亮了一个灯,我这里误写成用了GPIO_Mode_AF_PP模式

}

//开关灯1
void LED1_Turn(void)
{
	if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)==0)
	{	
			GPIO_SetBits(GPIOA, GPIO_Pin_1);//赋值1,高电平熄灭
	}
	else
	{
		GPIO_ResetBits(GPIOA, GPIO_Pin_1);//赋值0,低电平点亮
	}
	
}
//开关灯2
void LED2_Turn(void)
{
	if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)==0)
	{	
			GPIO_SetBits(GPIOA, GPIO_Pin_2);//赋值1,高电平熄灭
	}
	else
	{
		GPIO_ResetBits(GPIOA, GPIO_Pin_2);//赋值0,低电平点亮
	}
	
}


//点亮灯1
void LED1_ON(void)
{
	GPIO_ResetBits(GPIOA, GPIO_Pin_1);//赋值0,低电平点亮
	
}
//熄灭灯1
void LED1_OFF(void)
{
	GPIO_SetBits(GPIOA, GPIO_Pin_1);//赋值1,高电平熄灭
}
//点亮灯2
void LED2_ON(void)
{
	GPIO_ResetBits(GPIOA, GPIO_Pin_2);//赋值0,低电平点亮
	
}
//熄灭灯2
void LED2_OFF(void)
{
	GPIO_SetBits(GPIOA, GPIO_Pin_2);//赋值1,高电平熄灭
}

main.c

#include "stm32f10x.h" // Device header
#include "delay.h"
#include "LED.h"
#include "Key.h"

uint8_t KeyNum;//变量存键码返回值

int main(void)
{
		LED_Init();
		Key_Init();
		while(1)
		{
					KeyNum=Key_GetNum();
					if(KeyNum==1)//控制开关led2
					{
						LED1_Turn();

					}	
					if(KeyNum==2)//控制开关led2
					{
						LED2_Turn();
					}	
		}
}

实验结果+避坑

按B1键 A1引脚的灯 能开关
按B11键 A2引脚的灯 能开关
过程中间没有亮灯的,检查引脚是否插好或者正确
not target 报错可以检查下是否单片机上的电源灯正确亮了,我的vcc引脚两端当时都松动了

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

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

相关文章

3DMax的位图是什么? 3DMax的位图介绍

在3dmax建模中,使用贴图时的位图的频率是很高的。主要原因便就是位图就是我们平常说的图片,有各种格式的图片,能把这张图片贴到物体的表面,呈现效果进行渲染。 3damx的位图支持多种格式,比如jpg、png等等。 当然常用的…

第8章-第4节-Java中字节流的缓冲流

1、缓冲流:属于高级IO流,并不能直接读写数据,需要依赖于基础流。缓冲流的目的是为了提高文件的读写效率?那么是如何提高文件的读写效率的呢? 在内存中设置一个缓冲区,缓冲区的默认大小是8192字节&#xff…

HarmonyOS4.0 系列——06、渲染之条件渲染、循环渲染以及懒加载渲染

HarmonyOS4.0 系列——06、渲染之条件渲染、循环渲染以及懒加载渲染 if/else:条件渲染 ArkTS 提供了渲染控制的能力。条件渲染可根据应用的不同状态,使用 if、else 和 else if 渲染对应状态下的 UI 内容。 写法和 TS 的一样,简单看一下即可…

java的object类

object类 看下object类的结构: Object是所有类的父类,任何类都默认继承Object。在Java中,如果没有指定父类,则默认为Object。这是因为Object类是Java中最基本的类,也是所有类的祖先 public String toString() : 这…

Windows下Python+PyCharm+miniconda+Cuda/GPU 安装步骤

1. 官网安装Python 3.9 Python Release Python 3.9.0 | Python.org 2. 安装pycharm https://download.jetbrains.com/python/pycharm-professional-2023.3.2.exe 3. 安装miniconda Miniconda — miniconda documentation 4. 安装完miniconda 创建虚拟环境 conda create …

Linux命令之用户账户管理whoami,useradd,passwd,chage,usermod,userdel的使用

1、查看当前用户账户 2、切换用户为root用户 3、新建用户user1,给用户user1设置密码为password123 4、新建用户user2,UID为510,指定其所属的私有组为group1(group1组的标识符为500),用户的主目录为/home/us…

6.1810: Operating System Engineering 2023 <Lab7 lock: Parallelism/locking>

一、本节任务 二、要点 2.1 文件系统(file system) xv6 文件系统软件层次如下: 通过路径树我们可以找到相应的文件: fd(文件描述符)是进程用来标识其打开的文件的手段,每个进程有自己的文件…

C++学习笔记(三十三):c++ 宏定义

本节对c的宏定义进行描述。c使用预处理器来对宏进行操作,我们可以写一些宏来替换代码中的问题,c的宏是以#开头,预处理器会将所有的宏先进行处理,之后在通过编译器进行编译。宏简单说就是文本替换,可以替换代码中的任何…

高级分布式系统-第15讲 分布式机器学习--概念与学习框架

高级分布式系统汇总:高级分布式系统目录汇总-CSDN博客 分布式机器学习的概念 人工智能蓬勃发展的原因:“大” 大数据:为人工智能技术的发展奠定了坚实的物质基础。 大规模机器学习模型:具备超强的表达能力,可以解决…

CMU15-445-Spring-2023-Project #3 - 前置知识(lec10-14)

Lecture #10_ Sorting & Aggregation Algorithms Query Plan 数据库系统会将 SQL 编译成查询计划。查询计划是一棵运算符树。 Sorting DBMS 需要对数据进行排序,因为根据关系模型,表中的tuple没有特定的顺序。排序使用 ORDER BY、GROUP BY、JOIN…

如何在Windows 10/11的防火墙中禁止和允许某个应用程序,这里提供详细步骤

想阻止应用程序访问互联网吗?以下是如何通过简单的步骤阻止和允许Windows防火墙中的程序。​ 一般来说,大多数用户永远不需要担心应用程序访问互联网。然而,在某些情况下,你需要限制应用程序访问互联网。 例如,有问题…

高级定时器

本节主要介绍以下内容: 定时器简介 高级定时器功能框图讲解 一、定时器简介 定时器功能 :定时、输出比较、输入捕获、断路输入 定时器分类 :基本定时器、通用定时器、高级定时器 定时器资源 :F103有2个高级定时器、4个通…

Vue学习笔记3--全局事件总线

Vue学习笔记3—全局事件总线 1.全局事件总线可以实现任意组件间通信 X需具备的条件: 所有的组件都要能看见X可以调用$on $off $emitVue.prototype.x {a:1, b:2} 可以被所有组件看见VueComponent.protoype.proto Vue.prototype组件实例对象(vc)可以访问到Vue原型上…

Redis实现全局唯一Id

一、全局唯一ID 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显 受单表数据量的限制 场景分析:如果我们的…

10.9.2 std::function 代替函数指针 Page182~183

std::function是一个模板类&#xff0c;基本可作为函数指针的代替品&#xff0c;具备更多功能&#xff0c;特别是与函数对象及bind配合使用。使用std::function时&#xff0c;需要添加头文件 #include <functional> 1.定义函数指针 18行&#xff0c;定义了一个函数指针类…

大语言模型面试问题【持续更新中】

自己在看面经中遇到的一些面试题&#xff0c;结合自己和理解进行了一下整理。 transformer中求和与归一化中“求和”是什么意思&#xff1f; 求和的意思就是残差层求和&#xff0c;原本的等式为y H(x)转化为y x H(x)&#xff0c;这样做的目的是防止网络层数的加深而造成的梯…

Visual Studio 2022 成功配置QT5.12.10

目录 下载并安装Visual Studio 2022 Qt5.12.10下载 Qt5.12.10安装 Qt VS Tools for Visual Studio 2022下载 Visual Studio 2022配置 测试 下载并安装Visual Studio 2022 下载社区版并安装&#xff0c;这个比较快。 Qt5.12.10下载 官网下载很慢&#xff0c;还不如百度网…

在visual studio中调试时无法查看std::wstring

1.问题 在调试的时候发现std::wstring类型的变量查看不了&#xff0c;会显示(error)|0&#xff0c;百思不得其解。 2.解决方法 参考的&#xff1a;vs2015调试时无法显示QString变量的值&#xff0c;只显示地址_vs调试qstring的时候如何查看字符串-CSDN博客 在工具/选项/调试…

Linux网络文件共享服务2(基于NFC)

目录 一、初步了解NFS 1、概念 2、工作原理 3、NFS优势和缺点 3.1优点 3.2缺点 二、NFS软件介绍 2.1 NFS共享配置文件格式 2.2 NFS工具 2.2.1 exportfs 2.2.2 showmount 2.2.3 mount.nfs 三、NFS服务部署 1、服务器部署配置 2、客户端配置 3、服务测试 一、初步…

解决英特尔无线网卡WiFi或者蓝牙突然消失问题

winR&#xff0c;输入“devmgmt.msc”&#xff0c;检查设备管理器中的无线网卡驱动是否安装好。 访问https://www.intel.cn/content/www/cn/zh/download/19351/windows-10-and-windows-11-wi-fi-drivers-for-intel-wireless-adapters.html下载对应系统版本的英特尔无线网卡WiFi…