毕业设计-基于单片机的数字频率计设计_第1页
毕业设计-基于单片机的数字频率计设计_第2页
毕业设计-基于单片机的数字频率计设计_第3页
毕业设计-基于单片机的数字频率计设计_第4页
毕业设计-基于单片机的数字频率计设计_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(外部数据存储器读选通)RST(9引脚):复位输入引脚。当输入连续两个机器周期以上高电平时为有效,用来完成单片机的复位初始化操作。看门狗计时完成后,RST引脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚()也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址位8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOV指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址位8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。(29引脚):外部程序存储器选通信号()是外部程序存储器选通信号。当AT89C51RC从外部程序存储器执行外部代码时,在每个机器周期被激活两次,而访问外部数据存储器时,将不被激活。/VPP(31引脚):访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,必须接GND。注意加密方式1时,将内部锁定位RESET。为了执行内部程序指令,QUOTE应该接VCC。在Flash编程期间,也接收12伏VPP电压。XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。XTAL2(18引脚):振荡器反相放大器的输入端。STC89C52主要功能如表3.3所示。表3.3STC89C52主要功能主要功能特性兼容MCS51指令系统8K可反复擦写FlashROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能3.2.3单片机引脚分配根据本次系统设计及各模块的需要分析,单片机的引脚分配如表3.4所示。表3.4单片机端口分配表模块端口功能显示模块P0.0-P0.7LCD频率值显示分频模块P3.1-P3.2通道选择P3.5被测信号输出按键P1.6-P1.7键盘设置3.3单片机最小系统根据任务书中的任务、要求以及各种指标,下面介绍数字频率计系统电路的设计。根据实际需要,本次设计的硬件系统主要包括以下几个部分:放大整形模块、分频模块、STC89C52单片机最小系统模块、按键模块及显示模块,下面将分别给予介绍。3.3.1单片机最小系统原理高频率的时钟有利于程序更快的运行,也有可以实现更高的信号采样率,从而实现更多的功能。但是高速对于系统要求较高,而且功耗大,运行环境苛刻。考虑到单片机本身用在控制,并非高速信号采样处理,所以选取合适的频率即可。合适频率的晶振对于选频信号强度准确度都有好处,本次设计选取12.000M无源晶振接入XTAL1和XTAL2引脚。并联2个30pF陶瓷电容帮助起振。STC89C52单片机最小系统如图3.2所示。图3.2单片机最小系统原理图3.3.2复位电路及时钟电路复位电路和时钟电路是维持单片机最小系统运行的基本模块。复位电路通常分为两种:上电复位(图3.3)和手动复位(图3.4)。图3.3上电复位图3.4手动复位有时系统在运行过程中出现程序跑飞的情况,在程序开发过程中,经常需要手动复位。所以本次设计选用手动复位。按键手动复位有电平方式和脉冲方式两种。其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的,在这次设计电路时采用的是前面的那种复位方式,即按键电平复位。3.4信号调理及放大整形模块前置放大整形模块包括放大器LM318、稳压管1N4733A,施密特触发器74LS14。反相输入的运算放大器的放大倍数为RL2/RL1,系统的整形电路由施密特触发器组成,信号经过放大后,要进行稳压,防止烧坏后面的芯片,整形后的方波送到74LS161分频,然后送单片机以便计数。由于输入的信号幅度是不确定、可能很大也有可能很小,这样对于输入信号的测量就不方便了,过大可能会把器件烧毁,过小可能器件检测不到,所以在设计中放大限幅和整形,信号调理部分电路具体实现电路原理图和参数如下图3.5所示:图3.5信号整形放大原理图3.4.1LM318介绍LM318运算放大器是美国国家半导体公司生产的通用型运放系列中速度最快的器件。与其它种类的通用型运放相比具有电压转换速率高、频带宽、输出动态范围大、较完善的保护电路等突出优点。适合于在脉冲信号放大器、宽带放大器、中频放大器、宽频带信号发生器、快速A/D转换器、高速比较器等电路中应用。主要应用数据如下:输入失调电压:4mV;偏置电流:150nA;增益带宽积:15MHz;转换速率:70V/us;耗电流:5mA;电源:+/-20V。3.4.21N4733及74LS14介绍1N4733:是精密稳压二极管。主要技术数据:最大耗散功率Pzm=1W;稳定电压Vz=5.1伏;最大工作电流Izm=179毫安。非门芯片74LS14是一个6反向器,A端为输入端,Y端为输出端,一片芯片一共6路,即1,3,5,9,11,13为输入端,2,4,6,8,10,12为输出端,输出结果与输入结果反向。即如果输入端为高电平,那么输出为低电平。如果输入端为低电平,输出为高电平。3.5分频模块前面已经提过,由于测量频率范围比较宽,而且最高测量值要求要达到4MHz,为了达到测量要求以及提高测量精度,这里我用74LS161作为一个4分频和16分频电路。分频器可用来降低信号的频率,是数字系统中常用的电路。分频器的输入信号频率与输出信号频率之比称为分频比N。N进制计数器可实现N分频器。74HC161与74LS161功能兼容,是常用的四位二进制可预置的同步加法计数器,它可以灵活运用在各种数字电路,以及单片机系统中实现分频器等很多重要的功能。74LS161对整形后的方波信号进行分频,Q1为四分频输出,Q3为十六分频输出。未经分频、经过四分频和经过十六分频的三路信号作为74LS153的一个4选1数据选择器的低三位输入,由单片机控制选择分频系数,然后再送单片机内部计数器T1,其原理图如图3.6所示:图3.6分频模块3.5.174LS161介绍74LS161是常用的四位二进制可预置的同步加法计数器,它可以灵活的运用在各种数字电路,以及单片机系统中实现分频器等很多重要的功能,时钟CP和四个数据输入端P0~P3,清零/MR,使能CEP,CET,置数PE,数据输出端Q0~Q3,以及进位输出TC(TC=Q0·Q1·Q2·Q3·CET)。表3.5为74161的功能表。表3.574161的功能表清零RD预置LD使能EPET时钟CP预置数据输入ABCD输出Q0Q1Q2Q3L××××××××LLLLHL××上升沿ABCDABCDHHL××××××保持HH×L×××××保持HHHH上升沿××××计数其中RD是异步清零端,LD是预置数控制端,A、B、C、D是预置数据输入端,EP和ET是计数使能端,RCO(=ET.QA.QB.QC.QD)是进位输出端,它的设置为多片集成计数器的级联提供了方便。计数过程中,首先加入一清零信号RD=0,使各触发器的状态为0,即计数器清零。RD变为1后,加入一个置数信号LD=0,即信号需要维持到下一个时钟脉冲的正跳变到来后。在这个置数信号和时钟脉冲上升的共同作用下,各触发器的输出状态与预置的输入数据相同,这就是预置操作。接着EP=ET=1,在此期间74161一直处于计数状态。一直到EP=0,ET=1,计数器计数状态结束。从74LS161功能表功能表中可以知道,当清零端CR=“0”,计数器输出Q3、Q2、Q1、Q0立即为全“0”,这个时候为异步复位功能。当CR=“1”且LD=“0”时,在CP信号上升沿作用后,74LS161输出端Q3、Q2、Q1、Q0的状态分别与并行数据输入端D3,D2,D1,D0的状态一样,为同步置数功能。而只有当CR=LD=EP=ET=“1”、CP脉冲上升沿作用后,计数器加1。74LS161还有一个进位输出端CO,其逻辑关系是CO=Q0·Q1·Q2·Q3·CET。合理应用计数器的清零功能和置数功能,一片74LS161可以组成16进制以下的任意进制分频器。管脚图介绍:时钟CP和四个数据输入端P0~P3;清零/MR;使能CEP,CET;置数PE;数据输出端Q0~Q3。其管脚图如图3.7所示。

