前言
总共参加了两次蓝桥杯,第一次参加的单片机组,第二次参加的嵌入式组。分别拿了全国三等奖和省二等奖。总体来说还是比较好拿奖的,编程比较简单,主要在客观题方面,知识涉及面比较广。疫情原因,嵌入组参加的第二场,可能人数有点少,重庆市只有一个人获得一等奖,所以能参加第一场就参加第一场,第二场的比例偏小。
一、十三届第二场主观程序题
今天上午刚刚参加了第十三届蓝桥杯嵌入式竞赛,感觉比较简单,程序代码分享记录一下。
有一点小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