?? 7 wave measure.c
字號(hào):
/************測(cè)低頻信號(hào)周期的一個(gè)程序***********/
// 經(jīng)過(guò)數(shù)學(xué)變換后就可以用來(lái)測(cè)頻率
// 思路:數(shù)一個(gè)周期中有多少個(gè)2ms,用count放這個(gè)計(jì)數(shù)值
// 當(dāng)然亦可數(shù)有多少個(gè)10ms,那樣精度稍差。
/**************************************/
#include<reg51.h>
//定義全局變量用于存放計(jì)算值
unsigned char count;
sbit int0=P3^2; //被測(cè)量信號(hào),當(dāng)然也可以接到其他的引腳
//下面兩個(gè)變量就是用來(lái) 切換數(shù)碼管的序號(hào) 和 存放顯示的數(shù)據(jù)
unsigned char n;
unsigned char d[4];
unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1}; //數(shù)碼管顯示選擇
unsigned char code tab[16]={0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,
7,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};
//顯示0--9;a--f;
/********十進(jìn)制到bcd碼轉(zhuǎn)換************/
void hextobcd (unsigned int hexs)
{
d[0]=hexs/1000;
hexs=hexs%1000;
d[1]=hexs/100;
hexs=hexs%100;
d[2]=hexs/10;
hexs=hexs%10;
d[3]=hexs;
}
/*********定時(shí)器初始化程序******/
void Init_Timer (void)
{
TMOD=0x11; //定時(shí)器1和定時(shí)器0都工作在16位定時(shí)器方式
EA=1; //cpu開中斷
ET0=1; //定時(shí)器0開中斷
ET1=1; //定時(shí)器1開中斷
TH1=(65536-1000)/256; //定時(shí)常數(shù)設(shè)置
TL1=(65536-1000)%256;
TR1=1;
}
/*********定時(shí)2毫秒*********/
void timer0(void) interrupt 1
{
count++; //計(jì)數(shù)
TH0=(65536-1843)/256; //設(shè)定定時(shí)常數(shù),定時(shí)2ms
TL0=(65536-1843)%256;
}
/********中斷顯示***********/
void timer1(void) interrupt 3
{
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
n=n++;
if(n>3) n=0;
P0=0; P2=digit[n];P0=tab[d[n]];
}
/********主函數(shù)********/
main()
{
unsigned int snumber; //周期 單位ms
Init_Timer();
while(1)
{
count=0;
TH0=(65536-1843)/256; //設(shè)定定時(shí)常數(shù),定時(shí)2ms
TL0=(65536-1843)%256;
while(int0==0) ; //測(cè)周期長(zhǎng)度
TR0=1;
while(int0==1) ;
while(int0==0) ;
TR0=0;
snumber=count*2; //計(jì)算出有幾個(gè)2ms,乘以2后得到周期。
hextobcd(snumber); //顯示出有幾個(gè)ms
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -