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

尽量写出每步的注释,如果程序正确,我在追加50分,请高手快进,急!!!!!!!!!!!!

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

邮箱地址:protel.2006@163.com
密码是protel
已将你要的文件发到该邮箱~ 请不要删除,谢谢!
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-06-04
网上多的是
http://www.baidu.com/s?ie=gb2312&bs=%B5%A5%C6%AC%BB%FA%CA%FD%D7%D6%C6%B5%C2%CA%BC%C6&sr=&z=&cl=3&f=8&tn=baidu&wd=%B5%A5%C6%AC%BB%FA%C6%B5%C2%CA%BC%C6%B3%CC%D0%F2&ct=0

#include <AT89X51.H>
//********数码管位代码表(P0口)**********//
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//********数码管段代码表(P2口,共阴且高位接a,低位接h笔段)**********//
unsigned char code dispcode[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,
0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00};
//********8位数据缓冲器**********//
unsigned char dispbuf[8];
unsigned char temp[8];
unsigned char dispcount;
unsigned char T0count;
unsigned char timecount;
bit flag;
unsigned long x;

//*********初始化模块**********//
void initial(void){
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
TR1=0;
TR0=0;
ET0=1;
ET1=1;
EA=1;
}
//******************************************************//

//*********显示模块**********//
void dataDisplay(){
unsigned char i;
for(i=0;i<8;i++){
temp[i]=0;
}
i=0;
while(x/10){
temp[i]=x%10;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i<8;i++){
dispbuf[i]=temp[i];
}
P2=dispcode[dispbuf[dispcount]];
P0=dispbit[dispcount];
dispcount++;
if(dispcount==8){
dispcount=0;
}
}
//******************************************************//

//*********信号频率测量模块**********//
float frequency(float freq){
initial();
TR0=1;TR1=1;
if(timecount==250){
TR0=0;
freq=T0count*65536+TH0*256+TL0;
return(freq);
}
}
//******************************************************//

//*********信号周期测量模块**********//
float cycle(float count){
initial();
if(P3_4==1){
TR0=1;TR1=1;
if(P3_4==0){
TR0=0;
count=1000000/(timecount*4000+TH1*256+TL1-61536);
}
}
return(count);
}
//******************************************************//

//*********定时中断服务程序1**********//
void t1(void) interrupt 3 using 0{
//initial();
//TR0=1;
//TR1=1;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
timecount++;
}
//******************************************************//

//*********定时中断服务程序2**********//
void t0(void) interrupt 1 using 0{
//initial();
//TR0=1;
//TR1=1;
T0count++;
}
//******************************************************//

//*********主函数**********//
void main(void){
while(1){
x=frequency(x);
if(x<100){
x=cycle(x);
}
dataDisplay();
}
}
//******************************************************//

51单片机的数字频率计
这里只进行了一个操作,t0++。所以,t0的值表示触发了几次中断,也就表示接受到的脉冲几次从0到65536。所以会有t0*65536。 另外,由于计时的机制是THO++、TL0++,所以,THOTL0就表示当前的计数值。THOTLO- 初值就可以确定没有触发中断定时多少。TH0*256==TH0*2^8,实质就是左移8位,就是拼接TH...

基于51单片机数字频率计论文
1.1 数字频率计的发展现状及研究概况 随着电子技术的飞速发展,各类分立电子元件及其所构成的相关功能单元,已逐步被功能更强大、性能更稳定、使用更方便的集成芯片所取代。由集成芯片和一些外围电路构成的各种自动控制、自动测量、自动显示电路遍及各种电子产品和设备。数字系统和数字设备已广泛应用于各个领域...

设计一个8051单片机四位LED现实的数字频率计
LCALL DISLED1 CLR P2.1

求51单片机设计数字频率计,附带Proteus仿真和程序
刚刚下了一楼传的附件,测试后发现精度和测量范围都比较差。如果单从测频的角度来说,51的频率计是很简单的。恰好几年前我写过类似的程序,是用来测频率和占空比的。理论上单用C52这单片机测频率最高为:12M\/12\/2=500KHZ。我写的这个程序可以同时测频率和脉宽,仿真下大概可以测到350KHZ;测脉宽好...

电气的大侠们帮帮忙,数字频率计的设计,小弟我感激不敬!
频率计是我们经常会用到的实验仪器之一,本实验要使用单片机和计数电路及液晶器件来设计一个宽频的频率计。期望达到10Hz-1.1G范围的频率精确测量。实验电路图(初步方案)1) 计数及显示电路:2)前置放大及分频电路:设计思路频率的测量实际上就是在1S时间内对信号进行计数,计数值就是信号频率。用单片机设计频率计通常采用...

数字频率计
数字频率计 20 基于51单片机的数字频率计,要求测量范围0-250k误差正负1hz谢谢两位,这几天忙着做课设,没空看了,现在已经完成!... 基于51单片机的数字频率计,要求测量范围0-250k 误差正负1hz谢谢两位,这几天忙着做课设,没空看了,现在已经完成! 展开  我来答 1个回答 #热议# 该不该让孩子很早学习...

六位数码管时钟
61.数字频率计毕业设计论文 62.基于单片机控制的电机交流调速毕业设计论文 63.楼宇自动化--毕业设计论文 64.车辆牌照图像识别算法的实现--毕业设计 65.超声波测距仪--毕业设计 66.工厂变电所一次侧电气设计 67.电子测频仪--毕业设计 68.点阵电子显示屏--毕业设计 69.电子电路的电子仿真实验研究 70....

简易数字频率计建议用51吗
题主是否想询问“简易数字频率计能用51单片机吗”?能。简易数字频率计用51单片机可实现1-450KHZ方波、正弦波、三角波信号的测量,测量迅速、精度高、显示直观、价格低廉,因此简易数字频率计能用51单片机。简易数字频率计是一种测量设备,可以对周期信号进行频率测量,通过显示设备将周期信号频率直观显示出来...

数字频率计设计LCD显示:测量函数信号发生器产生的方波频率,测量频率...
你的频率测量范围较宽,采用两个定时器的思路是对的。不过,没有必要限制在1S内对方波进行计数。一般思路是,对于较高频率的信号测量,采用固定时间T(不一定是1S)对脉冲数N进行计数,频率F=N\/T。对于较低频率的信号测量,对固定周期数的脉冲(脉冲数为N,N常取1或更大的数)进行计时(时间为T)...

单片机的数字频率测试仪量程最大是多少?
你好!我用51单片机做的频率计,采用12M晶振,最高可以测到 10M

相似回答