基于52单片机数字频率计系统设计报告

上传人:无*** 文档编号:140487301 上传时间:2022-08-23 格式:DOC 页数:32 大小:914KB
返回 下载 相关 举报
基于52单片机数字频率计系统设计报告_第1页
第1页 / 共32页
基于52单片机数字频率计系统设计报告_第2页
第2页 / 共32页
基于52单片机数字频率计系统设计报告_第3页
第3页 / 共32页
点击查看更多>>
资源描述
学号:1108441096 课程设计报告基于AT89C52单片机数字频率计系统设计 院 系 电子信息工程学院 专 业 电气工程及其自动化 班 级 ( 2 ) 姓 名 华 杰 合肥师范学院课程设计报告摘 要在电子技术中,频率是最基本的参数之一,同时也是一个非常重要的参数,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。频率测量是电子学测量中最为基本的测量之一。本文中详细介绍了频率计的仿真及设计过程。本文设计了一种以单片机STC89C52为核心的数字频率计。介绍了单片机、放大整形模块、分频模块和LCD1602显示模块等各个模块的组成和工作原理。测量时,将被测输入信号送给单片机,通过程序控制计数,结果送LCD1602显示频率值。本次设计是以单片机STC89C52为控制核心,利用它内部的定时/计数器完成待测信号频率的测量。应用单片机的控制功能和数学运算能力,实现计数功能和频率的换算,最后显示测量的频率值。本次设计所制作的频率计外围电路简单,大部分功能都通过软件编程实现,利用单片机控制实现频率计的自动换挡功能;用单片机中断控制端口实现频率的测量功能;通过分频电路实现对频率档位的控制。本次设计的频率计具有测量准确度高,响应速度快,体积小等优点。实现了1Hz4MHz范围的频率测量,而且可以实现量程自动切换。关键词:AT89C52;数字频率计;分频;放大电路III目 录摘 要I目 录II1 引言11.1研究背景及意义11.2 国内外研究现状12 总体方案设计22.1 数字频率计设计内容22.2 总体思路22.3 具体模块23 硬件设计43.1 电路设计的步骤43.2 STC89C52简介43.2.1STC89C52RC引脚功能说明63.2.2 单片机引脚分配83.3 信号调理及放大整形模块83.3.1 LM318介绍93.2.2 1N4733及74LS14介绍93.4 分频模块93.4.1 74LS161介绍103.4.2 74LS153介绍113.5 LCD显示和键盘113.5.1 LCD1602简介113.5.2 1602LCD的基本参数及引脚功能123.5.3 1602LCD的指令说明及时序134 软件设计144.1主程序流程图设计144.2 子程序流程图设计144.3 程序编写及仿真图设计165 系统调试与实验186 总结19参考文献20附录211 引言1.1 研究背景及意义频率计是我们在电子电路实验中经常会用到的测量仪器之一,它能将频率用液晶显示器或者数码管直接显示出来,给测试带来很大的方便,使结果更加直接;且频率计还能对其他多种物理量进行测量,如声音的频率、机械振动的频率等,都可以先转变成电信号,然后用频率计来测量。研究频率计的设计与制作将会对我们的生活有很大意义。现代的频率计多是用LED数码管显示的,其结果不明确,表示也不直接,研究液晶显示的频率计的发展很有意义。数字频率计是一种用十进制数显示被测信号频率的数字测量仪器,被测信号可以是方波,三角波,正弦波或其它周期性信号。如果配上适当的传感器,还可以对多种物理量进行测量,比如转速,声音频率,机械振动的频率以及产品的计件等等。因此,数字频率计是一种应用很广泛的仪器,它的基本功能是测量方波信号、三角波信号、正弦信号以及其它各种单位时间内变化的物理量。它被广泛应用于航天、电子、测控等领域。1.2 国内外研究现状纵观现在的数字频率计,其基本原理都是一样的,频率是单位时间(1s) 内信号发生周期变化的次数,如果我们可以在给定的1s时间内对信号波形进行计数,并将计数结果显示出来,就能读取被测信号的频率。数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计算这一段时间间隔内的脉冲数,将其换算后显示出来。这就是数字频率计的基本原理。但现在的频率计的显示部分都是LED数码管,显示内容是BCD码,不直观,如果用LCD液晶来显示,会使输出结果更直接,更便于观察。正因如此,所以未来数字频率计的发展必定会向液晶显示方向发展。随着数字电子技术的发展,频率测量成为一项越来越普遍的工作,测频原理和测频方法的研究正受到越来越多的关注。2 总体方案设计2.1 数字频率计设计内容本题主要研究以单片机为核心辅以信号处理电路实现对输入信号的频率进行测量。通过对信号预处理电路,包括信号放大电路、信号变换电路、信号整形电路和分频电路相关的理论知识,以及单片机工作原理、接口技术和编程命令及方法等知识的深入学习理解,在多种方案中选择并确定一种不论是硬件实现还是测量精度和测量范围指标较合适的方案,实现基于单片机的数字频率计设计。该设备通过信号预处理电路,将各种输入信号进行处理,使信号变成高低电平形式的矩形波信号,再与单片机进行接口,再通过单片机的中断和各种程序进行运算,最后显示出计算结果,得到输入信号的频率值。通过本次课题设计,使学生更加巩固所学理论知识,并通过查阅、消化相关资料,自学相关设计硬件,完成设计方案的理论分析,并进一步设计、制作实际电路,从而达到理论与实践相结合的效果。培养分析问题、解决实际问题的能力,并具备一定的硬件电路设计、调试能力。参数要求如下:1、装置测量频率范围在1HZ-4MHZ之间;2、测量误差为0.1%;3、用LCD1602液晶显示器显示结果;4、可以测量方波、三角波及正弦波等多种波形的周期信号。2.2 总体思路频率计是我们经常会用到的实验仪器之一,频率的测量实际上就是在单位时间内对信号脉冲进行计数,计数值就是信号频率。本文介绍了一种基于单片机STC89C52的频率计的设计方法,所制作的频率计测量比较高的频率时采用外部分频,测量较低频率值时采用单片机直接计数,不进行外部分频。该频率计实现100HZ-4MHZ的频率测量,LCD1602液晶显示器显示测量结果,可以测量正弦波、三角波及方波等各种波形的频率值。该设备通过信号预处理电路,将各种输入信号进行处理,使信号变成高低电平形式的矩形波信号,通过分频模块,再与单片机进行接口,再通过单片机的中断和计数各种程序进行运算,最后显示出计算结果,得到输入信号的频率值。2.3 具体模块本次设计包含硬件设计与软件设计两部分。根据上述系统分析,数字频率计硬件系统设计共包括五大模块:放大整形模块、分频模块、单片机控制模块、键盘模块及显示模块。各模块作用如下:(1)放大整形模块:放大电路是对待测信号的放大,降低对待测信号幅度的要求。整形电路是对一些不是方波的待测信号转化成方波信号,便于测量。(2)分频模块:考虑单片机外部计数,使用12 MHz时钟时,最大计数速率为500 kHz,由于本次设计要求测量的最高频率是4MHz,因此需要进行外部分频。分频电路用于扩展单片机频率测量范围,并实现单片机频率测量使用统一信号,可使单片机测频更易于实现,同时也降低了系统的测频误差。(3)单片机控制模块:以STC89C52单片机为控制核心,用它来完成待测信号的计数和显示以及对分频的控制。利用其内部的定时/计数器完成待测信号周期/频率的测量。单片机STC89C52内部具有2个16位定时/计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。(因为STC89C52所需外围元件少,扩展性强,测试准确度高。(4)按键模块:包括三个按键,S1、S2为频率/周期、闸门时间加/减按键,还有一个是确定键,在测量较低频率时,可以改变闸门时间,提高测量精度,也可以选择频率或者周期来显示测量结果。(5)显示模块:显示电路采用LCD1602液晶显示器显示,使测量结果更直观的显示出来。综合以上分析,频率计硬件系统设计有单片机控制模块、放大整形模块、分频模块、键盘模块及显示模块等组成,频率计的硬件总体设计框图如图2.2所示。 图2.1 硬件总体框图 简单说来,本系统实际用LM318对待测信号进行放大,再用稳压二极管1N4733对信号进行限幅,然后经过74LS14反相器整形得到方波信号,接着送74LS161进行分频,最后送单片机P3.5内部计数器进行计数,单片机处理数据后送LCD1602显示。下面一章将介绍整个电路的设计过程。电路的基本功能是实现电子产品开发设计的技术和功能,使电路具有某种特定功能,必须进行电路的设计和制作。设计是使某一电路具有某种功能,制作则是设计过程的电路实物化。3 硬件设计3.1 电路设计的步骤(1)课题分析根据本次设计的要求,先弄清楚即将设计的系统要实现的功能和原理,再确定电路的基本形式,根据设计的可行性做出估计和判断,确定设计的技术关键解决的问题。(2)设计方案论证选题不管哪种(除了调查研究之外)都要论证它的可行性。论证分为立论和驳论两种。(3)总体方案的选择根据任务书提出的任务、要求和性能指标,用具有一定功能的单元电路组成一个整体,来实现各项功能,满足设计题目提出的要求和技术指标。(4)单元电路的设计与确定在确定总体方案、画出详细框图之后,便可进行单元电路设计。在电路结构简单,成本低,性能强的基础上,根据设计要求和总体方案的原理框图来确定各单元电路。设计每一个单元的电路图。根据相关资料确定单元电路的结构形式。根据设计要求,调整元件,估算参数来选择元器件。(5)总电路图画法总电路图的一般的绘制方法如下:根据信号的流向,从左到右或从上到下按信号流向依次画出各单元电路。尽量把总电路图画在一张图样上电路中所有连线都要表示清楚,各元件间的绝大多数连线应在图样上直接画出。符号应标准化。先画草图,调整好布局和连线后,再画出正式的总电路图。(6)审图由于有些问题考虑不周,各种计算可能出现错误,所以,在画出总电路图并计算全部参数之后,要进行全面审查。3.2 STC89C52简介STC89C52RC是一种带8K字节闪烁可编程可擦除只读存储器(FPEROM-Flash Programmable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。图3.1 STC89C52RC引脚图 3.2.1STC89C52RC引脚功能说明VCC(40引脚):电源输入,接5V电源VSS(20引脚):接地线P0端口(P0.0P0.7,3932引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。P1端口(P1.0P1.7,18引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流(IIL)。STC89C52主要功能如表3.3所示。表3.3 STC89C52主要功能主要功能特性兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能3.2.2 单片机引脚分配根据本次系统设计及各模块的需要分析,单片机的引脚分配如表3.4所示。 表 3.4 单片机端口分配表模 块端口功能显示模块P0.0-P0.7LCD频率值显示分频模块P3.1-P3.2通道选择P3.5被测信号输出按键P1.6-P1.7键盘设置 3.3 信号调理及放大整形模块 前置放大整形模块包括放大器LM318、稳压管1N4733A,施密特触发器74LS14。反相输入的运算放大器的放大倍数为RL2/RL1,系统的整形电路由施密特触发器组成,信号经过放大后,要进行稳压,防止烧坏后面的芯片,整形后的方波送到74LS161分频,然后送单片机以便计数。 由于输入的信号幅度是不确定、可能很大也有可能很小,这样对于输入信号的测量就不方便了,过大可能会把器件烧毁,过小可能器件检测不到,所以在设计中放大限幅和整形,信号调理部分电路具体实现电路原理图和参数如下图3.5所示:图3.2 信号整形放大原理图3.3.1 LM318介绍3.4 分频模块前面已经提过,由于测量频率范围比较宽,而且最高测量值要求要达到4MHz,为了达到测量要求以及提高测量精度,这里我用74LS161作为一个4分频和16分频电路。分频器可用来降低信号的频率,是数字系统中常用的电路。分频器的输入信号频率与输出信号频率之比称为分频比N。N进制计数器可实现N分频器。74HC161与74LS161功能兼容,是常用的四位二进制可预置的同步加法计数器,它可以灵活运用在各种数字电路,以及单片机系统中实现分频器等很多重要的功能。 74LS161对整形后的方波信号进行分频,Q1为四分频输出,Q3为十六分频输出。未经分频、经过四分频和经过十六分频的三路信号作为74LS153的一个4选1数据选择器的低三位输入,由单片机控制选择分频系数,然后再送单片机内部计数器T1,其原理图如图3.6所示:图3.3 分频模块3.4.1 74LS161介绍74LS161是常用的四位二进制可预置的同步加法计数器,它可以灵活的运用在各种数字电路,以及单片机系统中实现分频器等很多重要的功能,时钟CP和四个数据输入端P0P3,清零/MR,使能CEP,CET,置数PE,数据输出端Q0Q3,以及进位输出TC (TC=Q0Q1Q2Q3CET)。表3.5为74161的功能表。表3.5 74161的功能表清零RD预置LD使能EP ET时钟CP预置数据输入A B C D输出Q0 Q1 Q2 Q3L L L L LHL 上升沿A B C DA B C DHHL 保 持HH L 保 持HHH H上升沿 计 数 其中RD是异步清零端,LD是预置数控制端,A、B、C、D是预置数据输入端,EP和ET是计数使能端,RCO(=ET.QA.QB.QC.QD)是进位输出端,它的设置为多片集成计数器的级联提供了方便。计数过程中,首先加入一清零信号RD0,使各触发器的状态为0,即计数器清零。RD变为1后,加入一个置数信号LD0,即信号需要维持到下一个时钟脉冲的正跳变到来后。在这个置数信号和时钟脉冲上升的共同作用下,各触发器的输出状态与预置的输入数据相同,这就是预置操作。接着EP=ET=1,在此期间74161一直处于计数状态。一直到EP=0,ET1,计数器计数状态结束。从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= Q0Q1Q2Q3CET。合理应用计数器的清零功能和置数功能,一片74LS161可以组成16进制以下的任意进制分频器。管脚图介绍:时钟CP和四个数据输入端P0P3;清零/MR;使能CEP,CET;置数PE;数据输出端Q0Q3。其管脚图如图3.7所示。 图3.4 74LS161管脚图 图3.5 74LS153管脚图 3.4.2 74LS153介绍 74LS153是一个双4选1数据选择器,数据选择端(AB)为两组共用,按二进制译码,以供两组从各自的4个数据输入端(1C0-1C3,2C0-2C3)中分别选取一个所需数据,只有在两组各自的选通端(1G、2G)为低电平时才可选择数据,1Y、2Y分别为两个输出端。其管脚图如图3.8所示。3.5 LCD显示和键盘 LCD1602显示部分,通过调节变阻器调节LCD背光亮度,八位数据端口接单片机P0口,读写控制端接P2.0-P2.2。三个按键中,设置键接P3.2单片机按外部中断0接口,当按键按下后,置P3.2口低电平,单片机中断。S1、S2为频率/周期、闸门时间加/减 选择按键,按键部分的工作原理是,根据按下设置键的时间长短,可以设置闸门时间或者选择测量结果的显示方式,闸门时间可以加也可以减,显示方式有频率和周期两种,按键部分也是单片机控制,原理图如图3.9所示:图3.6 显示及按键部分3.5.1 LCD1602简介 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图3.10所示: 图3.7 1602字符型液晶显示器实物图3.5.2 1602LCD的基本参数及引脚功能1、1602LCD主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm 2、引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3.6所示:表3.6 引脚接口说明表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极3.5.3 1602LCD的指令说明及时序 1602液晶模块内部的控制器共有11条控制指令,如表3.7所示:表3.7 1602控制指令序号指令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读出的数据内容 4 软件设计4.1主程序流程图设计 根据本次设计要求,主程序主要包括单片机和LCD1602初始化,频率测量,量程自动转换以及显示几个方面,主程序流程图如图4.1所示: 图4.1 主程序流程图4.2 子程序流程图设计(1)显示程序LCD显示程序设计流程图如下图所示: 图4.2 显示程序流程图(2)频率测量程序框图 频率测量程序整体架构如图所示: 频率测量程序加按键、减按键显示闸门时间判断频率测试频率周期显示频率显示定时中断计数中断89C52初始化延时子程序 图4.3 频率测量框架图(3)中断服务流程图 这是按键部分的程序流程图,按键有三个,希望可以通过设置键可以选择闸门时间设置或者选择显示方式,工作过程如下,设置键按下的时间长短判断,长按就选择显示方式,如果按下时间短,则选择闸门时间设置,设置后再按下设置键退出中断,返回测量结果显示。INT0中断流程图如图所示: 图4.4 INT0中断流程图(4) 判断频率,选择分频流程图本次设计,分频系数有两个,100kHzf500kHz时选择16分频,分频数选择程序流程图如图4.5所示: 图4.5 分频数选择程序流程图由于本次设计要求测量的频率范围是100Hz4MHz,可见测量范围比较宽,为提高精度以及测量达到最高测量要求4MHz,因此要进行外部分频,分频系数有1,4,16.即不分频,4分频和16分频。程序中设计的是先预测输入频率,若是频率范围在100KHz500KHz,选择4分频,高于500KHz则选择16分频,小于100KHz则不用分频,直接测量。由此设计的程序流程图如图4.5所示。4.3 程序编写及仿真图设计根据前面的程序流程框图,分模块编写C语言程序,由于在用C语言编写程序方面学艺不精,此次程序的编写是在网上搜索相关资料然后在多位同学和老师的指导下完成,过程坎坷而且很揪心,相对后面的调试,这算是好的了。之前学过Proteus,而且比较熟悉,所以仿真图设计是在Proteus完成,设计之前了解要用的元器件特性以及各个元器件之间的连接方法,而且之前课程设计多次用过,所以在本次设计中,没遇到多大问题,相对顺利很多。总体仿真图如图4.6所示:图4.6 频率计Proteus仿真图 5 系统调试与实验单片机软件调试主要是调试本次设计的主程序。根据系统设计要求,进行Keil和Proteus系统仿真,不断调试程序,修改电路图,直到符合功能要求。本次设计Proteus仿真结果如图5.1所示。 图5.1 部分仿真图6 总结单片机因其功能独特和价格廉价在全球范围内得到了广泛的应用,本次我们利用了基于AT89C52单片机对数字频率计进行了系统的设计。在这次的小组协作完成中,我本人负责的部分是分频模块,开始还是有点力不从心的,学过的只是都已经忘记了差不多了,我又查阅了相关的资料,特别是数字逻辑电路,所以我们经过权衡在硬件方面采用了74LS161和74LS153两个模块74LS161是常用的四位二进制可预置的同步加法计数器,它可以灵活的运用在各种数字电路,74LS153是一个双4选1数据选择器,功耗较低。在仿真中74LS161对整形后的方波信号进行分频,Q1为四分频输出,Q3为十六分频输出。未经分频、经过四分频和经过十六分频的三路信号作为74LS153的一个4选1数据选择器的低三位输入,由单片机控制选择分频系数,然后再送单片机内部计数器T1.在软件编程方面,分频编程程序是由三个人完成的,我也是主要负责检查出错状况,在之前还特意对C语言方面的只是进行了补充学习,在一些细节方面特变死格式我还是检查了许多的错误状况,同时对于负责分频程序的两个人的编程能力我还是非常的佩服的。在这一次的合作小组工作中,大家分工明确,各自抽出时间下功夫,在协调合作方面虽然是出现了一些状况,但是还是很好地完成了,小组组长的分配和统筹能力很好,从硬件的设计步骤到信号的放大处理,到分频最后的LED显示和键盘都是组长统一协调,调试,使各个模块紧密的组合在一起,完成了我们的数字频率计的系统的设计。从这次的实践情况来看,我们的动手的能力还是有待加强的,毕竟理论和实践还是有相当大的差距的。我想如果一个人在这么短的时间里还是很难完成的。这次的设计还是很很多的不足和漏洞的,还是有很大的进步的空间的,希望在日后的学习和工作中更加的完善自己,做足功课,争取做到更好。16参考文献1 王辛之等.AT89系列单片机原理与接口技术M.北京:北京航天大学出版社,2004.4 辛友顺.单片机应用系统设计与实现M.福建:福建科学技术出版社,2005.5 张鑫.单片机原理及应用M.北京:电子工业出版社,2005.7 卢艳军.单片机基本原理及应用系统M.北京:机械工业出版社,2004.8 张毅刚.MCS-51单片机应用设计M. 哈尔滨:哈尔滨工业大学出版社,19969 陈西文,吴燕军.I/O接口程序设计入门与应用M.北京:机械工业出版社,1996.附录程序清单:#include #include #include #include float f; /频率float T; /周期float Tz; /闸门时间char idata buff20;char flag=0; /频率周期选择标志位char xs=0;/设置闸门时间结束后是否显示结果的标志位unsigned char m=0,n=0,yichu=0,fenpin; /m定时中断次数 n计数中断次数 yichu判断是定时器还是计数器溢出#define Key_Set P1#define K1 0xbf#define K2 0x7f#define NO_Set 0xff#define Fre 0#define Peri 1sbit B1=P26;sbit A=P25;sbit P17=P17;sbit P16=P16;sbit P35=P35;sbit Set=P32;unsigned char LCD_Wait(void);void LCD_Write(bit style, unsigned char input);void LCD_SetDisplay(unsigned char DisplayMode);void LCD_SetInput(unsigned char InputMode);void LCD_Initial();void GotoXY(unsigned char x, unsigned char y);void Print(unsigned char *str);void C52_Initial();void Delay(unsigned int t);void display(float f);void cep();void pand();void timedisplay(float Tz);void Time_Set1();void Time_Set2();void t0();void t1();/*引脚定义*/sbit LcdRs= P20;sbit LcdRw= P21;sbit LcdEn= P22;sfr DBPort= 0x80;/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口void lcm_delay(int x)int i;for(i=0;ix;i+)_nop_();/*内部等待函数*/unsigned char LCD_Wait(void)LcdRs=0; /寄存器选择输入端 1:数据 0:指令LcdRw=1;_nop_(); /RW:为0:写状态;为1:读状态;LcdEn=1;_nop_();/使能输入端,读状态,高电平有效;写状态,下降沿有效LcdEn=0;return DBPort;/*向LCD写入命令或数据*/#define LCD_COMMAND 0 / Command#define LCD_DATA 1 / Data#define LCD_CLEAR_SCREEN0x01 / 清屏#define LCD_HOMING 0x02 / 光标返回原点void LCD_Write(bit style, unsigned char input)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();/*设置显示模式*/#define LCD_SHOW0x04 /显示开#define LCD_HIDE0x00 /显示关 #define LCD_CURSOR0x02 /显示光标#define LCD_NO_CURSOR0x00 /无光标 #define LCD_FLASH0x01 /光标闪动#define LCD_NO_FLASH0x00 /光标不闪动void LCD_SetDisplay(unsigned char DisplayMode) /显示模式设定LCD_Write(LCD_COMMAND, 0x08|DisplayMode);/*设置输入模式*/#define LCD_AC_UP 0x02 /读入一个字符后地址指针加一#define LCD_AC_DOWN0x00 /读入一个字符后地址指针减一#define LCD_MOVE 0x01 /写一个字符后左移#define LCD_NO_MOVE0x00 /写一个字符后不移动void LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);/*初始化LCD*/void LCD_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递增, 画面不动/*void GotoXY(unsigned char x, unsigned char y)if(y=0) LCD_Write(LCD_COMMAND,0x80|x);if(y=1) LCD_Write(LCD_COMMAND,0x80|(x-0x40);void Print(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;/*89c52初始化*/ void C52_Initial() Tz=1000000.00; Key_Set=0xff; TMOD=0x51; / 01010001 T1为计数器,T0为定时器 EA=1; /开中断 ET0=1; /允许定时器0中断 ET1=1; /允许计数器0中断 EX0=1; /允许外部中断0中断 PX0=1; /外部中断0设置为高优先级 IT0=0; /电平触发方式/*ms延时子程序*/void Delay(unsigned int t) /t随着数值越大,误差趋于平衡.unsigned char i; while(t-) for(i=0;i999900.00) if(f1000.00) sprintf(buff, Fre :%3.2fkHz ,(f/1000.00); else if(f0.08) sprintf(buff, Fre :%3.3fHz ,f); GotoXY(0,1); Print(buff);/*周期显示*/void Tdisplay(float T) if(T999800.00) if(T9950.00) sprintf(buff, Cycle:%3.3fms ,(T/1000.00); else if(T0.248) sprintf(buff, Cycle:%3.4fus ,T);else sprintf(buff,error(Time or F),T); GotoXY(0,1); Print(buff); /*测试频率*/void cep()unsigned char b;unsigned long js;m=0;n=0;TMOD=0x51;TH0=0x3c; /定时50msTL0=0xb0;TH1=0;TL1=0;b=Tz/50000.00;TCON=0x50; /启动定时器和计数器while(m!=b); TCON=0;js=TH1*256+TL1+n*65536;f=(js/(Tz/1000000.00)*fenpin;T=Tz/(Tz*fenpin);if(xs=0) /设置结束后第一次不显示结果if(flag=Fre) Fdisplay(f);else Tdisplay(T);/*判断频率*/void pand()xs=0; /设置结束后第二次循环显示结果B1=1; /选择16分频A=0; yichu=0;TMOD=0x51; TH0=0xff; /定时器0 200usTL0=0x38;TH1=0xff; /计数器1 100脉冲TL1=0x9c;TR0=1; /启动定时器0和计数器1TR1=1;while(yichu=0); /如果没有溢出一直循环TR0=0; /已经溢出关闭定时器0和计数器1TR1=0; if(yichu=1) /计数器先溢出:在200us内测得的脉冲过多,说明频率较高(f500khz) fenpin=16; /转为测16分频后的频率 cep();else /定时器先溢出:100个脉冲的时间比较短,即频率较低,可以减少分频数 yichu=0;B1=0;A=1; TH0=0xfc; /定时器0 1msTL0=0x18;TH1=0xff; /计数器1 100个脉冲TL1=0x9c;TR0=1; /启动定时器0和计数器1 TR1=1;while(yichu=0); /如果没溢出一直循环TR0=0; /已经溢出关闭定时器0和计数器1 TR1=0;if(yichu=1) /计数器先溢出:在1ms内测得的脉冲过多,说明频率较高(100khzf50000.00) timedisplay(Tz); else Tz=50000.00; timedisplay(Tz); else while(P17=0) Delay(500); Tz=Tz-500000.00; if(Tz50000.00) timedisplay(Tz); else Tz=50000.00; timedisplay(Tz); /*闸门时间设置*/void Time_Set()interrupt 0 EA=0; /防止无限中断 Delay(1000); if(Set=0) Delay(1000); /判断处于哪种设置状态 if(Set=1) GotoXY(0,1); Print( Press Button.); GotoXY(0,0); Print( T Settings ); while(Set=1) switch(Key_Set) case K1: Time_Set1();break; case K2: Time_Set2();break; default: break; else /选择显示频率或周期 GotoXY(0,1); Print( 1.Fre 2.Cycle); GotoXY(0,0); Print(
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!