【蓝桥杯】【省赛真题】

该代码示例展示了在第十一届蓝桥杯比赛中处理串口数据的方法。程序包括接收数据、校验数据格式、转换为浮点数以及在LCD上显示数据的过程。通过HAL_UART_RxCpltCallback回调函数接收数据,使用CHEK_DATA函数检查数据的正确性,并在数据验证通过后更新v_min和v_max值。LCD_Process函数用于更新LCD屏幕上的显示内容。
摘要由CSDN通过智能技术生成

关于第十一届第一场蓝桥杯中如何判断串口数据的问题的代码如下:

//USART
u8 rx_buf[3];
u8 rx_cnt;
u8 load_rx_buf[30];
__IO uint32_t UART_Tick=0;
_Bool flag=0;
int fputc(int ch, FILE *f) 
{
  HAL_UART_Transmit(&huart1,(unsigned char*)&ch,1,50);
  return ch;
}
void UART_Process(void)
{
	if(uwTick-UART_Tick<50)return;
	UART_Tick=uwTick;
	if(rx_cnt>0&&flag==0)
	{
		printf("changdu");
	}
	flag=0;
	rx_cnt=0;
	memset(load_rx_buf,'\0',sizeof(load_rx_buf));
}
//3.3,4.3
//0123456
u8 CHEK_DATA(u8 *str)
{
	if(str[3]!=','||str[1]!='.'||str[5]!='.')
	{
		printf("biaodian");
		return 0;
	}
	if(str[0]>'9'||str[0]<'0'||str[2]>'9'||str[2]<'0'||str[4]>'9'||str[4]<'0'||str[6]>'9'||str[6]<'0')
	{
    printf("shuzi");
		return 0;
	}
	return 1;
}
//DATA_PROCESS
float v_min=0;
float v_max=0;
void DATA_PROCESS(u8 *str)
{
  v_min=(str[0]-'0')*1.0f+0.1f*(str[2]-'0');
  v_max=(str[4]-'0')*1.0f+0.1f*(str[6]-'0');
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	UART_Tick=uwTick;
	load_rx_buf[rx_cnt++]=rx_buf[0];
	if(rx_cnt==7)
	{
		flag=1;
		printf("%s\r\n",load_rx_buf);
		printf("7byte\r\n");
		rx_cnt=0;
		if(CHEK_DATA(load_rx_buf)==1)
		{
			printf("Correct");
			DATA_PROCESS(load_rx_buf);
		}
	}
	HAL_UART_Receive_IT(&huart1,rx_buf,1);
}

u8 display_buf[30];
void LCD_Process(void)
{
	sprintf((char*)display_buf,"v_max:%3.1f",v_max);
	LCD_DisplayStringLine(Line0, display_buf);
	
	sprintf((char*)display_buf,"v_min:%3.1f",v_min);
	LCD_DisplayStringLine(Line1, display_buf);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兜兜里有好多糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值