STM32:按键控制灯

STM32实现按键控制灯:

五份主要代码:

main.c,KEY.c,LED.c,KEY.h和LED.h

main.c:

#include "stm32f10x.h"
#include "LED.h"
#include "KEY.h"

int main(void)
{
    LED_Init();  // 初始化LED
    KEY_Init();  // 初始化按键
    
    while (1)
    {
        if (Key_GetNum() == 1)  // 获取按键值
        {
            LED1_Toggle();  // 切换LED状态
        }
    }
}

KEY.c:

#include "stm32f10x.h"

static void delay_ms(uint32_t ms);  // 延迟函数声明

void KEY_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);  // 使能GPIOD时钟
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStructure);  // 配置PD0为上拉输入模式
}

uint8_t Key_GetNum(void)
{
    if (GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)
    {
        delay_ms(20);  // 消抖延时
        if (GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)
        {
            while (GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0);  // 等待按键释放
            delay_ms(20);  // 消抖延时
            return 1;
        }
    }
    return 0;
}

static void delay_ms(uint32_t ms)
{
    for (uint32_t i = 0; i < ms * 8000; i++);  // 简单延时
}

LED.c:

#include "stm32f10x.h"

void LED_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // 使能GPIOA时钟
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);  // 配置PA11为推挽输出模式

    GPIO_SetBits(GPIOA, GPIO_Pin_11);  // 设置PA11为高电平(关闭LED)
}

void LED1_Toggle(void)
{
    GPIO_WriteBit(GPIOA, GPIO_Pin_11, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_11)));  // 切换LED状态
}

KEY.h:

#ifndef __KEY_H
#define __KEY_H

#include "stdint.h"

void KEY_Init(void);      // 初始化按键
uint8_t Key_GetNum(void); // 获取按键值

#endif

LED.h:

#ifndef __LED_H
#define __LED_H

void LED_Init(void);      // 初始化LED
void LED1_Toggle(void);   // 切换LED状态

#endif

此代码点灯,需要按下按键再松开按键,才可以实现小灯的开关(与下次作业做区分)。

演示视频:

stm32按键控制灯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值