第页11前言随着电子技术的不断发展,各种电子产品也层出不穷,种类繁多。但是每一种产品开发时都应该少不了对信号的检测,而检测信号的频率也是其中重要指标之一。本设计设计的目的就是要设计出一种高效,高精度,价格便宜符合广大群众要求的数字频率计。本设计主要由波形整形电路,单片机电路,量程指示及数字显示电路三大部分组成。测量对象可以是方波,正弦波,三角波。本设计以单片机位核心,单片机可以快速,精确地测出信号的频率,并且可以用直观的数字显示出来。用单片机制作的数字频率计所需要的硬件要求比较简单,维修方便。利用单片机的软件部分可以实现测量不同频率范围,本设计的测量范围为1HZ-10KHZ,10KHZ-100KHZ,100KHZ-1MHZ三个量程。该电路还可以通过编程达到自动调节测量信号的量程,该电路软家调试简单,实用性高,价格低廉!本设计使用了美国ATMEL公司生产的AT89S51,AT89S51是低功耗,高性能CMOS8位单片机,片内含4kbytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中。第页22总体方案设计2.1方案比较方案一:本方案主要以单片机为核心,利用单片机的计数定时功能来实现频率的计数并且利用单片机的动态扫描法把测出的数据送到数字显示电路显示。其原理框图如图2.1所示:图2.1方案一原理框图方案二:本方案主要以数字器件为核心,主要分为时基电路,逻辑控制电路,放大整形电路,闸门电路,计数电路,锁存电路,译码显示电路七大部分。其原理框图如图2.2所示:图2.2方案二原理框图逻辑控制电路时基电路放大整形电路闸门电路计数器锁存器译码显示器信号放大电路信号整形单片机AT89S51电路数字显示电路第页32.2方案论证方案一:本方案主要以单片机为核心,被测信号先进入信号放大电路进行放大,再被送到波形整形电路整形,把被测的正弦波或者三角波整形为方波。利用单片机的计数器和定时器的功能对被测信号进行计数。编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。方案二:本方案使用大量的数字器件,被测信号经放大整形电路变成计数器所要求的脉冲信号,其频率与被侧信号的频率相同。同时时基电路提供标准时间基准信号,其高电平持续时间1s,当1s信号来到时,闸门开通,被测脉冲信号通过闸门,计数器开始计数,直到1s信号结束闸门关闭,停止计数。若在闸门时间1s内计数器计得的脉冲个数为N,则被测信号频率Fx=NHz。逻辑控制电路的作用有两个:一是产生锁存脉冲,是显示器上的数字稳定;二是产生清零脉冲,使计数器每次测量从零开始计数。2.3方案选择比较以上两种方案可以知道,方案一的核心是单片机,使用的元器件少,原理电路简单,调试简单只要改变程序的设定值则可以实现不同频率范围的测试能自动选择测试的量程。与方案一相比较方案二则使用了大量的数字元器件,原理电路复杂,硬件调试麻烦。如要测量高频的信号还需要加上分频电路,价格相对高了点。基于上述比较,所以选择了方案一。第页43单元模块电路设计3.1信号放大电路放大整形电路由晶体管3DG100与74LS00等组成,其中3DG100组成放大器将输入频率为Fx的周期信号如正弦波,三角波等进行放大。与非门74LS00构成施密特触发器,它对放大器的输出信号进行整形,使之成为矩形脉冲。其电路图如图3.1所示:图3.1信号放大整形电路利用ISIS仿真软件,上面的信号代表的是输入信号,下面信号代表的是输出信号。当输入信号为正弦波时,可以得到如图3.2所示的方波输出信号。图3.2信号整形后的波形第页53.2单片机复位电路复位是单片机的初始化操作,只要给RESET引脚加上2个机器周期以上的高电平信号,就可使MCS—51单片机复位。复位的主要功能是把PC初始化为0000H,使MCS—51单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态,为摆脱死锁状态,也需按复位键重新启动。单片机的复位电路通常采用上电复位和按钮复位的两种方式。本设计采用图3.3上电复位电路.上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。图3.3单片机复位电路除PC之外,复位操作还对其它寄存器有影响,其复位状态如表3.1所示:表3.1复位时片内各寄存器的状态寄存器复位状态寄存器复位状态PC0000HTMOD00HAcc00HTCON00HPSW00HTH000HB00HTL000HSP07HTH100HDPTR0000HTL100HP0-P3FFHSCON00HIPXXX00000BSBUFXXXXXXXXBIE0XX00000BPCON0XXX0000B由表可知,复位时,SP=07H;4个I/O端口P0-P3的引脚均为高电平,这在某些控制第页6应用中,要考虑到引脚的高电平对外部控制电路的影响。3.3时钟电路时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊地一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英振荡器和微调电容,就构成一个稳定的自激振荡器。单片机内部时钟方式的振荡器电路如图3.4所示:图3.4内部时钟电路晶体的频率越高,则系统的时钟频率也就越高,单片机的运行速度也就越快。但反过来运行速度快对储存器的速度也就越高。本设计采用40PF的电容和24MHz的晶振。本设计使用24MHz晶振的原因主要由本设计计数器对外部计数输入信号的要求。当MCS-51内部的定时器/计数器被选定为定时器工作模式时,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增1,因此定时器/计数器的输入脉冲的周期与机器周期一样,输入脉冲的频率为时钟振荡的1/12。当采用12MHz频率的晶体时,计数速率为1MHz,输入脉冲的周期间隔为1us。当定时器/计数器用作计数器时计数脉冲来自相应的外部输入引脚T0和T1。当输入信号产生由1至0的负跳变时,计数器的值增1.每个机器周期的S5P2期间,对外部输入引脚进行采样。如在第一个机器周期仲采得的值为1,而在下一个周期中采得的值为0,则在紧跟着的再下一个机器周期S3P1的期间,计数器加1。由于确认一次负跳变要花两个机器周期,即24个振荡周期,因此外部输入的脉冲频率最高为250KHz,如果选用24MHz频率的晶体,则最高可输入1MHz的外部脉冲。所以本设计最少要使用24MHz或更高的晶振。对于外部输入信号的占空比并没有什么限制,但为了确保某一给定的电平在变化之前能被采样一次,则这一点评至少要保持一个机器周期。第页73.4量程指示电路量程指示电路能按照所测频率的大小来自动显示所测频率的量程,如图3.5所示:图3.5量程指示电路当单片机开始正常工作时,指示灯L1便亮。当所测的频率在1Hz至10KHz时灯L4亮,当所测的频率在10K至100KHz时灯L3亮,当所测的频率在100K至1MHz时灯L2亮。3.5数字显示电路本设计使用动态扫描数字显示电路来显示频率的大小,如图3.6所示:第页8图3.6数字显示电路在多位LED显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个8位I/O口控制,形成段选线的多路复用。而各位的共阳极或共阴极分别由相应的I/O线控制,实现各位的分时选通。图3.7所示位一个4位7段LED动态显示器电路原理图。其中段选线占用一个8位I/O口,而位选线占用一个4位I/O口。由于各位的段选线并联,段码的输出对各位来说都是相同的。因此,同一时刻,如果各位位选都处于选通状态的话,4位LED将显示相同的字符。若要各位LED能够显示出与本位相应的显示字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,同时,段选线上输出相应位要显示字符的段码。这样同一时刻,4位LED中只有选通的那一位显示字符,而其他三位则是熄灭的。同样,在下一时刻,只让下一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,同时,在段选线上输出相应位将要显示字符的段码,则同一时刻,只有选通位显示出相应的字符,而其他各位则是熄灭的。如此循环下去,就可以使各位显示出将要显示的字符,虽然这些字符是在不同时刻出现的,而同一时刻,只有以为显示,其他各位熄灭,但由于LED显示器的余辉和人眼的视觉暂留作用,只要每位显示间隔足够短,则可造成多为同时亮的假象,达到同时显示的目的。LED不同位显示的时间间隔不能太短,因为发光二极管从导通到发光有一定的延时,导通时间太短,发光太弱人眼无法看清。但也不能太长,因为毕竟要受限于临界闪烁频率,而且时间越长,占用CPU时间也越多。另外,显示位增多,也将占用大量的CPU时间,因此动态显示实质是以牺牲CPU时间来换取元件的减小。第页94单片机软件设计4.1数字频率计程序流程图程序初始化键盘扫描是否按了开关键计数器/定时器初始化计数器开始计数定时器开始计时是否到1秒?计数器停止计数存储计数结果判断所测频率的范围显示所测频率大小1档灯亮2档灯亮3档灯亮结束是否是否第页104.2单片机工作程序#includereg51.h#defineucharunsignedchar#defineuintunsignedint#defineCYCLE49980voidDELAY(void);voidKEYSCAN(void);voidDISPLAY(void);voidCHULI(void);unsignedchargewei,shiwei,baiwei,qianwei,shiwei1,baiwei1,qianwei1;unsignedcharcodea[10]={0xc0,0xf9,0xa4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};sbitKaiGuan=P2^7;//开关位sbitLEDpin=P1^3;//工作指示灯控制位ucharT0H=0,T0L=0;bitflag=0;uintN=0;unsignedlongfreq1=0;unsignedlongfreq=0;voidmain(void){while(1){KEYSCAN();if(TF0==1){TF0=0;N++;}if(flag==1)//判断所测频率的范围{freq1=(65536*N+T0H*256+T0L);flag=0;第页11if(freq1=2500){freq=freq1*4;P1=0xf6;}elseif(2501=freq1&freq1=25000){freq=freq1*2/5;P1=0xf5;}elseif(freq1=25001){freq=freq1/25;P1=0xf3;}gewei=freq%10;shiwei=(freq/10)%10;baiwei=(freq/100)%10;qianwei=freq/1000;}CHULI();DISPLAY();}}voidtimer1(void)interrupt3using1//一秒中断{staticuintcounter;if(++counter=10){TR0=0;TR1=0;T0L=TL0;T0H=TH0;TH0=TL0=0;flag=1;counter=0;}TH1=(65536-CYCLE)/256;第页12TL1=(65536-CYCLE)%256;}voidDELAY(void)//延时程序{staticunsignedcharx,y;for(x=0;x20;x++)for(y=0;y40;y++);}voidKEYSCAN(void)//键盘扫描{if(KaiGuan==0