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

目录

一.硬件

二.硬件电路

三.C语言基础

四.代码实现 

1.按键控制LED

(1)自己的代码逻辑

(2)视频的代码逻辑

 2.光敏控制蜂鸣器


一.硬件

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

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

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

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

在上下的电阻分压下,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.hqwc.cn/news/442319.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java SE继承和组合

文章目录 1.继承1.1.继承的概念:1.2. 继承的语法:1.3.父类成员访问:1.3.1 子类中访问父类的成员变量:1.3.2 子类中访问父类的成员方法: 1.4.子类构造方法:1.5. super和this:相同点:不同点&#…

目标检测算法训练数据准备——Penn-Fudan数据集预处理实例说明(附代码)

目录 0. 前言 1. Penn-Fudan数据集介绍 2. Penn-Fudan数据集预处理过程 3. 结果展示 4. 完整代码 0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如…

【MBtiles数据索引和服务发布】GeoServer改造Springboot番外系列二

xyz地图服务访问示例:http://192.168.1.240:8081/gmserver/raster/xyz/firstWP:Imagery-raster/{z}/{x}/{y}.jpg 访问示例如下: mbtiles目录结构 根据z,x,y获取对应mbtiles文件路径的工具方法 说明:重点是使用getMb…

RabbitMQ入门概念

目录 一、RabbitMQ入门 1.1 rabbitmq是啥? 1.2 应用场景 1.3 AMQP协议与RabbitMQ工作流程 1.4 Docker安装部署RabbitMQ 二、SpringBoot连接MQ配置 2.1 示例1 2.1 示例2 —— 发送实体 一、RabbitMQ入门 1.1 rabbitmq是啥? MQ(Message…

02-opencv简单实例效果和基本介绍-上

机器视觉概述 机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品(即图像摄取装置,分CMOS和CCD两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,得到被摄目标的形态信息,根据像素…

Win10+wsl2+mmdetection3d(GPU)

2024部署mmdetection3d在win10wsl2 实现过程安装wsl2安装docker与VSCode插件连接其他问题 实现过程 安装WSL2 踩坑点: 基于发行版安装,无法更新wsl1,查证了当前的wi10的驱动是满足要求的,但是无法更新。所以一定要先去更新驱动&…

iZotope RX 10.4.2 mac激活版 音频修复和增强工具

iZotope RX 10 for Mac是一款专业的音频修复软件,旨在提供强大、精确的工具,让用户能够清晰、纯净地处理音频。以下是其主要功能和特点: 软件下载:iZotope RX 10.4.2 mac激活版下载 强大的降噪功能:iZotope RX 10采用了…

SRC实战 | 信息泄露挖掘

本文由掌控安全学院 - 叴龙 投稿 1. 信息搜集 首先老语法先搜集一波,毕竟没有钓鱼和sg的能力,只能找注册站去挖挖了。 web.title”XX大学”&&web.body”忘记密码”&&web.body”注册” 2. 漏洞挖掘 这里找到一个可以注册网站接口&…

Python之PyMySQL模块

Python之PyMySQL模块 目录 Python之PyMySQL模块安装连接数据库connect拓展 获取游标操作数据查找添加更新 安装 pip install pymysql连接数据库 使用connect函数创建连接对象 此对象提供数据库的关闭、事务提交、事务回滚等操作 示例: import pymysql# 以下为必…

java大文件分片上传

1.效果图 2.前端html <!DOCTYPE html> <html> <head></head> <body> <form><input type"file" id"fileInput" multiple><button type"button" onclick"upload()" >大文件分片上传&l…

【JAVA】Long类型返回到前端,精度丢失

一. 问题阐述 20位long类型的数字&#xff0c;从后端接口返回到前端后【四舍五入】 MYSQL端 &#xff08;1&#xff09;bigint (20) &#xff08;2&#xff09;具体某一条数据 JAVA端 &#xff08;1&#xff09;实体类 &#xff08;2&#xff09;服务类 &#xff08;3&…

【Vue.js设计与实现】第一篇:框架设计概览-阅读笔记(完结)

从高层设计的角度去探讨框架需要关注的问题。 参考&#xff1a;速读《Vue.js 设计与实现》 - 掘金 (juejin.cn) 系列目录&#xff1a; 标题博客第一篇&#xff1a;框架设计概览【Vue.js设计与实现】第一篇&#xff1a;框架设计概览-阅读笔记第二篇&#xff1a;响应系统【Vue.…