【江科大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引脚两端当时都松动了

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

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

相关文章

LeetCode、2542. 最大子序列的分数【中等,排序+小顶堆】

文章目录 前言LeetCode、2542. 最大子序列的分数【中等,排序小顶堆】题目及类型思路及代码实现 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领…

VL171 VL170配合LDR6020的type-c母座显示器方案

兼容基于VASEL控制引脚的10 Gbps USB3.2 Gen2和AM所有4通道视频,包括DP1.4 8.1 Gbps VL171配合LDR6020实现的type-c桌面显示器方案电路LDR6020是一个DRP的PD芯片,PD芯片与主机通讯完之后,通过PD芯片去控制VL171实现正反插与USB信号和DP信号的…

abap 将xstring转换成PDF展示

收到外围系统的xstring之后,如何在sap中将其打开呢 1.创建一个屏幕 2.绘制一个customer control 3.创建流逻辑 4.流逻辑如下: DATA: go_html_container TYPE REF TO cl_gui_custom_container, go_html_control TYPE REF TO cl_gui_html_viewer, lv_u…

Kafka-消费者-KafkaConsumer分析

与KafkaProducer不同的是,KafkaConsumer不是一个线程安全的类。 为了便于分析,我们认为下面介绍的所有操作都是在同一线程中完成的,所以不需要考虑锁的问题。 这种设计将实现多线程处理消息的逻辑转移到了调用KafkaConsumer的代码中&#x…

基于nodejs+vue+uniapp社区居民健康问诊管理系统 微信小程序

系统实现阶段的根本目标在这个阶段的设计工作中精确地描述出目标系统,从而在编码阶段可以直接根据这个描述翻译成用程序语言编写的系统。 系统实现的基本任务有以下几个: 语言:javapythonnodejsphpnodejs均可选 运行软件:idea/eclipse/vsc…

Three.js 学习笔记之模型(学习中1.17更新)

文章目录 模型 几何体 材质模型点模型Points - 用于显示点线模型Line | LineLoop | LineSegments网格模型mesh - 三角形 几何体BufferGeometry缓冲类型几何体BufferGeometry - 没有任何形状的空几何体创建几何体的方式BufferAttribute Types定义顶点法线 geometry.attributes…

Kafka系列(四)

本文接kafka三,代码实践kafkaStream的应用,用来完成流式计算。 kafkastream 关于流式计算也就是实时处理,无时间概念边界的处理一些数据。想要更有性价比地和java程序进行结合,因此了解了kafka。但是本人阅读了kafka地官网&#…

Revealing the Dark Secrets of MIM

论文名称: Revealing the Dark Secrets of Masked Image Modeling 发表时间:CVPR2022 作者及组织:Zhenda Xie, Zigang Geng, Hu Han等,来自清华,中科院,微软亚洲研究院。 前言 本文尝试探讨MIM为何有效的原…

Java SE入门及基础(19)

二维数组 1. 数组的本质 数组从本质上来说只有一维,二维数组是指在一维数组中再放入一个一维数组。三维数组、四维数组依次类推。 2. 二维数组的定义 语法 数据类型[][] 数组名 new 数据类型[数组的长度][数组的长度]; 示例 public static void main ( Str…

Skywalking链路追踪

目录 一、简介1.1、APM系统1.2、SkyWalking 简介 二、快速入门2.1、下载、启动2.2、界面认识 三、持久化存储四、告警通知五、自定义追踪-细粒度追踪service方法 一、简介 1.1、APM系统 APM(Application Performance Monitoring)系统是一种用于监控和管…

FindMy技术与相机结合

FindMy是苹果公司提供的设备追踪服务,用来帮助用户定位丢失的设备。自苹果公司开放Findmy网络之后,FindMy技术便与各种生活设备相结合,比如与相机的结合。 想象一下,你正在外出办事或者旅行时,突然意识到相机丢了&…

MySQL中根据出生日期计算年龄

创建student表 mysql> create table student( -> sid int primary key comment 学生号, -> sname varchar(20) comm…