一、用单片机的定时器设计一个频率计,并用发光二极管以二进制形式显示所测频率,单片机振荡频率为6MHZ。
二、硬件电路
三、C51程序
#include <reg51.h>
#define uchar unsigned char
uchar Counter;
void Time01_Init( void); //T0和T1初始化函数
void Time01_Init( )
{
TMOD=0X16; //T0计数状态、方式2,T1定时状态,方式1
TL0=0; //T0计数初值为0
TH0=0;
TH1=0X0B; //fosc=6MHZ,定时125ms溢出
TL1=0XDC;
EA=1;
ET1=1;
TCON|=0X50; //同时启动T0和T1
}
void main( )
{
uchar a;
Counter=8; //计数器初值为8
P1=0;
Time01_Init( );
while(1)
{
if(Counter==0) //1s定时到
{
TCON&=0X0F; //同时关闭T0和T1
a=TL0;
P1=~a; //频率值每位取反输出(二极管为共阳极接法)
Counter=8;
TL0=0;
TH0=0;
TH1=0X0B;
TL1=0XDC;
TCON|=0X50;
}
}
}
void Time1_ISR( ) interrupt 3 //T1中断服务函数
{
Counter--;
TH1=0X0B;
TL1=0XDC;
}
四、仿真
P3.4引脚输入的待测频率为50HZ,结果显示为50HZ,表示程序正确。