简易频率计—单片机课程设计报告.doc
. .课程名称:单片机应用课程设计设计题目:简易频率计的设计院 系:电气工程专 业:年 级:姓 名:指导教师:年月日课 程 设 计 任 务 书专 业姓 名学 号开题日期:年月日完成日期年月日题 目简易频率计的设计一、设计的目的频率计作为测量仪器的一种,它的根本功能是测量信号的频率和周期频率计的应用X围很广,但是目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。为适应工作的需要,可以用一种较小规模和单片机(AT89C51)相结合的频率计的设计方案,不但切实可行,而且体积小、设计简单、本钱低、精度高、可测频带宽,大大降低了设计本钱和实现复杂度。二、设计的内容及要求本设计以AT89C51单片机为控制核心,将外部的频率脉冲信号通过单片机计数端输入,由定时器/计数器T0负责定时,定时器/计数器T1负责对被测信号计数,该频率计的测量X围为1Hz65534Hz,被测脉冲信号的频率可以随时进展调整,通过LCD液晶显示模块对被测信号的频率进展实时显示。该系统包括被测频率脉冲信号、单片机晶振电路、以AT89C51单片机为核心的频率测量模块、LCD液晶显示模块。三、指导教师评语四、成 绩指导教师 (签章) 年 月 日摘 要在电子领域内,频率是一种最根本的参数,由于频率信号抗干扰能力强、易于传输,可以获得较高的测量精度。因此,频率的测量就显得尤为重要,测频方法的研究越来越受到重视。 频率计作为测量仪器的一种,常称为电子计数器,它的根本功能是测量信号的频率和周期频率计的应用X围很广,它不仅应用于一般的简单仪器测量,目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。 为适应实际工作的需要,本次设计给出了一种设计方案,不但切实可行,而且体积小、设计简单、本钱低、精度高、可测频带宽,大大降低了设计本钱和实现复杂度。设计主要以AT89C51单片机为控制核心,将外部的频率脉冲信号通过单片机计数端输入,由定时器/计数器T0负责定时,定时器/计数器T1负责对被测信号计数,该频率计的测量X围为1Hz65534Hz,被测脉冲信号的频率可以随时进展调整,通过LCD液晶显示模块对被测信号的频率进展实时显示。该系统包括被测频率脉冲信号、单片机晶振电路、以AT89C51单片机为核心的频率测量模块、LCD液晶显示模块。关键词:单片机;AT89C51;脉冲信号;LCD显示模块目录摘要2第1章引言31.1研究的目的和意义31.2 国内外研究现状3第2章系统方案设计42.1根本原理42.1.1 测频原理42.1.2 频率计的根本原理52.2总体设计思路62.3具体模块6第3章硬件电路设计73.1 AT89C51主控制器模块73.1.1 主要特性83.1.2 管脚说明83.2 晶振电路103.3频率脉冲信号103.4 LCD液晶显示模块11第4章系统的软件设计114.1 频率测量模块114.2 液晶显示模块15第5章频率计的系统调试与仿真195.1 KEIL中对程序的调试195.2 Protues中对系统的仿真19附录23总结28参考文献29第1章 引言1.1研究的目的和意义频率测量是电子学测量中最为根本的测量之一。由于频率信号抗干扰性强,易于传输,因此可以获得较高的测量精度。随着数字电子技术的开展,频率测量成为一项越来越普遍的工作,测频原理和测量方法的研究正受到越来越多的关注。频率计的主要功能是测量周期信号的频率。其根本原理就是用闸门计数的方式测量脉冲个数。频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。1.2 国内外研究现状在电子测量领域中,频率测量的准确度是最高的,可达1010E-13数量级。由于大规模和超大规模数字集成电路技术、数据通信技术与单片机技术的结合,频率计开展进入了智能化和微型化的新阶段。其功能进一步扩大,除了测量频率、频率比、周期、时间、相位、相位差等根本功能外,还具有自捡、自校、自诊断、数理统计、计算方均根值、数据存储和数据通信等功能。此外,还能测量电压、电流、阻抗、功率和波形等。 国际国内通用数字频率计的主要技术参数:1、足够宽的测量X围。随着现代电子技术的开展,特别是高速芯片技术的开展,有些频率计数器能够直接测量。2、高精度和高分辨率。精度是指测量的准确程度,即仪器的读数接近实际信号频率的程度,精度越高测量越准确。3、晶体振荡器的频率稳定度。晶体振荡器的频率稳定度,是决定频率计测量误差的一个重要指标。4、输入灵敏度。输入灵敏度是指在侧频X围内能保证正常工作的最小输入电压第2章 系统方案设计2.1根本原理2.1.1 测频原理所谓“频率就是周期性信号在单位时间1s内变化的次数,就是“在单位时间内对被测信号进展计数。我们将被测的频率脉冲信号直接送到单片机的计数输入端,由定时器/计数器T0负责定时,定时器/计数器T1负责对被测信号计数,一旦T0定时时间到,立刻终止T1的计数,此时T1的计数值便是单位时间内的脉冲个数。假设在一定时间间隔T内测得这个周期性信号的重复变化次数N,那么其频率可表示为f=N/T。我们将T0的定时时间设为1s,当T0定时满1s后,立即停顿T1计数,此时T1的计数值即为被测信号的频率。定时待测信号 丧失 < T 丧失 图2-1 频率测量原理图 在计数时会出现图2-1所示的丧失脉冲的情况。第一个丧失的脉冲是由于开场检测时脉冲宽度已小于机器周期T;第二个丧失的脉冲的负跳变在定时之外。定时时间内出现脉冲丧失,将引起测量精度降低。脉冲频率越低,这种误差越大。显然对于较低频率的脉冲测量不适合采用测量频率法。而我们本次设计就是采用这种测量频率法对被测脉冲信号进展频率测量,为解决图一中脉冲的丧失这个问题,我们在程序设计中实现了计数开场与脉冲上升沿的同步控制。2.1.2 频率计的根本原理频率计最根本的工作原理为:当被测信号在特定时间段T内的周期个数为N时,那么被测信号的频率f=N/T。在一个测量周期过程中,被测周期信号在输入电路中经过放大、整形、微分操作之后形成特定周期的窄脉冲,送到主门的一个输入端。主门另外一个输入端为时基电路产生电路产生的闸门脉冲。在闸门脉冲开启主门的期间,特定周期的窄脉冲才能通过主门,从而进入计数器进展计数,计数器的显示电路那么用来显示被测信号的频率值,内部控制电路那么用来完成各种测量功能之间的切换并实现测量设置.图2-2 频率计原理图2.2总体设计思路频率计是一种专门对被测信号频率进展测量的电子测量仪器,是我们经常会用到的实验仪器之一,频率的测量实际上就是在单位时间内对脉冲信号进展计数,计数值就是信号频率。本文介绍了一种基于单片机的电子频率计的设计方法,此电子频率以AT89C51单片机为控制核心,可将外部的频率脉冲信号通过单片机计数端输入,由定时器/计数器T0负责定时,定时器/计数器T1负责对被测信号计数,一旦T0定时时间到,立刻终止T1的计数,此时T1的计数值便是单位时间内的脉冲个数,我们将T0的定时时间设为1s,当T0定时满1s后,立即停顿T1计数,此时T1的计数值即为被测信号的频率。该频率计的测量X围为1Hz65534Hz,被测脉冲信号的频率可以随时进展调整,通过LCD液晶显示模块对被测信号的频率进展实时显示。2.3具体模块根据上述系统分析,该系统包括被测频率脉冲信号、单片机晶振电路、以AT89C51单片机为核心的频率测量模块、LCD液晶显示模块。各模块作用如下:1.脉冲信号:就是被测信号,可以随时调整其频率,以便于单片机测量。2.单片机晶振电路:由于单片机的内部时钟方式是用芯片内部振荡电路,精度不高,温飘也较大,外部时钟,分RC振荡和石英晶振,RC精度不高,本钱低,石英晶振,精度高,稳定性好,故我们采用单片机的晶振电路提供时钟信号。3.AT89C51频率测量模块:主要负责对脉冲信号的计数,并且驱动LCD显示模块实时显示测量值。4.LCD液晶显示模块:对单片机测量的频率进展实时显示。综上所述频率计的系统设计由被测频率脉冲信号、单片机晶振电路、以AT89C51单片机为核心的频率测量模块、LCD液晶显示模块等组成,频率计的总体设计框图如图2-3所示。图2-3 频率计总体设计框图第3章 硬件电路设计3.1AT89C51主控制器模块电子频率计以AT89C51单片机为控制核心,可将外部的频率脉冲信号通过单片机计数端输入,由定时器/计数器T0负责定时,定时器/计数器T1P3.5负责对被测信号计数,一旦T0定时时间到,立刻终止T1的计数,此时T1的计数值便是单位时间内的脉冲个数,我们将T0的定时时间设为1s,当T0定时满1s后,立即停顿T1计数,此时T1的计数值即为被测信号的频率。图 3-1 AT89C51主控模块3.1.1主要特性AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断构造,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停顿CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停顿工作并制止其它所有部件工作直到下一个硬件复位。3.1.2 管脚说明VCC:供电电压。 GND:接地。 P0口:P0口为一个8位的漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。在FIASH编程时,P0 口作为原码输入口,当FIASH进展校验时,P0输出原码,此时P0外部必须接上拉电阻。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1时,其管脚被内部上拉电阻拉高,且作为输入。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流ILL这是由于上拉的缘故。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的上下电平要求的宽度。3.2晶振电路由于单片机的内部时钟方式是用芯片内部振荡电路,精度不高,温漂也较大,外部时钟,分RC振荡和石英晶振,RC精度不高,本钱低,石英晶振,精度高,稳定性好,故我们采用单片机的晶振电路提供时钟信号。图3-2 晶振电路3.3频率脉冲信号频率脉冲信号就是被测信号,可以随时调整其频率,以便于单片机测量,直接在protues左侧工具条内的一个Generator Mode工具中选择DCLOCK放置频率脉冲信号如图3-3。图3-3 频率脉冲信号3.4LCD液晶显示模块LCD液晶显示器是一种被动式的显示器,与LED不同,液晶本身并不发光,而是利用液晶在电压作用下,能改变光线通过方向的特性而到达显示白底黑字或黑底白字的目的。液晶显示器具有微功耗、体积小、重量轻、超薄型等诸多其他显示器件所无法比较的优点,在袖珍式仪表和低功耗系统中,得到越来越广泛的应用,目前市场上液晶显示器种类繁多,按排列形状可分为字段型、点阵字符型、点阵图形型,在单片机应用系统中,常使用点阵字符型LCD显示器。字符型液晶显示模块组件内部主要由LCD显示屏LCD Panel、控制器Controller、驱动器Driver、少量阻容原件、构造件等装配在PCB上构成。第4章 系统的软件设计4.1 频率测量模块将定时器T0设置在定时方式2,定时时间为250us,满4000次中断正好是1s,定时器T1工作于计数方式1,计数初值为0。在启动定时器T0开场定时后,随即对送到T1P3.5引脚的被测脉冲进展计数,当T0定时满1s后,立即停顿T1计数,关闭定时器T0,T1的计数值即为被测信号的频率,程序流程图如图4-1。图4-1 频率测量频率测量其中,中断效劳子程序流程图如下:图4-2中断效劳子程序频率测量主函数中,还进展了数据转换以及调用显示模块进展显示其程序流程框图如下:图4-3 频率测量主函数频率测量模块源程序:#include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int void init_lcd(void); void disp_str(uchar x,uchar y,uchar *p); sbit FS=P35; /被测信号FS输入端 bit RDY=0; /测量完成标志 uint msn; /定时中断计数 uint count(void)/测量FS的频率 RDY=0; TMOD=0x52;/T0:定时方式2,T1:计数方式1 TH0=TL0=6;/T0定时时间为250us msn=4000;/4000次中断正好1sTH1=TL1=0x00; /T1工作于计数方式,初值为0ET0=1;/允许T0中断EA=1;/开中断while(FS=1); /等待被测信号变低while(FS=0);/等待被测信号变高TR0=1;/T0开场定时TR1=1;/T1开场计数while(RDY=0);/等待1sTR1=0;/关闭T1、T0TR0=0;return(TH1*256+TL1); /返回计数值 void timer0(void) interrupt 1 using 1 msn-; if(msn=0)/如果1s已到 RDY=1;/设置测量完成标志位 void main() uint f; uchar str9="f= Hz"uchar i;init_lcd(); /液晶屏初始化while(1) f=count(); /测量频率 _nop_(); for(i=6;i>=2;i-)/测量结果转换为5位ASCII码 stri=f%10+0x30; f=f/10; disp_str(0,3,str); /显示测量结果 4.2液晶显示模块液晶显示模块是一个显示的子程序,主要供频率测量模块调用,以便在液晶屏上显示出实时的频率测量值,它的编程比较固定,无非就是按照LCD液晶显示屏的参数要求的指令系统来编写程序,其程序流程图4-4。图4-4 液晶显示液晶显示模块源程序:#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit RS=P20; /数据/命令存放器选择控制端 sbit RW=P21; /读写控制端 sbit E=P22; /使能控制端 sfr LCD=0x90; /P1口作为总线端口 sbit BF=LCD7; /就绪线BF,低电平有效 void lcd_cmd(uchar cmd) LCD=cmd; RS=0;/选择命令存放器 RW=0;/执行写数据操作 E=1; _nop_();/延时 E=0;/使能信号有效 while(1) LCD=0xff;/总线变高 RS=0;/选择命令存放器 RW=1;/读操作 E=0; /使能信号有效 _nop_(); E=1; /撤销使能信号 if(BF=0)break; /如果就绪,返回 void lcd_dat(uchar dat) LCD=dat;/显示数据总线 RS=1;/选择数据存放器 RW=0;/执行写数据操作 E=1; _nop_();/延时 E=0;/使能信号有效 while(1) LCD=0xff;/总线变高 RS=0;/选择命令存放器 RW=1;/读操作 E=0; /使能信号有效 _nop_(); E=1; /撤销使能信号 if(BF=0)break; /如果就绪,返回dat=LCD; void init_lcd(void)/初始化液晶屏 lcd_cmd(0x01); /清屏幕lcd_cmd(0x3c); /设置双行显示,5*10点阵lcd_cmd(0x0c); /开显示,关闭光标 void disp_str(uchar x,uchar y,uchar *p) /在x行、y列显示字符串p if(x=0) /如果在第一行显示 lcd_cmd(0x80+y); /设置写入地址else /如果在第二行显示 lcd_cmd(0xc0+y);/设置写入地址while(*p)/将字符依次发送到液晶屏 lcd_dat(*p+); 第5章 频率计的系统调试与仿真5.1 KEIL中对程序的调试德国的KEIL软件公司提供了一流的8051系列开发工具,将软件开发工具绑定到不同的套件或工具包中。KEIL 8051开发工具套件可用于编译C源程序、汇编源程序,和定位目标文件及库,创立HEX文件以及调试目标程序,我们进入到KEIL中的集成开发环境,对所编写的程序进展了调试,使其生成了目标文件HEX文件,如图5-1所示图5-1 程序的调试5.2Protues中对系统的仿真我们采用Protues软件对系统进展仿真,将KEIL生成的HEX文件下载入单片机中,点击OK开场进展系统的仿真,如图5-2所示图 5-2 Protues中对hex文件的选择在Protues中双击被测频率脉冲信号t1,在Frequency中将其频率设定为6443,如图5-3所示:图 5-3 频率的设定点击OK,然后在Protues中点击Play开场进展系统仿真,仿真结果如图5-4所示:图 5-4 仿真结果我们按照上面的方法,依次改变被测频率脉冲信号的频率,在Protues软件中进展反复的调试仿真,软件仿真结果如图5-5:图5-5 屡次仿真数据结果 从记录的数据可以看出,系统软件仿真误差很小,在信号频率X围内测量出来的频率根本上就是输入信号的频率,在超出这个X围后,才出现很小的误差。这可能是由于硬件电路信号传输延时,或者晶振电路产生的时钟信号误差造成的,也可能是由于软件中执行语句的延时造成的,在高频率下就会出现很小的误差,但是可以看出,误差在允许X围内,所设计的电路根本符合要求。附录源程序:频率测量模块源程序 #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int void init_lcd(void); void disp_str(uchar x,uchar y,uchar *p); sbit FS=P35; /被测信号FS输入端 bit RDY=0; /测量完成标志 uint msn; /定时中断计数 uint count(void)/测量FS的频率 RDY=0; TMOD=0x52;/T0:定时方式2,T1:计数方式1 TH0=TL0=6;/T0定时时间为250us msn=4000;/4000次中断正好1sTH1=TL1=0x00; /T1工作于计数方式,初值为0ET0=1;/允许T0中断EA=1;/开中断while(FS=1); /等待被测信号变低while(FS=0);/等待被测信号变高TR0=1;/T0开场定时TR1=1;/T1开场计数while(RDY=0);/等待1sTR1=0;/关闭T1、T0TR0=0;return(TH1*256+TL1); /返回计数值 void timer0(void) interrupt 1 using 1 msn-; if(msn=0)/如果1s已到 RDY=1;/设置测量完成标志位 void main() uint f; uchar str9="f= Hz"uchar i;init_lcd(); /液晶屏初始化while(1) f=count(); /测量频率 _nop_(); for(i=6;i>=2;i-)/测量结果转换为5位ASCII码 stri=f%10+0x30; f=f/10; disp_str(0,3,str); /显示测量结果 液晶显示模块源程序: #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit RS=P20; /数据/命令存放器选择控制端 sbit RW=P21; /读写控制端 sbit E=P22; /使能控制端 sfr LCD=0x90; /P1口作为总线端口 sbit BF=LCD7; /就绪线BF,低电平有效 void lcd_cmd(uchar cmd) LCD=cmd; RS=0;/选择命令存放器 RW=0;/执行写数据操作 E=1; _nop_();/延时 E=0;/使能信号有效 while(1) LCD=0xff;/总线变高 RS=0;/选择命令存放器 RW=1;/读操作 E=0; /使能信号有效 _nop_(); E=1; /撤销使能信号 if(BF=0)break; /如果就绪,返回 void lcd_dat(uchar dat) LCD=dat;/显示数据总线 RS=1;/选择数据存放器 RW=0;/执行写数据操作 E=1; _nop_();/延时 E=0;/使能信号有效 while(1) LCD=0xff;/总线变高 RS=0;/选择命令存放器 RW=1;/读操作 E=0; /使能信号有效 _nop_(); E=1; /撤销使能信号 if(BF=0)break; /如果就绪,返回dat=LCD; void init_lcd(void)/初始化液晶屏 lcd_cmd(0x01); /清屏幕lcd_cmd(0x3c); /设置双行显示,5*10点阵lcd_cmd(0x0c); /开显示,关闭光标 void disp_str(uchar x,uchar y,uchar *p) /在x行、y列显示字符串p if(x=0) /如果在第一行显示 lcd_cmd(0x80+y); /设置写入地址else /如果在第二行显示 lcd_cmd(0xc0+y);/设置写入地址while(*p)/将字符依次发送到液晶屏 lcd_dat(*p+); 总结在当今高新技术产业迅猛开展的时期,频率计在计算机、通讯设备、音频视频等科研生产领域是不可缺少的测量仪器。频率测量又是电子学测量中最为根本的测量之一。由于频率信号抗干扰性强,易于传输,因此可以获得较高的测量精度。随着数字电子技术的开展,频率测量成为一项越来越普遍的工作,测频原理和测量方法的研究正受到越来越多的关注,本次设计以单片机为核心,测量迅速,准确度高,显示直观。在本次设计的过程中,我深刻体会到了自己在专业知识的掌握上的缺乏,特别是在程序编写上,遇到了许多问题,这使我不得不认真的去学习程序编写,去深入了解程序编写的原理。由于本次设计涉及的知识面较广,需要经常通过网上查询资料,随时和教师、同学进展交流,受益菲浅,并在教师的指导下,弥补了自己在许多知识面上的缺乏。这次设计更让我认识到了查阅资料自学的重要性,在今后的学习中,应该多看一些专业方面的书籍,丰富自己的知识,提高自己的专业水平,相信这一定会对以后走上工作岗位的我有很大的帮助。参考文献1 马忠梅等.单片机的C语言应用程序设计第四版. :航空航天大学,2007.2 X齐.单片机原理与应用系统设计. :电子工业,2021.3 曾一江.单片微机原理与接口技术. :科学,2006.4 X飞青等.单片机原理与应用实践指导. :机械工业,2021.5 周雪.模拟电子技术第二版. :XX电子科技大学,2005.6 黄维翼.单片机应用与实践工程. :清华大学,2021.7 江晓安.数字电路. :XX电子科技大学,2002.8 周润景等.PROTUES入门教程. :机械工业,2007. .word.