51单片机串口交通灯protues仿真交通灯串口控制系统交通灯管制东西南北管制

串口交通灯仿真交通灯串口控制系统交通灯管制东西南北管制
仿真:proteus 7.8以上版本都可以打开
程序编译器:keil 4/keil 5
C语言编写,注释完整

功能要求
一、功能要求:以AT89C51单片机设计一套交通灯控制系统,具体要求如下:1、东西向、南北向红、黄、绿三色交通灯,绿灯亮6、黄灯亮3S、红灯亮9S依次循环;
2、当交通灯正常工作模式时,每个点亮的灯对应一个数码管进行倒计时显示不亮的灯对应数码管熄灭
3、系统中设置三个按键,功能分别为东西管控、南北管控、取消管控
当按下东西管控时不论当前交通灯运行到什么状态,均进入东西向绿灯,南北向红灯状态,数码管显示“0”,并通过串口以RS232标准发送数据报文0xFF、0xaa、00xFF"通知总控计算机(可以用单片机替代)。直到按下取消管控功能,系统进入正常运行状态
当按下南北管控时不论当前交通灯运行到什么状态,均进入南北向绿灯,东西向红灯状态,数码管显示“0”,并通过串口以RS232标准发送数据报文0XFE、0x55、0xFF"通知总控计算机(可以用单片机替代)。直到按下取消管控功能,系统进入正常运行状态

51单片机串口交通灯protues仿真交通灯串口控制系统交通灯管制东西南北管制_第1张图片
51单片机串口交通灯protues仿真交通灯串口控制系统交通灯管制东西南北管制_第2张图片
51单片机串口交通灯protues仿真交通灯串口控制系统交通灯管制东西南北管制_第3张图片
51单片机串口交通灯protues仿真交通灯串口控制系统交通灯管制东西南北管制_第4张图片
51单片机串口交通灯protues仿真交通灯串口控制系统交通灯管制东西南北管制_第5张图片
51单片机串口交通灯protues仿真交通灯串口控制系统交通灯管制东西南北管制_第6张图片

// 串口中断处理函数 (串口接收到数据,发送数据完毕都可以引起串口中断)
void uart_interrupt(void) interrupt 4 		//也叫串行中断服务程序
{
     
	if(TI)// 发送数据(1字节)完毕
	{
     
		TI = 0;// 将 发送中断标志位 清零(让串口可以继续发送数据)
	}
} 
void LEDScan()
{
     
	 if(StaSysterm==NormalRun)	//状态切换
	 {
     
		if(NS_time==0 || WE_time==0)//当东西或者南北方向通行时间倒数到0,切换状态
		{
     
			switch(index)				 //改变红绿灯的状态,状态机
			{
     
				case 0:
				{
     
					index=1;
					NS_time=NS_gtime_count;//南北方向绿灯通行时间
					WE_time=WE_rtime_count;//东西红灯方向通行时间       注意!红灯时间要长一点
					P2=0X09;	//需要亮的灯转换为二进制位0000 1001,对应P2口的P2^0和P2^3,
					          //对应仿真图的绿灯L0和红灯L3亮。

				}break;
				case 1:
				{
     
					index=2;
					NS_time = WE_time - NS_time;
					P2=0X0A;

				}break;
				case 2:
				{
     
					index=3;
					NS_time=NS_rtime_count;//南北方向红灯时间 
					WE_time=WE_gtime_count;//东西方向绿灯时间 
					P2=0X24;	

				}break;
				case 3:
				{
     
					index=0;
					WE_time=NS_time-WE_time;
					P2=0X14;

				}break;
				default:break;
			}
		}
		Seg_Display(NS_time/10,0);
		Seg_Display(NS_time%10,1);
		Seg_Display(WE_time/10,2);
		Seg_Display(WE_time%10,3);
	}
	else if(StaSysterm==NSRun){
     	//南北通信

		P2=0X09;
		Seg_Display(00/10,0);
		Seg_Display(00%10,1);
		Seg_Display(00/10,2);
		Seg_Display(00%10,3);
	}else if(StaSysterm==WERun){
     //东西通行
		P2=0X24;
		Seg_Display(00/10,0);
		Seg_Display(00%10,1);
		Seg_Display(00/10,2);
		Seg_Display(00%10,3);	
		}
}


需要源码和仿真请联系QQ2142686503

你可能感兴趣的:(protues仿真)