导航:首页 > 操作系统 > 51单片机频率计

51单片机频率计

发布时间:2022-01-20 12:48:07

㈠ 设计一个51单片机的数字频率计,要求显示从1—1000HZ,并用7段显码显示

曾做过这个题目,将资料整理了一下,放到了我的公共邮箱.
邮件名是"51单片机频率计"
包括电路图和源程序.在发帖之前验证过,没有问题!
可以测量的频率范围是0~65KHz

邮箱地址:[email protected]
密码是protel
已将你要的文件发到该邮箱~ 请不要删除,谢谢!

㈡ 51单片机的数字频率计

本应用系统设计的目的是通过在“单片机原理及应用”课堂上学习的知识,以及查阅资料,培养一种自学的能力。并且引导一种创新的思维,把学到的知识应用到日常生活当中。在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。

1.1数字频率计概述
数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。
本数字频率计将采用定时、计数的方法测量频率,采用一个1602A LCD显示器动态显示6位数。测量范围从1Hz—10kHz的正弦波、方波、三角波,时基宽度为1us,10us,100us,1ms。用单片机实现自动测量功能。
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
点击重新加载
1.2频率测量仪的设计思路与频率的计算

图1 频率测量原理图

频率测量仪的设计思路主要是:对信号分频,测量一个或几个被测量信号周期中已知标准频率信号的周期个数,进而测量出该信号频率的大小,其原理如右图1所示。

若被测量信号的周期为,分频数m1,分频后信号的周期为T,则:T=m1Tx 。由图可知: T=NTo
(注:To为标准信号的周期,所以T为分频后信号的周期,则可以算出被测量信号的频率f。)
由于单片机系统的标准频率比较稳定,而是系统标准信号频率的误差,通常情况下很小;而系统的量化误差小于1,所以由式T=NTo可知,频率测量的误差主要取决于N值的大小,N值越大,误差越小,测量的精度越高。

1.3 基本设计原理

基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
所谓“频率”,就是周期性信号在单位时间(1s)内

㈢ 基于51单片机的数字频率计(0—10MHZ)

再加两个数码管,用T1引脚检测频率,打开T1中断,每中断一次加1计数,

满1秒中后停止T1计数,读出T1计数器的TH1 TL1,

频率= 65536x中断次数+TH1 HL1。

前提是选择高速单片机,即只要T1引脚能够响应10M的频率就没有问题

因为要计数65536次才T1才会中断一次。

㈣ 关于51单片机简易频率计的问题

该课程设计偏离了实际应用。
一般来说,单片机通过计数器实现频率测量。测量方波外围电路简单,测量正弦波需要外部调理电路,但是,既然能够做到测量正弦波了,方波更没问题了。人为分为两种模式,从使用上讲,不方便,从技术上讲,更是多此一举。

㈤ 做用51单片机做一个频率计,测量范围为0.1Hz~10kHz

在不改变定时时间的前提下,也就是0.5秒定时,是不能实现0.1~2Hz频率的测量的。
你所谓2Hz~10KHz易实现也是基于这个道理。但这个也是理论情况。
当你0.5s内刚好检测到一个脉冲,你认为这个时候是2Hz而不是2.5hz或者3.9hz?
这中间存在一个测量精度的问题。实际上你所测到的信号是在2hz到4hz之间。

实际上我们在测量信号的时候,低频一般会采用测周期,高频用测频才能提高测量的准确性。
至于高低频的临界点,跟你的计数频率有关,感兴趣的话可以去看《电子测量原理》。

下面我来讲下测周实现的方法,可以使用边沿触发的D触发器输出作为单片机的外部定时控制,测量信号作为触发时钟,计数值作为该信号的周期。

㈥ 基于MCS51单片机的频率计设计

没有现成的,但以前有一个调试程序是用C,送你看到它,电路很简单,只要速度信号转换为方波输入IO口...您的邮箱是504370059 @ QQ。 COM,检查一下

㈦ 51单片机的简易频率计设计

