功能:
外部给PE4高低电平,读取PE4,读到低电平后再读到高电平就计数减一
代码:
u8 a=5; //计数初始值为5
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
delay_init();
LED_Init();
LCD_Init();
LCD_ShowString(30,40,210,24,24,"rest:");
LCD_ShowNum(0,80,a,24,24);
while(1)
{
if(a==0) //当a=0时亮DS1提示,按下KEY1则灭灯
{
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
if(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3))
{
GPIO_SetBits(GPIOE,GPIO_Pin_5);
break;
}
}
else
{
if(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)) //读取到低电平
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5); //亮灯DS0
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)) //读取到高电平
{
a=a-1; //计数减一
LCD_ShowNum(0,80,a,24,24); //LCD屏上显示此时的数值
GPIO_SetBits(GPIOB,GPIO_Pin_5); //灭灯DS0
}
}
else
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
}
}
}
问题:
烧到开发板上给PE4高低电平,LCD屏上有时候会减一,减一规律不定。
第一次:成功 LCD:4 第二次:成功 LCD:4 第三次:......
成功 LCD:3 失败 LCD:4
失败 LCD:3 成功 LCD:3
成功 LCD:2 成功 LCD:2
失败 LCD:2 失败 LCD:2
成功 LCD:1 成功 LCD:1
成功 LCD:0 成功 LCD:0
但是在软件仿真中还是准确计数的。
求助。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
小建议,参考按键消抖的形式,按键松开才算数,尽量把这种函数放在定时器当中做,不要放在主函数,判断类的函数最好不要一直占着CPU,中断中判断成功了置位一个标志给主程序知道就行了
一周热门 更多>