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

📄 可编程交通灯控制系统.c

📁 模拟实现了交通灯的显示和手动调整的功能
💻 C
字号:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define lednum P2
#define ledwei P3
#define ew P1
#define sn P0
sbit setkey=P2^7;//2
sbit okkey=P1^7;
setkeyscan();
uchar code showway[]={0xde,0xbe,0xae,0xbd,0xb3,0xbb};
uchar code table1[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar code table2[2]={0x7f,0xbf};
uchar data table[]={0,0};
uchar data table3[]={0,0};
uchar fuwei;
uchar data con1s,set;
uchar time,ewsn=0,key=0,a,b,c,d,e;
uchar x11=8,x22=2,x33=2,x44=4,x55=5;
uchar way1,way2,way3,way4,num1,num2,num3,num4,numred;
uchar temp,wayt3;
uchar add1=0,add2=0,add3=0,add4=0,add5=0;
void delay(uint t) 
{
	uint i,j;
	for(i=t;i>0;i--)
		for(j=120;j>0;j--)
			; 
}
ewgledshan()
{  ew=0xfe;sn=0xbb;
	delay(100);
	ew=0xde;sn=0xbb;
	delay(100);	
}
sngledshan()
{
	ew=0xbb;sn=0xfe;
	delay(100);
	ew=0xbb;sn=0xde;
	delay(100);	
}
yledshan()
{  while(1)
	{
	ew=0xfd;sn=0xfd;
	delay(200);	
	if(okkey==0)
	 {
	 	delay(100);
		if(okkey==0)
		{
			break;
		}
	 }
	
	ew=0xff;sn=0xff;
	delay(200);
	}
}
display(uchar x)
{	uchar i;
	table[0]=x%10;
	table[1]=x/10;
	for(i=0;i<2;i++)
		{
			lednum=~table1[table[i]];
			ledwei=table2[i];
			delay(5);
		}	
}
diskey1()
{
	while(1)
	{
	if(add1==0)
	{
	P3=0xfe;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{

					case  0xf0: {x11++;}//2
							break;

				}
		}
	}
	P3=0xfd;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{

					case  0xd8: {add1=1;}
							break;

				}
		}
	}
   }
   	if(add1==1)
	{
	P3=0xfe;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{

					case  0xf0: {x11--;}//2
							break;

				}
		}
	}
	P3=0xfd;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{

					case  0xd8: {add1=0;}
							break;

				}
		}
	}
   }
	display(x11);
	if(okkey==0)
	{
	  delay(100);
	  if(okkey==0)
	   break;
	} 	
	}
}
diskey2()
{
while(1)
{
	if(add2==0)
	{
	P3=0xfe;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{

					case  0xe8: {x22++;b=x22+x11;display(b);}//2
							break;

				}
		}
	}
	P3=0xfd;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{

					case  0xd8: {add2=1;}
							break;

				}
		}
	}
   }
   	if(add2==1)
	{
	P3=0xfe;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{

					case  0xe8: {x22--;b=x22+x11;display(b);}//2
							break;

				}
		}
	}
	P3=0xfd;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{

					case  0xd8: {add2=0;}
							break;

				}
		}
	}
   }
	display(b);
	if(okkey==0)
	{
	  delay(150);
	  if(okkey==0)
	   break;
	} 
}
}
diskey3()
{
	while(1)
	{
	if(add3==0)
	{
	P3=0xfe;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{

					case  0xd8: {x33++;}//2
							break;

				}
		}
	}
	P3=0xfd;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{

					case  0xd8: {add3=1;}
							break;

				}
		}
	}
   }
   	if(add3==1)
	{
	P3=0xfe;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{

					case  0xd8: {x33--;}//2
							break;

				}
		}
	}
	P3=0xfd;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{

					case  0xd8: {add3=0;}
							break;

				}
		}
	}
   }
	display(x33);
	if(okkey==0)
	{
	  delay(150);
	  if(okkey==0)
	   break;
	} 	
	}
}
diskey4()
{
	while(1)
	{
	if(add4==0)
	{
	 P3=0xfd;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{
					case  0xf0: {x44++;}//4
							break;
					case  0xd8: {add4=1;}//6
							break;

				}
		}
	}
    }
   	if(add4==1)
	{

	P3=0xfd;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{
					case  0xf0: {x44--;}//4
							break;
					case  0xd8: {add4=0;}
							break;

				}
		}
	}
   }
	display(x44);
	if(okkey==0)
	{
	  delay(150);
	  if(okkey==0)
	   break;
	} 	
	}
}
diskey5()
{
	while(1)
	{
	if(add5==0)
	{
	 P3=0xfd;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{
					case  0xe8: {x55++;}//4
							break;
					case  0xd8: {add5=1;}//6
							break;

				}
		}
	}
    }
   	if(add5==1)
	{

	P3=0xfd;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{
					case  0xe8: {x55--;}//4
							break;
					case  0xd8: {add5=0;}
							break;

				}
		}
	}
   }
	display(x55);
	if(okkey==0)
	{
	  delay(150);
	  if(okkey==0)
	   break;
	} 	
	}
}

