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

📄 出租车计价器程序.c

📁 刚学时编的小程序
💻 C
字号:
#include <AT89X51.H>

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x40,0x00,0xbf,0x86,
0xdb,0xcf,0xe6,0xed,
0xfd,0x87,0xff,0xef};
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char dispbuf[8]={0,0,16,0,0,16,0,0};
unsigned char lc[8]={0,0,0,16,16,0,18,0};
unsigned char jia[8]={2,19,17,0,19,17,5,20} ;
unsigned char zong[8]={0,18,17,17,17,0,18,0} ;
unsigned char mima[8]={16,16,16,16,16,16,16,16} ;
unsigned char mima1[8]={1,2,3,4,5,6,7,8};
unsigned char lu,x,y,cuo=0,hour1,w=0,m=0,n;
int i;
unsigned char dispbitcnt;
char second;
char minite;
char hour;
unsigned int tcnt,tcnt2;
unsigned char mstcnt,a,c;
sbit k0=P1^0;
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
bit k=0;

delay(int t)
{
	int s,e;
	for(s=0;s<t;s++)
		for(e=0;e<100;e++);
}

tiaoshi()
{	
	if(w==1)
	goto loop;
	k=1;
	for(i=7;i>0;i=i-3)
	{
		while(1)
		{	
			 if(erjian()==1)
			 {
				if(i==7)
				{
					  hour++;
					  if(hour==24)
					  hour=0;
				}
				if(i==4)
				{
					minite++;
					if(minite==60)
					minite=0;
				}
				if(i==1)
				{
					second++;
					if(second==60)
					second=0;
				}
			 }
			 if(shangjian()==1)
			 {
			 	if(i==7)
				{
					  hour--;
					  if(hour<0)
					  hour=23;
				}
				if(i==4)
				{
					minite--;
					if(minite<0)
					minite=59;
				}
				if(i==1)
				{
					second--;
					if(second<0)
					second=59;
				}	
			 }
			if(yijian()==1)		 break;
		}
	   	if(yijian()==1)		 break;
	}
	k=0;
	loop:1;
}		   

lucheng()
{
	TR1=1;
	a=1;
	while(1)
	{
		if(yijian()==1)
		{
			a=3;
		}
		if(erjian()==1)
		{
			TR1=~TR1;
		}
		if(shangjian()==1)
		{
			k=~k;
			if(k==1)
			{
				TR1=0;
				a=4;
			}
			if(k==0)
			{
				a=0;
				lc[5]=0;
				lc[6]=18;
				lc[7]=0;
				zong[0]=18;
				zong[1]=0;
				zong[5]=0;
				zong[6]=18;
				zong[7]=0;
				break;
			} 
		}
	}
}

gaijia()
{
	a=2;
	i=8;
	while(1)
	{
		if(shangjian()==1)
		goto loop;
		if(erjian()==1)
		{
			if(mi()==1)	{a=2;	break; }
			else {a=0;goto loop;}	 
		}
		if(yijian()==1)
		{
			gaimi();
			goto loop;
		}
	}	
	for(i=7;i>=0;i--)
	{
		if(i==5|i==2)	continue;
		if((i==7|i==4|i==1)&jia[i]<18)  jia[i]=18;
		while(1)
		{	
			 if(shangjian()==1)
			 {
					  
					  jia[i]--;
					  if(jia[i]<0|jia[i]<18)
					  jia[i]=jia[i]+10;
			 }
			 if(erjian()==1)
			 {
					  
					  jia[i]++;
					  if(jia[i]==10|jia[i]==28)
					  jia[i]=jia[i]-10;
			 }
			if(yijian()==1)		 break;
		}
	   	if(yijian()==1)		 break;
	}
	loop:1;
	a=0;
	i=0;
}

mi()
{
	char h; 
	if(w==1)
	{goto loop;}
	a=5;
	for(i=7;i>=0;i--)
	{
		while(1)
		{
			  if(erjian()==1)
			  {
			  	  mima[i]++;
				  if(mima[i]>9) mima[i]=0;
			  }
			  if(yijian()==1)
			  break;
		}
	}
	for(i=0;i<=7;i++)
		if(mima[i]!=mima1[i])  break;
		
	if(i<=7)
	{
		cuo++;
		if(cuo>=3)
		{
			cuo=0;
			w=1;
		}
		h=0;
	}
    else	h=1;
	for(i=7;i>=0;i--)
	{
		mima[i]=16;
	} 
	loop:if(w==1) return 0;
	return h;
}

