蓝桥杯单片机国赛重难点总结

文章介绍了在不同届次的项目中,涉及到了超声波测距技术,如何在RAM中存储最大、最小及平均值,以及STC15系列单片机的内存管理策略,包括将数码管和LED数据存储在外部RAM。此外,还讨论了AD转换在光敏电阻中的应用,时钟设置的16进制与十进制转换,以及如何通过按键实现功能切换和亮度状态判断。同时,文章提到了DA输出电压的控制,以及使用EEPROM存储数据的挑战,特别是对于长数组和浮点数类型的数据。另外,文中还涵盖了串口通信中的回显、换行符使用,以及按键的长按和短按检测机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

12届

1.知识点

1.超声波测距 并保存最大与最小值还有平均值 最大最小值可以保存 但是平均值保存不知道如何保存
蚂蚁工厂给出的解决方案是
在RAM外部设定一个超大数组进行保存 然后使用指针进行提取
在这里插入图片描述

在这里插入图片描述

2.STC15系列内存的分配 把数码管,LED,小数点等数组放到外部RAM中,这样就能节省空间
3.不同模式对应不同规定进行采集数据
在这里插入图片描述
4.高位熄灭
5.DA按照不同规定输出不同电压
在这里插入图片描述

6.不同测距模式下对应不同功能
在这里插入图片描述
6.计数连续在三次以上 点亮LED(未实现)
在这里插入图片描述
蚂蚁工厂给出的解决方法是

在这里插入图片描述
用一个数组进行存放近三次保存的数据,如果都满足则将LED6点亮

11届

1.知识点

1.显示界面与设置界面设置两个不同变量,然后通过按键在不同功能下,实现不同界面的切换
2.AD使用光敏电阻判断亮暗,然后实现不同功能。
3.时钟设置(16进制变成十进制)
加按键

if(Seg_Set_Mode == 0)//处于时间参数设置界面
				{
					ucRtc_Hour_Set++;
					//因为是16进制 所以0x09+1会变成0x0a 此时就需要将0x0a进行变化变成0x10
					if(ucRtc_Hour_Set%16 == 0x0a)
						ucRtc_Hour_Set += 6;
					//进行界限判断  界限-1变成0xff因为后面又-6 因此变成0xf9
					if(ucRtc_Hour_Set == 0x24)
						ucRtc_Hour_Set = 0x23;//直接进行卡死 不再减了
				}

减按键

if(Seg_Set_Mode == 0)//处于时间参数设置界面
				{
					ucRtc_Hour_Set--;
					//因为是16进制 所以0x10-1会变成0x0f 此时就需要将0x0f进行变化变成0x09
					if(ucRtc_Hour_Set%16 == 0x0f)
						ucRtc_Hour_Set -= 6;
					//进行界限判断  界限-1变成0xff因为后面又-6 因此变成0xf9
					if(ucRtc_Hour_Set == 0xf9)
						ucRtc_Hour_Set = 0;//直接进行卡死 不再减了
				}

4.若判断环境处于“暗”状态,且持续时间超过 3 秒,指示灯 L3 点亮;环境处于“亮”状态,且持续时间超过 3 秒,指示灯 L3 熄灭。 (重点)

if(AD_Voltage < 1.5)
	{
		Liang_An_Flag = 1;//暗
		
		if(An_First_Time == 0)
		{
			ms_Tick_LED_An = ms_Tick;
			An_First_Time = 1;
			Liang_First_Time = 0;
		}
		if((ms_Tick - ms_Tick_LED_An) >= 3000)
			Liang_An_Flag_Over_3_Sec = 1;
	}
	else
	{
		Liang_An_Flag = 0;//亮
		
		if(Liang_First_Time == 0)
		{
			ms_Tick_LED_Liang = ms_Tick;
			Liang_First_Time = 1;
			An_First_Time = 0;
		}
		if((ms_Tick - ms_Tick_LED_Liang) >= 3000)
			Liang_An_Flag_Over_3_Sec = 0;
	}
	
	Led_Display[2] = Liang_An_Flag_Over_3_Sec;
	

10届

1.串口中
'\r’是回车,前者使光标到行首,(carriage return)0X0D
'\n’是换行,后者使光标下移一格,(line feed)0x0A

if((Uart_Buf[Uart_Buf_Index-1] == 0x0a)&&(Uart_Buf[Uart_Buf_Index-2] == 0x0d))//拿到的数据帧的倒数后两位为帧尾,表示收到一个数据帧

2.串口发送
在这里插入图片描述
输出十进制的数据一定要加(unsigned int)不然会造成发送数据错误
(unsigned char)是用字符进行存储
(unsigned int)是用整型进行存储

3.按键长按与短按(重点)
如何判断长按与短按
4.EEPROM进行数据存储。
5.串口关于\r\n的发送
6.DA输出电压
7.%d %2d %02d几种情况的区别
在这里插入图片描述
%5.2f的意思
%5.2f的意思

9届

1.知识点

1.频率测量
2.高位熄灭
3.回显界面
4.如何用EEPROM存储int与float类型的数据
在这里插入图片描述
重点(还未解决问题)

8届

1.知识点

1.如何用EEPROM存储超过十位的数组(重点)(问题还未解决)
2.LED当每次采集后以0.2s闪烁十次如何自动熄灭
在这里插入图片描述
3.DA按照规定输出电压
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猫先桑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值