STM32入坑(五)按键控制LED小灯 |
您所在的位置:网站首页 › led灯的图标 › STM32入坑(五)按键控制LED小灯 |
简介
名称:按键控制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 |