基于51单片机的频率计的设计
基于51单片机的1602液晶频率计设计(Proteus仿真图和程序)

基于51单片机的1602液晶频率计设计一、Proteus仿真图:二、程序代码//最大测量65536Hz的频率计//原理:T0定时1S,T1计数#include <REG51.H>#include<INTRINS.H>#define uchar unsigned char#define uint unsigned intuint count=0;uint nm=0;uchar Fw,Fq,Fb,Fs,Fg;#define DataPort P0sbit LCM_RS=P2^0;sbit LCM_RW=P2^1;sbit LCM_EN=P2^2;uchar code str0[]={"-Test frequency-"};uchar code str1[]={"F=00000Hz "};//uchar code str2[]={" "};/*******************************/void delay(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<121;j++){;}}}//=================================================///* 函数名:void WaitForEnable(void)作用:检测忙碌信号*///================================================//void WaitForEnable(void){DataPort=0xff;LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();//while(DataPort&0x80);delay(5);LCM_EN=0;}//==========================================================// /* 函数名:void WriteCommandLCM(uchar CMD,uchar Attribc)作用:写命令到LCM *///==========================================================// void WriteCommandLCM(uchar CMD,uchar Attribc){if(Attribc)WaitForEnable();LCM_RS=0;LCM_RW=0;_nop_();DataPort=CMD;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;}//=========================================================///* 函数名:void WriteDataLCM(uchar dataW)作用:写数据*///=========================================================// void WriteDataLCM(uchar dataW){WaitForEnable();LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;}//=========================================================///* 函数名:void InitLcd()作用:LCM初始化*///=========================================================// void InitLcd(){WriteCommandLCM(0x38,1);WriteCommandLCM(0x08,1);WriteCommandLCM(0x01,1);WriteCommandLCM(0x06,1);WriteCommandLCM(0x0c,1);}//=========================================================///*函数名:void DisplayOneChar(uchar X,uchar Y,uchar DData)作用:显示指定坐标的一个字符*///=========================================================// void DisplayOneChar(uchar X,uchar Y,uchar DData){Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;WriteCommandLCM(X,0);WriteDataLCM(DData);}//============================================================// /*函数名:void DisplayListChar(uchar X,uchar Y,uchar code *DData作用:显示指定坐标的一串字符*///============================================================// void DisplayListChar(uchar X,uchar Y,uchar code *DData){uchar ListLength=0;Y&=0x1;X&=0xF;while(X<=15){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}//============================================================// /* 函数名:void main(void)作用:主函数*///============================================================////============================================================// /* 函数名:void display()作用:显示函数*///============================================================// void display(){Fw=count/10000+0x30;Fq=count/1000%10+0x30;Fb=count/100%10+0x30;Fs=count/10%10+0x30;Fg=count%10+0x30;DisplayOneChar(2,1,Fw);DisplayOneChar(3,1,Fq);DisplayOneChar(4,1,Fb);DisplayOneChar(5,1,Fs);DisplayOneChar(6,1,Fg);}void InitTime(void){TMOD=0x51;//T0为定时器工作于方式1,T1为计数器工作于方式1TH0=0x4C;//定时器50ms赋高8初值, 12M晶振TL0=0x00;//定时器50ms赋低8初值, 12M晶振TR0=1;//开定时器1TH1=0;//计数器赋高8初值初值TL1=0;//计数器赋低8初值TR1=1;//开计数器0ET0=1;EA=1;}void timeo(void) interrupt 1{TH0=0x4C;//定时器50ms赋高8初值TL0=0x00;//定时器50ms赋低8初值nm=nm+1;if(nm==10){TR1=0; //关闭T1定时器,定时1S完成TR0=0;//关闭T0}}//============================================================// /* 函数名:void main(void)作用:主函数*///============================================================// void main(void){char i;uint temp,temp1;delay(500);InitLcd(); //LCM初始化设置InitTime();for(i=15;i>=0;i--){DisplayListChar(i,0,str0);//显示第一行字符DisplayListChar(i,1,str1);//显示第二行字符delay(100);}while(1){if(nm==10)//定时10*50MS=500ms{temp=TL1;temp1=TH1;count=2*(temp1*256+temp);//定时2乘以500ms=1000ms display();TH1=0;//计数器赋高8初值初值TL1=0;//计数器赋低8初值nm=0;TR1=1;TR0=1;}}}。
基于51单片机的数字频率计设计

