单片机测量频率+c语言大全.docx

上传人:b****3 文档编号:2132433 上传时间:2022-10-27 格式:DOCX 页数:17 大小:351.08KB
下载 相关 举报
单片机测量频率+c语言大全.docx_第1页
第1页 / 共17页
单片机测量频率+c语言大全.docx_第2页
第2页 / 共17页
单片机测量频率+c语言大全.docx_第3页
第3页 / 共17页
单片机测量频率+c语言大全.docx_第4页
第4页 / 共17页
单片机测量频率+c语言大全.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机测量频率+c语言大全.docx

《单片机测量频率+c语言大全.docx》由会员分享,可在线阅读,更多相关《单片机测量频率+c语言大全.docx(17页珍藏版)》请在冰豆网上搜索。

单片机测量频率+c语言大全.docx

单片机测量频率+c语言大全

目录

第一篇:

51单片机C语言实验及实践教程_31.6位数显频率计数器

第二篇:

方波测频-频率计

第三篇:

单片机频率计程序

第四篇:

《单片机原理与应用》实验报告

 

51单片机C语言实验及实践教程_31.6位数显频率计数器

发布:

2009-4-0418:

07 |  作者:

孙青安 |  查看:

80次

1.     实验任务电子园51单片机学习网6fuM!

~Q?

{f2WY

利用AT89S51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。

要求能够对0-250KHZ的信号频率进行准确计数,计数误差不超过±1HZ。

电子园51单片机学习网!

p4{"L7o#?

:

trm/v)E@v

2.     电路原理图电子园51单片机学习网/NC)BA[

电子园51单片机学习网G2Y;O!

WF7C%Ua)cj

图4.31.1电子园51单片机学习网UF1vN]

 电子园51单片机学习网tj"y*mnm

3.     系统板上硬件连线电子园51单片机学习网nV3@DU#q]

(1).           把“单片机系统”区域中的P0.0-P0.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。

电子园51单片机学习网Y"oW0~"T)m#N

(2).           把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。

s7G0loPs"X41921

(3).           把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的WAVE端子上。

电子园51单片机学习网"av"qE(^N5I,E[s

4.     程序设计内容

*\$lg4^8Hy41921

(1).           定时/计数器T0和T1的工作方式设置,由图可知,T0是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的T0,最大计数值为fOSC/24,由于fOSC=12MHz,因此:

T0的最大计数频率为250KHz。

对于频率的概念就是在一秒只数脉冲的个数,即为频率值。

所以T1工作在定时状态下,每定时1秒中到,就停止T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理。

送到数码管显示出来。

(2).           T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20次,即可完成1秒的定时功能。

电子园51单片机学习网0E9r&K|R,NN

#include

unsignedcharcodedispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsignedchardispbuf[8]={0,0,0,0,0,0,10,10};

unsignedchartemp[8];电子园51单片机学习网Ui3A$@He+W

unsignedchardispcount;电子园51单片机学习网I

K"Sh2|a

unsignedcharT0count;

unsignedchartimecount;

bitflag;

unsignedlongx;电子园51单片机学习网Qk;sty)e9F.E@

voidmain(void)

{电子园51单片机学习网)u#h+N8O[%i^.I

unsignedchari;电子园51单片机学习网s:

\3D8e?

r3H,k)m

TMOD=0x15;电子园51单片机学习网c/v2Su0p$fYe

TH0=0;

TL0=0;

TH1=(65536-4000)/256;电子园51单片机学习网"^5da$KS

Ei-|#@

TL1=(65536-4000)%256;

TR1=1;

TR0=1;

