按键控制LED

STM32入门一百步第二十九步

按键控制LED便是通过检测按键是否按下来控制LED的亮灭,检测按键的状态即按键的高低电平(1或0)
主程序如下

int main (void)
{
	u8 a; //定义变量
	RCC_Configuration(); //时钟设置
	LED_Init();//LED初始化

	KEY_Init();//按键初始化
	while(1)
	{
		if(GPIO_ReadInputDataBit(KEYPORT,KEY1))
		{ //读按键接口的电平
			GPIO_ResetBits(LEDPORT,LED1); //LED灯都为低电平(0) 
		}
		else
		{	
        	GPIO_SetBits(LEDPORT,LED1); //LED灯都为高电平(1) 
		}
	}
}

但是此程序通过实验便发现按键按下去后可以点亮LED,一旦松开LED便熄灭。因为单片机检测到只是高低电平,按下按键高电平,松开高电平便无法保持,所以按键状态切换进而LED状态切换。
改进按键 加入延时消抖
首先检测按键状态是否按下,如按下,延时再检测一次,如果按下便对LED取反,否则退出,最后用循环检测按键状态是否改变。
主程序如下

		if(!GPIO_ReadInputDataBit(KEYPORT,KEY1))
		{ 
			delay_ms(20); //延时去抖动
			if(!GPIO_ReadInputDataBit(KEYPORT,KEY1))
			{ //读按键接口的电平
				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //LED取反
				while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开 
			}	
	    }

你可能感兴趣的:(按键控制LED)