32GPIO输入&按键控制LED&光敏控制蜂鸣器

news2024/12/26 23:29:19

一.硬件

光线越强,光敏电阻的阻值越小

温度越高,热敏电阻的阻值就越小

红外光线越强,红外接收管的阻值就越小

类比:电阻阻值越小,上拉或下拉就越强 (弹簧的拉力就越强)

在上下的电阻分压下,AO口输出的就是模拟电压

对模拟电压进行二值化

N1就是传感器模块

二.硬件电路

上面这一个电路,当引脚被强行拉到低时,损耗也会大一些

三.C语言基础

 stdint定义的是新版本的,ST是老版本的

 

 typedef后面必须加“;”,只能给变量类型换名,但对于变量类型重命名而言,typedef更加安全

define后面不需要加分号,如何名字都可以换

四.代码实现

GPIO配置好之后默认就是低电平,所以要在LED_Init最后加上GPIO_SetBits(...);

ctrl+Alt+空格:弹出代码提示框

---------------------------------------------------------------------------------------------------------------------------------

注:

局部变量的定义

---------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------- 

1.按键控制LED

(1)自己的代码逻辑

LED.c

#include "stm32f10x.h"                  // Device header
void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;//必须要写在程序的开头位置
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_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);
}
void LED1_ON(void)
{
	GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}
void LED1_OFF(void)
{
	GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
void LED2_ON(void)
{
	GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}
void LED2_OFF(void)
{
	GPIO_SetBits(GPIOA,GPIO_Pin_2);
}

main.c 

#include "stm32f10x.h"                  // Device header
#include "Delay.h"  
#include "LED.h" 
#include "Key.h" 
uint8_t KeyNum,count1,count2;
int main()
{
	LED_Init();
	Key_Init();
	while(1)
	{
		KeyNum=Keynum();
		if(KeyNum==1)
		{
			count1++;
			if(count1%2==0)
			{		
				if(KeyNum==1)
				{
					LED1_OFF();
				}		
			}
			else
			{
				if(KeyNum==1)
				{
					LED1_ON();
				}
			}
		}
		if(KeyNum==2)
		{
			count2++;
			if(count2%2==0)
			{
				
				if(KeyNum==2)
				{
					LED2_OFF();
				}
				
			}
			else
			{
				if(KeyNum==2)
				{
					LED2_ON();
				}	
			}
		}	
	}	
}
		
		

	

(2)视频的代码逻辑

LED.c

#include "stm32f10x.h"                  // Device header
void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;//必须要写在程序的开头位置
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_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);
}
void LED1_ON(void)
{
	GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}
void LED1_OFF(void)
{
	GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
void LED1_Turn(void)//实现IO口翻转
{
	if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)==0)
	{
		GPIO_SetBits(GPIOA,GPIO_Pin_1);
		
	}
	else
	{
		
		GPIO_ResetBits(GPIOA,GPIO_Pin_1);
	}
}
void LED2_ON(void)
{
	GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}
void LED2_OFF(void)
{
	GPIO_SetBits(GPIOA,GPIO_Pin_2);
}
void LED2_Turn(void)
{
	if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)==0)
	{
		GPIO_SetBits(GPIOA,GPIO_Pin_2);
		
	}
	else
	{
		
		GPIO_ResetBits(GPIOA,GPIO_Pin_2);
	}
}

main.c

 

#include "stm32f10x.h"                  // Device header
#include "Delay.h"  
#include "LED.h" 
#include "Key.h" 
uint8_t KeyNum,count1,count2;
int main()
{
	LED_Init();
	Key_Init();
	while(1)
	{
		KeyNum=Keynum();
		if(KeyNum==1)
		{
			LED1_Turn();	
		}
		if(KeyNum==2)
		{
			LED2_Turn();
		}
		
	}	
}

 2.光敏控制蜂鸣器

Buzzer.c

