51微控制器串列埠交通燈protues模擬交通燈串列埠控制系統交通燈管制東西南北管制

Sandra_C發表於2020-11-24

串列埠交通燈模擬交通燈串列埠控制系統交通燈管制東西南北管制
模擬: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"通知總控計算機(可以用微控制器替代)。直到按下取消管控功能,系統進入正常執行狀態

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

// 串列埠中斷處理函式 (串列埠接收到資料,傳送資料完畢都可以引起串列埠中斷)
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

相關文章