Proteus仿真实例_基于51单片机的交通灯系统(仿真文件+程序)24-51f-10

一.系统概述

交通灯系统使用51单片机进行主控,系统内使用数码管显示各个方向的路灯时间,四个方向上都设置了红绿黄灯,通过按键可以控制交通灯的开启和关闭,还能控制红灯、黄灯全亮以及相应状态进行延时,对于绿灯和黄灯的时间还能通过按键直接进行设置。

二.仿真概述

1. 启动仿真后各个方向的亮灯时间开始进行计时,开始控制

2. 按下启动交通灯按键开始进行计时,

3. 按下红灯全亮按键后所有的红灯都会亮起,此时所有方向禁止通行。

4. 按下黄灯闪烁按键后所有方向的黄灯开始进行闪烁。

5. 按下上方的交通灯时间调节按键就能对红绿灯的时间进行调整。

三.程序设计

#include <REGX52.H>
#include "Key.h"
#include "Timer0.h"
#include "Timer1.h"
#include "Nixie.h"
#include "delay.h"
#include "AT24C02.h"

sbit NBG = P1^0;  //南北绿灯
sbit NBY = P1^1;  //南北黄灯
sbit NBR = P1^2;  //南北红灯
sbit DXG = P1^3;  //东西绿灯
sbit DXY = P1^4;  //东西黄灯
sbit DXR = P1^5;  //东西红灯

unsigned char KeyNum;
unsigned char RunFlag,YellowFlag,DirectionFlag = 0;LoopFlag = 1,Flag,StartFlag;
unsigned char MINISEC = 100,SEC,MINISEC1 = 100,SEC1;
unsigned char North_Count_Down;  //北边时间显示器倒计时
unsigned char South_Count_Down;  //南边时间显示器倒计时
unsigned char East_Count_Down;  //东边时间显示器倒计时
unsigned char West_Count_Down;  //西边时间显示器倒计时
unsigned char Time1 = 25,Time2 = 5;
void main()
{
		SEC = Time1;
		SEC1 = Time2;
		Timer0_Init();
		Timer1_Init();
		while(1)
		{
				KeyNum = Key();
				if(KeyNum == 1) //绿灯和红灯时间+1s
				{
						Time1++;
						SEC = Time1;
				}	
				if(KeyNum == 2) //绿灯和红灯时间-1s
				{
						Time1--;
						SEC = Time1;
				}	
				if(KeyNum == 3) //黄灯和红灯时间+1s
				{
						Time2++;
						SEC1 = Time2;
				}	
				if(KeyNum == 4) //黄灯和红灯时间-1s
				{
						Time2--;
						SEC1 = Time2;
				}	
				if(KeyNum == 5) //启动交通灯
				{
						StartFlag =! StartFlag;
						YellowFlag = 0;	
						NBR = 1;
						DXR = 1;
				}	
				if(KeyNum == 6) //启动交通灯
				{
						StartFlag = 0;
						P1 |= 0x3f;
						NBR = 0;
						DXR = 0;
				}
				if(KeyNum == 7) //启动交通灯
				{
						StartFlag = 0;
						YellowFlag = 1;		
						P1 |= 0x3f;
				}
				if(KeyNum == 8) //启动交通灯
				{
						StartFlag = 0;
						
				}
				if(YellowFlag)
				{						
						DXY = 0;
						NBY = 0;
						Delay(1);
						DXY = 1;
						NBY = 1;
						Delay(1);
				}
				if(StartFlag)
				{
						if(SEC == Time1 && LoopFlag == 1) 
						{			
								RunFlag = 0;						
						}		
						if(SEC1 == Time2 && LoopFlag == 0) 
						{			
								RunFlag = 1;						
						}	
						if(DirectionFlag == 0)
						{
								if(RunFlag == 0)
								{
										NBR = 1;
										DXY = 1;
										DXG = 0;					
										NBR = 0;
										if(SEC <= 5)
										{
												if(SEC == 5 || SEC == 3 || SEC == 1)
												{
													DXG = 1;
													Delay1(1);
												}
												if(SEC == 4 || SEC == 2 || SEC == 0)
												{
													DXG = 0;
													Delay1(1);
												}
										}
										if(SEC > 5)
										{
												DXG = 0;
										}
										East_Count_Down = SEC;
										West_Count_Down = SEC;
										South_Count_Down = SEC+Time2;
										North_Count_Down = SEC+Time2;
								}
								if(RunFlag == 1)
								{
										Flag = 0;
										DXG = 1;					
										NBR = 1;
										NBR = 0;
										DXY = 0;
										East_Count_Down = SEC1 - 1;
										West_Count_Down = SEC1 - 1;
										South_Count_Down = SEC1 - 1;
										North_Count_Down = SEC1 - 1;
								}
								if(SEC1 == 0 && Flag == 0)
								{
										NBR = 1;
										DXY = 1;
										DXG = 1;					
										NBR = 1;
										DirectionFlag = 1;
										RunFlag = 0;
								}
						}
						if(DirectionFlag == 1)
						{			
								if(RunFlag == 0)
								{
										NBY = 1;
										DXR = 1;					
										DXR = 0;
										if(SEC <= 5)
										{
												if(SEC == 5 || SEC == 3 || SEC == 1)
												{
													NBG = 1;
													Delay1(1);
												}
												if(SEC == 4 || SEC == 2 || SEC == 0)
												{
													NBG = 0;
													Delay1(1);
												}
										}
										else
										{
												NBG = 0;
										}
										East_Count_Down = SEC;
										West_Count_Down = SEC;
										South_Count_Down = SEC+Time2;
										North_Count_Down = SEC+Time2;
								}
						}
				}
	
		}
}

作者:小常硬件

物联沃分享整理
物联沃-IOTWORD物联网 » Proteus仿真实例_基于51单片机的交通灯系统(仿真文件+程序)24-51f-10

发表回复