刚学STM32,做到按键控制LED亮灭的时候遇到问题,求大神讲解
时间:10-02
整理:3721RD
点击:
刚学STM32,做到按键控制LED亮灭的时候遇到问题,求大神讲解
按键控制的时候,如果加了延时消抖,那么按键,LED灯就不受控制了,如果不加,那么又会产生抖动,怎么办啊,求大神们讲解什么原因,我已经找了好久了,还是不知道
RCC_Configuration();
GPIO_Configuration();
counter=1;
while(1)
{
if(counter==1)
{
if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))
{
//delay_ms(4);
if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))
{
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));
GPIO_SetBits(GPIOD,GPIO_Pin_8);
counter++;
}
}
}
else
{
if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))
{
delay_ms(5);
if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))
{
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));
GPIO_ResetBits(GPIOD,GPIO_Pin_8);
counter=1;
}
}
}
}
按键控制的时候,如果加了延时消抖,那么按键,LED灯就不受控制了,如果不加,那么又会产生抖动,怎么办啊,求大神们讲解什么原因,我已经找了好久了,还是不知道
RCC_Configuration();
GPIO_Configuration();
counter=1;
while(1)
{
if(counter==1)
{
if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))
{
//delay_ms(4);
if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))
{
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));
GPIO_SetBits(GPIOD,GPIO_Pin_8);
counter++;
}
}
}
else
{
if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))
{
delay_ms(5);
if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))
{
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));
GPIO_ResetBits(GPIOD,GPIO_Pin_8);
counter=1;
}
}
}
}
上面一个是不加的,是可以点亮的,下面是加了延时的,再按一下就不会灭了
求大神讲解啊,帮帮新人啊
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)); 这句标注掉 延时函数加长 测试下
按键扫描可以用状态机实现消抖 或者硬件消抖并个电容 小编可以搜索状态机 学习学习 不懂的可交流交流
我也没看出有啥问题额
你试试先宏定义两个常量
#define FALSE 0
#define TRUE !FALSE
初始化 counter = TRUE;if(counter)然后亮灯时counter = FALSE,灭灯时counter = TRUE 看看。
感觉你的延时有点长
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));在按键释放你才让LED响应,紧接着又检测按键释放LED灯灭,故注释while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));顺便加在延时。其实这个用单步仿真,程序是没有问题的。