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

📄 zongji.c

📁 全功能交通灯设计智能交通灯.rar
💻 C
字号:
#include <reg51.h>
#include <stdio.h>
#define uchar     unsigned char
#define uint      unsigned int
uchar num,num1,count,key1num;
sbit key1=P3^3;
sbit key2=P3^1;
sbit key3=P3^2;
sbit zshi=P3^7;
sbit zge=P3^6;
sbit cshi=P3^5;
sbit  cge=P3^4;
uchar code  dis[]={
							
	0X3f,/*0*/
	0X06,/*1*/
	0X5b,/*2*/
	0X4f,/*3*/
	0X66,/*4*/
	0X6d,/*5*/
	0X7d,/*6*/
	0X07,/*7*/
	0X7f,/*8*/
	0X6f,/*9*/
	0X00,/*NULL*/
};


void delay(uint c)
{
   uint i,j;
    for(i=0;i<c;i++)
	  for(j=0;j<100;j++);
	
}

void init()
{
	TMOD=0x21;//设置定时器0为工作方式1
	TH0=(65536-10000)/256;
	TL0=(65536-10000)%256;
	TH1=0xfd;
	TL1=0xfd;
	EA=1;//开总中断
	ET0=1;//开定时器0中断
	TR0=1;//启动定时器0
	TR1=1;
	REN=1;
	SM0=0;
	SM1=1;
	ES=1;
	
	num=56;
	num1=56;
	P3=0xff;
	P2=0x00;
	P1=0x00;

}
void guan()
{
	zshi=1;
	cshi=1;
	zge=1;
	cge=1;

}
void display(uchar dat_z,dat_c)
{
	if(dat_z>=23&&dat_z<=56)
	{
		if(26<dat_z&&dat_z<=56)
		{
			P0=0xeb;
			zshi=1;
			P1=dis[(dat_z-23)%10];
			zshi=0;
			delay(5);
	 guan();
	
			zge=1;
			P1=dis[(dat_z-23)/10];
			zge=0;
			delay(5);
	guan();	   

			cshi=1;
			P2=dis[(dat_c-26)%10];
			cshi=0;;
			delay(5);
			guan();
			cge=1;
			P2=dis[(dat_c-26)/10];
			cge=0;
			delay(5);
	
		}
	if(dat_z>=23&&dat_z<=26)
		{	
				P0=0xe2;//黄灯
		        zge=1;
		        P1=dis[(dat_z-23)%10];
				zshi=0;
				 delay(1);
	guan();
				
	 		cshi=1;
			cge=1;
			P2=dis[(dat_z-23)%10];
			cge=0;
			delay(5);
	guan();				
		}
	}
	
	if(dat_z<23)
	{
		if(dat_z>3&&dat_z<23)
		{
			 P0=0xdd;//红灯
			zshi=1;
			P1=dis[(dat_z)%10];
			zshi=0;
			delay(5);
	 guan();
	
			zge=1;
			P1=dis[(dat_z)/10];
			zge=0;
			delay(5);
	guan();

			cshi=1;
			P2=dis[(dat_c-3)%10];
			cshi=0;
				delay(5);
	guan();

			cge=1;
			P2=dis[(dat_c-3)/10];
			cge=0;
			delay(5);
   guan();
		}
		if(dat_z<=3)
		{
				P0=0xd4;
				 cge=1;
		        P1=0xff; 	
		        zshi=0;
		        P1=dis[(dat_z)%10];
				 delay(1);
				zshi=1;
  guan();
				
				zge=1; 
				zshi=1;
				cge=1;
		        P2=0xff;
				cshi=0;
				P2=dis[(dat_z)%10];
				delay(1);
				cshi=1;
 guan();
		}

	}			 

}
void displayz(uchar dat_z)
{
	cge=1;
	if(dat_z>=23&&dat_z<=56)
	{
		if(26<dat_z&&dat_z<=56)
		{
			P0=0xeb;
			zshi=1;
			P1=dis[(dat_z-23)%10];
			zshi=0;
			delay(5);

				 guan();
	
			zge=1;
			P1=dis[(dat_z-23)/10];
			zge=0;
			delay(5);
			guan();
	
		}
	if(dat_z>=23&&dat_z<=26)
		{	
				P0=0xe2;//黄灯
		        zge=1;
		        P1=dis[(dat_z-23)%10];
				zshi=0;
				 delay(1);
				 guan();
	}
	
	if(dat_z<23)
	{
		if(dat_z>3&&dat_z<23)
		{
			 P0=0xdd;//红灯
			zshi=1;
			P1=dis[(dat_z)%10];
			zshi=0;
			delay(5);
	 guan();
	
			zge=1;
			P1=dis[(dat_z)/10];
			zge=0;
			delay(5);
   guan();
		}
		if(dat_z<=3)
		{
				P0=0xd4;
				 cge=1;
		        P1=0xff; 	
		        zshi=0;
		        P1=dis[(dat_z)%10];
				 delay(1);
				zshi=1;
  guan();
			
		}

	}
  }		
}
void displayc(uchar dat_c)
{
	
	
		if(dat_c>=23&&dat_c<=56)
	{
		if(26<dat_c&&dat_c<=56)
		{
			P0=0xeb; 

			cshi=1;
			P2=dis[(dat_c-26)%10];
			cshi=0;;
			delay(5);
			guan();
			cge=1;
			P2=dis[(dat_c-26)/10];
			cge=0;
			delay(5);
			guan();
	
		}
	if(dat_c>=23&&dat_c<=26)
		{	
				P0=0xe2;//黄灯
				
	 		cshi=1;
			cge=1;
			P2=dis[(dat_c-23)%10];
			cge=0;
			delay(5);
	guan();				
		}
	}
	
	if(dat_c<23)
	{
		if(dat_c>3&&dat_c<23)
		{
			 P0=0xdd;//红灯
	guan();

			cshi=1;
			P2=dis[(dat_c-3)%10];
			cshi=0;
				delay(5);
	guan();

			cge=1;
			P2=dis[(dat_c-3)/10];
			cge=0;
			delay(5);
   guan();
		}
		if(dat_c<=3)
		{			
				zge=1; 
				zshi=1;
				cge=1;
		        P2=0xff;
				cshi=0;
				P2=dis[(dat_c)%10];
				delay(1);
				cshi=1;
 guan();
		}

	}	
}

