蓝桥杯嵌入式真题总结

第九届省赛:

定时器倒计时模块:

void time(u8 *hour,u8 *minute,u8 *second)
{
	if(*second>0)           //正常走时
	{
		(*second)--;
	}
	else if(*second==0&&(*minute!=0||*hour!=0))  // 23:15:00
	{
		*second=59;                           
		if(*minute==0){*minute=59;(*hour)--;}      //23:00:00
		else	(*minute)--;                       //23:15:00
	}
	if(*second==0&&*minute==0&&*second==0)    //判断是否结束 00:00:00
	{
		timestate=stop;
		state=standby;
	}
}

第九届国赛:

if(good==1)sprintf((char*)lcd_buf,"  unit:%.2f/kg ",unit1/100.0f);
else if(good==2)sprintf((char*)lcd_buf,"  unit:%.2f/kg ",unit2/100.0f);
else if(good==3)sprintf((char*)lcd_buf,"  unit:%.2f/kg ",unit3/100.0f);

以上代码可以替换为数组,不需要用到三个变量,如:

sprintf((char*)lcd_buf,"  unit:%.2f/kg ",unit[good-1]/100.0f);

判断数值有没有变化模块:

method1:可以对改变数值的所有按键模块中进行标志位置位,再最后判断标志位是否置位

method2:在界面切换到设置界面时,首先将变量存储起来,然后退出设置界面时,判断变量与存储变量是否相等

第十届国赛:

数组长度一定不能越界!!!!

如果对数组赋值时赋值数量大于数组长度,则会因为内存溢出而报错

(直接导致uwtick运行停止、keil程序死机,这逆天bug找了我一个多小时....)

注意长按功能也只能在特定界面下才生效

else if(B3==0) {keyvalue=3;if(select==wendu&&lcdstate==Para)key3cnt=1;}
else if(B4==0) {keyvalue=4;if(select==wendu&&lcdstate==Para)key4cnt=1;}

第十一届国赛:

if(keyvalue==1)                     
{
	keyvalue=0;
	lcdstate=!lcdstate;
	LCD_Clear(Black);
	if(lcdstate==DATA)              //退出参数设定界面
	{
		vol_led_vaild=vol_led;      //把参数界面操作的值赋给运行的值  
		fre_led_vaild=fre_led;
		ledctrl=0;                  //对ledctrl清零一次
	} 
}

void led_process(void)
{
	if((int)(voltage1*10)>(int)(voltage2*10))
	{
		ledctrl=ledctrl|(0x01<<(vol_led_vaild-1));  //运行的是生效的值
	}
	else
	{
		ledctrl=ledctrl&~(0x01<<(vol_led_vaild-1));
	}
	if(fre_1>fre_2)
	{
		ledctrl=ledctrl|(0x01<<(fre_led_vaild-1));
	}
	else
	{
		ledctrl=ledctrl&~(0x01<<(fre_led_vaild-1));
	}
	LED_CONTROL(ledctrl);
}

sprintf函数输出浮点数时,会对保留小数位数后的数进行四舍五入

例如:保留一位

sprintf((char*)lcd_buf,"    V1:%.1fV ",voltage1);

voltage实际值为1.74,LCD输出显示1.7

voltage实际值为1.76,LCD输出显示1.8

当voltage1=1.74,voltage2=1.68,屏幕上显示:V1:1.7  V2:1.7  但指示灯亮

当voltage1=1.68,voltage2=1.74,屏幕上显示:V1:1.7  V2:1.7  但指示灯灭

if(voltage1>voltage2)

所以上述代码并不能精准体现数值相等,指示灯灭

因此,应本届赛题要求,只比较小数点后一位,也即屏蔽小数点后一位的所有数据

所以只显示前两位有效数字:

在显示时:将voltage1,voltage2放大10倍,再转化成整形变量,再除以10 (不再四舍五入)(1.76,1.72都显示为1.7)

在比较时:将voltage1,voltage2放大10倍,再转化成整形变量进行比较

if(lcdstate==DATA)
{
	sprintf((char*)lcd_buf,"    V1:%.1fV ",(int)(voltage1*10)/10.0f);
	LCD_DisplayStringLine(Line3,lcd_buf);
	sprintf((char*)lcd_buf,"    V2:%.1fV ",(int)(voltage2*10)/10.0f);
	LCD_DisplayStringLine(Line4,lcd_buf);

}
if((int)(voltage1*10)>(int)(voltage2*10))
{
  ledctrl=ledctrl|(0x01<<(vol_led_vaild-1));
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蓝桥杯嵌入式题是指在蓝桥杯嵌入式技术竞赛(China Blue Bridge Cup Embedded System Competition)中的真题。该竞赛是一项全国性的嵌入式技术竞赛,旨在提高学生在嵌入式系统领域的技术水平和创新能力。 根据我对蓝桥杯嵌入式题的了解,该竞赛中的题目通常涉及嵌入式系统的设计和实现。参赛选手需要通过编程和硬件设计两个方面的能力来解决问题。题目的难度通常会从初级到高级逐渐增加,涉及到的技术内容有微控制器的编程、电路设计、通信协议等。 参赛选手需要具备扎实的嵌入式系统开发知识,了解各种传感器和执行器的应用,以及系统设计的基本原理。他们还需要熟悉C语言、汇编语言等编程语言,并具备良好的编程习惯和技巧。 参加蓝桥杯嵌入式竞赛对于学生来说不仅是一个锻炼自己技能的机会,也是一个展示自己才华的平台。通过参与竞赛,学生可以加深对嵌入式系统的理解,提高问题解决能力,并与其他对嵌入式技术感兴趣的同学进行交流和学习。 蓝桥杯嵌入式竞赛的真题涵盖了多个方向的嵌入式发展,有助于拓宽参赛者的技术视野,提升他们的专业素质。此外,竞赛还能为学生提供参赛经历和证明自己的机会,有助于他们在就业或升学方面获得更好的机会。 总之,蓝桥杯嵌入式竞赛是一个提升嵌入式技术能力的平台,对参与者来说,这是一个锻炼和展示自己才能的机会。只有通过不断学习和努力,才能在嵌入式系统领域取得优异的成果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值