基于51单片机的数字频率计一、实验内容1.1数字频率计概述数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种用十进制数字显示被测信号频率的数字测量仪器。
它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。
在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。
本数字频率计将采用定时、计数的方法测量频率,采用四位LED数码管动态显示4位数。
测量范围从1Hz—10kHz的正弦波、方波、三角波。
用单片机实现自动测量功能。
1.2频率测量仪的设计思路与频率的计算频率测量仪的设计思路主要是:设置单片机T1为计数器模式,对输入信号进行计数,T0设置为定时器模式,定时时间为1秒,则计数器所计数值即为被测信号频率。
1.3 基本设计原理基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。
它以在单位时间内对被测信号上升沿计数的方法对正弦波、方波、三角波的频率进行自动的测量。
如果被测信号频率超过量程,则有警报灯闪烁。
所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。
若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T。
1.4 频率计性能参数设计量程:0-10KHz波形:方波输入信号电压:5V二、数字频率计的硬件结构设计2.1 系统硬件的构成本频率计的数据采集系统主要元器件是单片机AT89C51,由它完成对待测信号频率的计数和结果显示等功能,外部还要有电源电路、复位电路、显示器,报警电路等器件,如下图所示:图一数字频率计功能模块2.2 AT89C51单片机引脚说明在本次设计中,采用89C51作为CPU处理器,充分利用其硬件资源,结合数码管,发光二极管,按键开关构成控制及显示模块。
在试验中选用P1.2,P1.3,P1.4端口分别控制数据和时钟信号的输入实现频率的动态显示。
基于51单片机的数字频率计的设计

1 前言频率测量是电子学测量中最为基本的测量之一。
由于频率信号抗干扰性强,易于传输,因此可以获得较高的测量精度。
随着数字电子技术的发展,频率测量成为一项越来越普遍的工作,测频原理和测频方法的研究正受到越来越多的关注。
1.1频率计概述数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种用十进制数字显示被测信号频率的数字测量仪器。
它的基本功能是测量正弦信号、方波信号及其他各种单位时间内变化的物理量。
在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。
传统的频率计采用测频法测量频率,通常由组合电路和时序电路等大量的硬件电路组成,产品不但体积大,运行速度慢而且测量低频信号不准确。
本次采用单片机技术设计一种数字显示的频率计,测量准确度高,响应速度快,体积小等优点。
1.2频率计发展与应用在我国,单片机已不是一个陌生的名词,它的出现是近代计算机技术的里程碑事件。
单片机作为最为典型的嵌入式系统,它的成功应用推动了嵌入式系统的发展。
单片机已成为电子系统的中最普遍的应用。
单片机作为微型计算机的一个重要分支,其应用范围很广,发展也很快,它已成为在现代电子技术、计算机应用、网络、通信、自动控制与计量测试、数据采集与信号处理等技术中日益普及的一项新兴技术,应用范围十分广泛。
其中以AT89S52为内核的单片机系列目前在世界上生产量最大,派生产品最多,基本可以满足大多数用户的需要。
2 系统总体设计2.1测频的原理测频的原理归结成一句话,就是“在单位时间内对被测信号进行计数”。
被测信号,通过输入通道的放大器放大后,进入整形器加以整形变为矩形波,并送入主门的输入端。
由晶体振荡器产生的基频,按十进制分频得出的分频脉冲,经过基选通门去触发主控电路,再通过主控电路以适当的编码逻辑便得到相应的控制指令,用以控制主门电路选通被测信号所产生的矩形波,至十进制计数电路进行直接计数和显示。
基于51单片机的数字频率计设计报告

