小弟初学c语言,怎么实现下面工程实例?求高手指教
假设z=60,低速时采用测周期法,当转速从低速上升到3326r/min时,从测周期法切换到测频率法。主程序设计
主程序先用测频法测量发动机初始瞬时转速 为排除干扰,在测量中采用了数字滤波,将测量的数据记录下来放在结果缓冲区中,每四个数据为一组,运用去极值平均法每组数据处理,且将求得的平均值作为最终测量结果保存,最终转换成BCD码显示。具体内容有:定时器/计数器工作方式和初值的设定、测量数据存储缓冲区和转速值的寄存地址的设置;测量瞬时转速值;测周期法程序;测频率法程序;数制转换和显示程序。
子程序设计
(1) 滤波程序
发动机瞬时转速测量中,因为转速本身的脉动、随机干扰的存在,滤波环节是不可缺少的,可以采用数字滤波方法。这里采用中位平均值滤波方法。
首先讨论平均值滤波法,它是将当前的h个采样数据求平均值作为当前采样结果。即t=kTs时刻的测量数据n(t),用采样数据n(k-h+1),…,n(k-1),n(k)的平均值来代替。
在测量频率法的基础上增加平均值滤波
式中,,…,,为t=(k-h+1)Ts,…,(k-1),k时刻的计数值。
中位平均值滤波是平均值滤波算法的改进。将采样的h个数据按数值大小次序排列后,去掉最大值和最小值,将居中的一组数据采用平均值滤波算法,求平均值后作为当前的采样值。
子程序首先采样四次,将测得的数据存放在结果缓冲区中,接着将四个数据进行排序,去掉最大值和最小值,只就中间两个数据求平均值,最后将该平均值保存在地址为38H和39H的寄存器中,作为最终测量结果。
显示程序(共阴极LED)
该子程序先对I/O口进行初始化,设置延时常数和复位指令。当显示芯片收到复位指令后,清除所有显示,字符消隐、闪烁等属性也被一起清除。执行该指令后,芯片所处状态与系统上电后所处状态一样。调用发送一个字节程序后,恢复CS为高电平,停止数据写入,然后再调用16进制——BCD码转换程序,依次完成各字节的显示