当前位置: 首页 > news >正文

第三章第四节 按键控制光敏传感器控制蜂鸣器

一、按键控制

1. LED.C 模块代码

① LED 初始化函数:

(1) 时钟使能:

void LED_Init(void){// 1. 开启GPIOA的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  • STM32 的所有外设都需要时钟驱动
  • RCC:时钟控制器

(2) 配置结构体:

    // 2. 创建GPIO配置结构体GPIO_InitTypeDef GPIO_InitStructure;
  • GPIO_InitTypeDef:STM32 库定义的结构体类型
  • 创建实例 GPIO_InitStructure 来设置参数

(3) 输出模式:

    // 3. 设置GPIO参数GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 推挽输出模式
  • GPIO_Mode_Out_PP:推挽输出模式
  • 特点:输出 0 时,引脚连接到 GND(低电平);输出 1 时,引脚连接到 VCC(高电平)

② LED1 控制函数

// 点亮LED1(PA1)
void LED1_ON(void){GPIO_ResetBits(GPIOA, GPIO_Pin_1); // 设置PA1为低电平
}
  • GPIO_ResetBits():将指定引脚设为低电平(0V)
  • LED 正向导通,发光

③ GPIO 读取函数

  • 用来读取输入数据寄存器某一个端口的输入值
  • 用来读取整个输入数据寄存器
  • 用来读取输出寄存器某一个端口的输出值
  • 用来读取整个输出数据寄存器

2. Key.c 模块代码

 ① 按键检测流程详解:

(1) 初始化:

  • 配置 PB1 和 PB2 为上拉输入模式
  • 无按键时,引脚为高电平(1)
  • 按键按下时:引脚被拉低到GND(0)

(2) 检测按键按下:

if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)

检测到低电平(0) 表示按键被按下

(3) 延时消抖:

Delay_ms(20);
  • 机械按键在按下瞬间会产生抖动(电平快速变化)
  • 延时 20ms 跳过抖动期,避免误检测

3. main.c 模块

 ① 全局变量声明

uint8_t KeyNum;         // 声明无符号8位整型全局变量,用于存储从按键驱动层获取的扫描结果。

用途:作为键值状态传递媒介,将 Key_GetNum( ) 函数的返回值暂存以供主循环逻辑判断。

② 翻转 LED1 的开关状态

LED1_Turn();        // (16) 翻转LED1的开关状态

(1) 调用函数 LED1_Turn( )(在 LED.h 中声明,在 LED.c 中实现)。这个函数的功能是改变 LED1 的当前状态:

  • 如果 LED1 当前是亮的,就把它灭掉
  • 如果 LED2 当前是灭的,就把它亮起来

二、光敏传感器控制蜂鸣器

1. Buzzer.c 模块

2. LightSensor.c 模块

http://www.dtcms.com/a/285398.html

相关文章:

  • LeetCode|Day18|20. 有效的括号|Python刷题笔记
  • 格式转换Total Excel Converter:20 种格式XLS XLSX 批量转 PDFWord
  • 饿了么app 抓包 hook
  • 【论文蒸馏】Recent Advances in Speech Language Models: A Survey
  • 怎么判断一个对象是不是vue的实例
  • 新手向:图片批量裁剪工具
  • 【IOS webview】IOS13不支持svelte 样式嵌套
  • 为什么IoTDB成为物联网场景的技术优选?
  • NAND闪存(NAND Flash)是什么?
  • rt_thread hc32f460引脚编号
  • 利用steps()分步实现奔跑的小熊案例
  • 『 C++ 入门到放弃 』- set 和 map 容器
  • 【机器学习深度学习】什么是 GGUF?
  • 【QT】调用外部dll
  • QT窗口(4)-浮动窗口
  • Qt窗口(2)-工具栏
  • 【嵌入式硬件实例】-555定时器实现LED追逐效果
  • Python的界面美化库 qt-material
  • 【机器学习】安装Jupyter及基本操作
  • Android如何使用Linux Quota管控app对userdata分区的磁盘空间使用
  • QT聊天项目DAY15
  • 数据结构入门:像整理收纳一样简单!
  • 【git仓库搭建笔记】
  • 二、Dify 版本升级教程(LInux-openeuler)
  • react/vue vite ts项目中,自动引入路由文件、 import.meta.glob动态引入路由 无需手动引入
  • cartorgapher的编译与运行
  • 需要保存至服务器的:常见编辑、发布文章页面基础技巧
  • Machine Learning HW2 report:语音辨识(Hongyi Lee)
  • 如何防止GitHub上的敏感信息被泄漏?
  • Jenkins+Docker+Git实现自动化CI/CD