第1章概述 (1)1.1设计内容 (1)1.2设计要求 (1)1.3设计目的 (1)第2章设计方案 (2)2.1 测频原理 (2)2.2 设计总体思路 (2)第3章各模块硬件设计及说明 (3)3.1 单片机的选择与说明 (3)3.2 方波发生器电路设计 (4)3.3 晶振电路的设计 (4)3.4 复位电路设计 (5)3.5 数码管显示电路设计 (6)第4章软件部分的设计 (8)4.1 软件设计思路 (8)4.2 软件设计流程图 (9)4.3 源程序编写 (9)第5章系统的仿真与调试 (12)第6章总结与体会 (14)参考文献 (15)附录:频率计数器电路图 (16)第1章概述1.1设计内容以单片机为核心,设计和制作一个频率计数器,来完成对输入的信号进行频率计数,计数的频率结果通过6位动态数码管显示出来。
要求能够对0-250KHZ 的信号频率进行准确计数,计数误差不超过±1HZ。
1.2设计要求(1)设计方案要合理、正确;(2)系统硬件设计;(3)完成必要元器件选择;(4)系统软件设计及调试;(5)写出设计报告。
1.3设计目的(1)了解定时、计数器的结构及其工作原理;(2)掌握单片机的定时、计数器的控制方式;(3)掌握应用单片机进行频率测试控制的原理;(4)能根据设计任务要求编制数显频率计数器的程序,理解程序对计数器的控制原理;(5)会利用电路仿真软件绘制数显频率计数器的电路原理图;(6)会用KeilC51软件对源程序进行编译调试及与Proteus软件联调,实现电路仿真。
第2章设计方案2.1 测频原理以被测信号整形后的方波脉冲作为控制闸门信号, 采用单片机内部的定时器计数器进行计数。
方波脉冲的上升沿到达, 定时器计数器开始从零启动计数, 每一机器周期, 计数器加1, 直到方波脉冲的下降沿到达, 计数器则停止计数, 此时, 计数器内存储的是脉宽的机器周期数的2倍。
由于单片机内部振荡频率很高, 故允许有一个机器周期的量化误差。
设定时器计数器内存储的机器周期数为N, 机器周期为Tc, 则信号周期为T=2N×Tc (1) 于是,信号频率为f=1/T=1/(2N×Tc) (2) 2.2 设计总体思路在设计频率计数器前,需要先设计一个简单的输入信号发生器,在本课题我们选择设计一个简易的方波发生器,频率可以自行调整。
频率计数器的设计包括频率计数和显示电路的的设计,频率计数需包含复位,译码功能,显示电路的功能要求能通过6位动态数码管将计数频率的结果显示出来。
频率计数器的设计需先利用相应的编程软件设计出程序,编译通过后在利用仿真软件仿真出正确的结果。
总设计框图如下:频率计数器总设计框图第3章各模块硬件设计及说明3.1 单片机的选择与说明在本课题中使用的是AT89C51单片机。
一般的OTP产品,一旦错误编程就成了废品,而ATMEL公司89系列单片机内部采用了Flash存储器,所以,错误编程之后仍可以重新编程,直到正确为止。
其次是它可反复进行系统试验。
用89系列单片机设计的系统,可以反复进行系统试验,每次试验可以编入不同的程序,这样就可以保证用户的系统设计达到最优,而且还可以随用户的需要和发展进行修改,使系统能不断追随用户的最新要求。
本次课程设计我选择AT89C51单片机。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,1.主要特性:与MCS-51 兼容;4K字节可编程FLASH存储器;寿命:1000写/擦循环;数据保留时间:10年;全静态工作:0Hz-24MHz;三级程序存储器锁定;128×8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路。
2.振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
3.芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
AT89C51的引脚分布:AT89C51的引脚分布3.2 方波发生器电路设计如下图:在P3.2输入频率可调方波。
方波发生器3.3 晶振电路的设计在MCS-51芯片内部有一个高增益反相放大器,其输入端为XTAL1,其输出端为引脚XTAL2。
而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,这就是单片机的时钟电路,如下图所示:时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
一般地,电容C1和C2取30pF左右,晶振的振荡频率范围为1.2—12MHz。
晶体振荡频率高,系统的时钟频率也高,单片机运行速度也就越快。
MCS-51在通常应用情况下,使用振荡频率为6MHz或12MHz。
晶振电路3.4 复位电路设计根据应用的要求,复位操作有两种基本形式:上电复位和上电或开关复位。
当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST持续为高电平,单片机就处于循环复位状态。
上电复位要求接通电源后,自动实现复位操作。
电容C3和电阻R9对电源十5V来说构成微分电路。
如下图复位电路所示。
要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。
由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。
当单片机已在运行当中时,按下复位键RST后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。
本系统的复位电路采用上电复位。
RET按键可以选择专门的复位按键,也可以选择轻触开关。
复位电路3.5 数码管显示电路设计首先介绍一下显示器的显示接口,按驱动方式分为静态显示和动态显示两种显示方式。
对于多为显示器,通常都是采用动态显示,既逐个地循环地点亮各位显示器。
这样虽然在任一时刻只有一位显示器被点亮,但是由于人眼具有视觉残留效应,看起来与全部点亮效果一样。
为了实现LED显示器的动态扫描,除了要给显示器提供段的输入之外,还有对显示器选择位的控制,这就是通常说的段控和位控。
因此,多位LED显示器接口电路需要有两个输出口,其中一个用于8条段控线;另一个用于输出位控线,位控线的数目等于显示器的数目。
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O 线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
如下图所示:AT89C51的P0-P0.6分别连接数码管的A-G引脚,P0.7连接DP端,低电平有效。
P1.0-P1.2输出数码管的位码,控制6个数码管,高电平有效。
由于由P0口输出的是二进制码,故要使用译码器74LS138进行译码,产生6个输出端,控制6个数码管的状态。
数码管显示电路译码电路第4章软件部分的设计4.1 软件设计思路在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变时计数器加1。
外部输入在每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率的1/24(使用12MHz时钟,最大计数速率为500kHz),也就是说,使用12MHz时钟的AT89C51单片机设计的频率计数器系统,所测信号的频率不能大于500kHz,若大于则必须通过分频器分频才能测试,而本次任务的要求是对0-300kHz的信号进行测量,所以可以直接进行。
利用AT89C51单片机的TO,T1的定时/计数器功能,来完成对输入的信号进行频率计数。
设置定时器0工作方式1,定时1s,并产生方波信号从P1.1引脚输出。
设置定时器1工作在计数方式1,对输入脉冲进行计数,溢出产生中断。
将定时器1中断定义为优先。
由于16位二进制加法计数器的最大计数值为65535,1s之内可能会产生多次溢出,所以需要在中断处理程序里对中断次数进行计数。
1s到后,将中断次数和计数器里的数值取出进行综合处理,处理后的数据送显示。
定时器T0的计数初值:由于定时器T0工作在定时方式时最大的定时时间大约为65ms,若要定时1s,可以采用定时10ms,中断100次来完成1s的定时。
对于定时10ms来说,用定时器方式1可实现。
机器周期为:Tp=12/晶振频率=12/12MHz=1μs计数初值为:X=2^n-Tc=2^16-50000=15536=3CB0H故THO=3CH,TL0=E0H。
信号频率的计算:T1工作在计数方式时最大的计数值为2^16,假设1s内溢出C1次,最后未溢出的计数值为C2,F=C1*2^16+C2=C1*65536+(TH1*256+TL1)。
4.2 软件设计流程图软件设计流程图4.3 源程序编写#include <REG52.H>unsigned long g_iCnt=0,g_CntLock;unsigned char g_cdisnum[6];code unsigned char g_cDistable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char cnt10ms=0;//延时void delay(unsigned int cnt){while(--cnt);}/*------------------------------------------------定时器初始化子程序------------------------------------------------*/void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响TH0=0x3C; //给定初值,这里使用定时器最大值从0开始计数一直到10ms溢出 TL0=0xB0;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}void ShowToSeg(unsigned long uiNumber){static unsigned long PreuiNumber;if(PreuiNumber != uiNumber){g_cdisnum[0]=uiNumber/100000; //把计算数字的每个位存入数组。