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

📄 hailai.c

📁 全功能交通灯设计智能交通灯.rar
💻 C
字号:
#include <reg51.h>
#include <stdio.h>
#define uchar     unsigned char
#define uint      unsigned int
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;
sbit wei=P3^7;
sbit duan=P3^6;
uchar h,count,num,dat,flag,dat1,num1,key1num,temp,keyc,keyz;
uint r=0;
uint s;
uchar code  dis[]={
							
	0Xc0,/*0*/
	0Xf9,/*1*/
	0Xa4,/*2*/
	0Xb0,/*3*/
	0X99,/*4*/
	0X92,/*5*/
	0X82,/*6*/
	0Xf8,/*7*/
	0X80,/*8*/
	0X90,/*9*/
	0Xff,/*NULL*/
};


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

void init()
{
	TMOD=0x11;//设置定时器0为工作方式1
	TH0=(65536-10000)/256;
	TL0=(65536-10000)%256;
	TH1=(65536-20000)/256;
	TL1=(65536-20000)%256;
	EA=1;//开总中断
	ET0=1;//开定时器0中断
	ET1=1;
	TR0=1;//启动定时器0
	TR1=1;
	num=56;
	num1=56;
//	P0=0xeb;
}
void display(uchar dat_z,uchar dat_c)   //送显示
{	
		if(dat_z>=23&&dat_z<=56)
		{
			if(dat_z>26&&dat_z<=56)
			{
			    P0=0xeb;
	/*			wei=1;
				P2=0x04;
				wei=0;
				delay(5);

				wei=1;
				P2=0x00;
				wei=0;

				duan=1;

		        P2=dis[(dat_z-23)/10];
				duan=0;
		         delay(1);
				 wei=1;
				P2=0x00;
				wei=0;			 */

		/*			 wei=1;
		        P2=0x08;
				wei=0;

				duan=1;
		        P2=dis[(dat_z-23)%10];
				duan=0;
				 delay(1);
				 wei=1;
				 P2=0x00;
				 wei=0;	   */
				 wei=1;
				 P2=0x4;
				 wei=0;
			 		 
				P3=0x00;
		        P2=0xff;
				P3=0x10;
				P2=dis[(dat_c-26)/10];
				delay(1);

	  /*
				P3=0x00;
		        P2=0xff;
				P3=0x20;
				P2=dis[(dat_c-26)%10];
				delay(1);		   */
			  }
/*		 	if(dat_z>=23&&dat_z<=26)
			{

				P0=0xe2;

				 P3=0x00;
		        P1=0xff;
		        P3=0x80;
		        P1=dis[(dat_z-23)%10];
				 delay(1);

				P3=0x00;
		        P2=0xff;
				P3=0x20;
				P2=dis[(dat_c-23)%10];
				delay(1);
			}			 
		}
		if(dat_z<23)
		{
			if(dat_z>3&&dat_z<23)
			{
				P0=0xdd;//红灯
				P3=0x00;
		        P1=0xff;
		        P3=0x40;
		        P1=dis[(dat_z)/10];
		         delay(1);
				P3=0x00;
		        P1=0xff;
		        P3=0x80;
		        P1=dis[(dat_z)%10];
				 delay(1);		 
				P3=0x00;
		        P2=0xff;
				P3=0x10;
				P2=dis[(dat_c-3)/10];
				delay(1);


				P3=0x00;
		        P2=0xff;
				P3=0x20;
				P2=dis[(dat_c-3)%10];
				delay(1);
			}	
					 if(dat_z<=3)
			 		{

						P0=0xd4;
						 P3=0x00;
				        P1=0xff;
				        P3=0x80;
				        P1=dis[(dat_z)%10];
						 delay(1);
		
						P3=0x00;
				        P2=0xff;
						P3=0x20;
						P2=dis[(dat_c)%10];
						delay(1);
						
			 		}	 */
		}				
			
			 
}
void keyscan() //键盘检测
{
	if(key1==0)
	{
		delay(5);
		if(key1==0)
		{
			key1num++;
			while(!key1)
			{
				display(num,num1);
			}
			if(key1num==1)
			{
				TR0=0;
				TR1=0;
			}
			if(key1num==2)
			{
				TR0=1;
				TR1=1;
				P1=temp;
				key1num=0;

			}
		}
	
	}
		if(key1num!=0)
		{	
			if(key2==0)
			{
				delay(5);
				if(key2==0)
				{
					while(!key2)
					{
						display(num,num1);
					}
					if(key1num==1)
					{
						num++;
						display(num,num1);
						
					}
					if(key1num==2)
					{
						num++;
						display(num,num1);
					}
				}
			}
	  	    if(key3==0)
			{
				delay(5);
				if(key3==0)
				{
					while(!key3)
					{
						display(num,num1);
					}
					
						if(key1num==1)
						{
							if(num==0)
							num=32;
							num--;
						}
					

				}
			}
		}
}	 
void main()  //主函数
{
	init();
	while(1)
	{	
	keyscan();
		if(count==8)
		{
			count=0;
			num--;
			num1--;
			
			if(num==-1)
			{
				num=56;
			}
			if(num1==-1)
			{
				num1=56;
			}
		}
		display(num,num1);
	}
}
void t0(void ) interrupt 1  //定时器T0
{
	TH0=(65535-50000)/256;
	TL0=(65535-50000)%256;
	count++;
//	num1++;	

	
}
void time1() interrupt 3	//定时器T1
{
	TH1=(65536-20000)/256;
	TL1=(65536-20000)%256;

}

⌨️ 快捷键说明

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