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

📄 main.c

📁 51单片机简单频率计
💻 C
字号:
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
code unsigned char tab[]=
			{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
			//共阴数码管 0-9 
sbit fout=P1^0;
uchar Dis_2;//定义十位
uchar Dis_1; //定义个位
uchar Dis_4;//定义秒十位
uchar Dis_3; //定义秒个位
uchar flag_second;
uchar ToutCount;
uint f;
void delay(uchar cnt)
{
	while(--cnt);
}
void reflash()
{
	Dis_1=Dis_2=Dis_3=Dis_4=0;
	if(f<10000)
	{
		Dis_4=0x80;
	}
	else
	{
		f/=10;
		Dis_3=0x80;
	}
	Dis_1|=tab[f%10]; //个位显示处理
	f/=10;
	Dis_2|=tab[f%10];//十位显示处理
	f/=10;
	Dis_3|=tab[f%10]; //百位显示处理
	f/=10;
	Dis_4|=tab[f%10];//千位显示处理
}
void display()
{
	P2=0xfe;
	P0=Dis_4;//显示秒十位
	delay(0xff);//短暂延时
	P2=0xfd;
	P0=Dis_3; //显示秒个位
	delay(0xff);
	P2=0xfb;
	P0=Dis_2;//显示十位
	delay(0xff);//短暂延时
	P2=0xf7;
	P0=Dis_1; //显示个位
	delay(0xff);
	return;
}
main()
{
	ToutCount=0;
	TMOD = 0x52; //T1为计数器,方式一,T0为定时器,方式2
	TH0 = 6;   //定时250us
	TL0 = 6;
	TH1=0;
	TL1=0;
	TR0=1; //启动定时计数器 
	TR1=1;
	ET0 = 1;
	ET1 = 1;
	EA = 1;		   //开中断
	flag_second=1;
	while(1)
	{
		while(flag_second)
		{
			fout=~fout;
			display();
		}
		reflash();
		flag_second=1;
	}
}
		   
void timer0() interrupt 1	 //定时器0中断服务程序
{
	static uint count=0;
	count++;
	if(count == 4000)
	{
		TR1 = 0;
		TR0 = 0;
		f=((int)ToutCount<<16)+((int)TH1<<8)+TL1;
		TH1=0;TL1=0;
		ToutCount=0;
		TR1=1;
		count = 0;
		flag_second = 0;
		TR0 = 1;
	}
}
void timer1() interrupt 3  //定时器1中断服务程序
{
	ToutCount++;
}

⌨️ 快捷键说明

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