【蓝桥杯嵌入式】stm32 关于切换界面

题目要求i

主函数的while(1)中,

这里的Sleeping_display_flag就是标志位,如果没有显示了睡眠的界面,就要显示数据界面

这里的是显示数据的函数

void Data_Display(){
	LCD_DisplayStringLine(Line2,(uint8_t *)"        DATA        ");
	
	sprintf((char *)str,"     TEMP:%.1f    ",g_f_adc_wendu);
	LCD_DisplayStringLine(Line4,(uint8_t *)str);
	
	sprintf((char *)mode_str,"     MODE:%d    ",g_Mode_flag);
	LCD_DisplayStringLine(Line5,(uint8_t *)mode_str);
	
	sprintf((char *)gear_str,"     GEAR:%d    ",g_Gear);
	LCD_DisplayStringLine(Line6,(uint8_t *)gear_str);
	

}

最主要的还是定时器中断处理函数,每次5s中进一次中断,把Sleeping_display_flag置1,让主函数中的进入睡眠模式

每次按键检测需要重新初始化定时器(因为总不能在数据模式的时候你去设置,然后没设置完跳到睡眠模式的界面去了吧)

void TIM6_IRQHandler(void)
{
  HAL_TIM_IRQHandler(&htim6);
}
 
 
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{	
	Sleeping_display_flag = 1;

}

然后就是按键的代码了,要求是

于是我在每次的按键检测后面都有检测到底是在哪个界面,如果在sleeping界面,则不执行原本在数据界面的功能按键。只有在数据界面的时候就是Sleeping_display_flag = 0才会执行模式的选择

void Mode_set(){
	if (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == GPIO_PIN_RESET && g_Mode_flag == 0){
		HAL_Delay(10);
		if (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == GPIO_PIN_RESET && g_Mode_flag == 0){
			if (Sleeping_display_flag == 1){
				MX_TIM6_Init();
				HAL_TIM_Base_Start_IT(&htim6);
				Sleeping_display_flag=0;
			}
			else
				g_Mode_flag = 1;			
		}
		while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == GPIO_PIN_RESET);
	}
	if (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == GPIO_PIN_RESET && g_Mode_flag == 1)
		HAL_Delay(10);
		if (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == GPIO_PIN_RESET && g_Mode_flag == 1){
			if (Sleeping_display_flag == 1){
				MX_TIM6_Init();
				HAL_TIM_Base_Start_IT(&htim6);
				Sleeping_display_flag = 0;
			}
			else
				g_Mode_flag = 0;
		}			
		while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == GPIO_PIN_RESET);
}

踩的坑就这些,第一次写一个较完整的嵌入式代码,大佬轻喷。。

附上我的keil链接,串口收发没写,写了一坨屎山,不要慌,慢慢改

链接:https://pan.baidu.com/s/15ueLQEKIZv4u7QeFcrprcQ?pwd=kylh 
提取码:kylh

题目要求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值