不能正常判断按键函数中的Flag

版权声明:本文为博主原创文章,如需转载,请注明出处 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

猜你喜欢

转载自blog.csdn.net/qq_36554582/article/details/86572046