单片机直接用USB连电脑只能取电不能通讯,通讯的话 需要接口电路,例如USB转TTL的芯片,CH340,PL2303,这样的芯片才可以,如果直接测TTL电平的话 确实不需要其他外围电路了,因为51的信号就是TLL电平的。

㈧ 求51单片机频率计程序!!!!!!!!!!!!!!

;******************************************************************
;* *
;* ME300B单片机开发系统演示程序-1602LCD显示数字频率计 *
;* *
;* 邮箱: [email protected] *
;* 网站: http://www.willar.com *
;* 作者: gguoqing *
;* 时间: 2006/06/03 *
;* *
;*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED *
;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
;* *
;******************************************************************

;------------------------------------------------------------
;频率计的程序
;包含:外部中断设置,中断服务程序,定时程序,定时服务程序
;以及数据处理,显示,包括 三位十进制数转化为四位BCD码,
;
;------------------------------------------------------------
BEEP BIT P3.7
LCD_RS BIT P2.0
LCD_RW BIT P2.1
LCD_EN BIT P2.2
LCD_X EQU 3FH ;LCD 地址变量

TIMER_H EQU 30H ;定时器高位字节单元
TIMER_L EQU 31H ;定时器低位字节单元
TIMCOUNT EQU 32H ;时间中断数

INT_G EQU 35H ;中断计数缓冲单元高地址
INT_H EQU 34H ;中断计数缓冲单元中地址
INT_L EQU 33H ;中断计数缓冲单元低地址

T_S EQU 36H ;数据显示低位
T_M EQU 37H ;数据显示中位
T_H EQU 38H ;数据显示高位
T_G EQU 39H ;数据显示最高位

;----------------------------------------------------------
ORG 0000H
JMP MAIN ;主程序开始
ORG 000BH
JMP TIMER_INT ;定时器T0中断服务程序
ORG 001BH ;定时器T1中断服务程序
JMP TIMER1
ORG 0030H
;----------------------------------------------------------
MAIN:
MOV SP,#60H ;设置SP指针
LCALL PRO_SET ;初始化
CALL SET_LCD
LCALL TIM_T0
;-----------------------------------------------------------
;LCD1602是慢速显示器件,故100MS显示一次。
;-----------------------------------------------------------
MAIN1:
MOV R5,40
MAIN2:
ACALL DELAY1 ;3ms
DJNZ R5,MAIN2
ACALL SBIN_SBCD
CALL CONV
JMP MAIN1
;------------------------------------------------------------
;T1计数器中断服务子程序
;计T1计数器溢出次数
;------------------------------------------------------------
TIMER1:
INC 2AH
RETI
;------------------------------------------------------------
;初始化程序
;------------------------------------------------------------
PRO_SET: MOV A,#00H
MOV B,#00H
MOV 2AH,A
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV INT_H,#00H
MOV INT_L,#00H
MOV INT_G,#00H
MOV T_S,#00H
MOV T_H,#00H
MOV T_M,#00H
MOV T_G,#00H
MOV TIMCOUNT,#00H
MOV TIMER_H,#04CH ;定时 50 MS
MOV TIMER_L,#10H ;
CLR BEEP
SETB P3.5 ;P3.5端口置输入状态
RET ;T1(TIMER1的外部输入脚)
;-----------------------------------------------------
;LCD 初始化设置
;-----------------------------------------------------
SET_LCD:
CLR LCD_EN
CALL INIT_LCD ;初始化 LCD
CALL DELAY1
MOV DPTR,#INFO1 ;指针指到显示信息1
MOV A,#1 ;显示在第一行
CALL LCD_SHOW
MOV DPTR,#INFO2 ;指针指到显示信息2
MOV A,#2 ;显示在第二行
CALL LCD_SHOW
RET
;-----------------------------------------------------
INFO1: DB " CYMOMETER ",0 ;LCD 第一行显示信息
INFO2: DB "FREQ: HZ ",0 ;LCD 第二行显示信息
;-----------------------------------------------------
;LCD 接口初始化
;8位I/O控制
;-----------------------------------------------------
INIT_LCD:
MOV A,#38H ;双列显示,字形5*7点阵
CALL WCOM
CALL DELAY1
MOV A,#38H ;双列显示,字形5*7点阵
CALL WCOM
CALL DELAY1
MOV A,#38H ;双列显示,字形5*7点阵
CALL WCOM
CALL DELAY1
MOV A,#0CH ;开显示,关光标,
CALL WCOM
CALL DELAY1
MOV A,#01H ;清除 LCD 显示屏
CALL WCOM
CALL DELAY1
RET
;----------------------------------------------------
LCD_SHOW: ;在LCD的第一行或第二行显示信息字符

