STM32入坑(五)按键控制LED小灯

您所在的位置:网站首页 led灯的图标 STM32入坑(五)按键控制LED小灯

STM32入坑(五)按键控制LED小灯

2023-07-30 20:19| 来源: 网络整理| 查看: 265

简介

名称:按键控制LED小灯 功能:KEY0控制LED小灯,按键按一次灯亮,再按一次灯灭 硬件资源:STM32开发板、(按键、LED灯)

按键原理

在这里插入图片描述 如图,当配置按键KEY0为上拉输入,扫描按键的状态时,为高电平。当我们手动按下按键KEY0时,按键和GND接通,再扫描按键KEY0时则为低电平。上述就是按键的原理,如果扫描到按键对应端口为低电平,则表示按键按下。(当然按键如果接高电平则应配置按键模式为下拉输入)

GPIO口的操作说明

1.读取IO口输入电平的库函数: GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) //读取A15引脚

2.读取IO口输入电平的位带操作: PAin(15) //读取A15引脚

配置及方法

1. 配置按键端口 注:引脚需配置为上/下拉输入

void KEY_Init(void) { /***** 配置PA15 *****/ GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;//上拉 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_15; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz; GPIO_Init(GPIOA,&GPIO_InitStruct); GPIO_SetBits(GPIOA,GPIO_Pin_15); }

2.编写按键扫描函数

//mode为是否支持连按 //0:不支持连按; 1:支持连按 u8 KEY_Scan(u8 mode) { static u8 key_up=1;//按键松开标志 if(mode)key_up=1; //支持连按 if(key_up&&(KEY1==0)) { delay_ms(10); //去抖 key_up = 0; if(KEY1==0)return KEY1_PRES; }else if(KEY1==1)key_up=1; return 0; //无按键按下 }

3.主函数初始化LED,delay和KEY

delay_init(); LED_Init(); KEY_Init();

4.在while中扫描按键,如果KEY0按键按下,LED状态翻转

while(1) { key = KEY_Scan(0);//不支持连续按得到按键值 if(key) { switch(key) { case KEY1_PRES:LED=!LED;break; default: delay_ms(100); } } } 注意事项 按键扫描函数中必须有个delay_us(10),用于消抖,滤除干扰信号。扫描函数中,原子哥配备了一个参数mode,用于支持连按和不连按。大家根据需求选择。

程序已经过调试验证,key0按键和LED灯工作正常

完整代码传送门: //download.csdn.net/download/m0_46195580/12504210



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3