第十三届蓝桥杯嵌入式省赛程序题


前言

总共参加了两次蓝桥杯,第一次参加的单片机组,第二次参加的嵌入式组。分别拿了全国三等奖和省二等奖。总体来说还是比较好拿奖的,编程比较简单,主要在客观题方面,知识涉及面比较广。疫情原因,嵌入组参加的第二场,可能人数有点少,重庆市只有一个人获得一等奖,所以能参加第一场就参加第一场,第二场的比例偏小。
在这里插入图片描述

一、十三届第二场主观程序题

今天上午刚刚参加了第十三届蓝桥杯嵌入式竞赛,感觉比较简单,程序代码分享记录一下。
有一点小bug,当时没考虑到,应该对第一次上电进行判断,在第二次上电的时候才去读取EEPROM的值。其他部分都实现功能。

1、主观题题目:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、解决代码

整体代码比较简单,思路比较清晰。可供参考
主函数

在这里插入代码片
int main(void)
{

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();
	
  MX_TIM2_Init();
	HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
	
  MX_USART1_UART_Init();

	LCD_Init();	
	LCD_Clear(Black);
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);	

  I2CInit();
	
	iic_Read(iic_disp_repx, 0, 1);
	REP_X = iic_disp_repx[0]/16*16+iic_disp_repx[0]%16;
		
	iic_Read(iic_disp_repy, 1, 1);	
	REP_Y = iic_disp_repy[0]/16*16+iic_disp_repy[0]%16;

	iic_Read(iic_disp_PRICE_X10, 2, 1);
	PRICE_X10 = (iic_disp_PRICE_X10[0]/16*16+iic_disp_PRICE_X10[0]%16);

	iic_Read(iic_disp_PRICE_Y10, 3, 1);	
	PRICE_Y10 = (iic_disp_PRICE_Y10[0]/16*16+iic_disp_PRICE_Y10[0]%16);

	HAL_UART_Receive_IT(&huart1, Uart_rx_buf,1);
  while (1)
  {
    Led_Proc();
		Key_Proc();
		Lcd_Proc();
		Uart_Proc();
		eeprom_proc();
  }

}

按键函数

在这里插入代码片
void Key_Proc()
{
    if(uwTick - uwTick_key < 50) return;
	  uwTick_key = uwTick;
	
	key_value = Key_Value();
	key_down = key_value & (key_value ^ key_old);
	key_old = key_value;
	
	if(key_down == 1)
	{
	  LCD_Flag++;
		if(LCD_Flag == 3)
		{
		  LCD_Flag = 0;
		}
		
	}
	
	if(LCD_Flag == 0)
	{
	  	if(key_down == 2)
			{
				SHOP_X++;
				if(SHOP_X == (REP_X+1))
				{
				  SHOP_X = 0;
				}
			}
			
			if(key_down == 3)
			{
				SHOP_Y++;
				if(SHOP_Y == (REP_Y+1))
				{
				  SHOP_Y = 0;
				}
			}
			
			if(key_down == 4)
			{
				sprintf(Uart_str,"X:%d,Y:%d,Z:%3.1f\r\n",SHOP_X,SHOP_Y,((SHOP_X*PRICE_X10*0.1)+(SHOP_Y*PRICE_Y10*0.1)));
				HAL_UART_Transmit(&huart1, Uart_str, strlen(Uart_str),15);
				REP_X -=SHOP_X;
				REP_Y -=SHOP_Y;
        SHOP_X = 0;
				SHOP_Y = 0;
				B4_Flag = 1;
			}
	}
	
	if(LCD_Flag == 1)
	{
	  	if(key_down == 2)
			{
				PRICE_X10++;
				if(PRICE_X10 == 21)
				{
				  PRICE_X10 = 10;
				}
			}
			
			if(key_down == 3)
			{
				PRICE_Y10++;
				if(PRICE_Y10 == 21)
				{
				  PRICE_Y10 = 10;
				}
			}

	}
	
		if(LCD_Flag == 2)
	{
	  	if(key_down == 2)
			{
				REP_X++;
			}
			if(key_down == 3)
			{
				REP_Y++;
			}
			
	}
	
}

3、完整工程链接(百度网盘)

链接:https://pan.baidu.com/s/1Vuc_C-DWJHABmqM4LUu0ew
提取码:9wqd

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值