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

📄 traffic6.c

📁 用51单片机控制交通灯亮灭
💻 C
字号:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint a;
uchar temp,time,flag;
sbit lcd_rw =P2^5;
sbit lcd_rs =P2^6;
sbit lcd_en =P2^4;
#define lcd_data P1//P1作为数据口
sbit NSRed=P3^0;
sbit NSGreen=P3^1;
sbit EWRed=P3^2;
sbit EWGreen=P3^3;

/*一下八行定义液晶和键盘*/
uchar code table[]="1=>E & W BUSY:";
uchar code table1[]="2=>S & N BUSY:";
sbit commonkey=P0^4;
sbit key1=P0^0;	//东西繁忙控制
sbit key2=P0^1;	//南北繁忙控制
	
void run1();
void run2();
void delay(uint z)
{
	uint i,j;
	for(i=z;i>0;i--)
		for(j=114;j>0;j--);
}
void write_data(uchar dat)
{
	lcd_rs=1;
	lcd_rw=0;
	lcd_data=dat;
	delay(5);
	lcd_en=0;
	lcd_en=1;
	delay(5);
	lcd_en=0;	
} 
void write_com(uchar dat)
{
	lcd_rs=0;
	lcd_rw=0;
	lcd_data=dat;
	delay(5);
	lcd_en=0;
	lcd_en=1;
	delay(5);
	lcd_en=0;
} 
/*液晶初始化*/
void lcd_init()
{
		
    lcd_rw=0;
	write_com(0x38);//设置显示模式
	write_com(0x38);
	write_com(0x08);//显示关闭
	write_com(0x01);//显示清屏
	write_com(0x06);//指针向右加1
	write_com(0x0c);//不显示光标
}
void Time0_init()
{
	EA=1;
	ET0=1;
	TMOD=0x01;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;

}
void Time0_intt() interrupt 1 using 3
{
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	temp++;
	if(temp==20)
	{
		temp=0;
		time--;
		if(flag==1)
		write_com(0x80+14);
		if(flag==2)
		write_com(0x80+14+0x40);
		write_data(time/10+0x30);
		write_data(time%10+0x30);
/*		if(time==0) 
		{
			flag++;
			if(flag==1) time=9;
			if(flag==2) time=11;
			if(flag==3) 
			{
				time=7;
				flag=0;
			}
			if(flag==0) time=16;
		} */
	}	
}

void main()
{
		uchar i;
		
		lcd_init();
		
		Time0_init();
		write_com(0x80);
		for(i=0;i<14;i++)
		write_data(table[i]);
		write_com(0x80+0x40);
		for(i=0;i<14;i++)
		write_data(table1[i]);
		
		commonkey=0;
		while(1)
		{
			if(key1==0)
			{
				delay(20);
				if(key1==0)
				{
					while(!key1);
						flag=1;
					while(1)
					{
						run1();
					}
				}
			}
				
			if(key2==0)
			{
				delay(5);
				if(key2==0)
				{
					while(!key2);
					flag=2;
					while(1)
					{
						run2();
					 }
				}	
			
			}
		}
}


void run1()
{
	EWGreen=0;
	NSRed=0;
	TR0=1;
	time=15;
	write_com(0x80+14);
	write_data(time/10+0x30);
	write_data(time%10+0x30);
	while(time);
		TR0=0; //东西通,南北可右转,15s
	a=40;
	while(a--)  //开始闪烁7s
	{
		EWGreen=1;
		NSRed=1;
		delay(100);
		EWGreen=0;
		NSRed=0;
		delay(100);
	}					 
	P3=0XFF; 

	EWRed=0;
	NSRed=0; //以下让东西红灯,南北黄灯6秒
	NSGreen=0;
	TR0=1;
	time=6;
	write_com(0x80+14);
	write_data(time/10+0x30);
	write_data(time%10+0x30);
	while(time);  //东西止,南北可左转,约8s
		TR0=0; 
	              
	a=25;
	while(a--) //开始闪烁4s
	{
		EWRed=1;
	    NSRed=1; 
	    NSGreen=1;
		delay(100);
		EWRed=0;
		NSRed=0; 
	    NSGreen=0;
		delay(100);		
	}
    P3=0XFF;	  
/*以下东西和南北转换****/
	NSGreen=0;
	EWRed=0;
	TR0=1;
	time=10;
	write_com(0x80+14);
	write_data(time/10+0x30);
	write_data(time%10+0x30);
	while(time);
		TR0=0; 
	a=25;
	while(a--)
	{
		NSGreen=1;
		EWRed=1;
		delay(100);
		NSGreen=0;
		EWRed=0;
		delay(100);
	}

	P3=0XFF;

	NSRed=0;
	EWRed=0;
	EWGreen=0;
	TR0=1;
	time=6;
	write_com(0x80+14);
	write_data(time/10+0x30);
	write_data(time%10+0x30);
	while(time);
		TR0=0; 
	a=15;
	while(a--)
	{
		NSRed=1;
		EWRed=1;
	    EWGreen=1;
		delay(100);
		NSRed=0;
		EWRed=0;
	    EWGreen=0;
		delay(100);			
	}
	P3=0XFF;
	
}
void run2()
{

	EWGreen=0;
	NSRed=0;
	TR0=1;
	time=10;
	write_com(0x80+14);
	write_data(time/10+0x30);
	write_data(time%10+0x30);
	while(time);
		TR0=0; //东西通,南北可右转,15s
	a=40;
	while(a--)  //开始闪烁7s
	{
		EWGreen=1;
		NSRed=1;
		delay(100);
		EWGreen=0;
		NSRed=0;
		delay(100);
	}					 
	P3=0XFF; 

	EWRed=0;
	NSRed=0; //以下让东西红灯,南北黄灯6秒
	NSGreen=0;
	TR0=1;
	time=6;
	write_com(0x80+14);
	write_data(time/10+0x30);
	write_data(time%10+0x30);
	while(time);  //东西止,南北可左转,约8s
		TR0=0; 
	              
	a=25;
	while(a--) //开始闪烁4s
	{
		EWRed=1;
	    NSRed=1; 
	    NSGreen=1;
		delay(100);
		EWRed=0;
		NSRed=0; 
	    NSGreen=0;
		delay(100);		
	}
    P3=0XFF;	  
/*以下东西和南北转换****/
	NSGreen=0;
	EWRed=0;
	TR0=1;
	time=15;
	write_com(0x80+14);
	write_data(time/10+0x30);
	write_data(time%10+0x30);
	while(time);
		TR0=0; 
	a=25;
	while(a--)
	{
		NSGreen=1;
		EWRed=1;
		delay(100);
		NSGreen=0;
		EWRed=0;
		delay(100);
	}

	P3=0XFF;

	NSRed=0;
	EWRed=0;
	EWGreen=0;
	TR0=1;
	time=6;
	write_com(0x80+14);
	write_data(time/10+0x30);
	write_data(time%10+0x30);
	while(time);
		TR0=0; 
	a=15;
	while(a--)
	{
		NSRed=1;
		EWRed=1;
	    EWGreen=1;
		delay(100);
		NSRed=0;
		EWRed=0;
	    EWGreen=0;
		delay(100);			
	}
	P3=0XFF;
	
}
	




⌨️ 快捷键说明

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