normalshow(uchar x1,uchar x2,uchar x3,uchar x4,uchar x5)
{	
	a=x1;b=a+x2;c=b+x3;d=c+x4;e=d+x5;
	way1=b;way2=c;way3=d;way4=e;
	num1=b;num2=x3;num3=x4;num4=x5;
	if(set==1)
	 {	 uchar k;
		for(k=0;k<2;k++)
		{
			lednum=~table1[10];
			ledwei=table2[k];
		}
	  }
	if(ewsn==0)
	{	numred=x1+x2+x3+x4+x5;
		while(time<=b)
		{
			if(setkey==0)
			{
			delay(150);
			if(setkey==0)
				{set=1;ewsn=2;
				EA=0;
				break;
				}
			}
			ew=showway[0];
			sn=showway[5];
			while(time>=(a-2)&&time<=a)
			{	display(num1);
				ewgledshan();				
			}

			while(time>=a&&time<=b)
			{	
			if(setkey==0)
			{
			delay(150);
			if(setkey==0)
				{set=1;ewsn=2;
				EA=0;
				break;
				}
			}
				display(num1+1);
				ew=showway[1];
				sn=showway[5];
			}
			display(num1);
		}
		while(time>=b&&time<=c)
		{
		if(setkey==0)
			{
			delay(150);
			if(setkey==0)
				{set=1;ewsn=2;
				EA=0;
				break;
				}
			}
			ew=showway[2];
			sn=showway[5];
			display(num2);
		}
		while(time>=c&&time<=d)
		{	
		if(setkey==0)
			{
			delay(150);
			if(setkey==0)
				{set=1;ewsn=2;
				EA=0;
				break;
				}
			}
			ew=showway[3];
			sn=showway[5];
			display(num3);
		}	
		while(time>=d&&time<=e)
		{
		if(setkey==0)
			{
			delay(150);
			if(setkey==0)
				{set=1;ewsn=2;
				EA=0;
				break;
				}
			}
			ew=showway[4];
			sn=showway[5];
			display(num4);
		}
		while(time>=e)
		{time=0;ewsn=1;}
	}
	if(ewsn==1)
	{  numred=x1+x2+x3+x4+x5;
		while(time<=b)
		{
		if(setkey==0)
			{
			delay(150);
			if(setkey==0)
				{set=1;ewsn=2;
				EA=0;
				break;
				}
			}
			display(numred);
			ew=showway[5];
			sn=showway[0];
			while(time>=(a-2)&&time<=a)
			{
			   sngledshan();display(numred);				
			}

			while(time>=a&&time<=b)
			{	
			if(setkey==0)
			{
			delay(150);
			if(setkey==0)
				{set=1;ewsn=2;
				EA=0;
				break;
				}
			}
				display(numred);
				ew=showway[5];
				sn=showway[1];
			}	
		}
		while(time>=b&&time<=c)
		{
		if(setkey==0)
			{
			delay(150);
			if(setkey==0)
				{set=1;ewsn=2;
				EA=0;
				break;
				}
			}
			ew=showway[5];
			sn=showway[2];
			display(numred);
		}
		while(time>=c&&time<=d)
		{	
		if(setkey==0)
			{
			delay(150);
			if(setkey==0)
				{set=1;ewsn=2;
				EA=0;
				break;
				}
			}
			ew=showway[5];
			sn=showway[3];
			display(numred);
		}
		while(time>=d&&time<=e)
		{
		if(setkey==0)
			{
			delay(150);
			if(setkey==0)
				{set=1;ewsn=2;
				EA=0;
				break;
				}
			}
			ew=showway[5];
			sn=showway[4];
			display(numred);
		}											
		while(time>=e)
		{time=0;ewsn=0;}
	}	
}
timescan()
{
	uchar timevor1,timevor2,timevor3,timevor4,timevor5;
	for(timevor1=20;timevor1>0;timevor1--){display(x11);}
	for(timevor2=20;timevor2>0;timevor2--){display(x22);}
	for(timevor3=20;timevor3>0;timevor3--){display(x33);}
	for(timevor4=20;timevor4>0;timevor4--){display(x44);}
	for(timevor5=20;timevor5>0;timevor5--){display(x55);}	
} 
setkeyscan()
{ timescan(); 
while(1)
	{
	P3=0xfe;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{
					case  0xf0: {diskey1();}//1
							break;
					case  0xe8: {diskey2();}//2
							break;
					case  0xd8: {diskey3();}//3
							break;

				}
		}
	}
	P3=0xfd;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(150);
		if(temp!=0xf8)
  		{
			switch(temp)
				{
					case  0xf0: {diskey4();}//4
							break;
					case  0xe8: {diskey5();}//5
							break;
					case  0xd8: {key=1;}//6
							break;

				}
		}
	}
	P3=0xfb;
	temp=P3;
	temp=temp&0xf8;
	if(temp!=0xf8)
	{
		delay(200);
		if(temp!=0xf0)
  		{
			switch(temp)
				{
					case  0xf0: {ew=0xbb;sn=0xbb;};
						break;
					case  0xe8: {	
									ew=0xbb;sn=0xbb;
									wayt3++;
									if(wayt3==2)
									{
										ew=0xbb;sn=0xde;
									}
									else if(wayt3==3)
									{	wayt3=0;
										ew=0xde;sn=0xbb;
									}
								};
								break;
					case  0xd8: {yledshan();};
							break;

				}
		}
	}
	 if(okkey==0)
	 {
	 	delay(150);
		if(okkey==0)
		{	time=0;ewsn=0;
			EA=1;
			break;
		}
	 }
	}
}

void main()
{	EA=1;
    ET0=1;
    TR0=1;
    TMOD=0x01;
    TH0=0x3c;
    TL0=0xb0;
	while(1)
	{	   
	 	normalshow(x11,x22,x33,x44,x55);
		if(setkey==0)
		{
		delay(150);
		if(setkey==0)
		{setkeyscan();}
		}
		if(okkey==0)
	 	{
	 		delay(150);
			if(okkey==0)
			{EA=1;set=0;ewsn=0;}
		} 
	 }
}
void timer0(void) interrupt 1
{   
	ET0=0;
	TR0=0;
	TH0=0X3C;
	TL0=0Xb0;
	TR0=1;
	con1s++;
	if(con1s==20)
	{	time++;
		con1s=0;
		if(time<=way4)
		{	numred--;
			if(time<=way1)
			{num1--;}
			else if(time>=way1&&time<=way2)
			     {num2--;}
			else if(time>=way2&&time<=way3)
			      {num3--;}
			else  {num4--;}
			
		}
	   	
	}
ET0=1; 
}  

⌨️ 快捷键说明

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