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

一.硬件

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

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

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

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

在上下的电阻分压下,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();
		}	
	}	
}
	

 

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

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

相关文章

FPGA HDMI IP之DDC(本质I2C协议)通道学习

目的: 使用KingstVIS逻辑分析仪软件分析HDMI的DDC通道传输的SCDC数据(遵循I2C协议),同时学习了解SCDC的寄存器与I2C通信协议。 部分英文缩写: HDMIHigh Definition Multi-media Interface高清多媒体接口DDCDisplay Dat…

CSS基础细节学习

目录 一.CSS--网页的美容师 二.语法规范及选择器的介绍 一.CSS--网页的美容师 CSS是层叠样式表( Cascading Style Sheets )的简称,有时我们也会称之为CSS样式表或级联样式表。 CSS是也是一种标记语言,CSS主要用于设置HTML页面中的文本内容(字体、大小…

自定义实现 View.DragShadowBuilder 设置拖拽视图的大小

直接上刺刀 /*** Desc : 自定义拖拽视图的大小*/ public class CustomDragShadowBuilder extends View.DragShadowBuilder {private double mShadowSize;private Point mScaleFactor;/*** param view 需要拖拽的view* param shadowSize 拖拽视图的放大倍数*/public Cus…

CUDA下载安装教程,新手详细

目录 一、下载二、安装三、 设置环境变量四、补丁安装 由于项目需要安装特定版本的CUDA,现记录安装过程。 一、下载 进入官方下载地址:https://developer.nvidia.com/cuda-toolkit-archive 选择自己需要的版本。如果没有明确要求版本号,那么…

智能AI系统开发,专业软件硬件物联网开发公司,探索未来科技新纪元

在信息时代,人工智能(AI)、物联网等前沿技术日益受到人们的关注。智能AI系统、专业软件硬件物联网开发公司应运而生。今天,我们将向大家介绍一家位于XX城的专业公司,致力于智能AI系统开发和软件硬件物联网领域的创新研…

macOS系统鼠标变彩虹的解决办法(详细)

目录 第一步 打开活动监视器 第二步 找出【简体中文输入方式】这个进程 第三步 点击最上方的"X"按钮,选择"退出" 按钮 第一步 打开活动监视器 如果下方的任务栏没有显示,可以在左下角【启动台】-其他里打开 -- 第二步 找出【…

仰暮计划|“老师说我其实很聪明,就是家里太穷了没条件,不然我现在也是……”

吴桂荣老人回忆录 在我外婆家的时候,我跟几位老奶奶坐在门口一起聊天,我询问她们是否能帮助我完成一份作业,她们笑着答应了,最后我选择了其中的一位老奶奶作为了解对象,她邀请我去家中交谈。通过了解,我得知…

PyTorch深度学习实战(33)——条件生成对抗网络(Conditional Generative Adversarial Network, CGAN)

PyTorch深度学习实战(33)——条件生成对抗网络 0. 前言1. 条件生成对抗网络1.1 模型介绍1.2 模型与数据集分析 2. 实现条件生成对抗网络小结系列链接 0. 前言 条件生成对抗网络 (Conditional Generative Adversarial Network, CGAN) 是一种生成对抗网络…

Hadoop集群部署流程

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

verilog编程之乘法器的实现

知识储备 首先来回顾一下乘法是如何在计算机中实现的。 假设现在有两个32位带符号定点整数x和y,我们现在要让x和y相乘,然后把乘积存放在z中,大家知道,两个32位数相乘,结果不会超过64位,因此z的长度应该为64…

【word】论文、报告:①插入图表题注,交叉引用②快速插入图表目录③删改后一键更新

【word】①插入图表题注,②删改后一键更新 写在最前面插入题注交叉引用修改插入题注的文字格式快速插入图表目录 插入题注后有删改,实现编号一键更新 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你…

LCweekly-game

ExScorecomplete situation1220717/719(解答错误)30523/537(超时)40 有用的是Ex2和Ex4 Ex2 my solution class Solution { public://calculate xs l-time 幂乘int jiecheng(int x,int l){int zx;for(int i0;i<l;i){if(z>pow(10,4.5))return 0;zz*z;}return z;}bool se…

C# 将HTML网页、HTML字符串转换为PDF

将HTML转换为PDF可实现格式保留、可靠打印、文档归档等多种用途&#xff0c;满足不同领域和情境下的需求。本文将通过以下两个示例&#xff0c;演示如何使用第三方库Spire.PDF for .NET和QT插件在C# 中将Html 网页&#xff08;URL&#xff09;或HTML字符串转为PDF文件。 HTML转…

深度强化学习(王树森)笔记04

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

R语言-检验正态性

1.为什么要检验正态性 首先需要明确正态性与正态分布是有区别的&#xff0c;正态分布&#xff08;标准分布&#xff09;是统计数据的分布方式&#xff0c;是个钟形曲线&#xff0c;已平均值为对称轴&#xff0c;数据在对称轴两侧对称分布。正态性是检验实际数据与标准正态分布…

QT 范例阅读:Vector Deformation

效果图&#xff1a; 主要代码&#xff1a; 实现放大镜效果QPainter painter;//两种方式if (1) {m_lens_image QImage(bounds.size(), QImage::Format_ARGB32_Premultiplied);m_lens_image.fill(0);painter.begin(&m_lens_image);} else {m_lens_pixmap QPixmap(bounds.si…

基于多种CNN模型在清华新闻语料分类效果上的对比

该实验项目目录如图&#xff1a; 1、 模型 1.1. TextCNN # coding: UTF-8 import torch import torch.nn as nn import torch.nn.functional as F import numpy as npclass Config(object):"""配置参数"""def __init__(self, dataset, embedd…

OpenCV 0 - VS2019配置OpenCV

1 配置好环境变量 根据自己的opencv的安装目录配置 2 新建一个空项目 3 打开 视图->工具栏->属性管理器 4 添加新项目属性表 右键项目名(我这是opencvdemo)添加新项目属性表,如果有配置好了的属性表选添加现有属性表 5 双击选中Debug|x64的刚添加的属性表 6 (重点)添…

数据结构(链表)

文章目录 一、单链表1、单链表定义2、初始化单链表2.1、不带头结点的单链表2.2、带头结点的单链表 3、单链表基本操作3.1、按位序插入&#xff08;带头结点&#xff09;3.2、按位序插入&#xff08;不带头结点&#xff09;3.3、指定结点的后插操作3.4、指定结点的前插操作3.5、…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-系统属性管理实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…