0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32按键控制LED的亮灭

单片机与嵌入式 来源:单片机与嵌入式 2023-12-11 14:19 次阅读

使用一个按键控制LED的亮灭,按键按下时LED亮起,按键松开时LED熄灭。通过按键控制实验来介绍下 IO 口作为输入的使用。本例中用到了GPIOE的PE3管脚。

LED和按键的电路图。

454bebfa-97ec-11ee-8b88-92fbcf53809c.png

455c27d6-97ec-11ee-8b88-92fbcf53809c.png

按键 K_LEFT、K_DOWN、K_RIGHT 分别连接在 STM32F1 芯片的 PE2、PE3、PE4引脚上。

按键另一端是全部接在 GND 上,这个和我们学习 51单片机是一样的,采用独立式按键接法,按下时输入到芯片管脚即为低电平。

整个程序实现的流程步骤如下:

初始化按键使用的端口时钟

按键检测处理

按键控制处理

工程文件目录如下。

4573208a-97ec-11ee-8b88-92fbcf53809c.png

IO口初始化程序代码在key.c文件中。

/***************************************************************
* 函 数 名 : KEY_Init
* 函数功能 : 按键初始化
* 输 入 : 无
* 输 出 : 无
*****************************************************************/
void KEY_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Pin=KEY_UP_Pin;//选择你要设置的IO口
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//下拉输入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置传输速率
GPIO_Init(KEY_UP_Port,&GPIO_InitStructure);/*初始化GPIO*/
GPIO_InitStructure.GPIO_Pin=KEY_DOWN_Pin|KEY_LEFT_Pin|KEY_RIGHT_Pin;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉输入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(KEY_Port,&GPIO_InitStructure);
}

要知道哪个按键被按下,就需要编写按键检测函数,具体代码如下:

/****************************************************************
* 函 数 名 : KEY_Scan
* 函数功能 : 按键扫描检测
* 输 入 : mode=0:单次按下按键
 mode=1:连续按下按键
* 输 出 : 0:未有按键按下
KEY_UP:K_UP 键按下
KEY_DOWN:K_DOWN 键按下
KEY_LEFT:K_LEFT 键按下
KEY_RIGHT:K_RIGHT 键按下
*****************************************************************/
u8 KEY_Scan(u8 mode)
{
  static u8 key=1;
  if(key==1&&(K_UP==1||K_DOWN==0||K_LEFT==0||K_RIGHT==0))//任意一个按键按下
  {
delay_ms(10);//消除抖动
    key=0;
    if(K_UP==1)
    {
      return KEY_UP;
    }
    else if(K_DOWN==0)
    {
      return KEY_DOWN;
    }
    else if(K_LEFT==0)
    {
      return KEY_LEFT;
    }
    else
    {
      return KEY_RIGHT;
    }
  }
elseif(K_UP==0&&K_DOWN==1&&K_LEFT==1&&K_RIGHT==1)//无按键按下
{
  key=1;
}
if(mode==1)//连续按键按下
{
  key=1;
}
  return 0;
}

主函数,代码如下:

#include "system.h"
#include "SysTick.h"
#include "led.h"
#include"key.h"
int main()
{
  u8 key;
  SysTick_Init(72);
  LED_Init();
  KEY_Init();


while(1)
  {
    key=KEY_Scan(1);   //Á¬ÐøɨÃè°´¼ü
if(key)
    {
      led2=0;
      delay_ms(5);//每隔5ms灭一次
if(KEY_Scan(1)!=key)
      {
        led2=!led2;
        delay_ms(5);
      }
    }    
  }
}

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    240

    文章

    23100

    浏览量

    657524
  • 单片机
    +关注

    关注

    6030

    文章

    44502

    浏览量

    632305
  • STM32
    +关注

    关注

    2265

    文章

    10859

    浏览量

    354501
  • IO口
    +关注

    关注

    3

    文章

    169

    浏览量

    23975
  • 按键控制
    +关注

    关注

    1

    文章

    44

    浏览量

    8763

原文标题:STM32基础实例-按键控制LED

