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

📄 1.1.c

📁 基于单片机的电子表与温度计
💻 C
字号:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint a,b,c,c1,d,x,y,xi,n,n0,
ke,ke0,kex,ke1,ke2,ke3,ke4,
ry,ry0,ry1,hf,hf0,hf1,hf2,
bian,ge,shi,bai,qian,q1,q2,
q3,q4,t,f,ke12,dian;
uchar code table[]={
0xa0,0xbb,0x62,0x2a,0x39,
0x2c,0x24,0xba,0x20,0x28};
void into()
{
	TMOD=0x22;
	EA=1;
	ET0=1;
	TR0=1;
	TH0=56;
	TL0=56;
	a=0;
	b=0;
	c=0;
	d=0;
	q1=0xf7;
	q2=0xfd;
	q3=0xfb;
	q4=0xfe;
	f=0xff;
	ke1=1;
	ke2=0;
	ke3=1;
	ke4=1;
	ry=280;
	hf=1290;
	xi=0;
	n=2008;
}
void delay(uint b)
{
	for(x=b;x>0;x--)
		for(y=30;y>0;y--);
}
void display()
{
	ge=xi%10;
	P0=q1;
	P2=table[ge];
	 delay(10);
	shi=xi%100/10;
  	P0=q2;
	P2=table[shi];
	 delay(10);
	bai=xi/100%10;
	P0=q3;
	P2=table[bai];
	 delay(10);
	qian=xi/1000;
  	P0=q4;
	P2=table[qian];
	 delay(10);
	if (dian)
	{
	 	if (c%2)
		{
			P0=0xf5;
			P2=0xdf;
		}	
		else
			P2=0xff;
    }
		dian=0;
}
void key()
{
	ke=P0&0xf0;
	if (ke==0xe0||ke==0xd0||ke==0xb0||ke==0x70)
		{
			delay(10);
			if (ke==0xe0||ke==0xd0||ke==0xb0||ke==0x70)
			{
				kex=ke;
				delay(500);
				ke0=P0&0xf0;
			}
		}
	switch(kex)
	{
		case 0xb0:	if (ke!=ke0)ke1++;break;
		case 0x70: if (ke!=ke0)ke2++;break;
		case 0xd0: if (ke!=ke0)ke3++;break;
		case 0xe0: if (ke!=ke0)ke4++;break;
	}
	kex=0;
	if (ke1>4)
	   ke1=1;
//	if (ke2>4)
	   ke2=0;
	switch(ke1)
	{
		case 1:xi=c1;break;
		case 2:xi=hf1,dian=1;break;
		case 3:xi=ry1;break;
		case 4:xi=n;break;
	}
	if (ke2>0)
	{
		switch(ke2)
		{
			case 1:	if (c%2)t=f,f=q1,q1=t;
					if (ke!=ke0&&ke==0xb0)ge++;
		        	if (ke!=ke0&&ke==0x70)ge--;break;
			case 2:	if (c%2)t=f,f=q2,q2=t;
					if (ke!=ke0&&ke==0xb0)shi++;
					if (ke!=ke0&&ke==0x70)shi--;break;
			case 3:	if (c%2)t=f,f=q3,q3=t;
					if (ke!=ke0&&ke==0xb0)bai++;
					if (ke!=ke0&&ke==0x70)bai--;break;
			case 4:	if (c%2)t=f,f=q4,q4=t;
					if (ke!=ke0&&ke==0xb0)qian++;
					if (ke!=ke0&&ke==0x70)qian--;break;
		}
		d=ge+shi*10+bai*100+qian*1000;
		xi=d;
		if (ke1!=0)
		{
			ke12=ke1+5;
			switch(ke12)
			{
				case 7:hf0=d;break;
				case 8:ry0=d;break;
				case 9:n0=d;break;
			}
		   	ke12=ke1-5;
		}
//	if (ke1!=0&&P1^3==0xf7)
		{
			ke12=ke1+5;
			switch(ke12)
			{
				case 6:c=d;break;
				case 7:hf=d;break;
				case 8:ry=d;break;
				case 9:n=d;break;
			}
			ke12=ke1-5;
		}
		ke1=0;
	}
}
void year()
{
       //if(c==3600)
		c=0;
	if (!(c%60))
		hf++;
    switch(ry/30)
	{
		case 1:   if (ry%60==32)ry=ry+28;break;
		case 2:   if (ry%60==30)ry=ry+30;break;
		case 3:   if (ry%60==32)ry=ry+28;break;
		case 4:   if (ry%60==31)ry=ry+29;break;
		case 5:   if (ry%60==32)ry=ry+28;break;
		case 6:   if (ry%60==31)ry=ry+29;break;
		case 7:   if (ry%60==32)ry=ry+28;break;
		case 8:   if (ry%60==32)ry=ry+28;break;
		case 9:   if (ry%60==31)ry=ry+29;break;
		case 10:  if (ry%60==32)ry=ry+28;break;
		case 11:  if (ry%60==31)ry=ry+29;break;
		case 12:  if (ry%60==32)ry=ry+28;break;
		default : ;
	}
	
	if(hf==24*60)
	{
		ry++;
		hf=0;
	}
	if (ry==365)
		n++;
} 
void time()
{
	if (n==n0&&ry1==ry0&&hf1==hf0)
	{
		P1=0xfe;
	}
	if (hf1!=hf0)
		P1=0xff;
}
void transfrom ()
{
	hf1=hf%10+hf%60/10*10+hf/60%10*100+hf/60/10*1000;
	c1=c%10+c%60/10*10+c/60%10*100+c/60/10*1000;
	ry1=ry%10+ry%60/10*10+ry/60%10*100+ry/60/10*1000;
}
void main()
{
	into();
	while(1)
	{
		year();
		key();
	    transfrom ();
		display();
		time();
	}
} 
void exter0() interrupt 1
{
	a++;
	if(a==4608)
			{
			c++;
			a=0;
			}			
}

⌨️ 快捷键说明

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