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

发布于:2025-07-19 ⋅ 阅读:(12) ⋅ 点赞:(0)

一、按键控制

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 模块


网站公告

今日签到

点亮在社区的每一天
去签到