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

Day02嵌入式---按键控灯

一、简单介绍

  按键控制灯开关是一种常见的嵌入式系统示例项目,它通常用于演示嵌入式系统的基本控制能力。该项目由一个或多个LED和一个按键组成。通过按下按键,可以控制LED的开关状态,从而实现灯的亮灭控制。

二、查看功能手册

2.1 查看硬件引脚号码

这里我们使用STM32F40xxx这个板子来实现按键控制开关这个小项目

KEY0的引脚是PE4,KEY1的引脚是PE3。

可知 PE4:"PE"表示端口E,"4"表示该端口上的第4号引脚

PE3:"PE"表示端口E,"3"表示该端口上的第3号引脚

2.2查看硬件引脚号码对应的时钟型号

根据硬件引脚号码,KEY0和KEY1都是PE,那么控制他俩的时钟型号都是GPIOE,而根据上图可知,GPIOE在AHB1总线上,根据这个逻辑就能找到GPIOE时钟型号,并打开时钟信号。

AHB1ENR 寄存器用于配置 AHB1 总线上各个模块的时钟使能位。

2.3 确定输入模式

因为按键是一个输入外设,所以选择输入模式

2.4 确定输入类型

2.5确定输入速度

2.6 选择上拉模式

采用上拉模式,按键按下后,由高电平到低电平是一个下降沿。

三、使用现成函数来实现

3.1 确定时钟

由上述可知GPIOE由AHB1这个总线控制时钟信号

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);

3.2GPIO结构体

3.3设置输入/输出模式

这里选择GPIO_Mode_IN输入模式

3.4选择输入类型

选择GPIO_PuPd_UP上拉输入

3.5选择引脚

选择3和4引脚

3.6 选择速度

选择高速GPIO_High_Speed。

综上所述,汇总如下

GPIO_InitTypeDef GPIO_InitTypeDefStruct2;
GPIO_InitTypeDefStruct2.GPIO_Mode=GPIO_Mode_IN;//选择输入模式
GPIO_InitTypeDefStruct2.GPIO_PuPd=GPIO_PuPd_UP;//选择上拉模式
GPIO_InitTypeDefStruct2.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4;//使用3号引脚和4号引脚
GPIO_InitTypeDefStruct2.GPIO_Speed= GPIO_High_Speed ;//选择高速
GPIO_Init(GPIOE,&GPIO_InitTypeDefStruct2);

四、实现功能

加上Day01的小灯的代码即可实现功能。

int main()
{
    Key_Init();
    LED_Init();
    int num=500000;
    LED1_OFF();
    LED2_OFF();
    while(1)
    {
        if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0)
        {
            while(num--)
            {
                
            }
            num=50000;
            while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0)
            {
                    
                //GPIO_SetBits(GPIOF,GPIO_Pin_8);
                LED1_OFF();
                LED2_OFF();
                while(num--)
                {
                }
                
                num=50000;
            }
        }
        if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)
        {
            while(num--)
            {
                
            }
            num=50000;
            
            while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)
            {
                    LED2_ON();
                while(num--)
                {
                }
                
                num=50000;
            }
        }
    }

 


http://www.kler.cn/a/145328.html

相关文章:

  • Win11下帝国时代2无法启动解决方法
  • 解码,蓝桥杯2020G
  • 计算机网络 IP 网络层 2 (重置版)
  • 【Matlab高端绘图SCI绘图模板】第006期 对比绘柱状图 (只需替换数据)
  • LCR 139.训练计划 I
  • Cannot resolve symbol ‘XXX‘ Maven 依赖问题的解决过程
  • 【超强笔记软件】Obsidian实现免费无限流量无套路云同步
  • 2023.11.25 关于 MyBatis 的配置与使用
  • RAID磁盘阵列
  • 二十三种设计模式全面解析-深入探讨状态模式的高级应用技术:释放对象行为的无限可能
  • 深入学习pytorch笔记
  • 大数据-之LibrA数据库系统告警处理(ALM-37002 MPPDB实例连接数超限)
  • 公司人事管理系统
  • 企业海外分部,如何实现安全稳定的跨境网络互连?
  • 概念解析 | 玻尔兹曼机
  • 智能生活:人工智能如何改变我们的日常
  • 【QML】Qt设置USB免驱相机曝光时间(Linux系统)UVC
  • IDEA中的Postman?完全免费!
  • CDN技术解析:加速网络传输的魔法
  • 鸿蒙HarmonyOS手把手带大家创建第一个项目 并做一个基本的组件结构讲解
  • Vatee万腾独特科技力量的前沿探索:Vatee的数字化奇点
  • Android:Google三方库之集成应用内评价详细步骤
  • 下一代图片压缩格式 AVIF
  • NFT Insider115:The Sandbox开设元宇宙Diorama快闪店,​YGG Web3 游戏峰会已开幕
  • The TypeScript Compiler - Version 5.2.2,tsc -w无效怎么办?
  • 「Verilog学习笔记」数据串转并电路