#include "stm32f10x.h"                  // Device header
void Buzzer_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;//必须要写在程序的开头位置
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	GPIO_SetBits(GPIOB,GPIO_Pin_12);
}
void Buzzer_ON(void)
{
	GPIO_ResetBits(GPIOB,GPIO_Pin_12);
}
void Buzzer_OFF(void)
{
	GPIO_SetBits(GPIOB,GPIO_Pin_12);
}
void Buzzer_Turn(void)
{
	if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12)==0)
	{
		GPIO_SetBits(GPIOB,GPIO_Pin_12);
		
	}
	else
	{
		
		GPIO_ResetBits(GPIOB,GPIO_Pin_12);
	}
}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"  
#include "LED.h" 
#include "Key.h" 
#include "Buzzer.h" 
#include "LightSensor.h" 
uint8_t KeyNum,count1,count2;
int main()
{
	Buzzer_Init();
	LightSensor_Init();
//	Buzzer_OFF();
	while(1)
	{
		if(LightSensor_get()==0)
		{
			Buzzer_OFF();	
		}
		else
		{
			Buzzer_ON();
		}	
	}	
}
	

 

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

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

相关文章

Android Studio 提示Use app:drawableStartCompat instead of android:drawableStart

每次提交代码时,AS这个老妈子总爱唠叨一堆warning,这些Warning都在讲什么? 1.Use app:drawableStartCompat instead of android:drawableStart 在Android开发中,android:drawableStart和app:drawableStartCompat是两个用于设置…

Linux下的进程操作

进程概念 ps -elf:查看操作系统的所有进程(Linux命令) ctrl z:把进程切换到后台 crtl c:结束进程 fg:把进程切换到前台 获取进程进程号和父进程号 函数原型: pid_t getpid(void); //pid_t…

2.精确度-机器学习模型性能常用的评估指标

一.精确度的定义 精确度:机器学习领域中一项至关重要的评价指标,其专注于评估模型对正样本的预测准确性。 相对于准确率而言,精确度更为细致,它关注的是模型在将实例预测为正样本的情况下,实际为正样本的比例。换句话…

2024 1.20~1.26周报

一、上周工作 了解注意力机制,开始论文的初步阅读 二、本周计划 简单了解transform架构,继续研读论文U-MixFormer: UNet-like Transformer with Mix-Attention for Efficient Semantic Segmentation。 三、完成情况——论文研读 标题:U-Mi…

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心,Kotlin(2)

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心,Kotlin(2) 在 Android ScaleGestureDetector检测双指缩放Bitmap基于Matrix动画移动到双指捏合中心点ImageView区域中心,Kotlin-CSDN博客 …

12.Elasticsearch应用(十二)

Elasticsearch应用(十二) 1.单机ES面临的问题 海量数据存储问题单点故障问题 2.ES集群如何解决上面的问题 海量数据存储解决问题: 将索引库从逻辑上拆分为N个分片(Shard),存储到多个节点单点故障问题&a…

自动求导与可微分编程

1.张量的自动求导 1.1 自动求导机制 张量的自动求导机制是现代深度学习框架(如PyTorch和TensorFlow)的核心功能之一,它允许开发者在无需手动计算梯度的情况下,自动获得神经网络中所有参数相对于损失函数的梯度。以下是这一机制的…

Hadoop集群部署流程

前置要求 需要3台虚拟机,系统为Centos7,分别host命名为node1,node2,node3,密码均为root请确保这三台虚拟机已经完成了JDK、SSH免密、关闭防火墙、配置主机名映射等前置操作 在3台虚拟机的/etc/hosts文件中&#xff0…

天津大数据培训班推荐,数据分析过程的常见错误

大数据”是近年来IT行业的热词,目前已经广泛应用在各个行业。大数据,又称海量信息,特点是数据量大、种类多、实时性强、数据蕴藏的价值大。大数据是对大量、动态、能持续的数据,通过运用分析、挖掘和整理,实现数据信息…

Go语言安装及开发环境配置

