基于单片机的频率计
摘要:数字频率计是一种基本的测量仪器。它被广泛应用于航天、电子、测控等领域,还被应用在计算机及各种数学仪表中。一般采用的是十进制数字,显示被测信号频率。基本功能是测量正弦信号,方波信号以及其他各种单位时间内变坏的物理量。由于其使用十进制数显示,测量迅速精确,显示直观,所以经常被用来使用。
本文主要介绍数字频率计的设计和调试,本作品是基于STC89C52单片机作为平台,基本原理是通过STC89C52单片机进行频率的采集和分析工作,在通过程序使其显示在LCD1602的液晶显示屏上,通过液晶显示屏,让使用者能够直观的看到当前的输入频率是多少。
由于STC89C52单片机只能处理数字信号因此系统需要先把信号放大成方波信号,再通过施密特触发器整形方波,又由于单片机能处理的频率有限,所以这次我们先用74HC390芯片对输入的信号进行了分频,使其降低了100倍,才送去给单片机处理,如果频率高于200KHZ的时候就计算分频后的频率,得到数据再换算成真实的频率。
1 引言
1.1 目的和意义
在电子测量领域中,频率测量的精确度是最高的。因此,在生产过程中许多物理量,例如温度、压力、流量、液位、PH值、振动、位移、速度、加速度,乃至各种气体的百分比成分等均用传感器转换成信号频率,然后用数字频率计来测量,以提高精确度。
国际上数字频率计的分类很多。按功能分类,因计数式频率计的测量功能很多,用途很广。所以根据仪器具有的功能,电子计数器有通用和专用之分。一、通用型计数器:通用型计数器是一种具有多种测量功能、多种用途的万能计数器。它可测量频率、周期、多周期平均值、时间间隔、累加计数、计时等;若配上相应插件,就可测相位、电压、电流、功率、电阻等电量;配上适当的传感器,还可进行长度、重量、压力、温度、速度等非电量的测量。二、专用计数器:专用计数器指专门用来测量某种单一功能的计数器。如频率计数器,只能专门用来测量高频和微波频率;时间计数器,是以测量时间为基础的计数器,其测时分辨力和准确度很高,可达ns数量级;特种计数器,它具有特种功能,如可逆计数器、阈值计数器、差值计数器、倒数计数器等,用于工业和自控技术等方面。数字频率计按频段分类:①低速计数器:最高计数频率<10MHz;②中速计数器:最高计数频率10—100MHz;③高速计数器:最高计数频率>100MHz;④微波频率计数器:测频范围1—80GHz或更高。
由于大规模和超大规模数字集成电路技术、数据通信技术与单片机技术的结合,数字频率计发展进入了智能化和微型化的新阶段。其功能进一步扩大,除了测量频率、频率比、周期、时间、相位、相位差等基本功能外,还具有自捡、自校、自诊断、数理统计、计算方均根值、数据存储和数据通信等功能。可见,频率计是很有工业价值的。本作品即为一个基于单片机的数字频率计,它通74HC390芯片进行分频,克服了单片机难以处理高频信号的困难,并使用LCD1602液晶显示进行显示。
1.2 研究概况与发展趋势
由于当今社会的需要,对信息传输和处理的要求不断提高,对频率的测量的精度也需要更高更准确的时频基准和更精密的测量技术。而频率测量所能达到的精度,主要取决于作为标准频率源的精度以及所使用的测量设备和测量方法。目前,测量频频的方法有直接测频法、内插法、游标法、频差倍增法等等。直接测频的方法较简单,但精度不高。频差倍增多法和周期法是一种频差倍增法和差拍法相结合的测量方法,这种方法是将被测信号和参考信号经频差倍增使被测信号
的相位起伏扩大,再通过混频器获得差拍信号,用电子计数器在低频下进行多周期测量,能在较少的倍增次数和同样的取样时间情况下,得到比测频法更高的系统分辨率和测量精度,但是仍然存在着时标不稳而引入的误差和一定的触发误差。
在电子系统广泛的应用领域中,到处看见处理离散信息的数字电路。供消费用的冰箱和电视、航空通讯系统、交通控制雷达系统、医院急救系统等在设计过程中都用到数字技术。 数字频率计是现代通信测量设备系统中必不可少的测量仪器,不但要求电路产生频率的准确度和稳定度都高的信号,也要能方便的改变频率。
数字频率计的实现方法主要有:直接式、锁相式、直接数字式和混合式
(1)直接式
优点:速度快、相位噪声低,但结构复杂、杂散多,一般只应用在地面雷达中。
(2)锁相式
优点:相位同步的自动控制,制作频率高,功耗低,容易实现系列化、小型化、模块化和工程化。
(3)直接数字式
优点:电路稳定、精度高、容易实现系列化、小型化、模块化和工程化。
1.3 本系统主要功能
本系统设计制作一个基于单片机的频率计。能实现以下几种功能:
(1)能够对1HZ对10MHZ正弦波、三角波、方波信号等周期信号的频率进行测量
(2)系统能够把测量信号的频率和周期显示在液晶屏幕上。
2. 总体方案论证与设计
根据所要实现的功能划分,系统一共需要以下几个模块:主控模块、显示模块、时钟模块、温度检测模块,以下就针对这几个模块的选型和论证进行讨论。
2.1主控模块的选型和论证
方案一:
采用MSP430系列单片机,该单片机是TI公司1996年开始推向市场的一种16位超低功耗的混合信号处理器。其内部集成了很多模拟电路、数字电路和微处理器,提供强大的功能。不过该芯片昂贵不适合一般的设计开发。
方案二
采用51系列的单片机,该单片机是一个高可靠性,超低价,无法解密,高性能的8位单片机,32个IO口,且STC系列的单片机可以在线编程、调试,方便地实现程序的下载与整机的调试。
因此选用方案二中的51系列单片机作为主控芯片。
2.2显示模块的选型和论证
方案一:
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较合适,如采用在显示数字显得太浪费,且价格也相对较高,所以不用此种作为显示。
方案二:
采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用单片机口线少。但是由于数码管动态扫描需要借助74LS164移位寄存器进行移位,该芯片在电路调试时往往有很多障碍,所以不采用LED数码管作为显示。
方案三:
采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,对于本设计而言一个LCD1602的液晶屏即可,价格也还能接受,需要的借口线较多,但会给调试带来诸多方便。
所以本设计中方案三中的LCD1602液显示屏作为显示模块。
2.3放大电路的选型和论证
方案一:
采用集成运放作为放大电路,该电路只需要在外部配置少量电阻电容则能完成放大功能,十分方便设计,但是本设计需要放大1HZ到10MHZ的信号,通频带比较宽,因此对集成运放的要求较高,一般能处理宽带信号的集成运放成本比较高。
方案二:
采用三极管或者场效应管作为放大电路,三极管放大电路所需要原件较为简单容易购置,而且电路较为成熟,三极管的价格也十分低廉,而且三极管电路性能优越,是作为一个低成本的放大电路的不二之选。
所以本设计中选用三极管为放大电路中使用。
2.4系统整体设计概述
本系统以单片机为控制核心,对系统进行初始化,主要完成液晶显示、频率测量、放大整形滤波等功能的控制,起到总控和协调各模块之间工作的作用。
图2-1系统结构框图
本系统结构如图2-1所示,本设计可分为以下模块:三极管放大电路、整形电路、分频电路、液晶模块。下面对各个模块的设计方案逐一进行论证分析。
3.系统硬件电路设计
3.1主控模块
主控模块模块在整个系统中起着统筹的作用,需要检测键盘,温度传感器等各种参数,同时驱动液晶显示相关参数,在这里我们选用了51系列单片机中的STC89C52单片机作为系统的主控芯片。
51系列单片机最初是由Intel 公司开发设计的,但后来Intel 公司把51 核的设计方案卖给了几家大的电子设计生产商,譬如 SST、Philip、Atmel 等大公司。因此市面上出现了各式各样的均以51 为内核的单片机。这些各大电子生产商推出的单片机都兼容51 指令、并在51 的基础上扩展一些功能而内部结构是与51一致的。
STC89C52有40个引脚,4个8位并行I/O口,1个全双工异步串行口,同时内含5个中断源,2个优先级,2个16位定时/计数器。STC89C52的存储器系统由4K的程序存储器(掩膜ROM),和128B的数据存储器(RAM)组成。
STC89C52单片机的基本组成框图见图3-1。
图3-1 STC89C52单片机结构图
3.1.1 STC89C52单片机主要特性
1. 一个8 位的微处理器(CPU)。
2. 片内数据存储器RAM(128B),用以存放可以读/写的数据,如运算的中间结果、最终结果以及欲显示的数据等,SST89 系列单片机最多提供1K 的RAM。
3. 片内程序存储器ROM(4KB),用以存放程序、一些原始数据和表格。但也有一些单片机内部不带ROM/EPROM,如8031,8032,80C31 等。目前单片机的发展趋势是将RAM 和ROM 都集成在单片机里面,这样既方便了用户进行设计又提高了系统的抗干扰性。SST 公司推出的89 系列单片机分别集成了16K、32K、64K Flash 存储器,可供用户根据需要选用。
4. 四个8 位并行I/O 接口P0~P3,每个口既可以用作输入,也可以用作输出。
5. 两个定时器/计数器,每个定时器/计数器都可以设置成计数方式,用以对外部事件进行计数,也可以设置成定时方式,并可以根据计数或定时的结果实现计算机控制。为方便设计串行通信,目前的52 系列单片机都会提供3 个16 位定时器/计数器。
6. 五个中断源的中断控制系统。现在新推出的单片机都不只5 个中断源,例如SST89E58RD 就有9 个中断源。
7. 一个全双工UART(通用异步接收发送器)的串行I/O 口,用于实现单片机之间或单机与微机之间的串行通信。
8. 片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高允许振荡频率为12MHz。SST89V58RD 最高允许振荡频率达40MHz,因而大大的提高了指令的执行速度。
图3-2 STC89C52单片机管脚图
部分引脚说明:
1.时钟电路引脚XTAL1 和XTAL2:
XTAL2(18 脚):接外部晶体和微调电容的一端;片内它是振荡电路反相放大器的输出端,振荡电路的频率就是晶体固有频率。若需采用外部时钟电路时,该引脚输入外部时钟脉冲。
要检查振荡电路是否正常工作,可用示波器查看XTAL2 端是否有脉冲信号输出。
XTAL1(19 脚):接外部晶体和微调电容的另一端;在片内它是振荡电路反相放大器的输入端。在采用外部时钟时,该引脚必须接地。
2.控制信号引脚RST,ALE,PSEN 和EA:
RST/VPD(9 脚):RST 是复位信号输入端,高电平有效。当此输入端保持备用电源的输入端。当主电源Vcc 发生故障,降低到低电平规定值时,将+5V 电源自动两个机器周期(24个时钟振荡周期)的高电平时,就可以完成复位操作。RST 引脚的第二功能是VPD,即接入RST 端,为RAM 提供备用电源,以保证存储在RAM 中的信息不丢失,从而合复位后能继续正常运行。
ALE/PROG(30 脚):地址锁存允许信号端。当8051 上电正常工作后,ALE 引脚不断向外输出正脉冲信号,此频率为振荡器频率fOSC 的1/6。CPU 访问片外存储器时,ALE 输出信号作为锁存低8 位地址的控制信号。
平时不访问片外存储器时,ALE 端也以振荡频率的1/6 固定输出正脉冲,因而ALE 信号可以用作对外输出时钟或定时信号。如果想确定8051/8031 芯片的好坏,可用示波器查看ALE端是否有脉冲信号输出。如有脉冲信号输出,则8051/8031 基本上是好的。
ALE 端的负载驱动能力为8 个LS 型TTL(低功耗甚高速TTL)负载。
此引脚的第二功能PROG 在对片内带有4KB EPROM 的8751 编程写入(固化程序)时,作为编程脉冲输入端。
PSEN(29 脚):程序存储允许输出信号端。在访问片外程序存储器时,此端定时输出负脉冲作为读片外存储器的选通信号。此引肢接EPROM 的OE 端(见后面几章任何一个小系统硬件图)。PSEN 端有效,即允许读出EPROM/ROM 中的指令码。PSEN 端同样可驱动8 个LS 型TTL 负载。要检查一个8051/8031 小系统上电后CPU 能否正常到EPROM/ROM 中读取指令码,也可用示波器看PSEN 端有无脉冲输出。如有则说明基本上工作正常。
EA/Vpp(31 脚):外部程序存储器地址允许输入端/固化编程电压输入端。当EA 引脚接高电平时,CPU只访问片内EPROM/ROM并执行内部程序存储器中的指令,但当PC(程序计数器)的值超过0FFFH(对8751/8051 为4K)时,将自动转去执行片外程序存储器内的程序。当输入信号EA 引脚接低电平(接地)时,CPU 只访问外部EPROM/ROM 并执行外部程序存储器中的指令,而不管是否有片内程序存储器。对于无片内ROM 的8031 或8032,需外扩EPROM,此时必须将EA 引脚接地。此引脚的第二功能是Vpp 是对8751 片内EPROM固化编程时,作为施加较高编程电压(一般12V~21V)的输入端。
3.输入/输出端口P0/P1/P2/P3:
P0口(P0.0~P0.7,39~32 脚):P0口是一个漏极开路的8 位准双向I/O口。作为漏极开路的输出端口,每位能驱动8 个LS 型TTL 负载。当P0 口作为输入口使用时,应先向口锁存器(地址80H)写入全1,此时P0 口的全部引脚浮空,可作为高阻抗输入。作输入口使用时要先写1,这就是准双向口的含义。在CPU 访问片外存储器时,P0口分时提供低8 位地址和8 位数据的复用总线。在此期间,P0口内部上拉电阻有效。
P1口(P1.0~P1.7,1~8 脚):P1口是一个带内部上拉电阻的8 位准双向I/O口。P1口每位能驱动4 个LS 型TTL 负载。在P1口作为输入口使用时,应先向P1口锁存地址(90H)写入全1,此时P1口引脚由内部上拉电阻拉成高电平。
P2口(P2.0~P2.7,21~28 脚):P2口是一个带内部上拉电阻的8 位准双向I/O口。P口每位能驱动4个LS 型TTL 负载。在访问片外EPROM/RAM 时,它输出高8 位地址。
P3口(P3.0~P3.7,10~17 脚):P3口是一个带内部上拉电阻的8 位准双向I/O口。P3口每位能驱动4个LS型TTL负载。P3口与其它I/O 端口有很大的区别,它的每个引脚都有第二功能,如下:
P3.0:(RXD)串行数据接收。
P3.1:(RXD)串行数据发送。
P3.2:(INT0#)外部中断0输入。
P3.3:(INT1#)外部中断1输入。
P3.4:(T0)定时/计数器0的外部计数输入。
P3.5:(T1)定时/计数器1的外部计数输入。
P3.6:(WR#)外部数据存储器写选通。
P3.7:(RD#)外部数据存储器读选通。
3.1.2 STC89C52单片机的中断系统
STC89C52系列单片机的中断系统有5个中断源,2个优先级,可以实现二级中断服务嵌套。由片内特殊功能寄存器中的中断允许寄存器IE控制CPU是否响应中断请求;由中断优先级寄存器IP安排各中断源的优先级;同一优先级内各中断同时提出中断请求时,由内部的查询逻辑确定其响应次序。
在单片机应用系统中,常常会有定时控制需求,如定时输出、定时检测、定时扫描等;也经常要对外部事件进行计数。STC89C52单片机内集成有两个可编程的定时/计数器:T0和T1,它们既可以工作于定时模式,也可以工作于外部事件计数模式,此外,T1还可以作为串行口的波特率发生器。
3.1.3 单片机最小系统设计
图3-3 单片机最小系统电路图
图3-3为单片机最小系统电路图,单片机最小系统有单片机、时钟电路、复位电路组成,时钟电路选用了12MHZ的晶振提供时钟,作用为给单片机提供一个时间基准,其中执行一条基本指令需要的时间为一个机器周期,单片机的复位电路,按下复位按键之后可以使单片机进入刚上电的起始状态。图中10K排阻为P0口的上拉电阻,由于P0口跟其他IO结构不一样为漏极开路的结构,因此要加上拉电阻才能正常使用。
3.2 LCD液晶显示器简介
由于本设计中要求显示界面显示一些参数,因此这里选用了LCD1602作为界面显示,可以把一些相关的参数进行显示。
3.2.1 液晶原理介绍
液晶显示器(LCD)英文全称为Liquid Crystal Display,它一种是采用了液晶控制透光度技术来实现色彩的显示器。和CRT显示器相比,LCD的优点是很明显的。由于通过控制是否透光来控制亮和暗,当色彩不变时,液晶也保持不变,这样就无须考虑刷新率的问题。
显示接口用来显示系统的状态,命令或采集的电压数据。本系统显示部分用的是LCD液晶模块,采用一个16×2的字符型液晶显示模块。
点阵图形式液晶由 M 行×N 列个显示单元组成,假设 LCD 显示屏有64行,每行有 128列,每 8列对应 1 个字节的 8 个位,即每行由 16 字节,共 16×8=128个点组成,屏上 64×16 个显示单元和显示 RAM 区 1024 个字节相对应,每一字节的内容和屏上相应位置的亮暗对应。一个字符由 6×8 或 8×8点阵组成,即要找到和屏上某几个位置对应的显示 RAM区的 8 个字节,并且要使每个字节的不同的位为‘1’,其它的为‘0’,为‘1’的点亮,为‘0’的点暗,这样一来就组成某个字符。但对于内带字符发生器的控制器来说,显示字符就比较简单了,可让控制器工作在文本方式,根据在LCD 上开始显示的行列号及每行的列数找出显示 RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
3.2.2液晶模块简介
LCD1602液晶模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。IR用于寄存指令码,只能写入不能读出,DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据,BF为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,DDTAM用来存储显示的字符,能存储80个字符码,CGROM由8位字符码生成5*7点阵字符160中和5*10点阵字符32种.8位字符编码和字符的对应关系, CGRAM是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或CGRAM,LCD1602液晶模块的引脚图如图3-4所示。
图3-4 LCD1602引脚图
液晶寄存器选择控制如表3-1。
表3-1寄存器选择控制
| | |
| | |
| | 读busy flag(DB7),以及读取位址计数器(DB0~DB6)值 |
| | |
| | |
3.2.3液晶显示部分与STC89C52的接口
如图3-5所示。用STC89C52的P0口作为数据线,用P1.2、P1.1、P1.0分别作为LCD的EN、R/W、RS。其中EN是下降沿触发的片选信号,R/W是读写信号,RS是寄存器选择信号本模块设计要点如下:显示模块初始化:首先清屏,再设置接口数据位为8位,显示行数为1行,字型为5×7点阵,然后设置为整体显示,取消光标和字体闪烁,最后设置为正向增量方式且不移位。向LCD的显示缓冲区中送字符,程序中采用2个字符数组,一个显示字符,另一个显示电压数据,要显示的字符或数据被送到相应的数组中,完成后再统一显示.首先取一个要显示的字符或数据送到LCD的显示缓冲区,程序延时2.5ms,判断是否够显示的个数,不够则地址加一取下一个要显示的字符或数据。
图3-5 LCD1602与STC89C52的接口
3.3三极管放大电路设计
图3-6 三极管放大电路
由于单片机只能读取数字信号,当输入的信号比较小的时候单片机不能直接读取,因此这里使用了一级三极管放大电路对输入的信号进行放大,其中电路中的R4和R5给三极管的基极提供和合适偏置。基极电压可以由以下公式求得。
由于三极管的基极和发射极之间的压降为0.65V,因此发射机的电压可以由以下公式求得:
由于IC≈IE,IE=Ve/R6≈0.88ma,因此Vc=VCC-Ie*R3=2.64V。因此三极管放大电路的集电极输出端的直流静态工作点为2.64V。
因为本设计只处理信号,因此三极管放大电路的输入端采用的大电容进行交流耦合进而隔绝交流成分,为了使整个频率计能测量更小幅值的周期信号,这个电路用旁路电容对发射极电阻进行旁路从而提高其交流放大倍数,放大倍数A可以由以下公式求得。
A≈R3/(R6//RC4//RC5)
其中RC4为C4交流等效阻抗,RC5为C4交流等效阻抗。但是放大倍数最终会受限于三极管的β(三极管的电流放大系数)。因此最终放大倍数会限制在数百倍,由于这里只需要把输入的周期信号放大到足够大就可以通过整形电路整形成方波,因此这里放大倍数不需要很精确,放大后的波形出现截止失真也不会对测量结果造成。
3.4整形模块设计
3.4.1施密特触发器芯片介绍
施密特触发器也有两个稳定状态,但与一般触发器不同的是,施密特触发器采用电位触发方式,其状态由输入信号电位维持;对于负向递减和正向递增两种不同变化方向的输入信号,施密特触发器有不同的阈值电压。
门电路有一个阈值电压,当输入电压从低电平上升到阈值电压或从高电平下降到阈值电压时电路的状态将发生变化。施密特触发器是一种特殊的门电路,与普通的门电路不同,施密特触发器有两个阈值电压,分别称为正向阈值电压和负向阈值电压。在输入信号从低电平上升到高电平的过程中使电路状态发生变化的输入电压称为正向阈值电压,在输入信号从高电平下降到低电平的过程中使电路状态发生变化的输入电压称为负向阈值电压。正向阈值电压与负向阈值电压之差称为回差电压。原理示意图如图3-7所示。
图3-7 施密特触发器原理示意图
74HC14是一款高速CMOS器件,74HC14引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC14遵循JEDEC标准no.7A。74HC14实现了6路施密特触发反相器,可将缓慢变化的输入信号转换成清晰、无抖动的输出信号。其芯片引脚图如图3-8所示,芯片真值表如图3-9所示。
图3-8 74HC14芯片引脚图
图3-9 74HC14真值表
3.4.2 74HC14电路设计
由于三极管放大电路输出的信号不是标准的方波信号,存在着上升沿不够陡峭,波形类似于正弦波等问题,为了使单片机对信号更好的采集,这里使用了施密特触发器74HC14对三极管放大电路输出的信号进行整形。电路图如图3-10所示。
图3-10施密特触发器电路原理图
其中输入信号从芯片的1号脚输入,74HC14本身是一个芯片内部带有6个施密特触发器,我这里为了充分利用芯片使用了其中三个,实际上可以只使用一个。整形后的信号从芯片的6号脚输出。
3.5分频模块设计
3.5.1 74HC390芯片介绍
分频电路一般采用十进制计数器如74HC290、74HC390等来实现时间计数单元的计数功能。本次设计中选择74HC390。由其内部逻辑框图(如图3)可知,其为双2-5-10异步计数器,并每一计数器均有一个异步清零端(高电平有效)。由于我们要设计的是100分频电路,因此74HC390内部两个计数器都用上,分别都设置成10计数器。
图3-11 74HC390内部逻辑框图
3.5.2 74HC390分频电路设计
由于单片机运行速度有限,单片机运行一条基础指令需要1个机器周期即12个是时钟周期,换算成时间为1us。因此当频率过高的时候单片机就不能很精确的换算出频率。为了解决这个问题,这设计加入了一个100分频的计数器。当频率高于200KHZ的时候单片机计算分频后的信号,当频率低于200KHZ的时候计算分频前的信号。这样高低搭配可以扩大单片机的测量频率。最终换算出其真实对应的频率并在液晶上显示。其中电路图如图3-12所示。
图3-12 74HC390分频电路原理图
4.系统软件设计
4.1系统软件总体设计
4-1系统主流程图
单片机上电后会先进行一个初始化把设置的变量的值清0,然后开启定时器首先对100分频后的输入信号进行1S内计数,当测量到频率大于200KHZ的时候,单片机会显示出当前测量的频率和周期,然后进行下一次计数,当测量到的频率少于200KHZ的时候,单片机会重新采集分频前的数据,把测量到的数据显示出来,然后再进入到下一次的计数。
图4-2 LCD1602初始化子函数流程图
首先先调用液晶自定义的字库,设置好DDRAM地址后在第一行显示,根据程序中的数据设置显示数据的首地址并设置循环量,在循环过程中不断的取字符代码直到终止,第二行的显示过程同一行的显示过程一样,两行显示完毕后便结束子程序。
4.2程序设计原理
软件任务分析和硬件电路设计结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计基本定型后,也就基本上决定下来了。
软件任务分析环节是为软件设计做一个总体规划。从软件的功能来看可分为两大类:一类是执行软件,它能完成各种实质性的功能,如测量,计算,显示,打印,输出控制和通信等,另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色的软件。这两类软件的设计方法各有特色,执行软件的设计偏重算法效率,与硬件关系密切,千变万化。
软件任务分析时,应将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义(输入输出定义)。在各执行模块进行定义时,将要牵扯到的数据结构和数据类型问题也一并规划好。
各执行模块规划好后,就可以监控程序了。首先根据系统功能和键盘设置选择一种最适合的监控程序结构。相对来讲,执行模块任务明确单纯,比较容易编程,而监控程序较易出问题。这如同当一名操作工人比较容易,而当一个厂长就比较难了。
软件任务分析的另一个内容是如何安排监控软件和各执行模块。整个系统软件可分为后台程序(背景程序)和前台程序。后台程序指主程序及其调用的子程序,这类程序对实时性要求不是太高,延误几十ms甚至几百ms也没关系,故通常将监控程序(键盘解释程序),显示程序和打印程序等与操作者打交道的程序放在后台程序中执行;而前台程序安排一些实时性要求较高的内容,如定时系统和外部中断(如掉电中断)。也可以将全部程序均安排在前台,后台程序为“使系统进入睡眠状态”,以利于系统节电和抗干扰。