初级会员

- 积分
- 60
- 金钱
- 60
- 注册时间
- 2016-12-28
- 在线时间
- 8 小时
|
1金钱
功能:
外部给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
但是在软件仿真中还是准确计数的。
求助。
|
最佳答案
查看完整内容[请看2#楼]
在我问了这个问题的第三天,我的领导给了我一个方法,在循环里每一句话加上较大的延时,然后发现可以结果正常了,接着就把那些延时一步一步的减少直到发现具体是哪需要延时以及延时多少。
原因不是很清楚,大概理解为软件和硬件上的差时。
|