⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cymometer.c

📁 C51 数字频率计 C51 数字频率计 C51 数字频率计 C51 数字频率计
💻 C
字号:
/******************************************************************
  AT89S51的T0,T1计数器对输入的信号进行频率计数,测量结果用五位数码管
动态显示,要求对0~65KHZ的信号频率进行准确测量,误差不超过5HZ
*****************************************************************/
#include <reg51.h>
#define uint unsigned int
#define A 3
sbit P37=P3^7;
unsigned char num=0;
code unsigned char TAB[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
	/*显示变量对应的数值*/
/***************定时器0中断服务函数************************/
void timer0()interrupt 1{
	TH0=0x3C;
	TL0=0xB0;//定时50ms
	num++;//记到20就直接停止
	
}
/**************************延时函数************************************/
void delay(unsigned char t){
	unsigned char i,j;
	for(i=0;i<t;i++)
		for(j=0;j<125;j++);
}

/*************************显示函数**************************************/
void Display(){
    uint number;
	unsigned char B1,B2,B3,B4,B5;//定义数的各个位,万,千,百,十,个位
	number=TH1*256+TL1;
	B1=number/10000;//万位
	B2=number%10000/1000;//千位
	B3=number%1000/100;//百位
	B4=number%100/10;//十位
	B5=number%10;//个位
	while(1){
		if(P37==1) break;

		P2=0xFE;//显示个位
		P0=TAB[B5];
		delay(A);

		P2=0xFD;//显示十位
		P0=TAB[B4];
		delay(A);

		P2=0xFB;//显示百位
		P0=TAB[B3];
		delay(A);

		P2=0xF7;//显示千位
		P0=TAB[B2];
		delay(A);

		P2=0xEF;//显示万位
		P0=TAB[B1];
		delay(A);
	}
}

void main(){
		P0=TAB[0];//刚开始显示00000
		P2=0xC0;		
		TMOD=0x51;//T0 记时 T1计数
		TH0=0x3c;//定时50ms
		TL0=0xB0;
		TH1=0x00;//计数
		TL1=0x00;
		TR0=1; //开T0
		TR1=1;//开T1
		ET0=1;//开中断
		EA=1;//打开总中断
		while(1){
		if(num>=20){//记满一秒
			num=0;
			TR1=0;
			TR0=0;
			Display();						
			}
		if(P37==1) break;
		}
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -