基本要求:
1频率变换范围1Hz-9999Hz
2 测量精度±1%
3 4位LED显示
4 可测量方波、正弦波、三角波
5 高频采用测频法,低频采用测周法测量
完整的课程设计下载(word格式的):
基于单片机的数字频率计课设报告.doc
下面是论文的部分预览:
课程设计说明书
课程设计名称: 专业课程设计
课程设计题目: 数字频率计
学 院 名 称: 信息工程学院
学号:姓名:
评分: 教师:
2016 年 6 月 29 日
摘要
数字频率计是一种专门对被测信号频率进行测量的电子测量仪器,在计算机、通讯设备、音频视频等科研生产领域应用广泛。
本文详细介绍数字频率计的软件设计,并概述了硬件设计,以中界频率为界,低频采用测周法,而高频采用测频法。其中,硬件电路由放大电路、整形电路、单片机定时计数电路、7279显示电路四个部分组成。通过单片机STC89C51实现对特定周期窄脉冲的计数功能;通过芯片LM324实现对小信号的放大;通过芯片74LS14将输入的非方波整形成方波;通过芯片hd7279A驱动数码管可连续动态显示4位数。软件部分采用的是一种结构化语言C51进行编程。它层次清晰,便于按模块化方式组织程序,易于调试和维护。主要功能模块有主程序、测频法程序、测周法程序、分离千、百、十、个位程序、7279显示程序组成。
本数字频率计可测量范围在1Hz—9999Hz的正弦波、方波、三角波的信号,时基宽度为1us,10us,100us,1ms,本数字频率计测量误差大约在0.1%左右,精度为±0.04%,直接由软件判断测频所用方法,解决了存在的换挡速度慢等缺点,并且节约了硬件上的成本。具有精度高、使用方便、测量迅速,以及便等优点,而且还具有成本低、性价比高、功耗低等特点。因此,该频率计具有一定的实用价值。
关键词:测频法、测周法、STC89C51单片机、HD7279A
目录
前言
第一章 硬件电路方案设计及设计要求
1.1 设计内容及要求
1.2 方案比较
1.3 方案论证
1.4方案选择
第二章 系统组成和工作原理
2.1系统组成
2.2 系统工作原理
2.2.1频率计测量方法简介
2.2.2工作原理
第三章 硬件电路设计
3.1单片机最小系统电路
3.1.1 STC89C51功能简介
3.1.2单片机STC89C51引脚图
3.1.3复位电路
3.2 放大整形模块
3.3 施密特整形
3.4 HD 7279A显示模块
第四章 软件设计及程序流程图
4.1 编程语言的选择及程序的编译调试
4.2 单片机计数原理
4.3主程序设计
4.3.1 设计思路
4.3.2程序流程图
第五章 实验调试、测量结果记录和误差分析
5.1实验调试
5.2 测量结果记录
5.3误差分析
5.3.1产生误差的原因
5.3.2减小误差的方法
第六章 小结和体会
参考文献
附录一 元器件清单
附录二 实验电路图
附录三 实验代码
前言当今社会,随着科技的进步,数字系统的设计有了很大的进步,如今运行速度快、在功能更加强大的基础上更加便于使用携带成了发展的方向。60年代以来,在半导体器件和计算机威廉希尔官方网站
发展的基础上,结合电测威廉希尔官方网站
创造出了完全新的数字式仪表。它在测试方法、原理、仪器结构和操作方法上完全与前面所讲的模式式仪表不同,在质的方面也有很大的飞跃,70年代以来,把微型计算机的功能引入数字仪表,产生了新型智能化仪表,它具有程序控制、信息储存数据处理和自动检修功能,使数字仪表向高准确度、多功能、高可靠性和低价格方面大大迈进了一步。近代的数字频率计就其功能而言,早已超出了早期只能测量频率的范畴,而具有测量周期、频率比、脉冲时间、累加计数等用途,并能输出标准频率、时标脉冲、闸门时间脉冲及编码信号等,成为一机多能、测频范围宽、测量精度高、测量速度快、自动化程度高、直接数字显示、操作简便的常用电子仪器,它在教学、科研、生产、国防中得到广泛使用。
频率测量仪在数字电路、模拟电路中应用比较广泛,它是直接用十进制数字来显示被测信号频率的一种测量装置。它不仅可以测量正弦波,方波,三角波,尖脉冲信号和其他具有周期的信号的频率,经过改装,可以测量脉冲宽度,做成数字式脉宽测量仪:可以测量电容做成数字电容测量仪;在电路中增加传感器,还可以做成数字脉搏仪,计价器等。因此数字频率仪在测量物理量方面的广泛应用。
由于时基电路,逻辑控制电路实际的硬件设计用到的器件较多,联机比较复杂,而且会产生比较大的延迟。因此,本课程报告采用单片机为核心的控制电路,放大整形电路、和显示电路的构成原理,判断所测量频率与中界频率的大小关系,在高频段测频模式而低频段采用测周期模式的测量方法,将使整个系统大大简化,提高整体性能,并且进行了相应的硬软件设计。其基本功能是测量正弦信号、三角波信号、方波信号及其他各种单位时间内变化的物理量,以十进制数字的方式显示被测信号频率。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,因此它在电子测量过程中必不可少。
第一章 硬件电路方案设计及设计要求1.1 设计内容及要求基本要求:
1频率变换范围1Hz-9999Hz
2 测量精度±1%
3 4位LED显示
4 可测量方波、正弦波、三角波
5 高频采用测频法,低频采用测周法测量
1.2 方案比较方案一:本方案主要以单片机为核心,利用单片机的计数定时功能来实现频率的计数并且利用单片机的动态扫描把测出的数据送到数字显示电路显示。其实原理框图如图1所示
图1.1 方案一原理图
方案二:本方案主要以数字器件为核心,主要分为时基电路,逻辑控制电路,放大整形电路,闸门电路,计数电路,锁存电路,译码显示电路七大部分。其原理框图如图2.2所示
图1.2方案二原理框图
1.3 方案论证 方案一:本方案主要以单片机为核心,被测信号先进入信号放大电路进行放大,再被送到波形整形电路整形,把被测得正弦波或者三角波为方波。利用单片机的计数器和定时器的功能对被测信号进行计数。编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。
方案二:本方案使用大量的数字器件,被测量信号放大整形电路变成计数器所要求的脉冲信号,其频率于被测信号的频率相同。同时时基电路提供标准时间基准信号,其高电平持续时间1s,当1s信号来到时,闸门开通,被测脉冲信号通过闸门,计数器开始计数,直到1s信号结束闸门关闭,停止计数。若在闸门时间1s内计数器计得的脉冲个数为N,则被测信号频率FX=NHZ。逻辑控制电路的作用有两个:一是产生锁存脉冲,是显示器上的数字稳定;二是产生清零脉冲,使计数器每次测量从零开始计数。
1.4方案选择比较以上两种方案可以知道,方案一得核心是单片机,使用的元器件少,原理电路简单,调试简单只要改变程序的设定值则可以实现不同频率范围的测试能自动选择测试的量程。与方案一相比较方案二则使用了大量的数字元器件,原理电路复杂,硬件调试麻烦。如要测量高频的信号还需要加上分频电路,成本相对高了点。基于上述,所以选择了方案一。
第二章 系统组成和工作原理2.1系统组成本系统主要由放大模块、施密特整形模块、单片机模块和HD7279驱动显示模块组成。通过软件判断高频或低频,单片机计数脉冲周期或个数来动态测量所求频率,并通过7279数码管显示出来。得到系统的总体结构框图如图2.1所示
图2.1 数字频率计功能模块
2.2 系统工作原理2.2.1频率计测量方法简介(1)测频法,即在一定闸门时间内测量被测信号的脉冲个数。
用一标准闸门信号(闸门宽度为Tc)对被测信号的重复周期进行计数,计数结果为Nx时,其待测频率为
时间Tc为标准闸门宽度(s),Nx为计数器计出的脉冲个数(重复周期数),测量的精度主要取决于计数Nx的误差。其特点在于:测量方法简单;待测信号频率越高,精度越高;测量时间越长,误差越小;但当待测信号频率较低时,误差较大。
(2)测周法
此法是在待测信号的一个周期Tx内,记录标准频率信号变化次数N0。这种方法测出的频率是
此法的特点是低频检测时精度高,但高频检测时误差很大。为了提高T法高频测量时的精度可通过A分频使待测信号的周期扩大A倍。
2.2.2工作原理本次设计的数字频率计是以STC89C51 单片机为核心, 被测周期信号通过放大整形电路经过操作形成特定周期的窄脉冲,送到单片机的T0(P3.4)口外脉冲触发计数。
以1KHz为中界频率,1000Hz-9999Hz为高频段采用测频法,记下1s脉冲个数 c=256
TH0+TL0 (式2-3)
1Hz-999Hz为低频段采用测周法,计算10个脉冲所用时间T
T=溢出次数×溢出时间+计数值×1us
f=
(式2-4)
最后,将被测信号频率通过显示电路读取数值。
第三章 硬件电路设计本频率计的数据测量系统主要元器件是单片机STC89C51,由外部晶振完成对待测信号频率的定时和计数等功能,外部还要有放大电路、整形电路、显示电路。
3.1单片机最小系统电路本次设计的数字频率计是以宏晶公司STC89C51微处理器作为系统的控制核心,单片机控制电路主要由晶振电路、复位电路及串行通信电路构成。由其组成的单片机最小系统电路原理图如图3.1所示。
图 3.1 单片机最小系统原理图
3.1.1 STC89C51功能简介(1)增强型1T 流水线/ 精简指令集结构8051 CPU
(2)工作电压:3.4V-5.5V (5V 单片机)/ 2.0V-3.8V (3V 单片机
(3)工作频率范围:0 -35 MHz,相当于普通8051 的0~420MHz.实际工作频率可达48MHz.
(4)用户应用程序空间12K / 10K / 8K / 6K / 4K / 2K 字节
(5)片上集成512 字节RAM
(6)通用I/O 口(27/23个),复位后为:准双向口/ 弱上拉(普通8051 传统I/O 口)
可设置成四种模式:准双向口/ 弱上拉,推挽/ 强上拉,仅为输入/ 高阻,开漏
每个I/O 口驱动能力均可达到20mA,但整个芯片最大不得超过55mA
(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器
可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片
(8)EEPROM 功能
(9)看门狗
(10)内部集成MAX810 专用复位电路(外部晶体20M 以下时,可省外部复位电路)
(11)时钟源:外部高精度晶体/ 时钟,内部R/C 振荡器。用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟。常温下内部R/C 振荡器频率为:5.2MHz ~6.8MHz。精度要求不高时,可选择使用内部时钟,因为有温漂,请选4MHz ~8MHz
(12)有2个16 位定时器/ 计数器
(13)外部中断2 路,下降沿中断或低电平触发中断,Power Down 模式可由外部中断低电平触发中断方式唤醒
(14)PWM( 4 路)/ P C A(可编程计数器阵列),也可用来再实现4个定时器或4个外部中断(上升沿中断/ 下降沿中断均可支持)
(15)STC89Cc516AD具有ADC功能。10 位精度ADC,共8 路
(16)通用异步串行口(UART)
(17)SPI 同步通信口,主模式/ 从模式
(18)工作温度范围:0 -75℃/ -40 -+85℃
3.1.2单片机STC89C51引脚图STC89C51有40个引脚,按引脚功能大致可分为4个种类:电源、时钟、控制和I/O引脚。
⒈ 电源:
⑴ VCC - 芯片电源,接+5V;
⑵ VSS - 接地端;
⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。
⒊ 控制线:控制线共有4根,
⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲
① ALE功能:用来锁存P0口送出的低8位地址
② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
⑵ PSEN:外ROM读选通信号。
⑶ RST/VPD:复位/备用电源。
① RST(Reset)功能:复位信号输入端。
② VPD功能:在Vcc掉电情况下,接备用电源。
⑷ EA/Vpp:内外ROM选择/片内EPROM编程电源。
① EA功能:内外ROM选择端。
② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
⒋ I/O线
80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
3.1.3复位电路1、手动按钮复位
手动按钮复位需要人为在复位输入端RST上加入高电平(图3.2)。一般采用的办法是在RST端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以完全能够满足复位的时间要求。
图3.2 手动复位电路
2、上电复位
上电复位电路如图3.3所示,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1µF。上电复位的工作过程是在加电时,复位电路通过电 容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。在图2的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序
图3.3 上电复位电路
3.2 放大整形模块对于小电压信号,数字频率计需要把微弱信号放大,故本课设采用LM324放大器,优点是使用广泛,价格便宜。
参数计算:放大器输出电压为
(式3-1)
放大倍数n=
=11 (式3-2)
图3.4 放大整形模块电路图
3.3 施密特整形施密特整形器可以把边沿变化缓慢的周期性信号变换为边沿很陡的矩形脉冲信号。输入的信号只要幅度大于vt+,即可在施密特触发器的输出端得到同等频率的矩形脉冲信号。整形波形如图3.5所示,放大整形仿真图如图3.6所示
图3.5 施密特整形
图3.6 放大整形电路仿真图
3.4 HD 7279A显示模块
HD7279A(见图3.7)是一片具有串行接口的,同时驱动8位共阴式数码管的智能显示驱动芯片,其中P1.0接单片机的
,P1.1接单片机的CLK,P1.2接单片机的DATA,P1.0接单片机的
.
图3.8 HD7279A
HD7279A的控制指令分为二大类——纯指令和带有数据的指令。由于本次设计只利用了HD7279A构成键盘和数码管显示,用段数码管显示,在设计中用到的HD7279A 的控制指令有复位(A4H)和读键盘(15H)指令和送数据指令。
1、复位指令(A4H):当HD7279A收到该指令后,将所有的显示清除,所有设置的字符消隐、闪烁等属性也被一起消除。执行该指令后,芯片所处的状态与系统上电后所处的状态一样。
2、带有数据的指令:本次设计采用了两种译码方式,一种是下载数据且按方式0译码,即命令由二个字节组成,前半部分为指令,格式为(8XH),X为位地址,后一字节低四位为数据。另一种是下载数据但不译码方式,即命令由二个字节组成,前半部分为指令,格式为(9XH),X为位地址,后一字节显示数据从高至低位分别为DP和A-G。分别对应7段LED数码管的各段。
3、读键盘指令(15H):该指令从HD7279A读出当前的按键代码。与复位指令不同,此命令的前一个字节15H为微控制器传送到HD7279A的指令,而后一个字节d0—d7则为HD7279A返回的按键代码,本次采用4X4键盘,则各键键盘代码分别定义为04H—07H。此指令的前半段,HD7279A的DATA引脚处于高阻输入状态,以接受来自微处理器的指令;在指令的后半段,DATA引脚从输入状态转为输出状态,输出键盘代码的值。其时序图如图3.7所示
读键盘指令(8位,高位在前) HD7279输出的键盘代码(8位,高位在前)
图3.7读键盘指令时序图
其中:T5=50us,T6=8us,T7=8us。
第四章 软件设计及程序流程图4.1 编程语言的选择及程序的编译调试1)编程语言的选择
MCS-51编程语言常用的有两种,一种是汇编语言,另一种是C语言。汇编语言的机器代码生成效率很高,但是可读性并不强,复杂一点的程序就更是难读懂,而C 语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过了汇编语言,而且C语言还可以嵌入汇编来解决高实效性的代码编写问题。
对于开发周期来说,C语言的开发周期通常小于汇编语言很多。C 语言是一种结构化语言[1]。它层次清晰,便于按模块化方式组织程序,易于调试和维护,这种语言的表现能力和处理能力极强,它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。C语言的模块化开发方式使开发出来的程序模块可不经修改,直接被其他项目所用,这样可以最大程度的实现资源共享。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能为一体,具有高效性,可移植性强等特点。
综合以上C 语言的优点,本次设计选择由美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统Keil uVision2对单片机进行软件编程。
2)源程序的编译
由于单片机只能执行机器语言的程序(目标程序),因此将C51 源程序编辑好以扩展名.C 保存后,应将源程序编译成目标程序。编译过程中,能够检查程序的正确性,并能发现源程序中的语法错误和一般性的逻辑错误,但不能检查结构上的错误。如果有错误,信息窗口会报告显示,并指出错误位置及错误类型。程序错误被纠正后,要重新进行编译调试,直到程序编译无误为止。只有当被编译的程序没有错误时,才能执行程序及对程序进行仿真调试。
3)程序的仿真调试
对源程序编译形成目标程序,只是排除了语法错误和一般性的逻辑错误,只有将目标程序应用到硬件中,经过开发系统Keil uVision2的仿真调试后且满足功能要求才能写到程序存储器中。仿真调试是对程序功能是否能实现所做的最后检查。
4.2 单片机计数原理计算计数初值:设计数初值为X,本设计采用12 MHz的晶振。机器周期=12×(1/晶振频率)
当计数器T0设定为计数方式1时,其计数脉冲是来源T0端口的外部事件。当T0端口上出现由“1”(高电平)到“0”(低电平)的负跳变脉冲时,计数器则加1计数。计算机是在每个机器周期的S5P2状态时采样T1端口,当前一个机器周期采样为1且后一个机器周期采样为0时,计数器加1计数。计算机需用两个机器周期来识别1次计数,因而最大计数速率为振荡频率的1/24。在采用12 MHz晶振的情况下,单片机最大计数速度为0.5 MHz即500 kHz。
另外,此处对外部事件计数脉冲的占空比(即脉冲的持续宽度)无特殊要求,从T0口输入脉冲信号,T0可实现对脉冲个数的计数
4.3主程序设计4.3.1 设计思路主程序是整个系统软件的运行主体,各个子系统的软件程序都必须经过它的调度,才能运行得当。根据设计的功能要求,主程序主要完成了对系统的初始化,初始化具体参数如下:
1、内存工作单元初始化:
标志位初始化:设置中界频率为1000HZ,测频法、测周法标志位均清零。读数标志初始化测频法中断次数、测周法溢出次数清零,个、十、百、千位清零
2、显示模块初始化:7279复位
3、定时中断0和定时中断1初始化:
EA=1;中断使能,ET0=1;定时中断0溢出中断,ET1=1;定时中断1溢出中断
4、显示初始化,系统启动时显示初始化为所有数码管都显示0000。
4.3.2程序流程图1主程序流程图
图4.1 T0时钟中断流程图
图4.2 T1时钟中断流程图
第五章 实验调试、测量结果记录和误差分析5.1实验调试在调试过程中所使用的测试仪器仪表和工具包括:
函数信号发生器一个;万用表一个;稳压电源一个;最小系统板一块;
Keil C51 单片机编译软件;示波器一台。
在确定好电路、领好元器件后即开始对布局。分别按放大电路和整形电路进行焊接。函数发生器产生的三角波、正弦波通过放大整形电路后输出到示波器,在示波器中可以看到频率几乎不变的完美的方波。后拔出示波器探头,接上单片机频率计及显示。
第一次调试中,7279数码管一直显示71Hz不变化,无论如何改变频率,其显示值保持不变,怀疑是程序某处错误,陷入了死循环中。后来检查程序发现调用测频法和测周法的子程序中标志位最开始没有清零,导致第一次读值后频率标志未清零,单片机判断计数结束,使第二次读值的子程序无法进行,也就无法显示改变的频率值。后来修改语句,频率计能正常动态计数。
本次实验在稳压电源的正负极增加1uf电容到地滤除电源中高频成分分量,起了稳定电路系统的作用。
5.2 测量结果记录实验测量结果如表1所示
表1 实验测量结果
精度的计算
(式5-1)
A ——检测系统的精度
—测量范围内允许的最大绝对误差
—满量程输出
所以,经计算得出,A=4
9999=±0.04%
5.3误差分析5.3.1产生误差的原因产生的误差主要包括量化误差、触发误差、标准频率误差。
1.量化误差:是在将模拟量变换为数字量的量化过程中产生的误差,是数字化仪器所特有的误差,是不可消除的误差。它是由于频率计闸门的开启与计数脉冲的输入在时间上的不确定性,即相位随机性而产生的误差。要减小量化误差对测频的影响,应设法增大计数值N,选择较大倍数的倍频器和分频器。
2.触发误差:又称为变换误差,被测信号在整形过程中,由于整形电路本身触发电平的抖动或者被测信号叠加有噪声和各种干扰信号等原因,使得整形后的脉冲周期不等于被测信号的周期,由此而产生的误差。
触发误差对测量周期的影响较大,对测量频率的影响较小,所以测频时一般不考虑触发误差的影响。减小误差的方法,尽量提高被测信号的信噪比,采用多周期测量法。
3.标准频率误差:是指由于晶振信号不稳定等原因而产生的误差。测频时,晶振信号用来产生门控信号(即时基信号),标准频率误差称为时基误差。一般情况下,标准频率误差较小,不予考虑。
4.函数信号发生器产生的信号波频率不稳定
5.由于实验室单片机使用的时间比较长,受制造、测量、条件变化的影响,实际晶振频率与标称值的不符
6.外界噪声等的干扰
5.3.2减小误差的方法1、改进实验方案,使用等精度测量可能更较精确测量结果
2、在相同条件下和短时期内,对同一被测量进行多次重复测量
3、换用较高精度的晶振,选用稳定性良好的函数信号发生器
第六章 小结和体会在设计过程中,得到了我的指导老师的悉心指导与帮助,首先在此表示衷心的感谢。
本应用系统设计的目的是通过在“单片机原理及应用”课堂上学习的知识,以及查阅资料,培养一种自学的能力。并且引导一种创新的思维,把学到的知识应用到日常生活当中。经过这次一个较完整的课程设计和制作过程,对于认识到自己在知识方面存在的不足,明确今后的学习方向是非常有益的,为将来的的就业提前打了下坚实的基础。
在设计的过程中,我不断的学习,思考和同学间相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。
调试阶段可以说是这次设计中最重要的部分,因为以前的只是理论而不是真正的实体。所以说它是最重要的。调试阶段我们遇到的问题有:对编写代码不熟悉;因为硬件和软件模块是分开做而后又组装到一起的,所以兼容性不是很好(也就是不能融合为一个整体,直接接在函数信号发生器上能行但是接硬件部分就会出现问题,没有预期现象出现);针对以上几个问题我们作出了以下的“对策”:软件不熟悉,就借来参考书,一步一步的对着学,而且上网查资料和芯片使用说明,所以随着接触的增加软件也就越来越熟悉。另外在电路方面需要进一步的设计和修改。
通过这次课设报告也发现了自己很多的不足之处,首先体现在动手能力不强,今后必须加强对这方面能力的培养,必须培养和锻炼自己独立思考的能力,将学过的理论应用到实践中去,再好的理论不去用它我们就看不到现在科技的进步,科技推动人类社会的不断向前发展。
参考文献[1]张先庭主编.单片机原理、接口与C51应用程序设计.北京:国防工业出版社.2011
[2]李光飞,楼苗然主编.51系列单片机.北京:北京航空航天大学出版社,2003
[3]黄正瑾编著.CPLD系统英国威廉希尔公司网站
入门与应用. 北京: 电子工业出版社, 2002
[4]谢自美编著.电子线路设计·实验·测试.华中理工大学出版社,2002
[5]陈永甫编著.电子电路智能化设计.实例与应用.北京:电子工业出版,2002.8
[6]康华光主编.电子威廉希尔官方网站
基础(第四版).北京:高等教育出版社,1999
附录一 元器件清单
序号
| 数量
| 符号及参数
| 1
| 2
| 电容
| 1uF
| RB.1/.2
| 2
| 1
| 单片机最小系统板
|
| STC89c51
| 3
| 1
| 运算放大器
|
| LM324
| 4
| 1
| 施密特整形器
|
| 74LS14N
| 5
| 3
| 电阻R1
| 1KΩ
| AXIAL-0.4
| 6
| 1
| 电阻R2
| 10KΩ
| AXIAL-0.4
| 附录二 实验电路图
附录三 实验代码#include
#include
#define uchar unsigned char
#define uint unsigned int
#define jiezhi 1000//定义中界频率为1000HZ
uchar flag_0=0,flag_1=0,flag=0;//定义测频法、测周法标志位并清零
uchar count_0=0,count_1=0,count=0;//定义测频法中断次数、测周法溢出次数并清零
uchar qian=0,bai=0,shi=0,ge=0;//个、十、百位定义并清零
#define HD7279_RESET 0xa4 //复位
***it HD7279_CS=P1^0; // HD7279_CS--P1.0
***it HD7279_CLK=P1^1; // HD7279_CLK-- P1.1
***it HD7279_DATA=P1^2; // HD7279_DATA-- P1.2
***it HD7279_KEY =P1^3; // HD7279_KEY-- P1.3
void initf()
{
TMOD=0x15;//定时器1方式1定时,定时器0方式1计数
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;//定义50ms中断
TH0=0;
TL0=0;//定时器高8位、低8位清零
EA=1;
ET1=1;
TR0=1;//打开定时
TR1=1;//开始计数
flag=1;//测频法标志位为1
}
void initt()
{
TR0=0;
TR1=0;
TMOD=0x15; //定时器1方式1定时,定时器0方式1计数
TH1=0;
TL1=0;
TH0=255;
TL0=255;
EA=1;
ET1=1;
ET0=1;
TR0=1;
flag=0;//测周法标志位为0
count_1=0; //溢出位清零
}
void fenli(long int m)
{
uint temp;
temp=m;
qian=temp/1000;//频率值除以1000取整作千位
temp=temp%1000;
bai=temp/100;//第一次余数除以100取整
temp=temp%100;
shi=temp/10;//第二次余数除以10取整
ge=temp%10;//第二次余数直接作个位
}
/***************HD7279模块程序************************************/
void HD7279_LongDelay(void)
{
unsigned char i;
for (i=0;i<6;i++);
}
void HD7279_ShortDelay(void)
{;}
void HD7279_SendByte( unsigned char out_byte)
{
unsigned char i;
HD7279_CS=0;
HD7279_LongDelay();
for(i=0;i<8;i++)
{
if(out_byte&0x80) { HD7279_DATA=1; }
else { HD7279_DATA=0; }
HD7279_CLK=1;
HD7279_ShortDelay();
HD7279_CLK=0;
HD7279_ShortDelay();
out_byte=out_byte<<1;
}
HD7279_DATA=0;
}
void Write7279(unsigned char command, unsigned char dta)
{
HD7279_SendByte( command );
HD7279_SendByte( dta );
HD7279_ShortDelay();
HD7279_CS=1;
}
void display()
{
HD7279_SendByte(0xa4);//复位
Write7279(0x83,qian);
Write7279(0x82,bai);
Write7279(0x81,shi);
Write7279(0x80,ge);
}
void main()
{
uchar a,b;
long int c;
while(1)
{
initf();
while(!flag_0);
flag_0=0;//测频法标志位清零
a=TH0;
b=TL0;
c=256*a+b;//先用测频法测频率
if(c>=jiezhi)//判断是否大于中界频率
{
fenli(c);//大于中界频率调用千、百、十位分离程序
display();//显示
}
else
{
initt();
while(!flag_1);
flag_1=0; //测周法标志位清零
a=TH1;
b=TL1;
c=(65536*count_1+a*256+b)/100;//时间=溢出数*溢出时间+计数值
c=50000/c;
fenli(c);//调用千、百、十位分离程序
display();//显示
}
}
}
void time0() interrupt 1//定时器中断0
{
TH0=255;
TL0=251;//计5次
TR1=1;
count++;
if(count==2) //循环2次
{
count=0;
flag_1=1;//测频法标志位置1
}
}
void time1() interrupt 3//定时器中断1
{
if(flag)
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;//50ms
count_0++;
if(count_0==20&&flag_0==0)//判断中断次数是否执行20次
{
count_0=0;
flag_0=1;//测周法标志位置1
}
}
else
{
TH1=0;
TL1=0;//溢出后定时器清零
count_1++;//溢出次数加1
}
}
|