stm32按键实现LED的闪烁

这篇具有很好参考价值的文章主要介绍了stm32按键实现LED的闪烁。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先,需要准备如下硬件设备:

  1. STM32F103C8T6单片机开发板
  2. 4个LED灯
  3. 4个220欧姆电阻
  4. 4个按键

接下来,我将讲解如何连接硬件设备。

  1. 将4个LED灯连接到STM32单片机的PB0、PB1、PB2、PB3引脚上。
  2. 将4个220欧姆电阻连接到PB0、PB1、PB2、PB3引脚上,防止电流过大损坏LED灯。
  3. 将4个按键连接到STM32单片机的PA0、PA1、PA2、PA3引脚上。

连接好硬件设备后,需要编写程序实现LED灯的闪烁,并且根据按键的状态来控制LED灯的亮灭。

首先,需要在程序中定义引脚号和按键状态。我们可以使用宏定义,如下所示:

#define LED0_Pin GPIO_PIN_0   //LED0对应PB0引脚

#define LED0_GPIO_Port GPIOB   //LED0对应GPIOB组

#define LED1_Pin GPIO_PIN_1   //LED1对应PB1引脚

#define LED1_GPIO_Port GPIOB   //LED1对应GPIOB组

#define LED2_Pin GPIO_PIN_2   //LED2对应PB2引脚

#define LED2_GPIO_Port GPIOB   //LED2对应GPIOB组

#define LED3_Pin GPIO_PIN_3   //LED3对应PB3引脚

#define LED3_GPIO_Port GPIOB   //LED3对应GPIOB组

#define KEY0_Pin GPIO_PIN_0   //KEY0对应PA0引脚

#define KEY0_GPIO_Port GPIOA   //KEY0对应GPIOA组

#define KEY1_Pin GPIO_PIN_1   //KEY1对应PA1引脚

#define KEY1_GPIO_Port GPIOA   //KEY1对应GPIOA组

#define KEY2_Pin GPIO_PIN_2   //KEY2对应PA2引脚

#define KEY2_GPIO_Port GPIOA   //KEY2对应GPIOA组

#define KEY3_Pin GPIO_PIN_3   //KEY3对应PA3引脚

#define KEY3_GPIO_Port GPIOA   //KEY3对应GPIOA组

在定义完引脚号和按键状态后,需要初始化GPIO口和NVIC。可以使用HAL库来实现,如下所示:

void GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;

__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
__HAL_RCC_GPIOB_CLK_ENABLE(); //使能GPIOB时钟

//配置LED引脚为推挽输出
GPIO_InitStruct.Pin = LED0_Pin | LED1_Pin | LED2_Pin | LED3_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(LED0_GPIO_Port, &GPIO_InitStruct);

//配置按键引脚为上拉输入
GPIO_InitStruct.Pin = KEY0_Pin | KEY1_Pin | KEY2_Pin | KEY3_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(KEY0_GPIO_Port, &GPIO_InitStruct);

//配置中断
HAL_NVIC_SetPriority(EXTI0_IRQn, 1, 0); //设置中断优先级
HAL_NVIC_EnableIRQ(EXTI0_IRQn); //使能中断
HAL_NVIC_SetPriority(EXTI1_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
HAL_NVIC_SetPriority(EXTI2_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(EXTI2_IRQn);
HAL_NVIC_SetPriority(EXTI3_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(EXTI3_IRQn);
}

在GPIO初始化的基础上,还需要写中断服务函数,处理按键事件。可以使用HAL库提供的函数,如下所示:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if (GPIO_Pin == KEY0_Pin)
  {
   HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin); //切换LED0状态
  }
   else if (GPIO_Pin == KEY1_Pin)
  {
   HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); //切换LED1状态
  }
   else if (GPIO_Pin == KEY2_Pin)
  {
   HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin); //切换LED2状态
  }
   else if (GPIO_Pin == KEY3_Pin)
  {
   HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); //切换LED3状态
  }
}

最后,我们需要编写主函数,循环实现LED闪烁。可以使用HAL库提供的函数,如下所示:

int main(void)
{
  HAL_Init(); //HAL库初始化
  GPIO_Init(); //GPIO初始化

  while (1)
  {
    HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin); //切换LED0状态
    HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); //切换LED1状态
    HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin); //切换LED2状态
    HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); //切换LED3状态
    HAL_Delay(500); //延时500ms
  }
}

