新收获——蓝桥杯单片机第十四届国赛程序设计题

本文分享蓝桥杯单片机第十四届国赛程序设计题的新收获,包括seg_char数组元素数量、按键测试问题、负数处理、双按长按处理、数据双单位显示、超声波测距、数据修改、十进制转二进制及继电器控制等知识,还提供了不同版本代码的百度网盘链接。

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

大家要是初学,可以去看西风那里的系统课程,非常全面,有利于形成你自己的代码风格。

笔者发文章只是分享性的,有需要者才拿去用其中的一个小片段

代码在这:

一、这个是首写自主完成的,bug应该也是没有的,然后注释比较多,是优化前的版本

链接:https://pan.baidu.com/s/1IFWSZ8gDggN4YAuIGGIq2Q?pwd=1234 
提取码:1234

二、第一次默写,里面bug笔者是没发现有的,功能都实现了应该,因为第一次默写,所以有优化和新bug的修复

链接:https://pan.baidu.com/s/1RtNhYbRDkt2QBoK-v5z5pg?pwd=1234 
提取码:1234

三、第二次默写,边写文章边写的,代码注释很少,足够简洁。

链接:https://pan.baidu.com/s/1Gtoc8wBm_072GaaUoWIzcg?pwd=1234 
提取码:1234

这次文章里面就不以完成顺序来写了,这次新收获了很多知识,主要是以这个顺序进行分享。

1.seg_char[10]中10为什么不能是9

2.为什么按键在测试时会出错而且双按会影响到别的按键

3.限制新写法

4.有负数怎么办

1变量类型改一下

2可以直接比较

        电脑还是能识别出-90比0小的。

5.双按加长按怎么办

        直接使用差值法就不需要在定时器中加加time_6s。

6.一个数据俩种单位显示怎么办

7.遇到超声波测距怎么办(重要知识点)

1定时器0配置

2引脚和函数声明

3函数主体

       在main.c最下面写。

float rd_distance(void)
{
 	//注释在之前的超声波模块文章里面讲得比较清楚了
	float distance_val=0.0;
	uc num=10;
	TX=0;
	TL0 = 0xF4;
	TH0 = 0xFF;

	TR0=1;
	while(num--)
	{
	 	while(TF0==0);
		TX=~TX;
		TF0=0;
	}
	TR0=0;
	TL0 = 0;
	TH0 = 0;

	TR0=1;
	while((RX==1)&&(TF0==0));
	TR0=0;

	if(TF0==1)
	{
	 	TF0=0;
		distance_val=255.0;	
	}
	else
	 	distance_val=(((TH0<<8|TL0)*(tran_vate/20000.0))+cail_val);
		//除20000刚好是将单位换算成cm/us 切记左边是float类型,一定要将20000写成20000.0进行浮点数运算
	return distance_val;
}

              然后有个小建议就是将读取操作放在显示旁边,这样比较灵敏。

8.如果要同时改一坨数据怎么办

        最好是封装起来,简洁方便。

9.十进制转二进制

10.遇到继电器控制怎么办

        底层模板函数在之前文章三大模板之中。

        至此,国赛第十四届的代码也完成了,由于是自主完成,所以现象可能跟标准不太一样,但是要有的功能都是实现的了。

### 第十四届蓝桥杯单片机及相关解析 #### 一、背景概述 第十四届蓝桥杯中的单片机设计开发项目相较于往年的难度有所提升,部分功能的设计甚至达到了国赛的标准。例如,在程序设计方面涉及到了最大值和平均值计算等功能模块,这些内容曾在第十二国赛中出现过[^1]。 #### 二、真资源获取方式 针对第十四届蓝桥杯单片机的真及其详细解析,可以通过公开的在线资源进行访问。具体而言,可以前往以下链接下载相关材料: [https://gitcode.com/Resource-Bundle-Collection/eb682](https://gitcode.com/Resource-Bundle-Collection/eb682)[^2]。该页面提供了完整的比目以及配套的简化代码说明文档。 #### 三、典型目分析 以下是基于以往经验总结的一些常见考点及其实现方法: ##### 1. 数据处理——求解最大值平均值 此类问通常要求参者编写一段能够高效完成数据统计操作的小型算法。下面是一个简单的实现案例: ```c #include <stdio.h> #define MAX_COUNT 10 int main() { int data[MAX_COUNT]; float sum = 0; int max_value; printf("请输入 %d 个整数:\n", MAX_COUNT); for (int i = 0; i < MAX_COUNT; ++i) { scanf("%d", &data[i]); sum += data[i]; if (i == 0 || data[i] > max_value) { max_value = data[i]; } } float average = sum / MAX_COUNT; printf("最大值: %d, 平均值: %.2f\n", max_value, average); return 0; } ``` 上述代码展示了如何通过循环结构读取一组输入数值并分别计算其最大值平均值[^3]。 ##### 2. 外设驱动编程 除了核心逻辑外,实际比中还会考察对外部硬件设备的操作能力,比如 LED 控制、按键检测等基础技能。这部分内容往往需要结合具体的开发板手册来完成配置工作。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值