目录摘要............................................. 错误!未定义书签。
关键词 (3)正文 (4)1 概述 (4)2 总体设计方案 (5)2.1软件 (5)2.2 设计思路 (5)3 系统软件设计 (5)3.1 主板说明 (5)3.2 芯片主要性能............................. 错误!未定义书签。
3.3 功能特性描述 (6)3.4 引脚描述 (6)4 系统软件设计 (9)4.1 初始定义 (9)4.2 子程序设计 (9)4.3 主要源程序 (10)5 系统调试 (13)6 课程设计体会 (15)7 参考文献 (15)附录 (16)数字频率计是现代科研生产中不可或缺的测量仪器,它以十进制数显示被测频率,基本功能是测量正弦信号,方波信号,及其它各种单位时间内变化的物理量。
本系统采用AT89S52单片机智能控制,结合外围电子电路,设计的频率计性能稳定。
在软件设计上采用了单片机的C语言设计,通过单片机内部定时/计数器同时动作,在测量频率时将测频率和测周期相结合,提高了频率计的测量准确性。
测量结果在四位七段式数码管上输出显示,结果精确到整数位。
频率计的软件设计,系统软件设计简单明了,适用于测量频率从1~9999Hz的脉冲信号,超频自动报警,安全可靠。
关键词:数字频率计;AT89S52单片机;信号;AT89S52最小系统板;LG5011BSR1.概述单片机是20世纪中期发展起来的一种面向控制的大规模集成电路模块,具有功能强、体积小、可靠性高、价格低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在线系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
基于51单片机的频率计设计报告

基于51单片机的频率计设计报告
在该设计报告中,我将介绍基于51单片机的频率计的设计原理、硬件设计和软件设计。
设计原理:
频率计是一种用于测量信号频率的仪器。
基于51单片机的频率计的设计原理是利用单片机的定时计数器来测量输入信号的脉冲个数,然后将脉冲个数转换为频率。
硬件设计:
硬件设计主要包括输入信号的采集电路、计数电路和显示电路。
输入信号的采集电路使用一个比较简单的电路,包括一个电阻和一个电容,用于将输入信号转换为脉冲信号。
计数电路使用单片机的定时计数器来进行计数。
在这个设计中,我们使用TIMER0和TIMER1作为计数器,分别用于测量输入信号的高电平时间和低电平时间,然后将两个时间相加得到一个完整的周期,再根据周期反推频率。
显示电路使用一个LCD模块来显示测量得到的频率。
在这个设计中,我们使用IO口将计算得到的频率发送给LCD模块,通过LCD模块来显示频率。
软件设计:
软件设计主要包括信号采集、脉冲计数和频率计算。
信号采集主要通过定时器的中断来进行。
在采集到一个脉冲之后,中
断程序会使计数器加1
脉冲计数是通过对输入信号高电平时间和低电平时间计数来完成的。
在脉冲计数的过程中,我们需要启动TIMER0和TIMER1,并设置正确的工
作模式和计数值。
频率计算是通过将高电平时间和低电平时间相加得到一个完整的周期,然后再根据周期反推频率来完成的。
最后,将计算得到的频率发送给LCD
模块进行显示。
总结:。
基于51单片机的高频频率计的设计

基于51单片机的高频频率计的设计基于51单片机的高频频率计的设计简介:基于51单片机设计了一款测试范围在1 Hz~10 MHz的频率计。
系统通过峰值有效电路和有效值电路将正弦渡、方波和三角波转化为直流信号送入单片机,通过编写相应的程序计算出其有效值和峰峰值的比,实现自动检测的目的,并由显示电路显示测量结果。
该系统电路简洁、软件编写简单、调试难度低。
摘要基于51单片机设计了一款测试范围在1 Hz~10 MHz的频率计。
系统通过峰值有效电路和有效值电路将正弦渡、方波和三角波转化为直流信号送入单片机,通过编写相应的程序计算出其有效值和峰峰值的比,实现自动检测的目的,并由显示电路显示测量结果。
该系统电路简洁、软件编写简单、调试难度低。
目前在频率测量领域中,对于高频率信号高精度测量大都使用ARM、FPGA等高速处理器加专用计数芯片来完成。
但这种方法程序编写复杂,并且其处理器外围电路复杂,这增加了其调试难度,降低了可操作性。
文中设计的高频信号频率计,除数据处理和显示交由单片机负责外,测频核心电路用经检测的模拟电路完成,该高频频率计电路简洁,软件编写简单,降低了调试难度的同时增强了其操作性。
1 系统总体设计方案系统以STC80C51为核心,设计了一款测试范围在1 Hz~10 MHz的频率计。
该系统主要设计思想是通过峰值有效电路和有效值电路将正弦波、方波、三角波转化为直流信号,送入单片机,通过编写相应的程序计算出其有效值和峰峰值比,实现自动检测的目的,最后通过显示电路显示测量结果。
系统分为:缓冲器、峰值检测电路、有效值检测电路、分频电路、模式转换、最小系统和显示电路。
总体设计方案如图1所示。
基于51单片机的高频频率计的设计输入信号i经过缓冲器处理分为3路输出,依次作为峰值检测电路、有效值检测电路和分频器电路的输入信号。
经峰值检测电路和有效值电路处理后,输出直流信号O1、O2,经分频器分频后输出方波信号O3。
O1和O2经过A/D模数转换后输入单片机,在单片机中进行处理比较峰值和有效值的关系从而达到自动确定信号类型的功能。
基于51单片机的频率计设计报告(免费)

