基于單片機(jī)的頻率計(jì)的C語(yǔ)言源代碼
本文是基于AT89C51單片機(jī)的頻率計(jì)的C源程序。該頻率計(jì)主要實(shí)現(xiàn)的功能有如下幾個(gè):
本文引用地址:http://cafeforensic.com/article/171002.htm1. 測(cè)試功能
它表明數(shù)字頻率計(jì)所具備的全部測(cè)試功能,一般包括測(cè)頻,周期,累計(jì)脈沖數(shù),頻率比,時(shí)間間隔及自較等功能。
2. 測(cè)量范圍
它說(shuō)明不同功能的有效測(cè)量范圍。如測(cè)頻率時(shí),測(cè)量范圍是數(shù)字頻率計(jì)處于正常工作條件下,被測(cè)信號(hào)的頻率范圍,一般用頻率的上,下限值表示,低端大部分從10HZ開(kāi)始;高端因不同的頻率計(jì)而異。因此高端頻率是確定低,中,高速計(jì)數(shù)器的依據(jù)。在測(cè)量周期時(shí),測(cè)量范圍常用周期的最大值,最小值表示。
3. 輸入特性
數(shù)字頻率計(jì)一般有2~3個(gè)輸入通道,測(cè)試不同項(xiàng)目時(shí),被測(cè)信號(hào)可經(jīng)不同的通道輸入儀器。輸入特性是表明數(shù)字式頻率計(jì)于被測(cè)信號(hào)源相連的一組特性參數(shù),通常包括以下幾個(gè)方面。
(1)輸入靈敏度。通常指儀器能正常工作的最小輸入電壓的有效值。常用的數(shù)字頻率計(jì)的靈敏度在100mV左右。
?。?)最大輸入電壓。指儀器所能允許的最大輸入電壓值,被測(cè)信號(hào)超過(guò)該值,則儀器不能保證正常工作,甚至?xí)p壞。
?。?)輸入耦合方式。儀器設(shè)置AC和DC兩種耦合方式。AC耦合時(shí),被測(cè)信號(hào)經(jīng)隔直電容輸入,DC耦合時(shí),被測(cè)信號(hào)直接進(jìn)入輸入電路。AC耦合時(shí)適用于測(cè)量帶有直流電平的信號(hào),DC耦合適用于低頻脈沖或階躍方波信號(hào)的測(cè)量。
?。?)輸入阻抗。為了減輕信號(hào)源的負(fù)載,數(shù)字式頻率計(jì)一般采用高頻輸入阻抗。輸入阻抗由輸入電阻和輸入電容兩部分組成。
4. 顯示及工作方式
它表明可顯示的內(nèi)容,顯示數(shù)字的位數(shù),所用的顯示器件以及一次測(cè)量完畢顯示測(cè)量結(jié)果的持續(xù)時(shí)間。有的還說(shuō)明電子計(jì)數(shù)器是“不記憶”顯示方式或“記憶”顯示方式。
5. 輸出
儀器可以直接輸出的標(biāo)準(zhǔn)頻率信號(hào)有幾種,而且可以表明輸出測(cè)量數(shù)據(jù)的編碼方式和輸出電平等。
C語(yǔ)言程序
#includereg52.h>
#include intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp[8]={0,0,0,0,0,0,0,0};
uchar temp1[8]={0,0,0,0,0,0,0,0};
uchar T1count,timecount,T1count1,timer,yushu,yushu1;
long fre,frx;
float zhou;
bit flag;
bit flag1;
void delay(uchar);
bit result;
sbit ird=P1^1;
sbit id=P1^0;
sbit clr=P1^2;
sbit en=P1^5;
sbit rw=P1^6;
sbit rs=P1^7;
sbit rd=P3^7;
sbit kb=P1^3;
sbit kx=P1^4;
sbit A0=P3^6;
sbit A1=P3^7;
bit start;
uchar code tab1[]=fre: ;
uchar code tab2[]=frx: ;
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
panduan_bz()
{
rs = 0;
rw = 1;
en = 1;
result = (bit)(P20x80);
en = 0;
return(result);
}
void write_com(uchar com)
{
while(panduan_bz());
rs = 0;
rw = 0;
en = 0;
P2=com;
delay(5);
en = 1;
delay(5);
en = 0;
}
void write_dat(uchar dat)
{
while(panduan_bz());
rs = 1;
rw = 0;
en = 0;
P2=dat;
delay(5);
en = 1;
delay(5);
en = 0;
}
void init()
{
uchar num;
en = 0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num16;num++)
{
write_dat(tab1[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num16;num++)
{
write_dat(tab2[num]);
delay(5);
}
}
void init1()
{
ird=1;
id=1;
TMOD=0x55;
TH1=0;
TL1=0; //初值為0
TH0=0;
TL0=0;
TR0=1;
TR1=1;
IE=0x8a;
RCAP2H=(65536-47850)/256; //重裝載計(jì)數(shù)器賦初值
評(píng)論