基于AT89C51单片机的简易频率计的设计

基于AT89C51单片机的简易频率计的设计 Algorithms of Signal Classification Based on

Spectrum Analysis

彭岚峰胡佳佳 Peng Lanfeng Hu Jiajia

(南昌大学科学技术学院,江西南昌330029)

(College of Science and Technology } Nanchang University, Jiangxi Nanchang,330029) 摘要:为了解决市场上各种多功能、高精度数字频率计高价格的问题,本文通过综合分析实际工作的要求,选择市场上低价格的常用元件,由单片机产生闸门时间与时钟等基准信号以减少外围电路,从而提出了一种基于单片机(AT89C51)为主控制核心、LCD 1602为显示界面的频率计设计方案。本方案可满足简易频 率计体积小、成本低、精度高、可测频带宽的市场需求。 关键词:单片机;频率计;液显

中图分类号:TM93文献标识码:A文章编号:1671-4792(2012) 09-0121-03

Abstract: In order to meet the great necessity of multi-function, high-precision digital frequency meter with a lower price, we choose the common cheap components, and use microcontroller to produce the basic clock signalto minimize the peripheral circuit. A design of frequency meter based on microcontroller (AT89C51) andLCD1602 is proposed, which has the properties of small size, low cost, high precision and wide frequency bandwidth.

Keywords: AT89C51:Frequency Meter; Liquid Crystal Displ

0引言实现复杂度。

频率计又称为电子计数器,是一种常用电子测量仪器。它的基本功能是测量信号的频率和周期,广泛应用于教学、科研、高精度仪器测量、工业控制等

领域。目前,市场上的频率计基本上都是由专用计数芯片与数字逻辑电路组成。由于这些芯片的工作频率低,从而限制了产品工作频率的提高,远不能满足在一些特殊的场合需要。运用51系列单片机设计频率计,并采用适当的算法取代传统电路,不仅能克服传统频率计结构复杂、稳定性差、精度不高的弊端,而且频率计性能也将大幅提高。本次设计给出了一种基于单片机(AT89C51)为主控制芯片的频率计设计方案,不但切实可行,而且体积小、保密性强、设计简单、精度高、可测频带宽,大大降低了设计成本和实现复杂度。

1总体设计方案

频率计的结构主要包括时钟信号发生电路、阀门控制、单片机控制电路和LCD显示电路。频率计的主要核心部件是采用AT89C51来产生定时和记录脉冲变化次数,运用AT89C51来构成计数器,突破了大部分运用数字电路模板来构成计数器。本设计主要采用AT89S52芯片和LCD 1602来实现,软件编程主要采用C51

语言来编程。图一给出了设计框图。

图一频率计构造图

1.1控制核心

以单片机为核心,待测信号先进入信号放大电路进行放大,再被送到波形整形电路整形,把待测的正弦波或者三角波整形为方波。利用单片机的计数器/定时器的功能对待测信号进行计数。编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。

1.2显示部分

LCD 1602是具有记忆功能的液晶显示器,当频率值不发生变化时无需更新显示区域。此特点可节约单片机的运行时间,减少测量转换时间。

1.3波形整形电路

采用LM358比较电路来整形波形,40K电阻和100K的可调电阻对电压分压,因为LM358比较器的开环增益很大,所以输入电压大于分压电压的将变为电源电压5v,而小于电源电压的会变成0v。这样就可以把正弦波、三角波整形成方波。图二给出了整形电路图。

图二波形整形电路

2软件设计

频率计的核心部分是程序的编写,算法的好坏将直接影响频率计的精度。包括了以下的主要程序:主程序、LCD 1602显示程序、显示转换程序、频率计算程序。

2.1主程序

主程序只做控制作用,调用了三个子程序定时器1中断初始化、LCD 1602初始化、在LCD上显示Welcome,调用结束后等待中断到来。 void main(void)

Initial_S1(); //定时器1中断初始化 LCDSTART(); //LCD1602初始化 Putlcddata();//在LCD上显示Welcome while(1); }

2.2 LCD 1602显示程序

void LCDSTARTQ {

LCDDATA=0x01; //清屏光标复位 DISP();

LCDDATA=0x38; //设置显示模式:8位子行Sx 7点阵 DISP();

LCDDATA=0x0c; //显示器开、光标开、光标允许闪烁 DISP();

LCDDATA=0x06; //文字不动,光标自动右移 DISP();

LCDDATA=0x84; //设置显示初始位置 DISP(); }

2.3计数程序

本设计中T0采用计数功能,需要注意的一个问题是,输入的待测时钟信号的频率最高可以达到460800Hz,但计数器最多只能计数65536次,显然需要对计数单元进行扩展。扩展的思路是除了计数器TO的THO和TLO用于计数外,再选用一个计数单元,每当计数器TO溢出回零时产生中断,中断程序执行计数扩展单元自增1。本设计需要测量频率最大为10000Hz,可以不用扩展。 void timerl} interrupt 3

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4