CJNE A,#1,LINE2 ;判断是否为第一行
LINE1: MOV A,#80H ;设置 LCD 的第一行地址
CALL WCOM ;写入命令
CALL CLR_LINE ;清除该行字符数据
MOV A,#80H ;设置 LCD 的第一行地址
CALL WCOM ;写入命令
JMP FILL
LINE2: MOV A,#0C0H ;设置 LCD 的第二行地址
CALL WCOM ;写入命令
CALL CLR_LINE ;清除该行字符数据
MOV A,#0C0H ;设置 LCD 的第二行地址
CALL WCOM
FILL: CLR A ;填入字符
MOVC A,@A+DPTR ;由消息区取出字符
CJNE A,#0,LC1 ;判断是否为结束码
RET
LC1: CALL WDATA ;写入数据
INC DPTR ;指针加1
JMP FILL ;继续填入字符
RET
;---------------------------------------------------
CLR_LINE: ;清除该行 LCD 的字符
MOV R0,#24
CL1: MOV A,#' '
CALL WDATA
DJNZ R0,CL1
RET
;-----------------------------------------------------
; 写指令、数据使能子程序
;-----------------------------------------------------
ENABLE: ;写指令使能
CLR LCD_RS ;RS=L,LCD_RW=L,D0-D7=指令码,E=高脉冲
CLR LCD_RW
SETB LCD_EN
CALL DELAY0
CLR LCD_EN
RET
ENABLE1: ;写数据使能
SETB LCD_RS ;RS=H,RW=L,D0-D7=数据,E=高脉冲
CLR LCD_RW
SETB LCD_EN
CALL DELAY0
CLR LCD_EN
RET

DELAY0: MOV R7,#250 ;延时500微秒
DJNZ R7,$
RET
;----------------------------------------------------
;写入命令子程序
;----------------------------------------------------
WCOM: ;以8位控制方式将命令写至LCD
MOV P0,A ;写入命令
CALL ENABLE
RET
;----------------------------------------------------
;写入数据子程序
;----------------------------------------------------
WDATA: ;以8位控制方式将数据写至LCD
MOV P0,A ;写入数据
CALL ENABLE1
RET
;---------------------------------------------------
;在 LCD 第二行显示字符
;A=ASC DATA, B=LINE X POS
;---------------------------------------------------
LCDP2: ;在LCD的第二行显示字符
PUSH ACC ;
MOV A,B ;设置显示地址
ADD A,#0C0H ;设置LCD的第二行地址
CALL WCOM ;写入命令
POP ACC ;由堆栈取出A
CALL WDATA ;写入数据
RET
;-------------------------------------------------------
;ASCII 转换并在第二行显示数字子程序
;-------------------------------------------------------
CONV: ; MOV A,T_G
MOV LCD_X,#6 ;设置位置
; CALL SHOW_DIG2
MOV A,T_H
;INC LCD_X ;加载小时数据
CALL SHOW_DIG2 ;显示数据
MOV A,T_M ;加载分钟数据
INC LCD_X ;设置位置
CALL SHOW_DIG2 ;显示数据
MOV A,T_S ;加载秒数数据
INC LCD_X ;设置位置
CALL SHOW_DIG2 ;显示数据
RET
;----------------------------------------------------
SHOW_DIG2:
MOV B,#16
DIV AB
ADD A,#30H
PUSH B
MOV B,LCD_X
CALL LCDP2
POP B
MOV A,B
ADD A,#30H
INC LCD_X
MOV B,LCD_X
CALL LCDP2
RET
;-----------------------------------------------------
DELAY1: ;延时3MS
MOV R6,#15
D2: MOV R7,#100
DJNZ R7,$
DJNZ R6,D2
RET
; ----------------- 定时器设置 ------------------------
;设置定时器0工作在定时方式1,定时器1工作在计数方式1
;---------------------------------------------------------
TIM_T0: MOV TMOD,#0D1H
MOV TH0,TIMER_H ;设置定时初值高位
MOV TL0,TIMER_L ;设置定时初值低位
MOV TH1,#00H ;清T1计数器
MOV TL1,#00H
MOV IE,#8AH ;开中断总允许,允许T0溢出中断
SETB PT1
SETB TR1
SETB TR0 ;定时器开始工作
RET
;--------------------------------------------------------
;定时器0中断服务程序
;--------------------------------------------------------
TIMER_INT:
CLR TR0 ;关闭定时器
MOV TL0,TIMER_L ;重新赋初值
MOV TH0,TIMER_H ;
INC TIMCOUNT ;定时1S,时间单位
MOV A,TIMCOUNT ;查看数量值
CPL P1.4 ;产生自测信号
CJNE A,#20,T_END ;如果没有到1S返回