图3.774LS161管脚图图3.874LS153管脚图3.5.274LS153介绍74LS153是一个双4选1数据选择器,数据选择端(AB)为两组共用,按二进制译码,以供两组从各自的4个数据输入端(1C0--1C3,2C0--2C3)中分别选取一个所需数据,只有在两组各自的选通端(1G、2G)为低电平时才可选择数据,1Y、2Y分别为两个输出端。其管脚图如图3.8所示。3.6LCD显示和键盘LCD1602显示部分,通过调节变阻器调节LCD背光亮度,八位数据端口接单片机P0口,读写控制端接P2.0-P2.2。三个按键中,设置键接P3.2单片机按外部中断0接口,当按键按下后,置P3.2口低电平,单片机中断。S1、S2为频率/周期、闸门时间加/减选择按键,按键部分的工作原理是,根据按下设置键的时间长短,可以设置闸门时间或者选择测量结果的显示方式,闸门时间可以加也可以减,显示方式有频率和周期两种,按键部分也是单片机控制,原理图如图3.9所示:图3.9显示及按键部分3.6.1LCD1602简介在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,这里重点介绍字符型液晶显示器的应用。在单片机系统中应用晶液显示器作为输出器件有以下几个优点:(1)显示质量高由于液晶显示器的每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新亮点。因此,液晶显示器的画质高且不会闪烁。(2)数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。(3)体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同的显示面积的传统显示器要轻得多。(4)功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。1、液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)单纯矩阵驱动(SimpleMatrix)和主动矩阵驱动(ActiveMatrix)三种。③液晶显示器字符的显示原理用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。2、1602字符型LCD简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图3.10所示:图3.101602字符型液晶显示器实物图3、1602LCD的基本参数及引脚功能1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如图3.11所示:1602LCD主要技术参数:显示容量:16×2个字符芯片工作电压:4.5—5.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95×4.35(W×H)mm图3.111602LCD尺寸图引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3.6所示:表3.6引脚接口说明表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源,接GND。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。4、1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表3.7所示:表3.71602控制指令序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容3.7MAX232简介该产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。由于电脑串口RS232电平是-10v+10v,而一般的单片机应用系统的信号电压是TTL电平0+5V,MAX232就是用来进行电平转换的,该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-VTTL/CMOS电平。每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。本次串口模块主要是用来烧录程序到单片机上。其管脚图以及应用原理图如图3.12所示:主要技术参数:1、单5V电源工作2、LinBiCMOSTM工艺技术3、两个驱动器及两个接收器4、±30V输入电平5、低电源电流:典型值是8mA6、符合甚至优于ANSI标准EIA/TIA-232-E及ITU推荐标准V.287、ESD保护大于MIL-STD-883(方法3015)标准的2000V图3.12MAX232管脚图以及应用原理图4系统软件设计系统软件设计主要采用模块化设计,叙述了各个模块的程序流程图,并介绍了软件Keil和Proteus的使用方法和调试仿真。4.1软件设计本次程序设计采用的是C语言程序设计。系统软件设计采用模块化设计方法。整个系统由初始化模块,信号频率测量,自动量程转换、按键模块和显示等模块组成。4.1.1主程序流程图设计根据本次设计要求,主程序主要包括单片机和LCD1602初始化,频率测量,量程自动转换以及显示几个方面,主程序流程图如图4.1所示:图4.1主程序流程图4.1.2子程序流程图设计(1)显示程序LCD显示程序设计流程图如下图所示:图4.2显示程序流程图(2)频率测量程序框图频率测量程序整体架构如图所示:频率测量程序频率测量程序加按键、减按键显示闸门时间判断频率测试频率周期显示频率显示定时中断计数中断89C52加按键、减按键显示闸门时间判断频率测试频率周期显示频率显示定时中断计数中断89C52初始化延时子程序图4.3频率测量框架图(3)中断服务流程图这是按键部分的程序流程图,按键有三个,希望可以通过设置键可以选择闸门时间设置或者选择显示方式,工作过程如下,设置键按下的时间长短判断,长按就选择显示方式,如果按下时间短,则选择闸门时间设置,设置后再按下设置键退出中断,返回测量结果显示。INT0中断流程图如图所示:图4.4INT0中断流程图判断频率,选择分频流程图本次设计,分频系数有两个,100kHz<f<500kHz时选择4分频,f>500kHz时选择16分频,分频数选择程序流程图如图4.5所示:图4.5分频数选择程序流程图由于本次设计要求测量的频率范围是100Hz—4MHz,可见测量范围比较宽,为提高精度以及测量达到最高测量要求4MHz,因此要进行外部分频,分频系数有1,4,16.即不分频,4分频和16分频。程序中设计的是先预测输入频率,若是频率范围在100KHz—500KHz,选择4分频,高于500KHz则选择16分频,小于100KHz则不用分频,直接测量。由此设计的程序流程图如图4.5所示。4.2Keil和Proteus软件介绍此设计需要在Keil软件平台上完成程序的调试,在Proteus软件平台上完成仿真显示。因此介绍如何使用Keil和Proteus进行软件的仿真。4.2.1Keil简介Keil软件是目前最流行开发系列单片机的软件,Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。而Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。(1)建立工程文件点击“Project->Newproject”菜单,出现一个对话框,要求给将要建立的工程起一个名字,你可以在编辑框中输入一个名字,点击“保存”按钮,出现第二个对话框,按要求选择目标器件片。建立新文件并增加到组。分别设置“target1”中的“Target,output,debug”各项,使程序汇编后产生HEX文件。(2)汇编,调试系统程序Keil单片机模拟调试软件内集成了一个文本编辑器,用该文本编辑器可以编辑源程序。在集成开发环境中选择菜单“File→New...”、单击对应的工具按钮或者快捷键Ctrl+N将打开一个新的文本编辑窗口,完成C语言源文件的输入,并且完成源程序向当前工程的添加。然后在集成开发环境中选择菜单“File→SaveAs...”可以完成文件的第一次存储。注意,C语言源文件的扩展名应该是“.C”,它应该与工程文件存储在同一文件夹之内。在完成文件的第一次存储以后,当对C语言源文件又进行了修改,再次存储文件则应该选择菜单“File→Save”,单击对应的工具按钮或者快捷键Ctrl+S实现文件的保存。接着的工作需要把C语言源文件加入工程之中。选择工程管理器窗口的子目“SourceGroup1”,再单击鼠标右键打开快捷菜单。在快捷菜单中选择“AddFiletoGroup‘SourceGroup1’”,加入文件对话框被打开。在这个对话框的“查找范围(I)”下拉列表框中选择存储C语言源文件的文件夹,在“文件类型(T)”下拉列表框选择“CSourcefile(*.a*;*.src)”,这时存储的C语言源文件将显示出来。双击要加入的文件名或者选择要加入的文件名再单击“Add”按钮即可完成把C语言源文件加入工程。文件加入以后,加入文件对话框并不消失,更多的文件也可以利用它加入工程。如果不需要加入其它文件,单击“Close”按钮可以关闭加入文件对话框。这时工程管理窗口的文件选项卡中子目录“SourceGroup1”下出现一个C语言源文件。需要注意,当把C语言源文件加入工程但还没有关闭加入文件对话框,这时有可能被误认为文件没有成功地加入工程而再次进行加入操作,系统将显示所需的文件已经加入的提示。在这种情况下,单击提示框中的“确定”按钮,再单击“Close”按钮可以关闭加入文件对话框。(3)编译源程序,出现错误时,返回上一级对错误更改后重新编译,直到没有错误为止。4.2.2Proteus简介Proteus是Labcenter公司出品的电路分析、实物仿真系统,而Keil是目前世界上最好的51单片机汇编和C语言的集成开发环境。它支持汇编和C的混合编程,同时具备强大的软件仿真和硬件仿真功能。Proteus能够很方便的和KEIL、MatlabIDE等编译模拟软件结合。Proteus提供了大量的元件库有RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件,它可以仿真单片机和周边设备,可以仿真51系列、AVR,PIC等常用的MCU,与KEIL和MPLAB不同的是它还提供了周边设备的仿真,只要给出电路图就可以仿真。这里我将Keil和Proteus两个软件的快速集成起来使用。(1)首先将Keil和Proteus两个软件安装好。(2)然后在C:\ProgramFiles\LabcenterElectronics\Proteus6Professional\MODELS(我的Proteus是安装C盘里面的)目录下的VDM51.DLL动态连接库文件复制到C:KEIL\C51\BIN目录下面(我的KEIL也安装在C盘)这个文件将在Keil的debug设置时用到。(3)打开Proteus软件,新建一个文件将硬件原理图绘入图中。(4)将Keil生成的HEX文件下载入单片机中,点击“开始”进行仿真。(5)在Keil中进行debug,同时在Proteus中查看直观的结果(如LCD显示)。这样就可以像使用仿真器一样调试程序。利用Proteus与KEIL整合进行实验,具有比较明显的优势,当然其存在的缺点也是有的。利用仿真实验可以做全部的软件实验和极大多数的硬件系统,虚拟仿真实验室,因极少硬件投入、所以经济优势明显,不仅可以弥补实验仪器和元器件缺乏带来的不足,而且排除了原材料消耗和仪器损坏等因素。4.3程序编写及仿真图设计根据前面的程序流程框图,分模块编写C语言程序,由于在用C语言编写程序方面学艺不精,此次程序的编写是在网上搜索相关资料然后在多位同学和老师的指导下完成,过程坎坷而且很揪心,相对后面的调试,这算是好的了。之前学过Proteus,而且比较熟悉,所以仿真图设计是在Proteus完成,设计之前了解要用的元器件特性以及各个元器件之间的连接方法,而且之前课程设计多次用过,所以在本次设计中,没遇到多大问题,相对顺利很多。总体仿真图如图4.6所示:图4.6频率计Proteus仿真图5调试频率计的系统调试包括硬件调试、软件调试以及系统软硬件联合调试。硬件调试包括显示模块、整形模块、分频模块等模块的调试,软件调试就是通过修改程序,使频率计功能完善,提高频率计的测量精度。使用软件仿真,调试仿真结果,同时使用数字万用表和示波器测试输出电压值和输出波形,调试出正确的软硬件电路。5.1系统调试Proteus仿真成功后,接着就是制作硬件板,在实验电路安装完毕后,不要急于通电测试,而首先必须做好以下调试前的检查工作。检查连线情况,经常遇到有接错、少接或是多接等连线错误。检查连线可以直接对照电路原理进行,但是如果电路中布线较多,则可以以元件为中心,依次检查其引脚的有关连线,这样不仅可以查出错接或是少接,而且也较容易发现多余的线。为了确保连线的可靠,在查线的同时,还可以用万用表电阻档对接线作连通检查,而且最好在器件外引线处测量,这样有可能查出某些“虚焊”的隐患。在通电前,还需要用万用表检查电源输入端与地之间是否存在短路,若有则须要进一步检查其原因。在完成了以上各项检查并确认无误后,才可以通电调试,但此时应注意电源的正、负极不能接反。(1)LCD显示调试做好板子后,检查电路,没有短路或者短路,接着对显示部分进行调试。给板子输入电源,调节变阻器改变LCD背光亮度,直到亮度适合而且显示正常。去掉前置放大整形部分,把显示程序下载到单片机,送数据给LCD显示,能正常显示程序中设定显示的数据,说明显示电路部分正常工作。(2)键盘调试在显示正常的情况下调试键盘,按下设置键,看是否能正常进入中断,若能,进入中断后,按下频率/周期、闸门时间设置键,看是否能正常设置。在调试过程中,按上述进行调试,没什么问题,键盘正常工作。(3)前置放大整形调试去掉LCD、单片机,调试放大器是否正常工作。给定输入信号,用示波器分别测量输入和输出信号,看是否放大相应倍数,限幅是否在指定范围。调试结果:第一级放大倍数与预想要求的放大倍数相符合。第二级限幅在5.5V,与理论值5.1V有所出入,但仍然满足电路要求。整形部分调试,主要是把不是方波的信号变成方波信号,输入正弦波,用示波器观察输出波形是否是方波信号,这次整形部分在低频段是可以整形的,在高频段整形效果不太理想。(4)分频模块调试本次设计有四分频和十六分频,输入不同的信号值,用示波器观察输入信号是否可以进行分频,还有分频数是否正确。调试过程中,观察输入信号的频率并记录,然后测量分频后的信号频率并记录,然后拿前后两个频率值对比,满足四分频和十六分频。5.2软件调试单片机软件调试主要是调试本次设计的主程序。Keil和Proteus联合进行调试。调试过程如下:(1)新建一个工程。打开Keil,单击Project菜单,在弹出的下拉菜单选择NewProject。(2)然后选择要保存的路径,输入工程文件名字,保存。(3)新建一个工程后弹出一个对话框,根据需要选择使用单片机型号,单击确定。(4)单击“File”,选择“New”,新建文件并在其中输入程序代码,然后保存为C语言文件。(5)回到编辑界面后,单击“Target1”前面的“+”号,然后在“SourceGroup1”单击右键选择“AddFileToGroup'SourceGroup1'”,选中上一步保存的Text.C文件。(6)单击"Project"菜单,选中“BuiltTarget”,完成程序的编译,在工程文件夹中找到*.hex文件即可。(7)打开Proteus软件,新建一个文件将硬件原理图绘入图中。(8)将KEIL生成的HEX文件下载入单片机中,点击“开始”进行仿真。根据系统设计要求,进行Keil和Proteus系统仿真,不断调试程序,修改电路图,直到符合功能要求。本次设计Proteus仿真结果如图5.1所示。图5.1部分仿真图仿真数据记录如下:表5.1Hz档的数据记录表输入频率值100200330500690770930242仿真测量值100200330500690771930242表5.2KHz档的数据记录表输入频率值12.5仿真测量值12.5由于仿真软件自身问题,当输入较高频率时,需要较长时间才能测出来,所以以上表格的仿真数据是花了较长一段时间才记录下来的,并且MHz单位无法仿真出来。实际测量所用的时间是很短的。经上述测试,基本功能都以实现,可以测出输入信号的频率值,符合要求。5.3软硬件联合调试软件系统测试只能测试方波信号,外加硬件整形电路,可以测试正弦波、三角波等各种波形的频率值,把各模块组合在一起,做成完整的频率计,实物图如图所示。经过不断的软硬件联合调试,修改程序和硬件,最终符合设计功能要求。为了衡量这次设计的频率计的工作情况和测量精度,我们对系统进行了调试。用这次设计的频率计对信号进行了测量,使用函数发生器输出各种波形,由实物频率计测得频率,记录数据。实际记录数据如下表所示。表5.3Hz档的数据记录表输入100155200500557630750821900测量100155200500557630750821900误差/%000000000表5.4KHz档的数据记录表输入100150175200500550600700800测量100150.01175.01200500.02550.02600.02700.01800.03误差/%00.00670.005700.0040.00360.00330.00140.0037表5.5MHz档的数据记录表输入1.323测量1.011.311.471.471.492.33.14误差/%11918214.6154.75.4误差分析从记录的数据及计算的误差值可以看出,系统软件仿真误差很小,在100Hz-4MHz范围内测量出来的频率基本上就是输入信号的频率,误差很小的。但是在硬件调试中,可能是由于元器件本身误差,随着时间的延长,其测量值也会产生误差,造成测量结果没有软件仿真精确。同时手工焊接单片机最小系统、分频整形电路等也会带来一定的干扰,造成信号的失真,从而导致测量精度下降,测量范围有所缩小,而且只有在输入信号在1MHz以上,误差才会比较大,误差不在允许范围内,所设计的电路基本在测量高频时,稳定性差。个人认为提高测量范围和测量精度可以改善一下几个方面:芯片的选择、硬件制作、分频部分、放大整形部分。提高放大整形这部分的准确度,分频部分可以用多级分频可以使分频更准确,最后是把硬件做得更好,使其稳定工作。这些都是可以提高精度的。6总结毕业设计已经结束,本次设计由于本人知识的有限,所以设计的系统并不是最理想的。在这次设计中,我学到很多很多东西,也很后悔在之前的大学三年多没有更加努力的学习,致使在这次的毕业设计中遇到很多很多问题,若是之前学得好,就不会觉得那么难做,也不会那么频繁的向老师和同学请教,想自己做好毕设,但是遇到的那么多问题不是自己可以全部解决的。毕业设计是一次综合性的实践,它将各种知识结合到一起综合运用到实践上来扩展、弥补、串联所学的知识。通过本次毕业设计我得到了很多收获。首先,了解了单片机的基本知识和在控制领域的作用和地位。其次掌握了C语言的编写程序,学会了使用Proteus和Keil的仿真来实现,同时掌握了如何收集、查阅、应用文献资料,如何根据实际需要有选择的阅读书籍和正确确定系统所要使用的元器件的类型。再次,在精神方面锻炼了思想、磨练了意志。面对存在的困难首先分析问题根据任务要求确定可实现的部分,定出那不准的方面找同学和老师讨论研究,再完善、再修改、再发现问题、再解决,这个过程中培养了自己的耐心、恒心及遇事不乱的精神,在这次设计过程中,由于所需的高频信号发生器不在本专业开放的实验室,而有信号源的实验室又没有电脑,所以我需要在两个实验室之间来回跑,软件需要不断的调试不断的修改,所以在调试过程中,没有任何进展的时候,真的很考验人的耐性,庆幸的是我坚持下来了。总之,我明白了理论和实践之间存在的距离,只有靠不断的思考不断的动手才能将所学的知识真正运用到实践上来,任何设计都不是那么简单的就可以完成。在毕业设计中我的很多方面的能力都得到了提高,尤其在单片机软件编程方面让我感触颇深。我个人认为软件设计是个既灵活又细腻的工作,它要求耐心和细心去不断完善,同时还需要有良好的逻辑思维能力。通过这次毕业设计,我分析问题和解决问题的能力有所提高,也巩固了所学的知识,加深了对理论知识的理解,更重要的是锻炼自己的独立性,为我今后的工作和学习打下坚实的基础。回顾自己的学习历程,感觉今天的生活与状态是由一系列的偶然与必然串联成的结果。在这个过程中自己承受了比别人更多的挫折,但也学到了更多的感悟,获得了比别人更大的成就。因为我的每一次成功的获得都比别人晚了许多,但也都是在关键的时候比别人得到了更多的收获,也比别人体会到更多的付出后的充实。很庆幸自己在过去岁月中每一次困难抉择中做出的选择,以及在不断地激励中为目标而不断奋斗的坚持。谢辞从选题到写开题报告再到现在的论文定稿,经过了近半年的忙碌和奋斗,终于到了写谢辞的时候了,舒一口气的同时,我发现四年的大学生涯也将就此结束,走的最快的总是时间,来不及感叹,大学生活已近尾声,四年的努力与付出,随着本次论文的完成,将要划下完美的句号。“穷则独善其身,达则兼济天下”,古训教导我们不做自私人,懂得尽己所能,知恩图报。我想向曾经给我帮助和支持的老师、同学们表示衷心的感谢。是你们对我的悉心指导和艰苦相伴,让我攻破了一个个的难关;是你们对我的循循善诱和精心点拨,让我的大学不留遗憾。在这里首先要感谢我的导师王老师。本课题在选题及研究过程中得到老师的悉心指导。王老师多次询问设计制作进程,并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励。在本论文的撰写过程中,王老师放下了繁重的工作,从选题到如何查阅资料,再是开题报告的完成和硬件软件的设计过程再到论文正文的反复修改,直到最后的定稿,这其中的每一个环节,甚至是一些很小细节的完善、格式的矫正等,老师都给予了我悉心的指导。还有在我大学四年悉心教导我的老师们,是你们教会我很多有用的知识,特别是教会了我解决问题思考问题的方式和习惯,我在做毕业设计的时候才能有自己的思想和规划,毕业设计工作才有了目标和方向。还有在整个毕业设计的制作过程中,很多同学给我很多的有意义的帮助和鼓励,是在老师和同学们的鼓励和支持下,我才可以顺利做好毕业设计。在此我向所有老师和同学表示最诚挚的谢意。最后,感谢各位评审老师在百忙中抽出时间对论文进行审稿、参加答辩,并对参加答辩会的老师和同学表示谢意。参考文献[1]王辛之等.AT89系列单片机原理与接口技术[M].北京:北京航天大学出版社,2004.[2]谢自美.电子线路设计•实验•测试.武汉[M]:华中科技大学出版社,2000.[3]孙江宏.Protel99电路设计与应用[M].北京:机械工业出版社,2003.[4]辛友顺.单片机应用系统设计与实现[M].福建:福建科学技术出版社,2005.[5]张鑫.单片机原理及应用[M].北京:电子工业出版社,2005.[6]John.E.Cuningham.Handbookofremotecontrol&automationtechniques[M],1978.[7]卢艳军.单片机基本原理及应用系统[M].北京:机械工业出版社,2004.[8]张毅刚.MCS-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社,1996[9]陈西文,吴燕军.I/O接口程序设计入门与应用[M].北京:机械工业出版社,1996.[10]JohoJ.D’azzoConstantineH.Houpis.LinearControlSystemAnalysisandDesign[M].Beijing:清华大学出版社,2000.[11]张鹏,王雪梅.单片机原理与应用实例教程[M].海军出版社.2007.[12]徐波.Keil的使用技巧[J].电子产品世界出版社.2006.[13]赫建国等.单片机在电子电路设计中的应用[M].清华大学出版社.2005.附录频率计实物图频率计系统的设计原理图程序清单#include<stc12c5a.h>#include<stdio.h>#include<math.h>#include<intrins.h>floatf; //频率floatT; //周期floatTz; //闸门时间charidatabuff[20];charflag=0; //频率\周期选择标志位charxs=0; //设置闸门时间结束后是否显示结果的标志位unsignedcharm=0,n=0,yichu=0,fenpin;//m定时中断次数n计数中断次数yichu判断是定时器还是计数器溢出#defineKey_SetP1#defineK10xbf#defineK20x7f#defineNO_Set0xff#defineFre0#definePeri1sbitB=P2^5;sbitA=P2^6;sbitP17=P1^7;sbitP16=P1^6;sbitP35=P3^5;sbitSet=P3^2;unsignedcharLCD_Wait(void);voidLCD_Write(bitstyle,unsignedcharinput);voidLCD_SetDisplay(unsignedcharDisplayMode);voidLCD_SetInput(unsignedcharInputMode);voidLCD_Initial();voidGotoXY(unsignedcharx,unsignedchary);voidPrint(unsignedchar*str);voidC52_Initial();voidDelay(unsignedintt);voiddisplay(floatf);voidcep();voidpand();voidtimedisplay(floatTz);voidTime_Set1();voidTime_Set2();voidt0();voidt1();/***********************引脚定义***********************************/sbitLcdRs=P2^0;sbitLcdRw=P2^1;sbitLcdEn=P2^2;sfrDBPort=0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口voidlcm_delay(intx){inti;for(i=0;i<x;i++)_nop_();}/************************内部等待函数***************************************/unsignedcharLCD_Wait(void){ LcdRs=0; //寄存器选择输入端 1:数据0:指令 LcdRw=1; _nop_();//RW:为0:写状态;为1:读状态; LcdEn=1; _nop_(); //使能输入端,读状态,高电平有效;写状态,下降沿有效 LcdEn=0; returnDBPort; }/***********************向LCD写入命令或数据*********************************/#defineLCD_COMMAND0//Command#defineLCD_DATA1//Data#defineLCD_CLEAR_SCREEN 0x01//清屏#defineLCD_HOMING 0x02//光标返回原点voidLCD_Write(bitstyle,unsignedcharinput){ LcdEn=0; LcdRs=style;LcdRw=0; lcm_delay(100); DBPort=input; lcm_delay(100);//注意顺序 LcdEn=1; lcm_delay(100);//注意顺序 LcdEn=0; lcm_delay(100); LCD_Wait(); }/********************设置显示模式****************************************/#defineLCD_SHOW 0x04//显示开#defineLCD_HIDE 0x00//显示关 #defineLCD_CURSOR 0x02 //显示光标#defineLCD_NO_CURSOR 0x00//无光标 #defineLCD_FLASH 0x01//光标闪动#defineLCD_NO_FLASH 0x00//光标不闪动voidLCD_SetDisplay(unsignedcharDisplayMode)//显示模式设定{ LCD_Write(LCD_COMMAND,0x08|DisplayMode); }/*********************设置输入模式***************************************/#defineLCD_AC_UP0x02//读入一个字符后地址指针加一#defineLCD_AC_DOWN 0x00//读入一个字符后地址指针减一#defineLCD_MOVE0x01//写一个字符后W左移#defineLCD_NO_MOVE 0x00//写一个字符后不移动voidLCD_SetInput(unsignedcharInputMode){ LCD_Write(LCD_COMMAND,0x04|InputMode);}/******************初始化LCD******************************************/voidLCD_Initial(){ LcdEn=0; LCD_Write(LCD_COMMAND,0x38);//8位数据端口,2行显示,5*7点阵 LCD_Write(LCD_COMMAND,0x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);//开启显示,无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);//AC递增,画面不动}//************************************************************************voidGotoXY(unsignedcharx,unsignedchary){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}voidPrint(unsignedchar*str){ while(*str!='\0') { LCD_Write(LCD_DATA,*str); str++; }}/*************************89c52初始化********************************/voidC52_Initial(){Tz=1000000.00;Key_Set=0xff;TMOD=0x51; //01010001T1为计数器,T0为定时器EA=1;//开中断ET0=1;//允许定时器0中断ET1=1;//允许计数器0中断EX0=1; //允许外部中断0中断PX0=1; //外部中断0设置为高优先级IT0=0; //电平触发方式}/********************ms延时子程序****************************************/voidDelay(unsignedintt)//t随着数值越大,误差趋于平衡.{unsignedchari;while(t--){for(i=0;i<125;i++){;}}}/********************计数中断*********************************************/voidt1(void)interrupt3 //计数器1溢出,yichu=1{n++;yichu=1;TH1=0;TL1=0;}/**********************定时中断*********************************************/voidt0(void)interrupt1{m++;yichu=2; //定时器0溢出,yichu=2TH0=0x3c;//定时50msTL0=0xb0;}/***********************频率显示********************************************/voidFdisplay(floatf){ if(f>999900.00){if(f<5000000.00) {sprintf(buff,"Fre:%4.2fmHz",(f/1000000.00));} } else { if(f>1000.00) {sprintf(buff,"Fre:%3.2fkHz",(f/1000.00));} else { if(f>0.08) {sprintf(buff,"Fre:%3.3fHz",f);} } }GotoXY(0,1);Print(buff);}/***********************周期显示********************************************/voidTdisplay(floatT){if(T>999800.00){if(T<10005000.00) {sprintf(buff,"Cycle:%2.2fs",(T/1000000.00));} else {sprintf(buff,"error(TimeorF)",T);} } else { if(T>9950.00) {sprintf(buff,"Cycle:%3.3fms",(T/1000.00));} else { if(T>0.248) {sprintf(buff,"Cycle:%3.4fus",T);} else {sprintf(buff,"error(TimeorF)",T);} } }GotoXY(0,1);Print(buff);}/********************测试频率***************************************/voidcep(){unsignedcharb;unsignedlongjs;m=0;n=0;TMOD=0x51;TH0=0x3c;//定时50msTL0=0xb0;TH1=0;TL1=0;a=Tz/50000.00;TCON=0x50;//启动定时器和计数器while(m!=b);TCON=0; js=TH1*256+TL1+n*65536;f=(js/(Tz/1000000.00))*fenp;T=Tz/(Tz*fenp);if(xs==0)//设置结束后第一次不显示结果{if(flag==Freq)Fdisplay(f);elseTdisplay(T);}} /*********************判断频率*****************************************/voidpand(){xs=0;//设置结束后第二次循环显示结果B153=1;//选择16分频A153=0;yichu=0;TMOD=0x51;TH0=0xff; //定时器0200usTL0=0x38;TH1=0xff; //计数器1100脉冲TL1=0x9c;TR0=1;//启动定时器0和计数器1TR1=1;while(yichu==0);//如果没有溢出一直循环TR0=0;//已经溢出关闭定时器0和计数器1TR1=0; if(yichu==1) //计数器先溢出:在200us内测得的脉冲过多,说明频率较高(f>500khz)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论