A. 51单片机的数字频率计
该系统由定时器0中断子函数、定时器1中断子函数、延时子函数、按键消抖子函数、闸门控制子函数、主函数和数据定义这几部分组成。
闸门时间由定时器1控制,初始为2s,可以通过按键加减,范围为2s到7秒。闸门时间就是采样时间,闸门时间越长,测量精度越准确。
由P3.4输入信号,低电平有效,触发T0外部中断。当T0触发中断的时候执行的程序。这里只进行了一个操作,t0++。所以,t0的值表示触发了几次中断,也就表示接受到的脉冲几次从0到65536。所以会有t0*65536。 另外,由于计时的机制是THO++、TL0++,所以,THOTL0就表示当前的计数值。THOTLO- 初值就可以确定没有触发中断定时多少。TH0*256==TH0*2^8,实质就是左移8位,就是拼接TH0跟TL0的处理。
所以频率的核心算法为
daimao=(t0*65536+TH0*256+TL0)/n
程序框图
总源程序
#include "reg52.h"
#define uchar unsigned char
typedef unsigned int uint;
sbit w1=P2^0;
sbit w2=P2^1;
sbit w3=P2^2;
sbit w4=P2^3;
sbit w5=P2^4;
sbit w6=P2^5;
sbit jia=P1^6;
sbit jian=P1^7;
sbit s=P3^7;//启动
bit flag;//标签
uchar s1,s2,s3,s4,s5,s6, shu=1;//控制数组取值
uchar t0,t1,t2,a;
unsigned long m=5,n;//m为闸门时间
int y;
unsigned long daimao;//频率
unsigned char code table1[]={0xc0,0xf9,0xa4,0xb0, //闸门时间数组0-f
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
unsigned char code table2[]={0xc0,0xf9,0xa4,0xb0, //频率数组0-f
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
B. 谁有微机原理及应用课程设计 要求设计一套以MCS-51单片机为核心的测量与控制系统, 功能是频率测量仪 谢谢
我做的红外逻辑分析器。
测量频率最好用快点的cpu。我用的是arm7.如果会用现场阵列就更好了。
C. 利用单片机的定时/计数功能设计一个频率测量装置,并以此频率输出方波
可以看看这个,51单片机简易频率计
D. 用等精度频率计原理,设计一个以单片机为核心的等精度数字频率计。
频率计就是个计数器,用单片机的外部中断和定时器就可以搞定
E. 设计一个以单片机为核心的频率测量装置。使用AT89C51单片机的定时器/计数器的定时和计数功能
将单片机的两个定时器设置成:一个定时器模式,一个计数器模式,在定时时间之内检查计数器的脉冲个数就可以计算出频率大小了。
F. 基于MCS-51系列单片机AT89C51,设计一个以单片机为核心的频率测量装置。
直接列出需求,等现成的,这不是学习之法啊
我只能告诉你,用两个定时/计数器,一个做定时器,一个做计数器,一定时间内测到的上升沿或者下降沿的个数,就可以算出频率了
G. 设计数字频率计
一、基本原理
使用555产生矩形波信号,输入到单片机进行测量频率。
测频的方案有多种:
1、测周法:通过测量被测信号的周期的倒数得到频率,选用适当的时基,以被测信号作为计数的闸门进行测量,得到闸门内的计数值,与时基相乘即为被测信号的周期,周期的倒数即为频率。该法适合测量频率低的信号。
2、测频法:通过频率的定义即单位时间的脉冲数,得到被测信号的频率。选用适当的时基,如1秒,以此作为计数闸门,得到闸门内的计数值即为信号的频率。该法适合测量频率高的信号。
二、参考电路框图
仿真电路,程序在这里 http://hi..com/huang0776/item/a2983cb9d12f35442aebe3dc三、参考程序流程图
图
H. 怎么设计一个数字频率计 要求:设计一个以单片机为核心的频率测量装置。使用AT89C51单片机的定
被测频率较高时,可以采用楼主所说的《定时计数法》。
如果频率较低,几秒钟,都不来一个脉冲,这方法就不行了。
就应该采用《测量周期法》来测频。
I. 设计一个以单片机为核心的频率测量装置。被测频率fx<110Hz,采用测周法 利用键盘分段测量和自动分段测量
555定时器就可以, 网上有很多类似的资料。
J. 设计一个以单片机为核心的频率测量装置。求大神给写一下程序。
单片机频率计仿真。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit p0=P1^0;
bit tb0,tb1;
uchar tt0,tt1,tt2,tt3;
uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main()
{
TMOD=0x11;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1; //开定时器0中断
ET1=1; //开定时器1中断
TR0=1; //启动定时器0
TR1=1; //启动定时器1
while(1)
{
if(TR1==0)
{
// tt3=65536*tt2+266*TH1+TL1
TH1=0x00;TL1=0x00;
tt1=0x00;tt2=0x00;
tb1=1;
led[0]=tt3/1000000;
led[1]=tt3/100000%10;
led[2]=tt3/100000%10;
led[3]=tt3/10000%10;
led[4]=tt3/1000%10;
led[5]=tt3/100%10;
led[6]=tt3/10%10;
led[7]=tt3%10;
}
if(tt0==1 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[0];P0=0xfe
}
if(tt0==2 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[1];P0=0xfd
}
if(tt0==3 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[2];P0=0xfb
}
if(tt0==4 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[3];P0=0xf7
}
if(tt0==5 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[4];P0=0xef
}
if(tt0==6 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[5];P0=0xdf
}
if(tt0==7 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[6];P0=0xbf
}
if(tt0==8 && tb0=1)
{
tb0=1;P0==0xff;
P2=led[7];P0=0x7f
tt0=0;
}
}
}
void timer0() interrupt 1
{
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
tt1++;
if(tt1==500)
{
TR1=0; //启动定时器1
tb1=0
}
tt0++;tb0=1;
if(tb1==1 && TR1==0)TR1=1;
}
void timer1() interrupt 3
{
tt2++;
}