首页 > 电脑 > 数字频率计,要有protel99se,ISIS7,还有程序

数字频率计,要有protel99se,ISIS7,还有程序

电脑 2023-02-06

求51单片机设计数字频率计,附带Proteus仿真和程序

刚刚下了一楼传的附件,测试后发现精度和测量范围都比较差。如果单从测频的角度来说,51的频率计是很简单的。恰好几年前我写过类似的程序,是用来测频率和占空比的。

理论上单用C52这单片机测频率最高为:12M/12/2=500KHZ。我写的这个程序可以同时测频率和脉宽,仿真下大概可以测到350KHZ;测脉宽好像10KHZ左右,再高的话脉宽的精度就会下降。测频精度在100KHZ以内,基本是2HZ;200K是5HZ;350KHZ以内是10HZ;最低测量频率1HZ。

仿真比较慢,数据要3秒后才会稳定,有兴趣的话自测吧。

50KHZ测量

100KHZ测量

300KHZ测量

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

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

#include
#defineucharunsignedchar
#defineuintunsignedint
ucharduan[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{
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=duan[z];
delay(50);
P2=wei[1];
P0=duan[x];
delay(50);
P2=wei[2];
P0=duan[c];
delay(50);
P2=wei[3];
P0=duan[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();
}
}

单片机定时器控制频率计,并进行功能扩展。(不要汇编语言,附带ISIS 7 Professional仿真图、程序)

#include "reg51.h" #define uchar unsigned char uchar disp[8]={0,0,0,0,0,0,0,0}; uchar T0count,T1count; void delay(void) { uchar i; for(i=250;i>0;i--); } void display() { //uchar i,j,k=0x80; uchar dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar i,k; k=0x80; for(i=0;i<8;i++) { P2

数字频率计设计(请附上电路图)

给你个电路图吧,需要Multisim仿真文件的话,HI我

点击图片,查看大图,图片另存到电脑,看得更清楚。

单片机课程设计数字频率计

数码管台古老了,你用这个吧,看着还稍微有点可以,代码和电路都给你了,没有做不出来的理由,有问题加我QQ11422376745

#include "d:\c51\reg51.h"

#include "d:\c51\intrins.h"

sbit LCM_RS=P3^0;

sbit LCM_RW=P3^1;

sbit LCM_EN=P3^7;

#define BUSY 0x80 //常量定义

#define DATAPORT P1

#define uchar unsigned char

#define uint unsigned int

#define L 50

uchar str0[16],str1[16],count;

uint speed;

unsigned long time;

void ddelay(uint);

void lcd_wait(void);

void display();

void initLCM();

void WriteCommandLCM(uchar WCLCM,uchar BusyC);

void STR();

void account();

/*********延时K*1ms,12.000mhz**********/

void int0_isr(void) interrupt 0 /*遥控使用外部中断0,接P3.2口*/

{

unsigned int temp;

time=count;

TR0=0;

temp=TH0;

temp=((temp << 8) | TL0);

TH0=0x3c;

TL0=0xaf;

count=0;

TR0=1;

time=time*50000+temp;

}

void time0_isr(void) interrupt 1 /*遥控使用定时计数器1 */

{

TH0 =0x3c;

TL0 =0xaf;

count++;

}

void main(void)

{

TMOD=0x01; /*TMOD T0选用方式1(16位定时) */

IP|=0x01; /*INT0 中断优先*/

TCON|=0x11; /*TCON EX0下降沿触发,启动T0*/

IE|=0x83;

TH0=0x3c;

TL0=0xaf;

initLCM();

WriteCommandLCM(0x01,1); //清显示屏

for(;;)

{

account();

display();

}

}

void account()

{

unsigned long a;

if (time!=0)

{

a=L*360000000/time;

}

speed=a;

}

void STR()

{

str0[0]='S';

str0[1]='p';

str0[2]='e';

str0[3]='e';

str0[4]='d';

str0[5]=' ';

str0[6]=(speed%100000)/10000+0x30;

str0[7]=(speed%10000)/1000+0x30;

str0[8]=(speed%1000)/100+0x30;

str0[9]='.';

str0[10]=(speed%100)/10+0x30;

str0[11]=speed%10+0x30;

str0[12]='k';

str0[13]='m';

str0[14]='/';

str0[15]='h';

}

void ddelay(uint k)

{

uint i,j;

for(i=0;i

{

for(j=0;j<60;j++)

{;}

}

}

/**********写指令到LCD子函数************/

void WriteCommandLCM(uchar WCLCM,uchar BusyC)

{

if(BusyC)lcd_wait();

DATAPORT=WCLCM;

LCM_RS=0; /* 选中指令寄存器*/

LCM_RW=0; // 写模式

LCM_EN=1;

_nop_();

_nop_();

_nop_();

LCM_EN=0;

}

/**********写数据到LCD子函数************/

void WriteDataLCM(uchar WDLCM)

{

lcd_wait( ); //检测忙信号

DATAPORT=WDLCM;

LCM_RS=1; /* 选中数据寄存器 */

LCM_RW=0; // 写模式

LCM_EN=1;

_nop_();

_nop_();

_nop_();

LCM_EN=0;

}

/***********lcd内部等待函数*************/

void lcd_wait(void)

{

DATAPORT=0xff; //读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色

LCM_EN=1;

LCM_RS=0;

LCM_RW=1;

_nop_();

_nop_();

_nop_();

while(DATAPORT&BUSY)

{ LCM_EN=0;

_nop_();

_nop_();

LCM_EN=1;

_nop_();

_nop_();

}

LCM_EN=0;

}

/**********LCD初始化子函数***********/

void initLCM( )

{

DATAPORT=0;

ddelay(15);

WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号

ddelay(5);

WriteCommandLCM(0x38,0);

ddelay(5);

WriteCommandLCM(0x38,0);

ddelay(5);

WriteCommandLCM(0x38,1); //8bit数据传送,2行显示,5*7字型,检测忙信号

WriteCommandLCM(0x08,1); //关闭显示,检测忙信号

WriteCommandLCM(0x01,1); //清屏,检测忙信号

WriteCommandLCM(0x06,1); //显示光标右移设置,检测忙信号

WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号

}

/****显示指定坐标的一个字符子函数****/

void DisplayOneChar(uchar X,uchar Y,uchar DData)

{

Y&=1;

X&=15;

if(Y)X|=0x40; //若y为1(显示第二行),地址码+0X40

X|=0x80; //指令码为地址码+0X80

WriteCommandLCM(X,0);

WriteDataLCM(DData);

}

/*******显示指定坐标的一串字符子函数*****/

void DisplayListChar(uchar X,uchar Y,uchar *DData)

{

uchar ListLength=0;

Y&=0x01;

X&=0x0f;

while(X<16)

{

DisplayOneChar(X,Y,DData[ListLength]);

ListLength++;

X++;

}

}

void display()

{

STR();

DisplayListChar(0,0,str0);

DisplayListChar(0,1,str1);

}


标签:数字频率计 信息技术 单片机 编程语言 编程

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18