CLR TR1 ;关闭计数器T1
MOV TIMCOUNT,#00H ;到1S则清零
MOV INT_L,TL1 ;取出计数值低位
MOV INT_H,TH1 ;取出计数值高位
MOV INT_G,2AH ;取出溢出计数值位
MOV TH1,#00H
MOV TL1,#00H
MOV 2AH,#00H
SETB TR1
T_END: SETB TR0 ;重新开始定时操作
RETI
;---------------------------------------------------------------
;三字节二进制整数转换成四字节BCD码子程序
;二进制数从低位到高位分别存放在INT_L、INT_H、INT_G单元中
;BCD码从低位到高位分别存放在T_S、T_M、T_H、T_G 单元中
;---------------------------------------------------------------
SBIN_SBCD:
PUSH PSW
SETB PSW.3 ;设置当前寄存器
CLR PSW.4

CLR A ;清累加器
MOV T_G,A
MOV T_H,A ;清除出口单元,准备转换
MOV T_M,A
MOV T_S,A

MOV R5,INT_G
MOV R7,INT_L ;设置二进制数起始地址
MOV R6,INT_H
MOV R2,#24
CLR C
HH1:
MOV A,R7
RLC A
MOV R7,A

MOV A,R6
RLC A
MOV R6,A

MOV A,R5
RLC A
MOV R5,A

MOV A,T_S ;得到低位数据
ADDC A,T_S ;累加
DA A ;十进制调整
MOV T_S,A ;保存数据

MOV A,T_M ;得到第二位数据
ADDC A,T_M ;累加
DA A ;十进制调整
MOV T_M,A ;保存结果

MOV A,T_H ;得到第三位
ADDC A,T_H ;累加
DA A
MOV T_H,A ;保存

MOV A,T_G ;得到第四位
ADDC A,T_G ;累加
;DA A
MOV T_G,A

DJNZ R2,HH1 ;
POP PSW
RET
;----------------------------------------------------------------
END ;告诉编译器本程序到此结束。
;-----------------------------------------------------------------

㈨ 51单片机制作简易数字频率计程序

这里有一个四位数码管的频率计,供参考

#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharan[10]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //所需的段的位码
//ucharwei[4]={0XEf,0XDf,0XBf,0X7f};//位的控制端 (开发板)
ucharwei[4]={0X80,0X40,0X20,0X10};//位的控制端 (仿真)
uintz,x,c,v,date; //定义数据类型
uintdispcount=0;
uintlck=0;
uintdisp=0;
/******************************************************************

延时函数

******************************************************************/
voiddelay(uchart)
{
uchari,j;
for(i=0;i<t;i++)
{
for(j=13;j>0;j--);
{;
}
}
}

