大家要是初学,可以去看西风那里的系统课程,非常全面,有利于形成你自己的代码风格。
笔者发文章只是分享性的,有需要者才拿去用其中的一个小片段。
代码在这:
一、这个是首写自主完成的,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.遇到继电器控制怎么办
底层模板函数在之前文章三大模板之中。



至此,国赛第十四届的代码也完成了,由于是自主完成,所以现象可能跟标准不太一样,但是要有的功能都是实现的了。
本文分享蓝桥杯单片机第十四届国赛程序设计题的新收获,包括seg_char数组元素数量、按键测试问题、负数处理、双按长按处理、数据双单位显示、超声波测距、数据修改、十进制转二进制及继电器控制等知识,还提供了不同版本代码的百度网盘链接。
955

被折叠的 条评论
为什么被折叠?