gaimi()
{
	if(w==1)
	{goto loop;}
	if(mi()==1)
	{
		a=6;
		for(i=7;i>=0;i--)
		{
			while(1)
			{
			  if(erjian()==1)
			  {
			  	  mima1[i]++;
				  if(mima1[i]>9) mima1[i]=0;
			  }
			  if(yijian()==1)
			  break;
			}
		}
	}
	loop:if(w==1) return 0;
}

yijian()
{
	char q=0;
	if(k0==0)
		{
			 delay(2);
			 if(k0==0)
			 {
			 	q=1;	
				while(1)	if(k0==1)  break;
			 }
		}
	return q;
}

erjian()
{
	char q=0;
	if(k1==0)
		{
			 delay(2);
			 if(k1==0)
			 {
			 	q=1;
				while(1)	if(k1==1)  break;
			 }
		}
	return q;
}

shangjian()
{
	char q=0;
	if(k2==0)
		{
			 delay(2);
			 if(k2==0)
			 {
			 	q=1;
				while(1)	if(k2==1)  break;
			 }
		}
	return q;
}

kaiguan()
{
	char q=0;
	if(k3==0)
		{
			 delay(2);
			 if(k3==0)
			 {
			 	q=1;
			 }
		}
	return q;
}



void main()
{
	TMOD=0x42;												
	TH0=0x06;
	TL0=0x06;
	TH1=7192;
	TL1=7192;								
	TR0=1;												
	ET0=1;												
	ET1=1;
	EA=1;
	P0=dispcode[dispbuf[dispbitcnt]]	;
	P2=dispbitcode[dispbitcnt]	  ;
	while(1)
	{	
		if(yijian()==1)						
		{
			tiaoshi();
		} 	 
		if(erjian()==1)						
		{
			 lucheng();
		} 
		if(shangjian()==1)					 
		{
			gaijia();
		}
		if(kaiguan()==1)					  
		{
			m=1;
		}
		
	//	if(hour1==minite-2)
	//	{
	//	 	w=0;
	//	}
	}
}

