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

news/2024/10/22 17:32:26/

【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.ppmy.cn/news/1323807.html

相关文章

Pytorch各种Dropout层应用于详解

目录 torch框架Dropout functions详解 dropout 用途 用法 使用技巧 参数 数学理论公式 代码示例 alpha_dropout 用途 用法 使用技巧 参数 数学理论公式 代码示例 feature_alpha_dropout 用途 用法 使用技巧 参数 数学理论 代码示例 dropout1d 用途 用…

selinux简介

Selinux使用详解 注:redhat selinux使用说明文档:使用 SELinux Red Hat Enterprise Linux 8 | Red Hat Customer Portal 1、说明 selinux(security enhanced linux安全性增强的linux) 由美国安全局nsa(national se…

HTML中常用标签--详解

目录 1.b/strong标签 2.i/em 标签 3.u标签 4.del删除线 5.br换行 6.p标签 * 7.pre 预处理标签 8.span标签** 9.div标签*** 10.sub标签 11.sup标签 12.hr标签 13.hn标签 14.HTML5中语义标签 特殊字符 15.多媒体标签 img*** a 标签*** 第一种用法:…

知识笔记(八十四)———链式语句中fetchSql和force和bind用法

fetchSql: fetchSql用于直接返回SQL而不是执行查询,适用于任何的CURD操作方法。 例如: $result Db::table(think_user)->fetchSql(true)->find(1);输出result结果为: SELECT * FROM think_user where id 1 force&#…

rust嵌入式开发补充

本文是对rust嵌入式开发的补充,就当时遗留的一些问题进行增补与修正。 RTIC中的任务处理 在上篇文章中还不是很理解rtic的工作机制。但写东东进行总结的好处就体现出来了,在上篇文章中提到了rtic的app入口本就是一个进程宏,所以在写完文章后…

cesium内部相同坐标在不同高度的2个点的属性机制坐标会gltf模型角度值异常问题mars3d的处理办法

模型一直向上运动的正常效果: 问题场景: 1.new mars3d.graphic.ModelPrimitive({使用addDynamicPosition(设置并添加动画轨迹位置,按“指定时间”运动到达“指定位置”时发现,如果是同一个点位不同高度值的y轴竖直向上方向的运动…

cmake构建动态库实例(cmakelist)

文章目录 一、开发实例1.1 代码目录1.2 代码内容1.2.1 CMakeLists.txt1.2.2 mylib.cpp1.2.2 mylib.h1.2 编译二、动态库使用方法一、动态链接源代码构建运行方法二:dlopen方式一、开发实例 通过cmake构建静态开发实例如下: 1.1 代码目录 代码目录结构如下:

hardware simulation——框架搭建

目录 引子 代码风格约束 代码结构和模板 引子 前几天有人拿个word文档,问我怎么实现,概括一下就是用c实现数码管显示。 但是咱们肯定不做这么简单这么点,我打算做个开源的项目,可以一直更新底层软件库,和上层显示库…