ET0=1;电子园51单片机学习网v%k(k8o1v9i0a0as#|

ET1=1;电子园51单片机学习网BNl:

Sbn

EA=1;电子园51单片机学习网;`D"H8tF'}

while

(1)电子园51单片机学习网-\}n5N(v0Y

{

if(flag==1)电子园51单片机学习网ET4VnH~!

\1P

{电子园51单片机学习网s3K9_1JttN8k

flag=0;

x=T0count*65536+TH0*256+TL0;电子园51单片机学习网5I+r)|Gw[v

for(i=0;i<8;i++)

{

temp[i]=0;电子园51单片机学习网y+z*}1|6jS,v

}

i=0;

while(x/10)

{电子园51单片机学习网V'dk&l4|(V

temp[i]=x%10;电子园51单片机学习网|-YJgR9K|E

x=x/10;

i++;电子园51单片机学习网

^N:

Wz1R)x

}

temp[i]=x;

for(i=0;i<6;i++)

{

dispbuf[i]=temp[i];

}

timecount=0;电子园51单片机学习网?

jG%s]b

T0count=0;

TH0=0;

TL0=0;电子园51单片机学习网+A|+hmam

TR0=1;

}电子园51单片机学习网fEXPvye0p5E"Z

}

}

voidt0(void)interrupt1using0电子园51单片机学习网C3cZZ8~-kc_

{

T0count++;

}

voidt1(void)interrupt3using0

{

TH1=(65536-4000)/256;

TL1=(65536-4000)%256;

timecount++;

if(timecount==250)电子园51单片机学习网8UV;L&xKt

{电子园51单片机学习网Eag/OxB(wA

TR0=0;电子园51单片机学习网nN;w_R

timecount=0;

flag=1;

}电子园51单片机学习网;kZ9f0}&Z1[.WC

P0=dispcode[dispbuf[dispcount]];

P2=dispbit[dispcount];电子园51单片机学习网OM+G[#Z0c0o

dispcount++;

if(dispcount==8)电子园51单片机学习网J5Q3sovt

{

dispcount=0;

}电子园51单片机学习网l}[#?

:

O["hU3Y

}

方波测频-频率计

2009-02-1811:

15

完成功能:

用查询的方法测一个方波的频率,并送数码管显示(P3.3输入1HZ方波,T1(P3.5)输入fx)

测周期测频

说明:

这个题在做的时候,会出现一些问题,就是说当方波频率比较低的时候,会产生溢出,这样的数码管驱动就可能不对!

按照老师的方法,我这里加进了一个原本程序没有的中断程序,其中我用红色标注,这样程序就能记低频,希望大家能自己验证一下。

程序如下:

#include"at89x52.h"//头文件

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetv[]={0xfe,0xfd,0xfb,0xf7};

ucharcodea[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,0x7f,

0x6f,0x77,0x7c};

uchardataled[4];

unsignedlongintdataf;//定义长整形全局变量f

ints=0;

voiddelay(void)//延时函数

{

uinti;

for(i=0;i<100;i++);

}

ledxianshi()//显示函数,也就是数码管驱动

{

uchark,i;

led[0]=f/10000;//取万位数(可能不够,可加)

led[1]=f%10000/1000;//取千位数

led[2]=f%1000/100;//取百位数

led[3]=f%100/10;//取十位数

led[4]=f%10;//取个位数

for(k=0;k<4;k++)

{i=led[k];

P0=a[i];

if(k==1){P0|=0x80;}//固定在第2个数码管输出一个小数点

P2=tv[k];

delay();

}

}

voidkT1(void)interrupt3

{s++;

TF1=0;//溢出清零

TH1=0;//寄存器清零

TL1=0;//寄存器清零

}

voidmain()

{EA=1;//CPU开放中断

ET1=1;//允许T1中断

TMOD=0x10;//使T1工作在定时方式,用方式1

TH1=0;//寄存器清零

TL1=0;//寄存器清零

while

(1)

{while(P3_5==0);//等待一个低电平

while(P3_5==1);//等待一个高电平

TR1=1;//允许T1开始定时

while(P3_5==0);//等待一个低电平

while(P3_5==1);//等待一个高电平

TR1=0;//关定时定时器T1

f=(TH1<<8)+TL1+s*65536;//把T1定时送入变量f\

S=0;

f=100000000/f;//f=1000000L/f;//周期的倒数是频率

while

(1)//死循环

{ledxianshi();}

}

}

单片机频率计程序

2009-03-0313:

21

#include

//********数码管位代码表(P0口)**********//

unsignedcharcodedispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

//********数码管段代码表(P2口,共阴且高位接a,低位接h笔段)**********//  

unsignedcharcodedispcode[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,

                              0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00};

//********8位数据缓冲器**********//                                          

unsignedchardispbuf[8];            

unsignedchartemp[8];                 

unsignedchardispcount;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1