/**********************************************************************
数码管动态扫描
*********************************************************************/
voidxianshi()
{
/*****************数据转换*****************************/
z=date/1000; //求千位
x=date%1000/100; //求百位
c=date%100/10; //求十位
v=date%10; //求个位

P2=wei[0];
P0=an[z];
delay(50);
P2=wei[1];
P0=an[x];
delay(50);
P2=wei[2];
P0=an[c];
delay(50);
P2=wei[3];
P0=an[v];
delay(50);


}

/*************************************************************************
定时器初值1ms
**************************************************************************/
voidinitTimer(void)
{
TMOD=0x0;
TH0=0xe3;
TL0=0xc;
}

/*************************************************************************
定时器函数
**************************************************************************/
voidtimer0(void)interrupt1
{
TH0=0xe3;
TL0=0xc;
lck++;
if(lck==1000)
{
disp=dispcount;
lck=0;
dispcount=0;
}

}

/*************************************************************************
中断函数
**************************************************************************/
voidint0(void)interrupt0
{

dispcount++;//每一次中断,计数加一

}

/*************************************************************************
主函数
**************************************************************************/
voidmain(void)
{

IT0=1;//INT0下降沿中断
EX0=1;//允许INT1中断
initTimer();//装入初值
TR0=1;
ET0=1;
EA=1;
while(1)

{
date=disp;
xianshi();
}
}

㈩ 51单片机电子频率计

建议你去"幸福校园"看看 里面有些样子 你可以参考
前言
传统的数字频率计都是采用纯硬件方式组成(纯数字电路)。它的集成电路(IC)用量较大,因而产品的体积、功耗都较大,生产成本较高。产品定型后不能升级(加入新功能)。而采用单片机和相关可编程智能集成器件制成的现代数字频率计方式情况就不同了,单片机的内核CPU可完成多项工作如计数、读入、译码、驱动和时基的产生等。和纯硬件方式比,它减少了很大一部分的集成电路的用量,还可加入许多的智能操作,这更是纯硬件方式所望尘莫及的。
目前市场上的频率计产品很多,但基本上都是采用专用计数芯片(如ICM7240 , ICM7216) 和数字逻辑电路组成,由于这些芯片本身的工作频率不高(如ICM7240 仅有15MHz 左右) ,从而限制了产品的工作频率的提高, 远不能达到在一些特殊的场合需要测量很高的频率的要求,而且测量精度也受到芯片本身极大的限制。
自从80年代单片机引入我国之后,单片机已广泛地应用于各行各业的电子设计中,使频率计智能化水平在广度和深度上产生了质的飞跃,数字化也成为了电子设计的必由之路. 运用单片机和高速计数器的组合设计频率计,并采用适当的算法取代传统电路,次方法不仅能解决传统频率计结构复杂、稳定性差、精度不高的弊端,而且性能也将大有提高,可实现精度较高、等精度和宽范围频率计的要求;随着单片机技术的不断发展,可以用单片机通过软件设计直接用十进制数字显示被测信号频率。本设计正是基于此技术进行的传统频率计技术改进。

阅读全文

与51单片机频率计相关的资料

热点内容
工作三年的大专程序员 浏览:728
java毕业设计文献 浏览:143
筹码集中度指标源码 浏览:482
listsortjava 浏览:186
plc闪光电路编程实例 浏览:299
socket编程试题 浏览:206
华为的服务器怎么设置从光驱启动 浏览:871
程序员真的累吗 浏览:328
学信网app为什么刷脸不了 浏览:874
天蝎vs程序员 浏览:996
单片机下载口叫什么 浏览:190
程序员的道 浏览:926
云服务器不实名违法吗 浏览:558
怎样查看文件夹图片是否重复 浏览:995
文件怎么导成pdf文件 浏览:808
打开sql表的命令 浏览:103
安卓手机如何面部支付 浏览:38
天元数学app为什么登录不上去 浏览:825
明日之后为什么有些服务器是四个字 浏览:104
安卓系统l1是什么意思 浏览:26