版权声明:本文为博主原创文章,如需转载,请注明出处 https://blog.csdn.net/qq_36554582/article/details/86572046
之前在51单片机里面定义bit类型的变量是这样:
bit flag = 0;
然后今天在32里面写:
static u8 key4_flag = 0;
然后我在后面进行判断:
else if(keycode == 4)
{
key4_flag = ~key4_flag;
if(key4_flag == 1)
{
TIM_Cmd(TIM2, ENABLE);
LCD_ClearLine(Line8);
LCD_DisplayStringLine(Line8 ," Running ");
}
else if(key4_flag == 0)
{
TIM_Cmd(TIM2, DISABLE);
LCD_ClearLine(Line8);
LCD_DisplayStringLine(Line8 ," Pause ");
}
}
乍一看好像没什么问题,可是把程序下载到板子上,就是不会正常运行,每次都是无法执行key4_flag == 1
里面的程序,试了好久,突然想起来,key4_flag
我定义的是一个u8
类型的,也就是说对key4_flag
取反之后,它的状态变化是:
0000 0000->1111 1111-> 0000 0000->1111 1111...
我一直以为是:
0->1->0->1...
尬的一批。。。
所以就导致根本无法进入key4_flag == 1
里面的程序,因为1111 1111 != 1
。
我一直以为还是51里面的bit类型,希望大家不要犯类似的错误,如果在32里面定义u8
类型的flag
的时候,一定要和0000 0000(或者是0)、1111 1111(不能是1)
来进行判断。
正确的判断应该是这样的:
else if(keycode == 4)
{
key4_flag = ~key4_flag;
if(key4_flag == 0xff)
{
TIM_Cmd(TIM2, ENABLE);
LCD_ClearLine(Line8);
LCD_DisplayStringLine(Line8 ," Running ");
}
else if(key4_flag == 0x00)
{
TIM_Cmd(TIM2, DISABLE);
LCD_ClearLine(Line8);
LCD_DisplayStringLine(Line8 ," Pause ");
}
}
如果是u16
类型的flag
,那么就应该是判断key4_flag == 0xffff
。
如果是u32
类型的flag
,那么就应该是判断key4_flag == 0xffffffff
。