两种写法,应该是一样的,但有一种不起作用,求大神解答,谢谢!
第一种:
unsigned char scanKey(void)
{
unsigned char ret=0x00;
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1)
{
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0));
ret= 0x01; //这个返回值意思是亮第一个灯
}
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1)
{
while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13));
ret= 0x10; //这个返回值意思是亮第二个灯
}
return ret;
}
第二种:
unsigned char scanKey(void)
{
unsigned char ret=0x00;
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1)
{
ret= 0x01; //这个返回值意思是亮第一个灯
}
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1)
{
ret= 0x10; //这个返回值意思是亮第二个灯
}
//下面两句是等待按键释放的意思
while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13));
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0));
return ret;
}
main函数里面死循环:检测此函数返回值是0x01还是0x10,点亮不同的灯,并延时0.5s,进入下一次循环。
事实情况是第一种写法完全没问题;第二种写法,有时候按下去按键没反应,该亮的灯不亮。
求大神解答,这个问题一直想不通,很困惑。谢谢!! |