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

📄 clock0510.c

📁 1. 一秒定时的实现。 设定定时器每100us中断一次
💻 C
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

uint fen,miao,temp,fengao,fendi,miaogao,miaodi;
uchar button_select;
uint flag_tiaoshi=0,flag_xuanwei=0;
long count,spark;
uint button=0;

sbit dula=P2^6;
sbit wela=P2^7;
sbit tiaoshi=P3^4;
sbit xuanwei=P3^5;
sbit caozuo=P3^6;

uchar code tabledu[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00
};

display(uchar,uchar,uchar,uchar);
void clock();
delay(uchar);
uchar scan();
void operate(uchar);
void spark_fun();
void initial();

void main()
{
	initial();
	while(1)
		{		
			clock();
			button_select=scan();
			operate(button_select);
			spark_fun();
	   		display(fengao,fendi,miaogao,miaodi);		
		}
}
void clock()
{
	if(count>=20)
				{	
					count=0;
					miao++;
					if(miao>=60)
					{
						miao=0;
						fen++;
						if(fen>=60)
						{
							fen=0;
						}
					}			
				}
	else ;
}
uchar scan()
{	
		if(tiaoshi==0)
		   {
				 delay(250);	 
				 if(tiaoshi==0)
				 button=1;
				 while(!tiaoshi);
 		   }

		else if(xuanwei==0)
		   {
				 delay(250);	 
				 if(xuanwei==0)
				 button=2;
				 while(!xuanwei);
 		   }

		else if(caozuo==0)
		   {
				 delay(250);	 
				 if(caozuo==0)
				 button=3;
				 while(!caozuo);
 		   }
		else button=0;

		return button;
}

void tim1() interrupt 3
{
	TH1=(65536-50000)/256;
	TL1=(65536-50000)%256;
	count++;
}

void tim0() interrupt 1
{
	TH1=(65536-50000)/256;
	TL1=(65536-50000)%256;
	spark++;
}

void spark_fun()
{
	if(flag_tiaoshi==1)
		{
			   	TR1=0;
			   	TR0=1;
			   	spark=0;
			   		if(flag_tiaoshi==1&&flag_xuanwei==3&&spark>=10)
							{
								fengao=16;
								if(spark>=20)
								{
									spark=0;
									fengao=fen/10;
								}
							}
						else
						if(flag_tiaoshi==1&&flag_xuanwei==2&&spark>=10)
							{
								fendi=16;
								if(spark>=20)
									{
										spark=0;
										fendi=fen%10;
									}
							}
						else
						if(flag_tiaoshi==1&&flag_xuanwei==1&&spark>=10)
							{
								miaogao=16;
								if(spark>=20)
									{
										spark=0;
										miaogao=miao/10;
									}
							}
						else
						if(flag_tiaoshi==1&&flag_xuanwei==0&&spark>=10)
							{
								miaodi=16;
								if(spark>=20)
									{
										spark=0;
										miaodi=miao%10;
									}
							}
							
		}
	
}

display(uchar fenshi,uchar fenge,uchar miaoshi,uchar miaoge)
{

	P0=tabledu[fenshi];
	dula=1;
	dula=0;
	P0=0xfe;
	wela=1;
	wela=0;
	delay(1);

	P0=tabledu[fenge];
	dula=1;
	dula=0;
	P0=0xfd;
	wela=1;
	wela=0;
	delay(1);

	P0=tabledu[miaoshi];
	dula=1;
	dula=0;
	P0=0xfb;
	wela=1;
	wela=0;
	delay(1);

	P0=tabledu[miaoge];
	dula=1;
	dula=0;
	P0=0xf7;
	wela=1;
	wela=0;
	delay(1);
}

void operate(uchar y)
{
	fengao=fen/10;
	fendi=fen%10;
	miaogao=miao/10;
	miaodi=miao%10;
	switch(y)
	{
		case 0: ;break;
		case 1:
				if(flag_tiaoshi==1)
			   		{
			   			flag_tiaoshi=0;
							initial();
							break;
						}
			  else 
			   		{
					   	flag_tiaoshi=1;
					  }					
		break;
		case 2:
					{
						 if(flag_tiaoshi==1)			 		
							{
						 		flag_xuanwei++;
								if(flag_xuanwei==4)
							 		flag_xuanwei=0;
							}
					 }
		break;
		case 3:
						if(flag_tiaoshi==1)
					{
				 		switch(flag_xuanwei)
						{
							case 0:	temp=miao;miao=miao+1;if(temp/10<miao/10)miao=(miao/10-1)*10+miao%10;break;
							case 1:	miao=miao+10;if(miao>59)miao=miao-60;break;
							case 2:	temp=fen;fen=fen+1;if(temp/10<fen/10)fen=(fen/10-1)*10+fen%10;break;
							case 3:	fen=fen+10;if(fen>59)fen=fen-60;break;
						}
					}
		break;	
	}
}

delay(uchar x)
{
	uchar a,b;
	for(a=x;a>0;a--)
		for(b=255;b>0;b--);	
}

void initial()
{
	EA=1;
	ET1=1;
	ET0=1;
	TMOD=0x11;
	TH1=(65536-50000)/256;
	TL1=(65536-50000)%256;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;	
	TR1=1;
	TR0=0;	
}

⌨️ 快捷键说明

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