文章出处:【微信号:单片机与嵌入式,微信公众号:单片机与嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用STM32按键控制LED

    本次实验所用到的Simulink模型如图5.1所示,实验现象: 按键按下、松开LED循环实现翻转亮效果,当按键按下时,产生下降沿脉冲,通过一个计数器对下降沿脉冲进行0~1循环计数,计
    的头像 发表于 11-29 16:22 2424次阅读
    使用<b class='flag-5'>STM32</b><b class='flag-5'>按键控制</b><b class='flag-5'>LED</b><b class='flag-5'>亮</b><b class='flag-5'>灭</b>

    stm32f103按键控制led

    stm32f103按键控制led,正题引入:下面就直接进入正题,按键中断
    发表于 08-05 07:37

    利用按键控制LED

    STM32 HAL库 CubeMX教程(四)外部中断实验内容NVIC(嵌套向量中断控制器)外部中断简介CubeMX配置中断回调函数编写实验内容 利用按键控制LED
    发表于 08-09 09:02

    STM32F103实验二:按键控制LED 精选资料推荐

    STM32单片机按键控制LED
    发表于 08-16 07:16

    利用按键控制LED灯的

    STM32F4工程--IO口--按键控制点灯程序(库函数) ----芯片:STM32F429IGT6本文章介绍使用STM32F4单片机,利用按键控制
    发表于 08-24 07:18

    按键控制外部中断实现LED的方法

    一,按键控制外部中断实现LED开机使得P1.0管脚的LED按下
    发表于 12-06 08:19

    如何利用Stduino通过按键控制LED

    2020/01/06 星期一作者:Astilbe问题:如何利用Stduino通过按键控制LED。我们已经学习过怎么点亮一颗LED灯,那
    发表于 01-05 07:52

    基于CC2530芯片按键控制LED 实验资料下载

    基于CC2530芯片按键控制LED 实验资料下载
    发表于 05-03 10:00 7次下载

    使用51单片机按键控制LED和单个IO翻转的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机按键控制LED和单个IO翻转的程序免费下载。
    发表于 07-08 17:41 12次下载
    使用51单片机<b class='flag-5'>按键控制</b><b class='flag-5'>LED</b><b class='flag-5'>亮</b><b class='flag-5'>灭</b>和单个IO翻转的程序免费下载

    FPGA入门系列实验教程之按键控制LED的详细资料说明

    实现按键控制LED。通过这个实验,掌握采用Verilog HDL语言编程实现按键控制LED
    发表于 06-11 16:50 31次下载
    FPGA入门系列实验教程之<b class='flag-5'>按键控制</b><b class='flag-5'>LED</b><b class='flag-5'>亮</b><b class='flag-5'>灭</b>的详细资料说明

    FPGA入门系列实验教程之如何进行按键消抖控制LED

    实现按键控制 LED 。通过这个实验,掌握采用 Verilog HDL 语言编程实现按键控制 LED
    发表于 06-11 16:50 13次下载
    FPGA入门系列实验教程之如何进行<b class='flag-5'>按键</b>消抖<b class='flag-5'>控制</b><b class='flag-5'>LED</b><b class='flag-5'>亮</b><b class='flag-5'>灭</b>

    按键控制LED灯的闪烁工程文件免费下载

    本文档的主要内容详细介绍的是按键控制LED灯的闪烁工程文件免费下载。
    发表于 05-28 08:00 24次下载
    <b class='flag-5'>按键控制</b><b class='flag-5'>LED</b>灯的闪烁<b class='flag-5'>亮</b><b class='flag-5'>灭</b>工程文件免费下载

    STM32F103实验二:按键控制LED

    STM32单片机按键控制LED
    发表于 12-16 16:55 62次下载
    <b class='flag-5'>STM32</b>F103实验二:<b class='flag-5'>按键控制</b><b class='flag-5'>LED</b><b class='flag-5'>亮</b><b class='flag-5'>灭</b>

    基于stm32按键控制led

    基于stm32按键控制led资料文件分享
    发表于 09-21 15:50 39次下载

    stm32按键控制led

    stm32按键控制led  在嵌入式系统中,硬件按键常常被用作开关输入,
    的头像 发表于 09-02 17:05 1w次阅读