《频率计》实验报告班级:电子094 姓名:刘洋学号:0910910408班级:电子094 姓名:王铁柱学号:0910910414实验日期:2011-11-14至2011-12-14一.设计要求1.1实验目的及原理(1)利用单片机计数器功能实现正弦波频率的检测。
(2),频率计又称为频率计数器是一种专门对被测信号频率进行测量的电子测量仪器。
1.2实验要求(1)输入信号为峰峰值为5V的正弦信号,信号频率为1~60KHz,设计整形电路将正弦信号整形为方波。
(2)利用单片机定时/计数器的计数功能对整形后方波进行计数从而实现频率的测量。
(2)在数码管或LCD实时显示输入信号的频率。
1.3实现部分(1)输入信号峰峰值可在1V~10V范围变化。
(2)实现了方波和正弦波的频率检测,通过按键进行方波或正弦波检测模式的改变,在数码管或LCD进行检测模式的显示。
(3)正弦波测量范围达到1Hz~3.8MHz,正弦波测量范围达到1Hz~4.7MHz,测量精度达到10Hz单位,高于实验要求。
二.总体设计2.1频率计测频原理概论:简而言之就是:“通过测量单位时间内出现的方波个数,进行频率计算”。
将输入的正弦波信号经波形转换模块转换为方波,高频信号再经过分频模块进行分频。
由晶体振荡器产生的基频,按十六进制分频得出的分频脉冲,经过驱动电路增加带载能力。
在时间间隔T内累计周期性的重复变化次数N,则频率的表达式为式:数字频率计的原理框图如下:电路总设计图2.2 系统组成及工作原理数字频率计由以下模块组成:单片机控制模块、驱动模块、施密特电路波形转换模块、按键模块、分频模块和显示模块。
(1)STC89C52单片机简介TN清零信号锁存信号III IIIIV VSTC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
基于51单片机的频率计的设计

