本文主要是介绍第二十二讲 第十二届国赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、题目
二、代码
1.频率
定时器0 ne55 输出频率P34
定时器1来实现数码管的显示功能
频率:1ms计次多少次
显示
保留一位小数
2.湿度
btw关于数码管显示
先前我们是500ms后读取芯片数值,处理Seg里的一堆数据,造成资源分配不均匀
现在我们一定时间处理1,又一段时间处理2......把它岔开
还是以500ms为周期进来一次,但是每一次都读取不同的值
在100ms时读取AD值,在200ms时读取距离值
没懂这里
3.参数
俺写参数界面:
风哥写参数界面:
多个参数的直接设一维数组,关于参数设置的要设置两个值,一个设置值,一个保存值
内存优化问题,float型的可以当作char型写(float型更占空间)
Seg
俺写的seg
风哥写的Seg:
都把他们弄成整数,只是点小数点还有0的问题,67位必有数,只有频率的第5位有数
显示编号即索引值+1
是否点小数点就看是否是频率0和距离2界面
第5位是否有数据就看是不是频率0,有则用频率的数据,否则熄灭
通过数组和索引值来实现多个参数的数码管显示
没懂:
4.按键
俺的+:
每个模式下对应+
风哥的+:
设置一个加减的数组(加减是固定值,只读不写,可以放到code(只读不写)里减少内存占用)
数码管的段选位选也可以放进去
因为前面已经把参数值变为整数了,所以就是+整数
索引值是参数显示,实际参数,参数加减,参数上限下限共用的
参数范围也改
当当当:
5.DA写入
一般用y = k (x - x0) + y0来写
输出电压 = ((5.0 - 1.0)/ (80.0 - ShiDu_Param))*(湿度 - ShiDu_Param) + 1.0;
湿度<湿度参数
湿度>80
其他情况则符合函数
写入DA
6.继电器
和下降沿计数的题目一样
(当y>p时,flag拉高=1 else if(flag==1)时,falg拉低=0,a++)
①else if:两个意思
1.测距结果>参数值
2.上一次它的状态是关
开继电器的话要把标志位拉低0,避免他进来判断里一直++
7.脉冲输出功能
看见引脚,找原理图
和继电器,蜂鸣器一样,不能简单给引脚赋值p几p几,而是也要像蜂鸣器继电器那样写一个函数
然后cv大师showtime:就改个0x20
1khz的周期是:1/1000 = 0.001s = 1ms = 10 * 100us
在stc手册里搜中断号
俺写的放中断里了...俺知道不要写中断里,但是就是先写中断里了
风哥聪明绝顶!!:
8.长按
通常长按要定义的变量
之前写的长按
①没有说长按按多久的,用Key_Old
②长按短按
9.Led
俺写的:只写了一个功能其实还有一个功能没看见呃呃呃
风:
①Seg_Mode<3:z在频率、湿度、距离界面下:②根据Seg_Mode互斥点亮
否则,不在该界面下,则:根据Param_Index互斥点亮,并且闪烁
俺:
风:
当时俺写读取芯片参数(超声波)是就单纯在外面,后面发现target no creat,排查完后发现,把读取超声波的注释掉就行,不知道是不是AD和超声波读取冲突了
10.超声波
跳线帽接左边两个,Ne55和超声波不是同时用的时候就可以把超声波的跳线帽拔下来给P34和ling短接
底层(之前是33的欸
用PCA,因为定时器莫得了
和之前的区别,之前是定时器1
啊怪不得俺之前用超声波就卡bug
#include <ultrasound.h>
#include "intrins.h"sbit Tx = P1^0;
sbit Rx = P1^1;void Delay12us() //@12.000MHz
{unsigned char i;_nop_();_nop_();i = 37;while (--i);
}void Ut_Wave_Init() //超声波初始化函数 产生8个40Mhz的方波信号
{unsigned char i;for(i=0;i<8;i++){Tx = 1;Delay12us();Tx = 0;Delay12us();}
}unsigned char Ut_Wave_Data() //超声波距离读取函数
{unsigned int time;//时间储存变量CMOD &= 0x0f;//配置PCA工作模式CH = CL = 0;//复位计数值 等待超声波信号发出Ut_Wave_Init();//发送超声波信号CR = 1;//开始计时while((Rx == 1) && (CF == 0));//等待接受返回信号或者定时器溢出CR = 0;//停止计时if(CF == 0) //定时器没有溢出{time = CH << 8 | CL;//读取当前时间return (time * 0.017);//返回距离值}else{CF = 0;//清除溢出标志位return 0;}
}
11.保存参数
在退出参数界面时保存参数
12.显示频率以及频率比较
接收到得频率是35587(大概
如果/1000的话就得到35.587
但是频率参数那里设置的khz是1.0-12.0
明显超了
所以我后面改我的代码改成/10000
就是3.5587才在范围内
然后Led那里,我们在参数保存里是90,就是扩大了10倍
后面和Freq=35587比较应该扩大为90000即*1000
但是西风就是/1000,就是35,然后直接/10和%10得到3.5
然后它是退出参数界面才生效,Led才会亮
Freq/1000=35。587和90比较
13.?
这篇关于第二十二讲 第十二届国赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!