现在你再试试
#include<reg52h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0xff};
unsigned long k1,k2,k3,k4;
sbit P4=P2^4;
sbit P5=P2^5;
sbit P6=P2^6;
sbit P7=P2^7;
sbit P1_0 = P1^0;
uint count,c;
uchar flag = 0;
void delay()
{
uint x,y;
for(x=0;x<50;x++) for(y=0;y<10;y++);
}
void main(void)
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1 = 256-10;
TL1 = TH1;
TMOD=0x61;//定时1设置为计数方式 工作方式2
EA=1;
ET0=1;
ET1 = 1;
TR1 = 1;
TR0=1;
while(1)
{
if(flag == 1)
{
flag = 0;
k1=(count%10000)/1000;
k2=(count%1000)/100;
k3=(count%100)/10;
k4=count%10;
P0=table[k1];
P7=0;
delay();
P7=1;
P0=table[k2];
P6=0;
delay();
P6=1;
P0=table[k3];
P5=0;
delay();
P5=1;
P0=table[k4];
P4=0;
delay();
P4=1;
//c=0;
}
}
}
timer() interrupt 1 using 1 //定时器
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
P1_0 =~P1_0;//P1_0接一个反相器到T1 计数器通过外部引脚T0或T1输入技术脉冲
}
void t1() interrupt 3 using 0 //计数器T1
{
//while(++count == 10)
flag = 1;
}
刚刚下了一楼传的附件,测试后发现精度和测量范围都比较差。如果单从测频的角度来说,51的频率计是很简单的。恰好几年前我写过类似的程序,是用来测频率和占空比的。
理论上单用C52这单片机测频率最高为:12M/12/2=500KHZ。我写的这个程序可以同时测频率和脉宽,仿真下大概可以测到350KHZ;测脉宽好像10KHZ左右,再高的话脉宽的精度就会下降。测频精度在100KHZ以内,基本是2HZ;200K是5HZ;350KHZ以内是10HZ;最低测量频率1HZ。
仿真比较慢,数据要3秒后才会稳定,有兴趣的话自测吧。
50KHZ测量
100KHZ测量
300KHZ测量
我倒是51单片机做了一个频率计数器 我想的原理很简单 就是用单片机的T0做定时器定时50MS T1做计数器(把两个寄存器都装满 目的是为了来一个脉冲中断一次) 就是用把T0进入20次中断(刚好是1s)清除中断标志 停止T1计数 再查询T1中断了多少次 想要程序的加QQ:389496083
#include"reg51h"
#define uchar unsigned char
uchar tt;
void init();
void main(uchar t) //根据需要修改相应的值;
{
t=tt;
init();
while(1)
{
if(tt==t) //如果t==10,那么周期是1秒,即平率==1Hz;
{
tt=0;
P0^0=~P0^0; //设信号从P0_0口输出;
}
}
}
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //这里周期是100ms,你可以根据你的需要修改
EA=1;
ET0=1;
TR0=1;
}
void timer() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
建议你去"幸福校园"看看 里面有些样子 你可以参考
前言
传统的数字频率计都是采用纯硬件方式组成(纯数字电路)。它的集成电路(IC)用量较大,因而产品的体积、功耗都较大,生产成本较高。产品定型后不能升级(加入新功能)。而采用单片机和相关可编程智能集成器件制成的现代数字频率计方式情况就不同了,单片机的内核CPU可完成多项工作如计数、读入、译码、驱动和时基的产生等。和纯硬件方式比,它减少了很大一部分的集成电路的用量,还可加入许多的智能 *** 作,这更是纯硬件方式所望尘莫及的。
目前市场上的频率计产品很多,但基本上都是采用专用计数芯片(如ICM7240 , ICM7216) 和数字逻辑电路组成,由于这些芯片本身的工作频率不高(如ICM7240 仅有15MHz 左右) ,从而限制了产品的工作频率的提高, 远不能达到在一些特殊的场合需要测量很高的频率的要求,而且测量精度也受到芯片本身极大的限制。
自从80年代单片机引入我国之后,单片机已广泛地应用于各行各业的电子设计中,使频率计智能化水平在广度和深度上产生了质的飞跃,数字化也成为了电子设计的必由之路 运用单片机和高速计数器的组合设计频率计,并采用适当的算法取代传统电路,次方法不仅能解决传统频率计结构复杂、稳定性差、精度不高的弊端,而且性能也将大有提高,可实现精度较高、等精度和宽范围频率计的要求;随着单片机技术的不断发展,可以用单片机通过软件设计直接用十进制数字显示被测信号频率。本设计正是基于此技术进行的传统频率计技术改进。
以上就是关于修改下我的单片机c51程序,能实现4位的频率计全部的内容,包括:修改下我的单片机c51程序,能实现4位的频率计、求51单片机设计数字频率计,附带Proteus仿真和程序、51单片机频率计数。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)