void t0(void) interrupt 1 using 1						
{
	mstcnt++;
	if(mstcnt==8)
	{
		mstcnt=0;
		switch(a)
		{	
			case 0:	if((i==dispbitcnt|(i-1)==dispbitcnt)&i>0)
					{
						if(tcnt<1500)
						{
							 P0=dispcode[17];
						}
						else P0=dispcode[dispbuf[dispbitcnt]]	;
						break;
					}	 	
					else   P0=dispcode[dispbuf[dispbitcnt]]	; break;
			case 1: P0=dispcode[lc[dispbitcnt]];      break;
			case 2:	if(i==dispbitcnt&i>=0)
					{
						if(tcnt<1500)
						{
							 P0=dispcode[17];
						}
						else P0=dispcode[jia[dispbitcnt]] ;    break;
					}	 	
					else   P0=dispcode[jia[dispbitcnt]] ;    break;
			case 3: if(dispbuf[1]%2==1)	
					{
						P0=dispcode[lc[dispbitcnt]]	;	 break;
					}	 
					else 	P0=dispcode[zong[dispbitcnt]]	; break;
			case 4:	P0=dispcode[zong[dispbitcnt]]	; break;
			case 5: if(i==dispbitcnt&i>=0)
					{
						if(tcnt<1500)
						{
							 P0=dispcode[17];
						}
						else P0=dispcode[mima[dispbitcnt]]	;
						break;
					}	 	
					else   P0=dispcode[mima[dispbitcnt]]	; break;
			case 6: if(i==dispbitcnt&i>=0)
					{
						if(tcnt<1500)
						{
							 P0=dispcode[17];
						}
						else P0=dispcode[mima1[dispbitcnt]]	;
						break;
					}	 	
					else   P0=dispcode[mima1[dispbitcnt]]	; break;
		}
		P2=dispbitcode[dispbitcnt]	  ;	
		dispbitcnt++;
		if(dispbitcnt==8)
		{
			dispbitcnt=0;
		}
	}
	tcnt++;
	if(tcnt==3500)
	{	
		tcnt=0;
		if(k==0)
	 	second++;
		if(second>=60)
		{
				if(w==1)
				{
					hour1++;
					if(hour1==2)
					{
						hour1=0;
						w=0;
					}
				}
			second=0;
			minite++;
			if(x==1)
			{
				y++;
				if(y==10&TR1==1)
				{
					y=0;
					zong[0]=jia[3];
					zong[1]=jia[4];
					zong[5]=zong[5]+jia[3];if(zong[5]>9)  
												{ 
													n=1; zong[5]=zong[5]%10; 
												} 
						 zong[6]=zong[6]+jia[4];if(n==1)
						 						{
													zong[6]++;n=0;
						 						}
												zong[6]=zong[6]-18;
						 						if(zong[6]>27)  
												{ 
													n=1; zong[6]=zong[6]-10; 
												}
						 if(n==1)
						 {
						 	zong[7]++;
							n=0;
							if(zong[7]>9)
							zong[7]=0;
						 }
				 }
			}

			if(minite>=60)
			{
				minite=0;
				hour++;
				if(hour>=24)
				{
					hour=0;
				}
			/*	if(w==1)
				{
					hour1++;
					if(hour1==24)
					{
						hour1=0;
						w=0;
					}
				}			*/
			}
		}
		dispbuf[0]=second%10;
		dispbuf[1]=second/10;
		dispbuf[3]=minite%10;
		dispbuf[4]=minite/10;
		dispbuf[6]=hour%10;
		dispbuf[7]=hour/10;
	}
}	
																
void t1(void) interrupt 3 using 2
{
	 x=0;
	 tcnt2++;
	 switch(m)
	 {
	 	case 0:	zong[0]=jia[0];
				zong[1]=jia[1];
				break;
		case 1:	zong[0]=jia[6];
				zong[1]=jia[7];
				break;
	 } 
	 if(tcnt2<=10)
	 {
	 	zong[6]=23;
	 }
	 else
	 {
	 	c++;
	 	if(c==5)
		{
			c=0;
			switch(m)
			{
				case 0:	zong[5]=zong[5]+jia[0];if(zong[5]>9)  
												{ 
													n=1; zong[5]=zong[5]%10; 
												} 
						 zong[6]=zong[6]+jia[1];if(n==1)
						 						{
													zong[6]++;n=0;
						 						}
												zong[6]=zong[6]-18;
						 						if(zong[6]>27)  
												{ 
													n=1; zong[6]=zong[6]-10; 
												}
						 if(n==1)
						 {
						 	zong[7]++;
							n=0;
							if(zong[7]>9)
							zong[7]=0;
						 }
						 
						 break;
				case 1:	zong[5]=zong[5]+jia[6];if(zong[5]>9)  
												{ 
													n=1; zong[5]=zong[5]%10; 
												} 
						 zong[6]=zong[6]+jia[7];if(n==1)
						 						{
													zong[6]++;n=0;
						 						}
												zong[6]=zong[6]-18; 
						 						if(zong[6]>27)  
												{ 
													n=1; zong[6]=zong[6]-10; 
												}
						 if(n==1)
						 {
						 	zong[7]++;
							n=0;
							if(zong[7]>9)
							zong[7]=0;
						 }
						 zong[0]=jia[6];
						 zong[1]=jia[7];
						 break;
			}
		}
	 }
	 lc[5]++; 
	 if(lc[5]>9)
	 {
	 	n=1;
		lc[5]=lc[5]%10;
	 }
	 if(n==1)
	{
		n=0;
	 	lc[6]++;
		if(lc[6]>27)
		{
			n=1;
			lc[6]=lc[6]-10;
		} 	   		
	 }
	 if(n==1)
  	 {
  		 n=0;
		 lc[7]++;
	 }
	 x=1;
}


⌨️ 快捷键说明

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