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

📄 time.c

📁 超精确时钟MCS-51程序
💻 C
字号:
#include"reg51.h"
#define uchar unsigned char 
#define uint unsigned int 
#include<intrins.h>
sbit ws1=P2^7;
sbit ws2=P2^6;
sbit ws3=P2^5;
sbit ws4=P2^4;
sbit FM=P3^7;
uchar BUFFER[4];
uchar BUFFER1[4];
uchar code display_taber[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code display_taber1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uchar flag;
uchar i,j,n,p,q;
uchar num;
uchar recode;

void inint()
{
	i=0;
	j=0;
	q=0;
	p=0;
	flag=0;
	TMOD=0x11;
	EA=1;
	ET0=1;
	ET1=1;
	TH0=(65536-5000)/256;
	TL0=(65536-5000)%256;
	TH1=(65536-50000)/256;
	TL1=(65536-50000)%256;
	
}

void timer0() interrupt 1
{
	TH0=(65536-5000)/256;
	TL0=(65536-5000)%256;
	q++;
	recode++;
	if(flag==0)
	{
		switch(p)
		{
			case 0:ws1=1;ws2=0;ws3=0;ws4=0;P0=display_taber[BUFFER[0]];break;
			case 1:ws1=0;ws2=1;ws3=0;ws4=0;
					if(q<=100) 
					{
						P0=display_taber[BUFFER[1]];
					}
					if(q>=101)
					{
						P0=display_taber1[BUFFER[1]];
					}
					if(q==200)
					{
						q=0;
					}
					break;
			case 2:ws1=0;ws2=0;ws3=1;ws4=0;P0=display_taber[BUFFER[2]];break;
			case 3:ws1=0;ws2=0;ws3=0;ws4=1;P0=display_taber[BUFFER[3]];break;
			default:break;
		}
	}
		
	if(flag==1)
	{
		if(j<=3)
		{
			switch(p)
			{
				case 0:ws2=0;ws3=0;ws4=0;
						if(i==0)
						{
							if(q<=100)
								ws1=1;
							if(q>=101)
								ws1=0;
							if(q==200)
								q=0;
						}
						if(i!=0)
							ws1=1;
						P0=display_taber[BUFFER[0]];break;
				case 1:ws1=0;ws3=0;ws4=0;
						if(i==1)
						{
							if(q<=100)
								ws2=1;
							if(q>=101)
								ws2=0;
							if(q==200)
								q=0;
						}
						if(i!=1)
							ws2=1;
						P0=display_taber[BUFFER[1]];break;
				case 2:ws1=0;ws2=0;ws4=0;
						if(i==0)
						{
							if(q<=100)
								ws3=1;
							if(q>=101)
								ws3=0;
							if(q==200)
								q=0;
						}
						if(i!=0)
							ws3=1;
						P0=display_taber[BUFFER[2]];break;
				case 3:ws1=0;ws2=0;ws3=0;
						if(i==0)
						{
							if(q<=100)
								ws4=1;
							if(q>=101)
								ws4=0;
							if(q==200)
								q=0;
						}
						if(i!=0)
							ws4=1;
						P0=display_taber[BUFFER[3]];break;
				default:break;
			}
		}
			if(j>=4)
		{
			switch(p)
			{
				case 0:ws2=0;ws3=0;ws4=0;
						if(i==0)
						{
							if(q<=100)
								ws1=1;
							if(q>=101)
								ws1=0;
							if(q==200)
								q=0;
						}
						if(i!=0)
							ws1=1;
						P0=display_taber[BUFFER1[0]];break;
				case 1:ws1=0;ws3=0;ws4=0;
						if(i==1)
						{
							if(q<=100)
								ws2=1;
							if(q>=101)
								ws2=0;
							if(q==200)
								q=0;
						}
						if(i!=1)
							ws2=1;
						P0=display_taber[BUFFER1[1]];break;
				case 2:ws1=0;ws2=0;ws4=0;
						if(i==0)
						{
							if(q<=100)
								ws3=1;
							if(q>=101)
								ws3=0;
							if(q==200)
								q=0;
						}
						if(i!=0)
							ws3=1;
						P0=display_taber[BUFFER1[2]];break;
				case 3:ws1=0;ws2=0;ws3=0;
						if(i==0)
						{
							if(q<=100)
								ws4=1;
							if(q>=101)
								ws4=0;
							if(q==200)
								q=0;
						}
						if(i!=0)
							ws4=1;
						P0=display_taber[BUFFER1[3]];break;
				default:break;
			}
		}
	}
	p++;
	if(p==4)
		p=0;
}
void timer1() interrupt 3
{
	TH1=(65536-50000)/256;
	TL1=(65536-50000)%256;
	n++;
}


void display_time()
{
	TR0=1;

}
void delay()
{
	uint z;
	for(z=0;z<=300;z++);
}
void movdata_time()
{
	uchar sccode;
	sccode=num;
	if(sccode==1)
	{	
		i++;
		j++;
		if(i==4)
			i=0;
		if(j==8)
		{
			j=0;
			flag=0;
		}
	}
	if(sccode==2)
		BUFFER[i]=0;
	if(sccode==3)
	{
		if(j<=3)
		{
			BUFFER[i]++;
			if(BUFFER[0]>=2)
				BUFFER[0]=2;
			if(BUFFER[0]==2)
			{
				if(BUFFER[1]>=4)
					BUFFER[1]=4;
			}
			if(BUFFER[2]>=5)
				BUFFER[2]=5;
			if(BUFFER[i]>=10)
				BUFFER[i]=0;			
		}
		if(j>=4)
		{
			BUFFER1[i]++;
			if(BUFFER1[0]>=2)
				BUFFER1[0]=2;
			if(BUFFER1[0]==2)
			{
				if(BUFFER1[1]>=4)
					BUFFER1[1]=4;
			}
			if(BUFFER1[2]>=5)
				BUFFER1[2]=5;
			if(BUFFER1[i]>=10)
				BUFFER1[i]=0;			
		}
	}	
	if(sccode==4)
	{
		if(j<=3)
		{
			BUFFER[i]--;
			if(BUFFER[0]>=2)
				BUFFER[0]=2;
			if(BUFFER[0]==2)
			{
				if(BUFFER[1]>=4)
					BUFFER[1]=4;
			}
			if(BUFFER[2]>=5)
				BUFFER[2]=5;
			if(BUFFER[i]<=0)
				BUFFER[i]=0;
		}
		if(j>=4)
		{
			BUFFER1[i]--;
			if(BUFFER1[0]>=2)
				BUFFER1[0]=2;
			if(BUFFER1[0]==2)
			{
				if(BUFFER1[1]>=4)
					BUFFER1[1]=4;
			}
			if(BUFFER1[2]>=5)
				BUFFER1[2]=5;
			if(BUFFER1[i]<=0)
				BUFFER1[i]=0;
		}
	}
	if(sccode==5)
	{
		flag=1;
		num=0;
	}	
}
void read_key()
{
	uchar temp;
	P1=0xf0;
	if ((P1&0xf0)!=0xf0)
	{
		if(recode>=1)
		{
			recode=0;
			P1=0xfe;
	      temp=P1;
	      temp=temp&0xf0;
	      while(temp!=0xf0)
	      {
	      	delay();
	         temp=P1;
	         temp=temp&0xf0;
	         while(temp!=0xf0)
	        	{
	         	temp=P1;
	            switch(temp)
	        		{
	            	case 0xee:num=1;break;
	               case 0xde:num=2;break;
	               case 0xbe:num=3;break;
	               case 0x7e:num=4;break;
						default:break;
	        		}
					while(temp!=0xf0)
					{
	            	temp=P1;
	               temp=temp&0xf0;
	        		}
				}
			}
	
			P1=0xfd;
			temp=P1;
	      temp=temp&0xf0;
	      while(temp!=0xf0)
			{
	       	delay();
				temp=P1;
				temp=temp&0xf0;
	         while(temp!=0xf0)
	        	{
	         	temp=P1;
	            switch(temp)
	        		{
	            	case 0xed:num=5;break;
	               case 0xdd:num=6;break;
						case 0xbd:num=7;break;
						case 0x7d:num=8;break;
						default:break;
	
	        		}
					while(temp!=0xf0)
					{
						temp=P1;
	               temp=temp&0xf0;
	        		}
	        	}
			}
			P1=0xfb;
	      temp=P1;
	      temp=temp&0xf0;
	      while(temp!=0xf0)
			{
	      	delay();
				temp=P1;
	         temp=temp&0xf0;
	         while(temp!=0xf0)
	        	{
	         	temp=P1;
	            switch(temp)
	        		{
	            	case 0xeb:num=9;break;
	               case 0xdb:num=10;break;
						case 0xbb:num=11;break;
	               case 0x7b:num=12;break;
						default:break;
	
	        		}
	            while(temp!=0xf0)
	        		{
	            	temp=P1;
	               temp=temp&0xf0;
	        		}
	        	}
			}
	
			P1=0xf7;
	      temp=P1;
	      temp=temp&0xf0;
	      while(temp!=0xf0)
	      {
	      	delay();
	         temp=P1;
	         temp=temp&0xf0;
	         while(temp!=0xf0)
	        	{
	         	temp=P1;
	            switch(temp)
	        		{
	            	case 0xe7:num=13;break;
	               case 0xd7:num=14;break;
	               case 0xb7:num=15;break;
	               case 0x77:num=16;break;
	        		}
	        	}
				while(temp!=0xf0)
				{
	           	temp=P1;
	            temp=temp&0xf0;
	       	}
			}
		}
	movdata_time();
	}
}

void action_time()
{
	uchar second,minute,hour;
	minute=BUFFER[3]+BUFFER[2]*10;
	hour=BUFFER[1]+BUFFER[0]*10;
	if(flag==0)
	{
		TR1=1;
		if(n==19)
		{
			second++;
			n=0;
		}
		if(second==60)
		{
			minute++;
			second=0;
			n=0;
			BUFFER[3]=minute%10;
			BUFFER[2]=minute/10;
			BUFFER[1]=hour%10;
			BUFFER[0]=hour/10;
			if(BUFFER[0]==BUFFER1[0])
			{
				if(BUFFER[1]==BUFFER1[1])
				{
					if(BUFFER[2]==BUFFER1[2])
					{
						if(BUFFER[3]==BUFFER1[3])
							FM=1;
					}
				}
			}
		}
		if(minute==60)
		{
			hour++;
			minute=0;
			second=0;
			n=0;
			BUFFER[3]=minute%10;
			BUFFER[2]=minute/10;
			BUFFER[1]=hour%10;
			BUFFER[0]=hour/10;
			FM=1;
		}
		if(hour==24)
		{
			hour=0;
			minute=0;
			second=0;
			n=0;
			BUFFER[3]=minute%10;
			BUFFER[2]=minute/10;
			BUFFER[1]=hour%10;
			BUFFER[0]=hour/10;
		}
	}
}

main()
{
	inint();
	display_time();
	while(1)
	{
		read_key();
		action_time();
	}
}

⌨️ 快捷键说明

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