目录 官网 国内 Linux(CentOS & Ubuntu)安装 环境变量设置 命令行下开发 开发模式执行 编译 IDE下开发 插件安装 安装依赖工具 运行 常见问题 1、dial tcp 172.217.160.113:443: i/o timeout 2、VS Code不能完美显示zsh问题 官网 访问Golang官网的下载链接&a…

matplotlib 波士顿房价数据及可视化 Tensorflow 2.4.0

matplotlib 波士顿房价数据及可视化 Tensorflow 2.4.0 目录 matplotlib 波士顿房价数据及可视化 Tensorflow 2.4.0 1. 认识 1.1 kears 1.2 kears常用数据集 2. 波士顿房价数据及可视化 2.1 下载波士顿房价数据集 2.2 展示一个属性对房价的影响 2.3 将是三个属性全部展…

Redis数据类型及底层实现

文章目录 1.3.1 5种基本数据类型1.3.1.1 总结篇1.3.1.2 底层源码引入篇1.3.1.2.1 redis是字典数据库KV键值对到底是什么1.3.1.2.2 数据类型视角1.3.1.2.3 数据模型解析(重点)1.3.1.2.4 redisObjec1.3.1.2.5 SDS 1.3.1.3 String1.3.1.3.1 底层分析1.3.1.3…

Ubuntu Server 22.04 安装步骤纪录

Ubuntu Server 22.04 安装流程 取得安装程序 安装程序可以通过下方链接直接从官网下载就可以了,官网提供的是iso映像文件,安装前要先将iso映像文件刻录成光盘,或制作成USB开机随身碟。 前往 Ubuntu 官网 开始安装 STEP 1 选择要安装的操作…

Python初学者学习记录——python基础综合案例:数据可视化——地图可视化

一、基础地图使用 1、基础地图演示 2、基础地图演示——视觉映射器 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts# 准备地图对象 map Map() # 准备数据 data [("北京市", 99),("上海市", 199),("湖南省", 2…

【GitHub项目推荐--游戏模拟器(switch)】【转载】

01 任天堂模拟器 yuzu 是 GitHub 上斩获 Star 最多的开源 Nintendo Switch 模拟器 ,使用 C 编写,考虑到了可移植性,该模拟器包括 Windows 和 Linux 端。 如果你的 PC 满足必要的硬件要求,该模拟器就能够运行大多数商业游戏&…

DC电源模块的发展与创新

BOSHIDA DC电源模块的发展与创新 DC电源模块在过去几十年中经历了许多发展与创新。以下是其中一些重要的方面: 1. 提高功率密度:随着科技的进步,DC电源模块的功率密度不断提高。通过使用更高效的能量转换技术和材料,设计工程师…

盲盒小程序系统:发展趋势和发展魅力

随着“盲盒经济”的蓬勃发展,越来越多的人加入到了盲盒的行列,各类企业商家也纷纷投身到了盲盒的火热中。 盲盒火爆的最大吸引力还是在于其独特的惊喜感和刺激感。盲盒具有不确定性,这种不确定性能够让大众拆开盲盒后感到惊喜。盲盒还具有社…

ServletResponse接口

ServletResponse接口 ServletContext接口向servlet提供关于其运行环境的信息。上下文也称为Servlet上下文或Web上下文,由Web容器创建,用作ServletContext接口的对象。此对象表示Web应用程序在其执行的上下文。Web容器为所部署的每个Web应用程序创建一个ServletContext对象。…

【极数系列】Flink搭建入门项目Demo 秒懂Flink开发运行原理(05)

文章目录 引言1.创建mavenx项目2.包结构3.引入pom依赖4.增加log4j2.properties配置5.创建主启动类6.构建打jar包7.flinkUI页面部署 引言 gitee地址:https://gitee.com/shawsongyue/aurora.git 源码直接下载可运行,模块:aurora_flink Flink 版…

数据结构与算法:复杂度

友友们大家好啊,今天开始正式学习数据结构与算法有关内容,后续不断更新数据结构有关知识内容,希望多多支持! 数据结构: 数据结构是用于存储和组织数据的方式,以便可以有效地访问和修改数据。不同的数据结构…