基于51单片机的频率计的设计频率计是一种测量信号频率的仪器或装置,其原理是通过对信号进行计数和定时来测量信号的周期,并进而计算出信号的频率。
在本篇文章中,我们将设计一个基于51单片机的频率计。
设计方案:1.硬件设计:(1)时钟电路:使用11.0592MHz晶振为主频时钟源。
(2)信号输入:选择一个IO口作为信号输入口,通过外部电平转换电路将信号转换为51单片机能够处理的电平。
(3)显示装置:使用一个数码管或液晶显示屏来输出测量结果。
2.软件设计:(1)初始化:设置51单片机的工作模式、引脚功能、定时器等。
初始化时,将IO口配置为输入模式,用于接收外部信号。
(2)定时器设置:利用定时器来进行时间的测量,可以选择适当的定时器和计数器来实现定时功能。
(3)外部中断设置:使用外部中断来触发定时器,当外部信号边沿发生变化时,触发定时器的启动或停止。
(4)中断处理:通过中断处理程序来对定时器进行启动、停止和计数等操作。
(5)频率计算:将计数结果经过一定的处理和运算,计算出信号的频率。
(6)结果显示:将计算得到的频率结果通过数码管或液晶显示屏输出。
3.工作流程:(1)初始化设置:对51单片机进行初始化设置,包括端口、定时器、中断等的配置。
(2)外部信号输入:通过外部电平转换电路将要测量的信号输入至51单片机的IO口。
(3)定时测量:当外部信号发生边沿变化时,触发外部中断,启动定时器进行定时测量。
(4)停止计时:当下一个信号边沿出现时,中断处理程序停止定时器,并将计数结果保存。
(5)频率计算:根据定时器的设置和计数结果,计算出信号的周期和频率。
(6)结果显示:将计算得到的频率结果通过数码管或液晶显示屏进行显示。
4.注意事项:(1)确保信号输入的稳定性:外部信号输入前需要经过滤波处理,保证稳定且无杂波的输入信号。
(2)测量精度的提高:如有必要,可以通过增加定时器的位数或扩大计数范围来提高测量精度。
(3)显示结果的优化:可以根据需要,通过增加缓冲区、优化数码管显示等方式来改善结果的可读性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.5显示电路: 显示电路由1602组成,其电路如下图所示
四. 软件设计:
频率计的软件设计主要由主程序、分频选择程序、液晶显示程序组成。 • 4.1 频率计的算法设计: • 根据设计要求频率范围是10HZ~100MHZ,当频率为10HZ时, T=100000us,高电平为50000us,0.1%的误差为100us,由单片机产生 的基准频率为1MHZ,T0=1us,最大误差为1us,计数个数为50000(方 式1),满足设计要求。当频率增加到1KHZ时,产生的误差刚刚能达到设计 要求,这时计数个数为500。当频率大于1KHZ时(即计数个数小于500) 就需要将被测频率分频后再测量,如当频率为10KHZ时,先计算计得的脉 冲数等于50,小于了500,所以将10KHZ的信号10分频得到1KHZ,这时 就满足要求了。 106 10i 其中n为计得的脉冲个数,i为分频的次数。 • 最后得到的频率 F
2n
4.2主程序
•
主程序首先对系统环境初始化,设置分频选通信号P2=0x00,选通 0通道。设置T0工作方式,采用硬件启动方式,GATE=1,当INT0 和TR0同时为1时启动计时,计数方式为方式1(16位),TH0和 TL0都置零。当外部中断INT0=1时等待,当外部中断为0时启动T0 即TR0=1,当INT0一直为0时就等待,一旦INT0=1就启动计数同时 等待,当INT0为0时跳出并关闭T0即TR0=0。这样就计得高电平期 间基准脉冲个数,当脉冲个数小于500时就选择10分频信号,即P2 自加1,同时记录分频一次;如果分频后脉冲个数还小于500则再次 分频,直到计数个数大于500
基于51单片机的频率计的设计
指导老师:曹新亮 通信12级 王妍静
一.方案的设计与比较
• 1.方案一: • 本设计是基于MCS-51单片机的频率计。被测信号经过信号转换电路从 而将其转换成同频率的方波信号,当频率过大时将进行分频处理,利 用单片机控制数据选择模块进行数据选择,最终将结果显示在1602液 晶显示屏上 • 2.方案二: • 本方案采用单片机程序处理输入信号并且将结果直接送往液晶显示, 为了提高系统的稳定性,输入信号前进行放大整形,在通过A/D转换器 输入单片机系统,采用这种方法可大大提高测试频率的精度和灵活性, 并且能极大的减少外部干扰,采用VDHL编程设计实现的数字频率计, 除被测信号的整形部分、键输入部分和数码显示部分以外,其余全部 在一片FPGA芯片上实现,整个系统非常精简,而且具有灵活的现场可 更改性。 • 3.方案三: • 采用频率计专用模块,即大规模集成电路将计数器、锁存器、译码、位 和段驱动,量程及小数点选择等电路集成在一块芯片中,该方案在技 术上是可行的,可以简化电路的设计,当对于设计要求中的某些指标, 采用专用模块来完成比较困难,即扩展极为不便。
• 硬件电路主要分为信号转换电路、分频电路、数据选择电路、单片机 系统和显示电路五部分。其总体电路图如下图所示
•
3.1 电平转换电路:
• 要将正弦信号转换成方波信号可以用过零比较电路实现。正弦信号通 过LM833N与零电平比较,电压大于零的时候输出LM833N的正电源 +5V,电压小于零的时候输出负电源0V。具体电路如下图所示
•
其计数工作示意图如下图所示
被测脉冲
启动计数
停止计数,读出计 数个数
基准脉冲T0
N个脉冲
主程序流程图如下图所示
开始
初始化数据选择 信号
系统初始化
读出计数个数 n 其计数工作 示意图如下图所示
Y n<=500 变换 数 据选 择 通道 ,计 算分频次数i
N 显示结果
• • • • • • • • • • • • • • • • • • • • • • • • •
void init_LCD() //初始化LCD { unsigned char i; WR_COM=0x38; //设置为8位数据总线,16*2,5*7点阵 for(i=0;i<100;i++) delay(); WR_COM=0x01; //清屏幕 for(i=0;i<50;i++) delay(); WR_COM=0x06; //光标移动,显示区不移动,读写操作后AC加1 for(i=0;i<50;i++) delay(); WR_COM=0x0c; for(i=0;i<50;i++) delay(); } /************************************************************************************************** / void init_cgram() { unsigned char i; //;设置自定义字符 WR_COM=0x40; for(i=0;i<24;i++) { WR_DAT=CGRAM_TABLE[i];
3.3数据选择电路:
根据设计要求,要根据计数脉冲个数来选择分频次数,可以用74151 来选择分频次数,74151的选择控制信号由单片机的I/O口来控制。数 据选择电路如下图所示。
3.4单片机系统:
单片机采用AT89C51,采用12MHZ的晶振频率。单片机的P3.2口接被 处理后的被测信号,P0口接液晶显示器的数据输入端,ALE,RD, WR,P0.0,P0.1通过外接控制电路接液晶显示器的控制端。单片机 系统的电路如下图所示。
• 以上三种方案比较:第一种方案具有设计复杂度小、电 路简洁、功能实用且成本低廉等特点,其稳定性较好基 本能满足设计要求。方案二采用单片机处理能较高要求, 但成本提高且设计复杂。方案三采用专用频率计设计模 块固然设计简单且稳定但系统可扩展性能较差。 • 综上所述,本课题采用第一种设计方案。
二.设计原理与总体方案
• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
} for(i=0;i<40;i++) delay();
} /************************************************************************************************** / void PutChar(char t) { WR_DAT=t; delay(); delay(); } void clr_lcd() { WR_COM=0x01; delay(); delay(); } void lcdprintf(char x,char y,char *s) { //clr_lcd(); if(y>1)y=1; WR_COM=(y*0x40+x)|0x80; delay(); delay(); while(*s!=0) { WR_DAT=*s; s++; delay(); delay(); } }
• 根据设计要求用单片机的内部定时器0产生基准信号,由INTO输入被测 信号,通过定时方式计算被测信号的高电平持续时间。并通过单片机计 算得出结果,最后由1062液晶显示器显示测量结果。 • 频率计的系统设计框架如下图所示
被测信号
信号转换 (过零比较)
分频处理
AT89C51 液晶显示
数据选择 器
三.硬件设计
•
3.2 分频电路:
• 分频电路采用十进制的计数器74HC4017来分频,当被测信号脉冲个 数达到10个时74HC4017产生溢出,C0端输出频率为输入频率的1/10, 达到十分频的作用。如果当频率很高时需要多次分频只需将多片 74HC4017级联就可以了 • 74HC4017时序图如下图所示
系统分频电路如下图所示
• • • • • • • • • • • • • • • • • • • • • • • • • • •
period=period*10; if(i==6) {P2=0x00; break; } } k=pow(10,i); /* 10的i次方*/ f=(1000000.0/(2*period))*k; if(f<1000) sprintf(buff,"f=%5.2fHZ",f); else {m=f/1000.0; sprintf(buff,"f=%5.2fKHZ",m); } lcdprintf(0,0,buff); } } 显示子程序: #include <lcd.h> char code CGRAM_TABLE[]={0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02,// ;年 0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00, //;月 0x0F,0x09,0x09,0x0F,0x0,0x09,0x0F,0x00}; // ;日 void delay() //延时子程序 { unsigned char i; for(i=0;i<250;i++); }
• • • • • • • • • • • • • • • • • • • •
• • • • • •
主程序: #include<reg51.h> //头文件 #include<stdio.h> #include<lcd.c> #include<math.h> sbit p32=P3^2; //P3^2作为信号输入端 main() { unsigned int period,k,j,i=0; // period,为定时器计数总值,i是分频次数 float f,m; //浮点变量 char buff[30]; init_LCD(); //初始化LCD P2=0x00; //选通D0路信号 while(1) { TMOD=0X09; //配置定时器0为工作方式1,即16位定时器,并硬件启动 TH0=0; //装定时器初值为0 TL0=0; while(p32==1); //执行完这条语句后信号电平状态为低电平 TR0=1; //使能TR0; while(p32==0); //等待信号高电平到来,如果高电平来了则定时器开始计时,如果没来,则继续循 环等待。 while(p32==1); //等待信号高电平结束后,如果低电平,则定时器停止计时 TR0=0; //关闭定时器 period=TH0*256+TL0; //计算定时器装的总值 while(period<=500) /*判断是否分频及计算分频次数*/ 即频率是否大于1KHZ { P2++; i++;