基于AT89C51单片机的简易频率计的设计AlgorithmsofSignalClassificationBasedonSpectrumAnalysis彭岚峰胡佳佳PengLanfengHuJiajia(南昌大学科学技术学院,江西南昌330029)(CollegeofScienceandTechnology}NanchangUniversity,JiangxiNanchang,330029)摘要:为了解决市场上各种多功能、高精度数字频率计高价格的问题,本文通过综合分析实际工作的要求,选择市场上低价格的常用元件,由单片机产生闸门时间与时钟等基准信号以减少外围电路,从而提出了一种基于单片机(AT89C51)为主控制核心、LCD1602为显示界面的频率计设计方案。本方案可满足简易频率计体积小、成本低、精度高、可测频带宽的市场需求。关键词:单片机;频率计;液显中图分类号:TM93文献标识码:A文章编号:1671-4792(2012)09-0121-03Abstract:Inordertomeetthegreatnecessityofmulti-function,high-precisiondigitalfrequencymeterwithalowerprice,wechoosethecommoncheapcomponents,andusemicrocontrollertoproducethebasicclocksignaltominimizetheperipheralcircuit.Adesignoffrequencymeterbasedonmicrocontroller(AT89C51)andLCD1602isproposed,whichhasthepropertiesofsmallsize,lowcost,highprecisionandwidefrequencybandwidth.Keywords:AT89C51:FrequencyMeter;LiquidCrystalDispl0引言实现复杂度。频率计又称为电子计数器,是一种常用电子测量仪器。它的基本功能是测量信号的频率和周期,广泛应用于教学、科研、高精度仪器测量、工业控制等领域。目前,市场上的频率计基本上都是由专用计数芯片与数字逻辑电路组成。由于这些芯片的工作频率低,从而限制了产品工作频率的提高,远不能满足在一些特殊的场合需要。运用51系列单片机设计频率计,并采用适当的算法取代传统电路,不仅能克服传统频率计结构复杂、稳定性差、精度不高的弊端,而且频率计性能也将大幅提高。本次设计给出了一种基于单片机(AT89C51)为主控制芯片的频率计设计方案,不但切实可行,而且体积小、保密性强、设计简单、精度高、可测频带宽,大大降低了设计成本和实现复杂度。1总体设计方案频率计的结构主要包括时钟信号发生电路、阀门控制、单片机控制电路和LCD显示电路。频率计的主要核心部件是采用AT89C51来产生定时和记录脉冲变化次数,运用AT89C51来构成计数器,突破了大部分运用数字电路模板来构成计数器。本设计主要采用AT89S52芯片和LCD1602来实现,软件编程主要采用C51语言来编程。图一给出了设计框图。图一频率计构造图1.1控制核心以单片机为核心,待测信号先进入信号放大电路进行放大,再被送到波形整形电路整形,把待测的正弦波或者三角波整形为方波。利用单片机的计数器/定时器的功能对待测信号进行计数。编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。1.2显示部分LCD1602是具有记忆功能的液晶显示器,当频率值不发生变化时无需更新显示区域。此特点可节约单片机的运行时间,减少测量转换时间。1.3波形整形电路采用LM358比较电路来整形波形,40K电阻和100K的可调电阻对电压分压,因为LM358比较器的开环增益很大,所以输入电压大于分压电压的将变为电源电压5v,而小于电源电压的会变成0v。这样就可以把正弦波、三角波整形成方波。图二给出了整形电路图。图二波形整形电路2软件设计频率计的核心部分是程序的编写,算法的好坏将直接影响频率计的精度。包括了以下的主要程序:主程序、LCD1602显示程序、显示转换程序、频率计算程序。2.1主程序主程序只做控制作用,调用了三个子程序定时器1中断初始化、LCD1602初始化、在LCD上显示Welcome,调用结束后等待中断到来。voidmain(void)Initial_S1();//定时器1中断初始化LCDSTART();//LCD1602初始化Putlcddata();//在LCD上显示Welcomewhile(1);}2.2LCD1602显示程序voidLCDSTARTQ{LCDDATA=0x01;//清屏光标复位DISP();LCDDATA=0x38;//设置显示模式:8位子行Sx7点阵DISP();LCDDATA=0x0c;//显示器开、光标开、光标允许闪烁DISP();LCDDATA=0x06;//文字不动,光标自动右移DISP();LCDDATA=0x84;//设置显示初始位置DISP();}2.3计数程序本设计中T0采用计数功能,需要注意的一个问题是,输入的待测时钟信号的频率最高可以达到460800Hz,但计数器最多只能计数65536次,显然需要对计数单元进行扩展。扩展的思路是除了计数器TO的THO和TLO用于计数外,再选用一个计数单元,每当计数器TO溢出回零时产生中断,中断程序执行计数扩展单元自增1。本设计需要测量频率最大为10000Hz,可以不用扩展。voidtimerl}interrupt3{TH1=THCLK;TL1=TLCLK;switch(n){case2:}if(--switchtime==0)}Frequencyvalue=(THO*256+TLO)/4)*1000;NumToCharO;THO=O;TLO=0;}break;}case3:{if(--switchtime==0){Frequencyvalue=(THO*256+TLO)/4)*100;NumToChar();TH0=0;TL0=0;}break;}easel:{if(--switchtime==0){Frequencyvalue=(TH0*256+TLO)/4)*10+60;NumToChar();TH0=0;TL0=0;}break;}}}2.4显示转换从计数器采集到的频率数据是整数,不能直接把这些数据送给LCD显示,因此需要把这些数据转换为标准有效的字符串。下面这段程序将整数转换成字符串。voidNumToChar(){frequency[0]=Frequencyvalue/10000+48;frequency[1]=(Frequencyvalue%10000)/1000+48;frequency[2]=(Frequencyvalue%1000)/100+48;frequency[3]=(Frequencyvalue%100)/10+48;frequency[4]=Frequencyvalue%10+48;frequency[5]='H';frequency[6]='z';frequency[7]='\0';LCDDATA=Oxc4;//设置显示初始位置DISPQ;PutlcddataQ;}3结束语本设计采用了应用广泛的AT89C51单片机为控制芯片,为频率计的设计提出了一种新的方向。基于AT89C51单片机的简易频率计可满足简易频率计体积小、成本低、精度高、可测频带宽的市场需求。因此,本方案具有一定的应用价值。参考文献[1]邱关源.电路}M].北京:高等教育出版社,2006.[2]谢自美.电工线路设计·实验·测试[M].武汉:华中科技大学出版社,2006.[3]王港元.电工电子学实践指导}M].江西:江西科学技术出版社,2009.[4]阎石.数字电子技术基础[M].北京:高等教育出版社,2006.[5]赵全利,肖兴达.单片机原理及应用教程(第二版)[M].机械工业出版社,2007,7.[6]XuefeiXie.ANovelHighFrequencyCurrent-DrivenSynchronousRectifierForLowVoltageHighCurrentApplications[J].APEC}2001:469-475.