標題:
頻率計
[打印本頁]
作者:
chenshijin
時間:
2017-11-15 09:31
標題:
頻率計
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint ff; //接受頻率值
uchar start=1; //定時器,計數(shù)模式啟動變量
code uchar tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
code uchar seg[]={0X00,0X04,0X08,0X0C,0X10,0X14,0X18,0X1C};
void delay(k)
{
while(k--);
}
void display_1(uchar yi) //數(shù)值顯示函數(shù)
{
P2=0x00; // 1100-0000
P0=tab[yi]; //數(shù)碼管顯示
delay(500);
}
void display_2(uchar er)
{
P2=0x04; //
P0=tab[er]; //數(shù)碼管顯示
delay(500);
}
void display_3(uchar san)
{
P2=0xc08; //
P0=tab[san]; //數(shù)碼管顯示
delay(500);
}
void display_4(uchar si)
{
P2=0x0c; //
P0=tab[si]; //數(shù)碼管顯示
delay(500);
}
void time0_init() //定時器初始化
{
TMOD|=0x01; //定時器0 定時模式 計數(shù)范圍65536
TH0=0x3c; //定時初值50ms
TL0=0xb0;
TR0=0; //暫停定時器0
}
void time1_init() //計數(shù)器初始化
{
TMOD|=0x50; //定時器1 計數(shù)模式,計數(shù)范圍65536
TH1=0; //計數(shù)初值0
TL1=0;
TR1=0; //暫停計數(shù)器
}
void str_init()
{
EA=1;
ET0=1;
}
void time0_event() interrupt 1 //定時器中斷
{
static uchar i;
i++;
TH0=0x3c; //定時初值50ms
TL0=0xb0;
if(i==20) //循環(huán)20次為1秒
{
i=0;
TR1=0; //停止計數(shù)
TR0=0; //停止定時
ff=(TH1*256+TL1); //求出頻率值 就是1秒內(nèi)脈沖次數(shù)
TH1=0; //計數(shù)值清零
TL1=0;
TH0=0x3c; //定時初值50ms
TL0=0xb0;
start=1; //啟動定時器開啟變量
}
}
void main()
{ uint yi,er, san, si;
uchar i,j;
uint ss[5];
time0_init(); //定時器初始化
time1_init();
str_init(); //開中斷
while(1)
{
if(start==1)
{
TR0=1; //啟動定時器
TR1=1; //啟動計數(shù)器
start=0; //關閉啟動變量位 保證1秒時間
}
i=0;
do
{
ss[i]=ff%10;
i++;
}while(ff/=10);
yi=ss[0];
er=ss[1];
san=ss[2];
si=ss[3];
while(1)
{
display_1(yi);
display_2(er);
display_3(san);
display_4(si);
}
}
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1