单片机测量频率+c语言大全Word文件下载.docx
- 文档编号:15050498
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:17
- 大小:351.08KB
单片机测量频率+c语言大全Word文件下载.docx
《单片机测量频率+c语言大全Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机测量频率+c语言大全Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
电子园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
定时/计数器T0和T1的工作方式设置,由图可知,T0是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的T0,最大计数值为fOSC/24,由于fOSC=12MHz,因此:
T0的最大计数频率为250KHz。
对于频率的概念就是在一秒只数脉冲的个数,即为频率值。
所以T1工作在定时状态下,每定时1秒中到,就停止T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理。
送到数码管显示出来。
T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20次,即可完成1秒的定时功能。
电子园51单片机学习网0E9r&
K|R,NN
#include<
reg52.h>
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;
6;
dispbuf[i]=temp[i];
timecount=0;
电子园51单片机学习网?
jG%s]b
T0count=0;
电子园51单片机学习网+A|+hmam
}电子园51单片机学习网fEXPvye0p5E"
Z
}
voidt0(void)interrupt1using0电子园51单片机学习网C3cZZ8~-kc_
{
T0count++;
voidt1(void)interrupt3using0
timecount++;
if(timecount==250)电子园51单片机学习网8UV;
L&
xKt
{电子园51单片机学习网Eag/OxB(wA
TR0=0;
电子园51单片机学习网nN;
w_R
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;
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开放中断
//允许T1中断
TMOD=0x10;
//使T1工作在定时方式,用方式1
while
(1)
{while(P3_5==0);
//等待一个低电平
while(P3_5==1);
//等待一个高电平
//允许T1开始定时
while(P3_5==0);
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
AT89X51.H>
//********数码管位代码表(P0口)**********//
//********数码管段代码表(P2口,共阴且高位接a,低位接h笔段)**********//
unsignedcharcodedispcode[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,
0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00};
//********8位数据缓冲器**********//
unsignedchardispbuf[8];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 测量 频率 语言 大全