文档库

最新最全的文档下载
当前位置:文档库 > 51单片机测频率(C语言)

51单片机测频率(C语言)

基于51单片机测方波频率

用单片机的定时器和外部中断资源,将定时器设置为一秒定时,信号接到INT0,设置为下降沿触发。在一秒内计算外部中断的次数即为方波的频率。

源程序:

#include

#define uint unsigned int

#define uchar unsigned char

sbit q=P2^3;

sbit b=P2^2;

sbit s=P2^1;

sbit g=P2^0;

sbit flog=P2^4;

int num=0;int t=0;int count=0;

uchar code table0[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90};

void delay(int k)

{

int i,j;

for(i=0;i

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

}

void init()

{

TMOD=0x01; //定义T0定时方式1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

IT0=1;

EX0=1;

TR0=1;

ET0=1;

EA=1;

}

void inter0() interrupt 0

{

count++;

}

void timer0() interrupt 1

{

t++;

if(t==20)

{

t=0;

num=count;

count=0;

}

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

}

void display(int n)

{

int ge,shi,bai,qian;

if(n>=1000)

{

flog=0;

qian=(n/1000)/1000;

bai=((n/1000)/100)-10*qian;

shi=((n/1000)%100)/10;

ge=(n/1000)%10;

}

else

{

flog=1;

qian=n/1000;

bai=(n/100)-10*qian;

shi=(n%100)/10;

ge=n%10;

}

q=b=s=g=1;

q=0;b=s=g=1;

P0=table0[qian];

delay(4);

q=b=s=g=1;

b=0;q=s=g=1;

P0=table0[bai];

delay(4);

q=b=s=g=1;

s=0;q=b=g=1;

P0=table0[shi];

delay(4);

q=b=s=g=1;

g=0;q=b=s=1;

P0=table0[ge];

delay(4);

}

void main()

{

init();

while(1)

display(num); }