21物联网应用技术2班-韦力  20210320044文章来源地址https://www.toymoban.com/news/detail-716759.html

到了这里,关于stm32按键实现LED的闪烁的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机-按键控制led灯

    1.开发环境介绍 使用C语言,环境为keil Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用. 什么是单片机 单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具

    2024年02月09日
    浏览(30)
  • 51单片机按键控制LED亮灭

    通过单片机按键控制LED亮灭与传统电路的物理逻辑不同,在物理逻辑中开关控制电路的通断来控制LED的亮灭,而通过单片机完成该项目至于要不断地读取按键所连接IO口的电平来判断对LED连接的IO口输出的电平即可。 原理图如下:  根据原理图,我们可以发现按键按下时P2.1口

    2023年04月18日
    浏览(38)
  • stm32单片机开关控制LED灯(中断方式)(proteus电路图)

      补充一点:拼多多上面LED额定电流20mA,额定电压2V,额定电阻100欧姆,后边这个是STM32 如果只是用面包板做实验,输入输出都不是很多,就直接用灌电流的方式把LED直接接到STM32了,即使是设计产品,如果能够直接接,那么肯定也是不会浪费钱去买额外的原件的,所以只有

    2024年02月11日
    浏览(31)
  • 51单片机:独立按键控制LED灯

    1. 独立按键控制LED灯状态          亮灭实验完成后,就可以控制LED状态,首先我们知道由于机械结构的弹性作用,按键开关在闭合时不会一瞬间稳定的接通,在断开时,也不会一下子断开。所以就得需要程序消抖,也就是适当延时,程序如下 #include\\\"reg52.h\\\" //定义LED灯 sbit

    2023年04月09日
    浏览(29)
  • 51单片机(三)独立按键控制LED

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月08日
    浏览(27)
  • [esp32 + LVGL]物理按键控制屏幕上开关和LED闪烁

    IO0 对应按键 控制 IO2LED闪烁,同时当LED亮的时候开关闭合,当LED灭的时候LED闪烁。 为什么这么做,因为手里没有触摸屏。 首先我们要明白开关闭合的原理,对于触摸屏来说,当你触摸开关的时候会触发点击事件,同时给开关控件添加点击事件。 添加点击事件,也就是开关闭

    2024年02月13日
    浏览(32)
  • 单片机实验三 独立按键控制LED实验

    1.熟悉实验软件和硬件,进行正确的接线; 2.8个不同的按键对应不同的8个灯,按下按键对应的灯就会亮。 1.Keil uVision4 2.PZISP自动下载软件 3.HC6800S开发板 按键实物图 按键按下就会产生一个脉冲信号,检测脉冲信号就可以知道是否有按键被按下去。 按键原理图 按键之间相互独

    2024年02月08日
    浏览(30)
  • 如何使用单片机点亮LED灯,并使用按键控制[51单片机]

    首先先看一下我的板子,如果我们板子不相同,可能操作也不太相同 我们就不讲底层原理了,直接看,我们可以看到板子上有 8个LED灯   那这个8个LED用什么来控制呢,我们先看底层的线路图,所有的LEDD都连接到了P2带后缀的接口上, 那么只需要操作这几个接口的高低电频,

    2024年02月05日
    浏览(32)
  • 设计分享|单片机独立按键控制4个LED灯亮灭

    目录 具体实现功能 设计介绍 51单片机简介 设计思路 设计内容 仿真图(protues8.7) 程序(Keil5) 具体实现功能 单片机四个按键分别控制四个LED的亮灭! 设计介绍 51单片机简介 51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编程Flash存储器,使得其为众多嵌入式控制应

    2024年02月06日
    浏览(36)
  • 51单片机点亮LED灯以及实现2盏LED灯的交替闪烁

    点亮LED灯,根据单片机原理图 将LED灯1和LED灯2介入单片机的口设为低电平即可 代码如下: #include “reg52.h” sbit led1= P3^7; void main() { led1 = 0;//给led1一个低电平,点亮 } 结果图: 图中有一盏LED灯为我这个51单片机自带的电源接通灯,被代码点亮的只有一盏 实现2盏LED灯的交替闪烁

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包