void keyscan()
{
	
	if(key1==0)
	{
		delay(5);
		if(key1==0)
		{
			key1num++;
			while(!key1)
			{
				display(num,num1);
			}
			if(key1num==1)
			{
				TR0=0;
			}
			if(key1num==3)
			{
				key1num=0;
				TR0=1;
			}
		}
	}
	if(key1num!=0)
	{
		if(key2==0)
		{
			delay(5);
			if(key2==0)
			{
				if(key1num==1)
				{
					while(!key2)
					{
						displayz(num);
					}
					num++;
					if(num==56)
					{
						num=0;
					}
				}
				if(key1num==2)
				{
					while(!key2)
					{
						displayc(num1);

					}
						num1++;
						if(num1==56)
						num1=0;
				}
			}
		}
		if(key3==0)
		{
			delay(5);
			if(key3==0)
			{
				if(key1num==1)
				{
					while(!key3)
					{
						displayz(num);
					}
					num--;
					if(num==0)
					{
						num=56;
					}
				}
				if(key1num==2)
				{
					while(!key3)
					{
						displayc(num1);

					}
					num1--;
					if(num1==0)
					num1=56;
				}
			}
		}
	}


}

void main()
{
	
	init();
	while(1)
	{
/////////////
		if(flag==1)	
		{
			
		}
		if(count==20)
		{
			count=0;
			num--;
			num1--;
			if(num==0)
			num=56;
			if(num1==0)
			num1=56;
		}
			if(key1num!=0)
			{
				if(key1num==1)
				{
					displayz(num);
				}
				if(key1num==2)
				{
					displayc(num1);
				}
			}
			if(key1num==0)
			{
			  display(num,num1);
			}

		keyscan();
	 }
}
void t0(void ) interrupt 1  //定时器T0
{
	TH0=(65535-50000)/256;
	TL0=(65535-50000)%256;
	count++;	
}

⌨️ 快捷键说明

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