数字频率计单片机
单片机C51数字频率计程序
单片机C51数字频率计程序**//头文件部分,文件名:plj.h/**************************************************#include<reg52.h>#include<absacc.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charextern const uchar NoDisp=0; //无显示extern const uchar NoCur=1; //有显示无光标extern const uchar CurNoFlash=2; //有光标但不闪烁extern const uchar CurFlash=3; //有光标且闪烁extern void LcdPos(uchar,uchar); //确定光标位置extern void LcdWd(uchar); //写字符extern void LcdWc(uchar); //送控制字(检测忙信号)extern void LcdWcn(uchar ); //送控制字子程序(不检测忙信号)extern void mDelay(uchar ); //延时,毫秒数由j决定extern void WaitIdle(void); //正常读写操作之前检测LCD控制器状态extern void RstLcd(void); //复位LCD控制器extern void WriteChar(uchar c,uchar xPos,uchar yPos);//在指定的行与列显示指定的字符,xpos:行,ypos:列,c:待显示字符extern void WriteString(uchar *s,uchar xPos,uchar yPos);extern void SetCur(uchar Para); //设置光标extern void ClrLcd(void); //清屏命令extern void WaitIdle(void); // 正常读写操作之前检测LCD控制器状态extern void mDelay(uchar j);/**************************************************/**************************************************//液晶1602子程序,文件名:1602.c/**************************************************;连线图:; DB0---DPROT.0 DB4---DPROT.4 RS-------------P3.5 ; DB1---DPROT.1 DB5---DPROT.5 RW-------------P3.6 ; DB2---DPROT.2 DB6---DPROT.6 E--------------P3.7 ; DB3---DPROT.3 DB7---DPROT.7 VLCD接10K可调电阻到GND*; 需要11根单片机口线;80C51的晶振频率为12MHz;液晶显示程序;**************************************************/#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit RS = P3^5;sbit RW = P3^6;sbit EN = P3^7;#define DPORT P1void LcdPos(uchar,uchar); //确定光标位置void LcdWd(uchar); //写字符void LcdWc(uchar); //送控制字(检测忙信号)void LcdWcn(uchar ); //送控制字子程序(不检测忙信号)void mDelay(uchar ); //延时,毫秒数由j决定void WaitIdle(); //正常读写操作之前检测LCD控制器状态//在指定的行与列显示指定的字符,xpos:行,ypos:列,c:待显示字符void WriteChar(uchar c,uchar xPos,uchar yPos){LcdPos(xPos,yPos);LcdWd(c);}void WriteString(uchar *s,uchar xPos,uchar yPos){ uchar i;if(*s==0) //遇到字符串结束return;for(i=0;;i++){if(*(s+i)==0)break;WriteChar(*(s+i),xPos,yPos);xPos++;if(xPos>=15) //如果XPOS中的值未到15(可显示的最多位)break;}}void SetCur(uchar Para) //设置光标{ mDelay(2);switch(Para){ case 0:{ LcdWc(0x08); //关显示break;}{ LcdWc(0x0c); //开显示但无光标break;}case 2:{ LcdWc(0x0e); //开显示有光标但不闪烁break;}case 3:{ LcdWc(0x0f); //开显示有光标且闪烁break;}default:break;}}void ClrLcd() //清屏命令{ LcdWc(0x01);}// 正常读写操作之前检测LCD控制器状态void WaitIdle(){ uchar tmp;RS=0;RW=1;EN=1;_nop_();for(;;){ tmp=DPORT;tmp&=0x80;if( tmp==0)}EN=0;}void LcdWd(uchar c) //写字符子程序{ WaitIdle();RS=1;RW=0;DPORT=c; //将待写数据送到数据端口EN=1;_nop_();_nop_();EN=0;}void LcdWc(uchar c) //送控制字子程序(检测忙信号){ WaitIdle();LcdWcn(c);}void LcdWcn(uchar c) //送控制字子程序(不检测忙信号){ RS=0;RW=0;DPORT=c;EN=1;_nop_();EN=0;}void LcdPos(uchar xPos,uchar yPos) //设置第(xPos,yPos)个字符的DDRAM地址{ unsigned char tmp;xPos&=0x0f; //x位置范围是0~15yPos&=0x01; //y位置范围是0~1if(yPos==0) //显示第一行tmp=xPos;elsetmp=xPos+0x40;tmp|=0x80;LcdWc(tmp);}void RstLcd() //复位LCD控制器{ mDelay(15); //如果使用12M或以下晶振,此数值不必改,如用24M晶振,须用30LcdWc(0x38); //显示模式设置LcdWc(0x08); //显示关闭LcdWc(0x01); //显示清屏LcdWc(0x06); //显示光标移动位置LcdWc(0x0c); //显示开及光标设置}void mDelay(uchar j) //延时,毫秒数由j决定{ uint i=0;for(;j>0;j--){ for(i=0;i<124;i++){;}}}//主函数:/*===================================== ========================================= ====公司名称:河海大学电气工程学院 *模块名:AT89C52单片机系统,全国电子设计大赛 *创建人:南东亮日期:2007。
51单片机数字频率计的代码
51单片机数字频率计的代码标题: 用51单片机实现数字频率计功能的创作导言:数字频率计是一种常见的电子测量仪器,用于测量信号的频率。
本文将介绍如何使用51单片机实现数字频率计的功能,通过编写相关代码和接线,实现对信号频率的测量和显示。
一、引言数字频率计是一种电子测量仪器,用于测量信号的频率。
它通过将输入信号与计时器进行比较,并将计数结果转换为频率值。
在本项目中,我们将使用51单片机来实现这一功能。
二、硬件设计我们需要准备的硬件有:51单片机、晶体振荡器、LCD显示屏、按键开关和一些连接线。
首先,将晶体振荡器连接到单片机的相应引脚上,以提供系统时钟。
然后将LCD显示屏连接到单片机的I/O端口上,用于显示测量结果。
最后,连接按键开关到单片机的I/O端口上,用于启动和停止测量。
三、软件设计1. 初始化我们需要初始化单片机的计时器和LCD显示屏。
通过设置计时器的工作模式和计数方式,以及LCD的显示模式和位置,来确保测量和显示的准确性。
2. 信号测量接下来,我们需要编写代码来测量输入信号的频率。
通过将输入信号与计时器进行比较,并在每个计数周期结束时进行计数,来获取信号的周期时间。
然后,通过计算周期时间的倒数,即可得到信号的频率。
3. 结果显示将测量得到的频率值转换为字符形式,并通过LCD显示屏进行显示。
可以使用LCD库函数来实现字符显示的功能,通过将频率值转换为字符数组,并逐个显示在LCD屏幕上。
四、实验结果经过测试,我们成功实现了数字频率计的功能。
当输入信号稳定时,可以准确地测量并显示信号的频率。
通过按下按键开关,可以启动和停止频率测量。
结论:通过51单片机的编程和硬件设计,我们成功实现了数字频率计的功能。
该频率计可以准确地测量输入信号的频率,并通过LCD显示屏进行显示。
这个项目不仅加深了我们对单片机的理解,还提高了我们的编程能力。
希望这个项目能对读者有所帮助,激发对电子技术的兴趣和研究。
数字频率计(单片机)
.1 前言随着电子技术的不断发展,各种电子产品也层出不穷,种类繁多。
但是每一种产品开发时都应该少不了对信号的检测,而检测信号的频率也是其中重要指标之一。
本设计设计的目的就是要设计出一种高效,高精度,价格便宜符合广大群众要求的数字频率计。
本设计主要由波形整形电路,单片机电路,量程指示及数字显示电路三大部分组成。
测量对象可以是方波,正弦波,三角波。
本设计以单片机位核心,单片机可以快速,精确地测出信号的频率,并且可以用直观的数字显示出来。
用单片机制作的数字频率计所需要的硬件要求比较简单,维修方便。
利用单片机的软件部分可以实现测量不同频率范围,本设计的测量范围为1HZ-10KHZ,10KHZ-100KHZ,100KHZ-1MHZ三个量程。
该电路还可以通过编程达到自动调节测量信号的量程,该电路软家调试简单,实用性高,价格低廉!本设计使用了美国ATMEL公司生产的AT89S51,AT89S51是低功耗,高性能CMOS8位单片机,片内含4k bytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中。
2 总体方案设计2.1方案比较方案一:本方案主要以单片机为核心,利用单片机的计数定时功能来实现频率的计数并且利用单片机的动态扫描法把测出的数据送到数字显示电路显示。
其原理框图如图2.1所示:图2.1 方案一原理框图方案二:本方案主要以数字器件为核心,主要分为时基电路,逻辑控制电路,放大整形电路,闸门电路,计数电路,锁存电路,译码显示电路七大部分。
其原理框图如图2.2所示:图2.2 方案二原理框图逻辑控制电路时基电路放大整形电路闸门电路计数器锁存器译码显示器信号放大电路信号整形单片机AT89S51 电路数字显示 电路2.2 方案论证方案一:本方案主要以单片机为核心,被测信号先进入信号放大电路进行放大,再被送到波形整形电路整形,把被测的正弦波或者三角波整形为方波。
基于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端口分别控制数据和时钟信号的输入实现频率的动态显示。
基于单片机控制的数字频率计设计
基于单片机控制的数字频率计设计1. 简介在电子领域中,频率对于信号处理和电路设计至关重要。
频率计是一种测量电信号频率的仪器,它可以帮助工程师们更好地理解信号的特性,并在电路设计和调试中起到至关重要的作用。
在本文中,我将详细探讨基于单片机控制的数字频率计的设计原理和实现方法,希望能帮助读者全面理解这一主题。
2. 频率计原理频率计的原理在于对输入信号的周期进行测量,并通过适当的算法将其转换为频率。
基于单片机的数字频率计设计采用计数的方法来测量信号周期,然后利用计数的结果和时间基准来计算频率。
在这个过程中,单片机起到了关键的控制和计算作用,能够精准地对输入信号进行测量和处理。
3. 单片机选择在设计数字频率计时,单片机的选择至关重要。
一般情况下,我们会选择性能稳定、计算能力强、易于编程的单片机作为核心控制芯片。
常用的单片机包括STC系列、STM32系列和PIC系列等,它们都具有较好的性能和可靠性,适合用于数字频率计的设计和实现。
4. 系统设计数字频率计系统一般由信号输入、单片机控制、显示模块和电源模块等部分组成。
在系统设计中,信号输入模块用于接收待测信号,并将其转换为数字信号输入到单片机中;单片机控制模块负责对输入信号进行计数和处理,并输出结果到显示模块;显示模块一般采用数码管或液晶显示屏,用于显示测量的频率数值。
电源模块需要为整个系统提供稳定的工作电压,确保系统正常运行。
5. 算法设计在数字频率计的设计中,算法的设计对于测量结果的准确性和稳定性至关重要。
一般而言,常见的测频算法包括时间测量法、计数器法和分频计数法等。
这些算法都需要考虑精确的计数和时间基准,以确保测量结果的准确性。
在算法设计中还需要考虑到单片机的计算能力和存储空间,选择合适的算法和数据结构来降低系统的复杂度和成本。
6. 实现方法基于单片机的数字频率计的实现方法有多种,可以根据具体的需求和应用场景选择合适的硬件和软件方案。
在硬件设计方面,需要考虑信号输入电路、计数电路、显示电路和电源电路等部分;在软件设计方面,需要编写相应的程序代码,实现信号测量、数据处理和显示控制等功能。
单片机数字频率计开题报告
单片机数字频率计开题报告1. 研究背景在电子领域,频率是一个非常重要的参数。
频率计是一种测量电子信号频率的仪器,广泛应用于通信、电力、无线电以及科学研究等领域。
传统的频率计通常由模拟电路实现,但随着单片机技术的发展,数字频率计逐渐成为主流。
2. 研究目的本文旨在设计并实现一个基于单片机的数字频率计,能够精确测量输入信号的频率,并通过显示器输出结果。
该频率计将有助于提高测量精度、简化操作流程,并具备一定的自动化能力。
3. 研究内容3.1 单片机选择考虑到频率计需要高精度的计数能力,本项目选用Atmel公司的AVR系列单片机作为控制核心。
根据需求分析,选择ATmega328P作为单片机主控芯片。
3.2 信号输入频率计的输入信号需要进行电平转换和滤波处理,以确保测量的准确性和稳定性。
本项目将使用信号调理电路对输入信号进行初步处理,并采用低通滤波器滤除杂散信号。
3.3 计数算法本项目将采用计数器算法来测量输入信号的频率。
通过使用单片机的计数功能,可以实时计数输入信号的周期数,并通过算法将其转化为频率值。
3.4 显示输出为了直观地显示测量结果,本项目将使用液晶显示器作为输出设备。
单片机将通过串行通信协议将测量结果发送给液晶显示器,以实现结果的实时显示。
4. 技术路线4.1 硬件设计根据项目需求和选择的单片机,设计输入信号调理电路和低通滤波器,以及液晶显示电路。
4.2 软件设计编写单片机的控制程序,实现输入信号的读取和处理、计数算法的运算以及输出结果的显示控制。
4.3 系统集成将硬件和软件进行集成测试,验证系统的可行性和稳定性。
5. 预期成果本项目预期能够设计并实现一个基于单片机的数字频率计,具有以下特点和性能:•高测量精度:能够精确测量输入信号的频率,误差控制在可接受范围内。
•简化操作流程:通过单片机控制,实现自动化测量,简化用户的操作流程。
•易扩展性:系统具备一定的扩展性,可以根据实际需求进行功能升级。
单片机数字频率计课程设计
单片机数字频率计课程设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理,理解数字频率计的工作机制。
2. 使学生能够运用单片机编程实现数字频率计的功能,包括计时、计数和显示。
3. 让学生了解数字频率计在实际应用中的重要性,如信号处理、电子测量等领域。
技能目标:1. 培养学生运用单片机进行数字频率计设计和编程的能力。
2. 培养学生运用相关软件(如Keil、Proteus等)进行电路仿真和调试的能力。
3. 提高学生的动手实践能力,学会在实际操作中发现问题、解决问题。
情感态度价值观目标:1. 激发学生对电子技术和单片机编程的兴趣,培养其创新精神和实践能力。
2. 培养学生严谨的科学态度,注重实验数据的准确性和可靠性。
3. 增强学生的团队协作意识,学会在项目合作中相互支持、共同进步。
课程性质:本课程为实践性较强的课程,要求学生在掌握理论知识的基础上,进行实际操作和项目实践。
学生特点:学生具备一定的单片机基础知识,对编程和电路设计有一定了解,但实际操作能力有待提高。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,以项目为导向,培养学生的动手实践能力和创新能力。
通过课程学习,使学生能够独立完成单片机数字频率计的设计和编程任务,达到课程目标所要求的具体学习成果。
二、教学内容1. 理论知识:- 单片机原理和结构:介绍单片机的内部组成、工作原理及性能特点。
- 数字频率计原理:讲解频率的概念、测量原理及其在电子测量中的应用。
- 编程语言:回顾C语言基础知识,重点掌握单片机编程相关语法。
2. 实践操作:- 电路设计:学习使用Proteus软件设计数字频率计电路,包括单片机、计数器、显示模块等。
- 程序编写:运用Keil软件编写数字频率计程序,实现计数、计时和显示功能。
- 仿真调试:在Proteus环境下进行电路仿真,调试程序,确保其正常运行。
3. 教学大纲:- 第一周:回顾单片机原理和结构,学习数字频率计原理。
基于单片机简易数字频率计
基于单片机简易数字频率计基于单片机的简易数字频率计概述:数字频率计是一种用于测量信号频率的仪器,它能够将输入的模拟信号转换为数字信号,并通过单片机进行处理和显示。
本文将介绍基于单片机的简易数字频率计的原理和实现方法。
一、原理介绍数字频率计的原理基于信号的频率与周期的倒数之间的关系。
当输入信号的频率较高时,直接测量周期较为困难,因此常采用测量信号的脉宽来间接推算频率。
本文所介绍的简易数字频率计就是基于这一原理。
二、硬件设计1. 信号输入:将待测信号接入单片机的GPIO口,通过外部电路对信号进行电平转换和滤波处理,确保输入信号稳定且符合单片机的输入电压范围。
2. 定时器:单片机内部的定时器用于测量输入信号的脉宽。
通过配置定时器的计数器和预分频器,可以实现不同精度的测量。
一般情况下,选择合适的计数器和预分频器,使得定时器的溢出周期与待测信号的周期相当,以提高测量的准确性。
3. 显示模块:通过数码管或LCD显示模块,将测量到的脉宽转换为频率值并进行显示。
可以根据需要选择合适的显示方式和显示精度。
三、软件设计1. IO口配置:在单片机的软件中,需要配置GPIO口的输入和输出模式,以及中断触发条件等。
通过配置正确的IO口,可以实现对信号输入和输出的控制。
2. 定时器配置:配置定时器的计数器和预分频器,并设置中断触发条件。
在定时器中断服务函数中,可以对计数器的值进行读取和处理。
3. 测量算法:在定时器中断服务函数中,可以根据测量到的脉宽值计算出信号的频率。
具体的计算方法有多种,例如可以通过测量多个周期的脉宽平均值来提高测量的准确性。
4. 显示控制:将计算得到的频率值转换为合适的显示格式,并通过显示模块进行显示。
可以根据需要选择合适的显示精度和显示方式。
四、实现方法基于以上原理和设计,可以通过以下步骤来实现简易数字频率计:1. 硬件连接:将待测信号接入单片机的GPIO口,并通过外部电路进行电平转换和滤波处理。
2. 软件编程:根据单片机的型号和开发环境,编写相应的软件程序。
基于AT98C51单片机数字频率计
摘要51系列单片机是国内目前应用最广泛的一种8位单片机之一,随着嵌入式系统、片上系统等概念的提出和接受及应用,51系列单片机还会在继后很长一段时间占据嵌入式低端市场。
重要的。
,因此,作为新世纪的大学生,在信息产业高速发展的今天,掌握单片机的基本结构、原理和使用时非常重要的。
随着电子技术的发展,当前数字系统的设计正朝着速度快、容量大、体积小、重量轻的方向发展。
在电子技术中,频率是最基本的参数之一,并且与许测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。
本设计所要介绍的是以单片机AT89C51为核心设计了一种量程自选的数字频率计。
在本文的设计采用单片机内部的定时器/计数器对脉宽的机器周期数进行计数,从而求得被测信号的频率值, 最后通过静态显示电路显示数值由于单片机内部振荡频率很高, 所以一个机器周期的量化误差相当小, 可以有效地提高低频信号的测量准确性。
关键字:单片机,AT98C51,量程自选频率计目录摘要 (1)一、设计目的 (3)二、设计要求及指标 (3)三、单元电路分析 (3)1、上拉电路 (3)2、信号输入电路 (6)3、显示电路 (7)四、系统框图 (9)五、仿真图 (10)六、仿真结果 (10)七、软件介绍 (12)八、心得体会 (13)九、参考文献 (13)附录源程序 (14)一设计目的1.掌握量程自选数字频率计的设计、组装与调试方法。
2.熟悉集成元器件的选择和集成电路芯片的逻辑功能及使用方法。
3.熟悉仿真软件的使用。
二设计要求及指标1.输入信号的频率量程可以自动选择。
2.测试结果用6位数码管显示。
三单元电路分析1、上拉电路AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
51单片机——数字频率计
频率计是我们经常会用到的实验仪器之一,本实验要使用单片机和计数电路及液晶器件来设计一个宽频的频率计。
期望达到10Hz-1.1G范围的频率精确测量。
实验电路图(初步方案)1) 计数及显示电路:2)前置放大及分频电路:设计思路频率的测量实际上就是在1S时间内对信号进行计数,计数值就是信号频率。
用单片机设计频率计通常采用两种办法,1)使用单片机自带的计数器对输入脉冲进行计数,或者测量信号的周期;2)单片机外部使用计数器对脉冲信号进行计数,计数值再由单片机读取。
由于单片机自带计数器输入时钟的频率通常只能是系统时钟频率的几分之一甚至几十分之一,因此采用单片机的计数器直接测量信号频率就受到了很大的限制。
本实验电路采用方式2,使用一片74LS393四位双二进制计数器和Atmega8的 T1计数器组成了24位计数器,最大计数值为16777215。
如果输入信号经过MB501分频器进行64分频后再进行测量,则固定1S时基下最高测量频率为1073.741760Mhz。
为了方便得到准确的1秒钟测量闸门信号,我们使用了Atmega8的异步实时时钟功能,采用32.768Khz的晶振由TC2产生1秒钟的定时信号。
测量原理:单片机打开测量闸门,即PB1输出高电平,同时TC2定时器启动。
74LS393开始对输入脉冲进行计数,74LS393每计数达256时,Atmega8的T1计数器也向上计数1次。
当1S定时到达时,单片机产生中断,PB1输出低电平关闭测量闸门,然后Atmega8读取74LS393和T1的计数值,然后送LCD显示。
实验进展2004-09-27根据设计思路编写程序初步获得了一些实验结果,如下图所示。
下图是测量8M有源晶振的输出结果。
由于1S的测量闸门时间在业余条件下不好测试,因此,实验程序中在LCD上同时显示实时时钟用于判断1S闸门时间的准确性。
实验中,我使用CDMA手机上显示的GPS卫星精确时间进行比较。
手机时间显示的最小单位是分钟,测量时一旦手机分钟值发生跳变,则立即记录下LCD显示的秒值,这样的话让频率计运行一段时间后,再多次记录下LCD显示的秒,就可以准确判断频率计的异步时钟是否准确。
基于51单片机数字频率计的设计
基于51单片机数字频率计的设计在电子技术领域中,频率计是一种常见的测试仪器,它可以用来测量信号的频率。
在本文中,我们将通过介绍基于51单片机数字频率计的设计实现来了解它的工作原理和设计流程。
1. 确定设计需求在进行任何项目之前,我们需要明确自己的设计需求。
对于频率计而言,它的主要需求就是准确地测量信号的频率。
因此,我们需要确定我们需要测量的频率范围和精确度。
2. 确定硬件设计在确定了设计需求之后,我们需要确定硬件设计。
对于数字频率计而言,它需要一个计数器来计算信号的脉冲数量。
在本设计中,我们采用74LS90计数器芯片来实现计数功能。
我们还需要一个51单片机来读取计数器的计数值,并将其转换为对应的频率值。
另外,我们还需要硬件板、LCD显示屏、按键等元件来搭建数字频率计的电路结构。
3. 确定软件设计硬件设计完成后,我们需要开发相应的软件来实现我们的需求。
在本设计中,我们使用KEIL C51软件来编写51单片机的程序。
编写软件的主要步骤是读取计数器计数值、计算出对应的频率值、将频率值显示在LCD屏幕上,并实现按键控制。
我们需要将这些步骤按照程序流程依次实现。
4. 进行测试在软件编写完成后,我们需要对数字频率计进行测试,以确保其满足我们的需求。
我们可以使用信号发生器给数字频率计输入不同频率的信号,然后观察LCD屏幕上显示出来的相应频率值是否准确。
如果测试结果不满足我们的需求,则需要对硬件或软件进行优化或调试,直到数字频率计能够正常工作为止。
总之,基于51单片机的数字频率计设计是一个较为简单的电子设计项目。
通过上述步骤的详细介绍,我们了解了数字频率计的设计流程和工作原理,并明确了设计中需要注意的细节和注意事项。
希望能够对大家理解数字频率计的设计过程有所帮助。
基于51单片机的数字频率计设计
基于51单片机的数字频率计一、设计说明1.数字频率计概述数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种用十进制数字显示被测信号频率的数字测量仪器。
它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。
在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。
本数字频率计将采用定时、计数的方法测量频率,采用一个1602A LCD显示器动态显示6位数。
测量范围从1Hz—10kHz的正弦波、方波、三角波,时基宽度为1us,10us,100us,1ms。
用单片机实现自动测量功能。
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。
它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
2.频率测量仪的设计思路与频率的计算频率测量仪的设计思路主要是:对信号分频,测量一个或几个被测量信号周期中已知标准频率信号的周期个数,进而测量出该信号频率的大小,其原理如右图所示。
若被测量信号的周期为,分频数m1,分频后信号的周期为T,则:T=m1Tx。
由图可知:T=NTo(注:To为标准信号的周期,所以T为分频后信号的周期,则可以算出被测量信号的频率f。
)由于单片机系统的标准频率比较稳定,而是系统标准信号频率的误差,通常情况下很小;而系统的量化误差小于1,所以由式T=NTo可知,频率测量的误差主要取决于N值的大小,N值越大,误差越小,测量的精度越高。
3.设计原理及系统分析基本设计原理:直接用十进制数字显示被测信号频率的一种测量装置。
它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T。
其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等于被测频率fx。
时间基准信号发生器提供标准的时间脉冲信号,若其周期为1s,则门控电路的输出信号持续时间亦准确地等于1s。
单片机数字频率计代码
单片机数字频率计代码以下是一个基于单片机的简单数字频率计的代码示例: c.#include <reg51.h>。
sbit inputPin = P1^0; // 输入信号引脚。
sbit ledPin = P2^0; // LED指示灯引脚。
unsigned int count = 0; // 计数器。
void delay(unsigned int time) {。
unsigned int i, j;for (i = 0; i < time; i++)。
for (j = 0; j < 1275; j++);}。
void main() {。
TMOD = 0x01; // 设置定时器0为工作模式1。
TH0 = 0; // 定时器0高8位清零。
TL0 = 0; // 定时器0低8位清零。
ET0 = 1; // 允许定时器0中断。
EA = 1; // 允许总中断。
TR0 = 1; // 启动定时器0。
while (1) {。
if (inputPin == 1) {。
delay(10); // 延时10ms,防止抖动。
if (inputPin == 1) {。
while (inputPin == 1); // 等待输入信号变为低电平。
count++; // 计数器加1。
}。
}。
}。
}。
void timer0_isr() interrupt 1 {。
TH0 = 0; // 定时器0高8位清零。
TL0 = 0; // 定时器0低8位清零。
ledPin = ~ledPin; // LED指示灯翻转。
}。
这段代码使用了8051系列的单片机,通过计数输入信号的高电平时间来测量频率。
其中,输入信号连接在P1口的第0位,LED指示灯连接在P2口的第0位。
代码中的`delay`函数用于延时,防止输入信号的抖动。
`main`函数中的循环不断检测输入信号的状态,如果检测到输入信号从低电平变为高电平,就开始计数,直到输入信号再次变为低电平。
单片机课程设计(数字频率计)
单片机原理和使用课程设计报告一、任务技术指标根据单片机课程所学内容,结合其他相关课程知识,设计一个数字频率计,以加深对单片机知识的理解,本设计以MCS-51系列单片机为核心,采用常用电子器件设计。
利用单片机的定时器和计数器实现对方波信号的频率测量,闸门时间可选0.1秒、1秒、10秒,采用六位LED显示测量的频率。
二、总体设计思想1、基本原理基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。
它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。
若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T。
其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等于被测频率f x。
时间基准信号发生器提供标准的时间脉冲信号,若其周期为1s,则门控电路的输出信号持续时间亦准确地等于1s。
闸门电路由标准秒信号进行控制,当秒信号来到时,闸门开通,被测脉冲信号通过闸门送到计数译码显示电路。
秒信号结束时闸门关闭,计数器停止计数。
由于计数器计得的脉冲数N是在1秒时间内的累计数,所以被测频率fx=NHz。
本系统采用测量频率法,可将频率脉冲直接连接到AT89C51的T0端,将T/C1用做定时器。
T/C0用做计数器。
在T/C1定时的时间里,对频率脉冲进行计数。
在1S定时内所计脉冲数即是该脉冲的频率。
见图1:图1测量时序图由于T0并不和T1同步,并且有可能造成脉冲丢失,所以对计数器T0做一定的延时,以矫正误差。
具体延时时间根据具体实验确定。
2、系统框图本频率计的数据采集系统主要元器件是单片机AT89C51,由它完成对待测信号频率的计数和结果显示等功能,外部还要有分频器、显示器等器件。
可分为以下几个模块:放大整形模块、秒脉冲产生模块、换档模拟转换模块、单片机系统、LCD 显示模块。
三、具体设计1.总体设计电路图3频率计原理图2.模块设计(1)、硬件系统构成:本频率计的数据采集系统主要元器件是单片机AT89C51,由它完成对待测信号频率的计数和结果显示等功能,外部还要有分频器、显示器等器件。
数字频率计(51单片机)
数字频率计(51单片机)数字频率计(51单片机)数字频率计(Digital Frequency Counter)是一种常用的电子测量仪器,可用于测量信号的频率。
在本文中,我们将介绍如何使用51单片机实现一个简单的数字频率计。
一、原理简介数字频率计的基本原理是通过计算信号波形周期内的脉冲数来确定频率。
在实际应用中,我们通常使用51单片机作为微控制器,通过计数器和定时器模块来实现频率计算。
二、硬件设计1.信号输入首先,我们需要将待测信号输入到频率计中。
可以使用一个输入接口电路,将信号连接到51单片机的IO口上。
2.计时模块我们需要使用51单片机的定时器/计数器来进行计时操作。
在这里,我们选择使用定时器0来进行计数,同时可以利用定时器1来进行溢出次数的计数,以扩展计数范围。
3.显示模块为了显示测量结果,我们可以使用数码管、LCD液晶显示屏等显示模块。
通过将结果以可视化的方式呈现,方便用户进行观察和读数。
三、软件设计1.定时器配置首先,我们需要对定时器进行配置,以确定计时器的计数间隔。
通过设置定时器的工作模式、计数范围和时钟频率等参数,可以控制定时器的计数精度和溢出时间。
2.中断服务程序当定时器溢出时,会触发中断,通过编写中断服务程序,实现对计数器的相应操作,例如将计数值累加,记录溢出次数等。
3.数字频率计算根据计数器的值和溢出次数,我们可以计算出信号的频率。
通过简单的公式计算,即可得到测量结果。
四、实验步骤1.搭建硬件电路,将待测信号连接到51单片机的IO口上,并连接显示模块。
2.根据硬件设计要求,配置定时器的工作模式和计数范围。
3.编写中断服务程序,实现对计数器的相应操作。
4.编写主程序,实现数字频率计算和显示。
5.下载程序到51单片机,进行测试。
五、实验结果与分析通过实验,我们可以得到信号的频率测量结果,并将结果以数码管或LCD屏幕的形式进行显示。
通过对比实际频率和测量频率,可以评估数字频率计的准确性和稳定性。
单片机数字频率计(课程设计)
电子计数式测量频率有以下几种方法: (1)脉冲数定时测频法(M法):记录在确定时间里待测信号的脉冲个数。其特点是: 测量方法简单;测量精度与待测信号频率和门控时间有关,当待测信号频率较低时,误 差较大。 (2)脉冲周期测频法(T 法):在待测信号的一个周期里记录标准信号频率变化次数。 此法低频检测时精度高,但高频检测时误差较大。 (3)脉冲数倍频测频法(AM法):此法是为克服M法在低频测量时精度不高的缺陷发 展起来的。通过A倍频,把待测信号频率放大A倍,以提高测量精度。其特点是待测信号 脉冲间隔减小,间隔误差降低;低频测量精度比M法高A倍,但控制电路较复杂。 (4)脉冲数分频测频法(AT法):此法是为了提高T法高频测,所以可通过A分频使待测信号的周期 扩大A倍。其特点是高频测量精度比T法高A倍;但控制电路也较复杂。 (5)脉冲平均周期测频法(M/T法):此法是在闸门时间内,同时用两个计数器分别
方案三在设计方法、硬件电路的实现上都要比方案一和方案二简洁、新颖,而且采 用可编程逻辑器件(PLD)的 EDA 技术也是现代电子产品开发的方向,应用这种技术来 实现数字频率计的设计是可行的。但从系统设计的要求上看,要能实现测量频率是 200HZ~20KHZ 的范围,以频率下限 200HZ 为例,要达到误差小于 5%的目的而使用直接 测频的方法是不现实的,而采用带有运算器的单片机则可以很容易地解决这个问题,实 现设计要求。另外由于使用了功能较强的 P89V51RD2FN 芯片,使本系统可以通过对软件 改进而扩展功能,提高测量精度,因此我们选用方案四,采用单片机作为核心控制系统 的具体实施方案。
和占空比。
4.2 硬件部分设计
51单片机设计数字频率计的代码
51单片机设计数字频率计的代码前言本文档将介绍如何使用51单片机设计数字频率计的代码。
数字频率计是一种测量信号频率的仪器,通过测量信号周期的倒数来计算频率。
在本文中,我们将使用51单片机来实现这个功能。
硬件准备*51单片机开发板*串口调试助手*信号源代码实现步骤1.引入头文件首先,在代码开头引入51单片机所需的头文件,包括re g51.h、s t di o.h和se ri al.h。
#i nc lu de<r eg51.h>#i nc lu de<s td io.h>#i nc lu de<s er ia l.h>2.定义全局变量我们需要定义一些全局变量来存储计数器的值和频率值。
u n si gn ed in tc ou nt=0;u n si gn ed lo ng fr equ e nc y=0;3.初始化串口使用串口调试助手来与单片机进行通信,需要在代码中初始化串口模块。
v o id in it_s er ia l(){T M OD&=0x0F;T M OD|=0x20;S C ON=0x50;T H1=0x FD;T L1=TH1;T R1=1;}4.中断服务函数我们需要定义一个中断服务函数来处理定时器溢出中断。
在每次溢出时,计数器将自增,并计算频率值。
v o id in te rr up t_han d le r()i nt er ru pt1{i f(T F0==1){T F0=0;c o un t++;i f(c ou nt>=1000){f r eq ue nc y=(1000/c o un t)*1000;c o un t=0;}}}5.主函数在主函数中,我们需要进行一些初始化操作,包括初始化串口和定时器。
v o id ma in(){i n it_s er ia l();E A=1;T M OD&=0x F0;T M OD|=0x01;T H0=0x FC;T L0=TH0;E T0=1;T R0=1;w h il e(1){p r in tf("当前频率:%lu Hz\n",fr eq ue n cy);}}6.编译和下载代码将代码编译生成h ex文件,并下载到51单片机开发板中。
数字频率计单片机
自动化与电子工程学院单片机课程设计报告课程名称:单片机原理与应用学院:自动化与电子工程院专业班级:学生姓名:完成时间:报告成绩:第100第2 1111第3 13.1单片机最小系统 (1)第4章软件设计 (3)4.1系统的软件流程图 (3)4.2程序清单 (3)第5章课程设计总结 (3)参考文献 (4)附录Ⅰ仿真截图 ................................ 错误!未定义书签。
附录Ⅱ程序清单 . (4)第1章数字频率计概述1.1数字频率计概述数字频率计又称为数字频率计数器,是一种专门对被测信号频率进行测量的电子测量仪器,是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种用十进制数字显示被测信号频率的数字测量仪器。
它的基本功能是测量方波信号及其他各种单位时间内变化的物理量。
本数字频率计将采用定时、计数的方法测量频率,采用6个数码管显示6位十进制数。
测量范围从10Hz—5.5kHz,精度为1%,用单片机实现自动测量功能。
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。
它以测量频率的方法对方波的频率进行自动的测量。
1.2数字频率计的基本原理数字频率计最基本的工作原理为:当被测信号在特定时间段T内的周期个数为N时,则被测信号的频率f=N/T(如图1.1所示)。
图1.1 频率测量原理频率的测量实际上就是在1s时间内对信号进行计数,计数值就是信号频率。
用单片机设计频率计通常采用的办法是使用单片机自带的计数器对输入脉冲进行计数;好处是设计出的频率计系统结构和程序编写简单,成本低廉,不需要外部计数器,直接利用所给的单片机最小系统就可以实现。
缺陷是受限于单片机计数的晶振频率,输入的时钟频率通常是单片机晶振频率的几分之一甚至是几十分之一,在本次设计使用的AT89C51单片机,由于检测一个由“1”到“0”的跳变需要两个机器周期,前一个机器周期测出“1”,后一个周期测出“0”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自动化与电子工程学院单片机课程设计报告课程名称:单片机原理与应用学院:自动化与电子工程院专业班级:学生姓名:完成时间:报告成绩:第100第2 1111第3 13.1单片机最小系统 (1)第4章软件设计 (3)4.1系统的软件流程图 (3)4.2程序清单 (3)第5章课程设计总结 (3)参考文献 (4)附录Ⅰ仿真截图 ................................ 错误!未定义书签。
附录Ⅱ程序清单 . (4)第1章数字频率计概述1.1数字频率计概述数字频率计又称为数字频率计数器,是一种专门对被测信号频率进行测量的电子测量仪器,是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种用十进制数字显示被测信号频率的数字测量仪器。
它的基本功能是测量方波信号及其他各种单位时间内变化的物理量。
本数字频率计将采用定时、计数的方法测量频率,采用6个数码管显示6位十进制数。
测量范围从10Hz—5.5kHz,精度为1%,用单片机实现自动测量功能。
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。
它以测量频率的方法对方波的频率进行自动的测量。
1.2数字频率计的基本原理数字频率计最基本的工作原理为:当被测信号在特定时间段T内的周期个数为N时,则被测信号的频率f=N/T(如图1.1所示)。
图1.1 频率测量原理频率的测量实际上就是在1s时间内对信号进行计数,计数值就是信号频率。
用单片机设计频率计通常采用的办法是使用单片机自带的计数器对输入脉冲进行计数;好处是设计出的频率计系统结构和程序编写简单,成本低廉,不需要外部计数器,直接利用所给的单片机最小系统就可以实现。
缺陷是受限于单片机计数的晶振频率,输入的时钟频率通常是单片机晶振频率的几分之一甚至是几十分之一,在本次设计使用的AT89C51单片机,由于检测一个由“1”到“0”的跳变需要两个机器周期,前一个机器周期测出“1”,后一个周期测出“0”。
故输入时钟信号的最高频率不得超过单片机晶振频率的二十四分之一。
根据频率检测的原理,很容易想到利用51单片机的T0、T1两个定时/计数器,一个用来定时,另一个用来计数,两者均应该工作在中断方式,一个中断用于1s 时间的中断处理,一个中断用于对频率脉冲的计数溢出处理。
1.3单脉冲测量原理首先设置定时器T0为方式1,在被测脉冲信号INT0的下降沿进入外部中断函数,在中断函数中启动T0计数码,被测脉冲信号下降沿停止T0计数,脉宽测量过程见下图:定时器T0以方式1对内部脉冲计数,16位计数值存放在40H(高字节)和41H单元第2章课程设计方案设计2.1系统方案的总体论述数字频率计是用于测量信号(方波,脉冲信号)的频率,并用十进制数字显示,它具有精度高,测量迅速,读数方便等优点。
脉冲信号的频率就是在单位时间内所产生的脉冲个数,其表达式为f=N/T,其中,f为被测信号的频率,N为计数器所累计的脉冲个数。
T为产生N个脉冲所需的时间。
计数器所记录的结果,就是被测信号的频率。
如在1S内记录1000个脉冲,则被测信号的频率为1000Hz。
本实验课题仅讨论一种简单易制的数字频率计。
2.2系统硬件的总体设计本频率计的数据采集系统主要元器件是单片机AT89C51,由它完成对待测信号频率的计数和结果显示等功能,可分为以下几个两个模块电路:单片机系统、数码管及显示电路。
各模块关系图如图2.1所示:图2.1 数字频率计系统框图2.3处理方法本频率计的设计以AT89C51 单片机为核心,利用它内部的定时/ 计数器完成待测信号周期/ 频率的测量。
单片机AT89C51 内部具有2 个16 位定时/计数器,定时/ 计数器的工作可以由编程来实现定时、计数和产生计数溢出中断要求的功能。
在构成为定时器时,每个机器周期加1(使用12MHz 时钟时,每1us 加1),这样以机器周期为基准可以用来测量时间间隔。
在构成为计数器时,在相应的外部引脚发生从1 到0 的跳变时计数器加1 ,这样在计数闸门的控制下可以用来测量待测信号的频率。
外部输入每个机器周期被采样一次,这样检测一次从1 到0 的跳变至少需要2 个机器周期(24 个振荡周期),所以最大计数速率为时钟频率的1/ 24 (使用12MHz 时钟时,最大计数速率为500 KHz)。
定时/计数器的工作由相应的运行控制位TR 控制,当TR置1,定时/ 计数器开始计数;当TR 清0 ,停止计数。
第3章硬件设计3.1单片机最小系统AT89C51是一种高性能低功耗的采用CMOS工艺制造的8位微控制器,它提供下列标准特征:4KB的程序存储器,128B的RAM,32条I/O线,2个16位定时器/计数器,2个外部中断源和1个串行口。
图3.1 单片机最小系统其引脚功能如下:⒈电源:⑴ VCC -电源引脚,接+5V;⑵ GND -接地端;⒉时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。
⒊控制线:控制线共有4根,⑴PROGALE:地址锁存允许/片内EPROM编程脉冲/① ALE功能:用来锁存P0口送出的低8位地址②PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
⑵ PSEN:外ROM读选通信号。
⑶ RESET:复位信号。
⑷Vpp/EA:内外ROM选择/片内EPROM编程电源。
①EA功能:内外ROM选择端。
② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
⒋ I/O线89C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
5.P3口第二功能P3.0 RXD 串行输入口P3.1 TXD 串行输出口INT外部中断0申请输入端P3.2 0INT外部中断1申请输入端P3.3 1P3.4 T0 定时计数器0计数输入端P3.5 T1 定时计数器1计数输入端P3.6 WR外部数据存储器写选通P3.7 RD外部数据存储器读选通第4章软件设计4.1系统的软件流程图系统软件设计采用模块化设计方法。
整个系统由初始化模块、显示模块和信号频率测量模块和脉冲测量模块组成(见图4.1) 。
上电后,进入系统初始化模块,系统软件开始运行。
在执行过程中,根据外界开关选择是频率测量模式还是脉冲宽度测量模式。
其中当闭合开关,蓝色指示灯亮时,表示是在单脉冲测量模式,打开开关,蓝色指示灯灭,表示是在频率测量模式。
若模式选择错误,将会导致不能得到正确的测量结果。
具体程序流程见下图:图4.1 主函数流程图图4.2频率测量流程图图4.3脉冲宽度测量流程图4.2程序清单程序详见附录Ⅱ。
第5章课程设计总结通过本次对数字频率计的设计使我对书本上的知识有了更进一步的了解,同时也使我感觉到,在实际运用中仅仅凭借书本上的的知识是远远不够的。
在设计中我遇到了一些困难,比如测量方法的选择上曾一度陷入困境,终于攻克了难题。
本次课程设计使我的分析能力和动手能力都有了很大的进步,激起了我对课程的更大兴趣。
在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。
频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。
通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。
闸门时间也可以大于或小于一秒。
闸门时间越长,得到的频率值就越准确,但闸门时间越长则没测一次频率的间隔就越长。
闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。
本设计还有很多地方需要改进,其中包括对数据的处理,因为取模运算耗时过大,导致数码管在测量高频信号时出现闪烁。
所以应该优化算法,获得更好的显示效果。
参考文献[1]《单片机原理及应用》陈为,中国石油大学出版社附录Ⅰ仿真截图开关打开,指示灯灭,表示此时为测量频率模式,调整方波频率,在数码管上得到测量值为520Hz开关打开,指示灯灭,表示此时为测量频率模式,调整方波频率,在数码管上得到测量值为21Hz经过放着可见,对频率的测量还是比较准确的以下是对脉冲宽度测量的仿真截图双击脉冲发生器,会出现如下对话框设置脉冲格式,单脉冲,正脉冲,起始时间为1s后(即开始仿真一秒后,脉冲自动产生),脉冲宽度设置为520us,点击OK保持开关闭合,模式指示灯亮,表示此时在脉冲测量方式下,点击仿真开始按钮,开始仿真,1s后,单片机接收到脉冲信号,并把结果显示到数码管上其默认单位为us,此时显示结果为576us修改脉冲宽度为0.1s(要求测量范围的上限),仿真结果如下,此时数码管显示为100000us,即0.1s附录Ⅱ程序清单/*****************************************************************课题名称:单片机测输入方波脉冲频率和单脉冲宽度测量范围:外界输入频率在10KHz以内可以稳定显示,六位数码管默认单位为Hz当测量范围过大时,因取模运算耗时大数码管会闪烁,但显示基本正确单正脉冲测量范围可达100us--0.1s,六位数码管默认单位为us*****************************************************************/#include<reg51.h> //包含51单片机寄存器定义的头文件#define uchar unsigned char#define uint unsigned intlong n,num; //全局变量,n用来记录T1的中断次数,4000次后正好是一秒:num用来存放测脉冲宽度时T0的计数值sbit u=P3^2; //将u位定义为P3.2sbit L=P2^7; //将L位定义为P2.7sbit led=P2^6; //led亮时表示测量脉冲宽度状态uchar a,b,c,d,e,f; //六位数码管uchar code t[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段码/**************************************************************函数功能:延时子函数*************************************************************/void delay(uint z){uint i,j;for(i=0;i<z;i++)for(j=0;j<50;j++);}/**************************************************************函数功能:测频率时的定时器初始化*************************************************************/void init() //测频率时的定时器初始化{TMOD=0x25; // 0010 0101 =>T1,定时方式二,8位自动重装;T0,计数,方式1TH0=0; //计数初值为零TL0=0;TH1=6; //定时250usTL1=6;TR1=1; //开T1定时TR0=1; //开T0计数ET0=1; //允许TO中断ET1=1; //允许T1中断EA=1; //开总中断}/**************************************************************函数功能:显示子函数*************************************************************/void display() //显示{P2=0xfe; //最右端一位数码管P0=t[f]; //送段码delay(1); //延时P0=0; //熄灭P2=0xfd; //右端数第二位P0=t[e]; //送段码delay(1); //延时P0=0; //熄灭P2=0xfb; //右端数第三位P0=t[d]; //送段码delay(1); //延时P0=0; //熄灭P2=0xf7; //右端数第三位P0=t[c]; //送段码delay(1); //延时P0=0; //熄灭P2=0xef; //右端数第三位P0=t[b]; //送段码delay(1); //延时P0=0; //熄灭P2=0xdf; //右端数第三位P0=t[a]; //送段码delay(1); //延时P0=0; //熄灭}/************************************************************** 函数功能:定时器T0中断,定时1s*************************************************************/ void t1(void) interrupt 3 //定时器T1中断,{n++; //记录中断次数,4000次正好1sif(n==4000) //一秒时间到,读计数器的T0的值{n=0; //清零EA=0; //关中断TR1=0; //关T1定时TR0=0; //关T0计数num=(long)TH0*256+TL0; //取计数值TL0=0; //计数清零TH0=0; //计数清零a=num/100000; //对计数值取模,显示用b=num/10000%10;c=num/1000%10;d=num/100%10;e=num/10%10;f=num%10;TR1=1; //开T1定时TR0=1; //开T0计数EA=1; //重开}}/************************************************************** 函数功能:测脉冲宽度的子函数*************************************************************/ void maikuan(void){TMOD=0x01; //TMOD=0001H,使用计数器T0的模式1 EA=1; //开放总中断EX0=1; //允许使用外中断IT0=0; //选择负跳变来触发外中断TH0=0; //定时器T0赋初值0TL0=0; //定时器T0赋初值0while(L==0)display();//无限循环,不停调用显示子函数}/************************************************************** 函数功能:外中断0的中断服务程序*************************************************************/ void int0(void) interrupt 0 //外中断0的中断编号为0{TR0=1; //外中断一到来,即启动T0计时while(u==0); // P3^2为低电平时T0一直计数TR0=0; //P3^2为高电平时关闭T0num=((long)TH0*256+TL0)+31; //取计数值TL0=0; //计数清零TH0=0; //计数清零if(TF0==1)//如果计数器有溢出,需要加上溢出前的计数值65535 {TF0=0;num=num+65536;} //计数器没有溢出,直接对计数值处理a=num/100000;b=num%100000/10000;c=num%100000%10000/1000;d=num%100000%10000%1000/100;e=num%100000%10000%1000%100/10;f=num%100000%10000%1000%100%10;}/************************************************************** 函数功能:测频率的子函数*************************************************************/ void pinlv(){init(); //初始化while(L==1)display();}/************************************************************** 函数功能:主函数*************************************************************/ void main(void){while(1) //主循环{if(L==1) //判断是计频率还是测脉冲宽度pinlv();elsemaikuan();}}。