交通燈信號控制器方案設(shè)計
設(shè)計一個基于單片機的交通燈信號控制器。已知東、西、南、北四個方向各有紅黃綠色三個燈,在東西方向有兩個數(shù)碼管,在南北方向也有兩個數(shù)碼管。要求交通燈按照表1進行顯示和定時切換,并要求在數(shù)碼管上分別倒計時顯示東西、南北方向各狀態(tài)的剩余時間。
表1 交通燈的狀態(tài)切換表
表1 交通燈的狀態(tài)切換表
南北方向 | 東西方向 | ||
序號 | 狀態(tài) | 序號 | 狀態(tài) |
1 | 綠燈亮25秒,紅、黃燈滅 | 1 | 紅燈亮30秒,綠、黃燈滅 |
2 | 黃燈亮5秒,紅、綠燈滅 | ||
3 | 紅燈亮30秒,綠、黃燈滅 | 2 | 綠燈亮25秒,紅、黃燈滅 |
3 | 黃燈亮25秒,紅、綠燈滅 | ||
回到狀態(tài)1 | 回到狀態(tài)1 |
3.2.1模塊1:系統(tǒng)設(shè)計
(1)任務(wù)分析與整體設(shè)計思路
試題要求實現(xiàn)的功能主要包括計時功能、動態(tài)掃描以及狀態(tài)的切換等幾部分。
計時功能:要實現(xiàn)計時功能則需要使用定時器來計時,通過設(shè)置定時器的初始值來控制溢出中斷的時間間隔,再利用一個變量記錄定時器溢出的次數(shù),達到定時1秒中的功能。當計時每到1秒鐘后,東西、南北信號燈各狀態(tài)的暫存剩余時間的變量減1。當暫存剩余時間的變量減到0時,切換到下一個狀態(tài),同時將下一個狀態(tài)的初始的倒計時值裝載到計時變量中。開始下一個狀態(tài),如此循環(huán)重復(fù)執(zhí)行。
動態(tài)掃描:需要使用4個數(shù)碼管分別顯示東西、南北的倒計時數(shù)字,將暫存各狀態(tài)剩余時間的數(shù)字從變量中提取出“十位”和“個位”,用動態(tài)掃描的方式在數(shù)碼管中顯示。
整個程序依據(jù)定時器的溢出數(shù)來計時,每計時1S則相應(yīng)狀態(tài)的剩余時間減1,一直減到0時觸發(fā)下一個狀態(tài)的開始。
(2)單片機型號及所需外圍器件型號,單片機硬件電路原理圖
(1)任務(wù)分析與整體設(shè)計思路
試題要求實現(xiàn)的功能主要包括計時功能、動態(tài)掃描以及狀態(tài)的切換等幾部分。
計時功能:要實現(xiàn)計時功能則需要使用定時器來計時,通過設(shè)置定時器的初始值來控制溢出中斷的時間間隔,再利用一個變量記錄定時器溢出的次數(shù),達到定時1秒中的功能。當計時每到1秒鐘后,東西、南北信號燈各狀態(tài)的暫存剩余時間的變量減1。當暫存剩余時間的變量減到0時,切換到下一個狀態(tài),同時將下一個狀態(tài)的初始的倒計時值裝載到計時變量中。開始下一個狀態(tài),如此循環(huán)重復(fù)執(zhí)行。
動態(tài)掃描:需要使用4個數(shù)碼管分別顯示東西、南北的倒計時數(shù)字,將暫存各狀態(tài)剩余時間的數(shù)字從變量中提取出“十位”和“個位”,用動態(tài)掃描的方式在數(shù)碼管中顯示。
整個程序依據(jù)定時器的溢出數(shù)來計時,每計時1S則相應(yīng)狀態(tài)的剩余時間減1,一直減到0時觸發(fā)下一個狀態(tài)的開始。
(2)單片機型號及所需外圍器件型號,單片機硬件電路原理圖
圖3-5 交通燈硬件電路原理圖
選用MCS51系列AT89S51單片機作為微控制器,選擇兩個四聯(lián)的共陰極數(shù)碼管組成8位顯示模塊,由于AT89S51單片機驅(qū)動能力有限,采用兩片74HC244實現(xiàn)總線的驅(qū)動,一個74HC244完成共陰極數(shù)碼管位控線的控制和驅(qū)動,另一個74HC244完成數(shù)碼管的7段碼輸出,在7段碼輸出口上各串聯(lián)一個100歐姆的電阻對7段數(shù)碼管限流。用P3口的P3.0-P3.5完成發(fā)光二極管的控制,實現(xiàn)交通燈信號的顯示,每個發(fā)光二極管串聯(lián)500歐姆電阻起限流作用。硬件電路原理圖如圖3-5所示。
(3)程序設(shè)計思路,單片機資源分配以及程序流程
①單片機資源分配
單片機P3口的P3.0-P3.1引腳用作輸出,控制發(fā)光二極管的顯示。在計時模塊中,需要定義兩個數(shù)組變量(init_sn[3],init_ew[3])來存儲東西、南北兩個方向在不同狀態(tài)中倒計時的初始值,題目中每個方向的交通燈共有3種顯示狀態(tài),因此數(shù)組元素個數(shù)為3。還需要定義兩個變量( cnt_ sn, cnt_ ew)暫存東西、南北兩個方向的倒計時剩余時間。
在狀態(tài)的切換中,為了明確當前處于哪種狀態(tài),東西、南北方向各設(shè)置一個狀態(tài)變量(state_val_sn, state_val_ew),當?shù)褂嫊r的剩余時間到零時,狀態(tài)變量增1,表示啟動下一個狀態(tài),當該變量增到3時變?yōu)?,回到序號為1的狀態(tài)。
②程序設(shè)計思路
在設(shè)計中,由于沒有鍵盤功能,因此只涉及定時計數(shù)和動態(tài)掃描功能。主程序?qū)⒆兞砍跏蓟?br />后,設(shè)置單片機定時器和中斷特殊功能寄存器的初始值,將定時器T1的工作方式設(shè)置為8位自動
裝載模式,定時器每隔250us產(chǎn)生一次溢出。
在初始化變量與寄存器后,主程序進入一個循環(huán)結(jié)構(gòu),在循環(huán)中只做動態(tài)掃描的工作,根據(jù)東西、南北兩向的剩余時時間進行動態(tài)掃描顯示。
計時以及狀態(tài)的切換通過定時器的中斷服務(wù)程序來實現(xiàn),在中斷服務(wù)程序中,每計時到一秒時,則各方向當前狀態(tài)的剩余時間減1,一直減到0時觸發(fā)下一個狀態(tài)的開始,改變交通燈的指示。
③程序流程
選用MCS51系列AT89S51單片機作為微控制器,選擇兩個四聯(lián)的共陰極數(shù)碼管組成8位顯示模塊,由于AT89S51單片機驅(qū)動能力有限,采用兩片74HC244實現(xiàn)總線的驅(qū)動,一個74HC244完成共陰極數(shù)碼管位控線的控制和驅(qū)動,另一個74HC244完成數(shù)碼管的7段碼輸出,在7段碼輸出口上各串聯(lián)一個100歐姆的電阻對7段數(shù)碼管限流。用P3口的P3.0-P3.5完成發(fā)光二極管的控制,實現(xiàn)交通燈信號的顯示,每個發(fā)光二極管串聯(lián)500歐姆電阻起限流作用。硬件電路原理圖如圖3-5所示。
(3)程序設(shè)計思路,單片機資源分配以及程序流程
①單片機資源分配
單片機P3口的P3.0-P3.1引腳用作輸出,控制發(fā)光二極管的顯示。在計時模塊中,需要定義兩個數(shù)組變量(init_sn[3],init_ew[3])來存儲東西、南北兩個方向在不同狀態(tài)中倒計時的初始值,題目中每個方向的交通燈共有3種顯示狀態(tài),因此數(shù)組元素個數(shù)為3。還需要定義兩個變量( cnt_ sn, cnt_ ew)暫存東西、南北兩個方向的倒計時剩余時間。
在狀態(tài)的切換中,為了明確當前處于哪種狀態(tài),東西、南北方向各設(shè)置一個狀態(tài)變量(state_val_sn, state_val_ew),當?shù)褂嫊r的剩余時間到零時,狀態(tài)變量增1,表示啟動下一個狀態(tài),當該變量增到3時變?yōu)?,回到序號為1的狀態(tài)。
②程序設(shè)計思路
在設(shè)計中,由于沒有鍵盤功能,因此只涉及定時計數(shù)和動態(tài)掃描功能。主程序?qū)⒆兞砍跏蓟?br />后,設(shè)置單片機定時器和中斷特殊功能寄存器的初始值,將定時器T1的工作方式設(shè)置為8位自動
裝載模式,定時器每隔250us產(chǎn)生一次溢出。
在初始化變量與寄存器后,主程序進入一個循環(huán)結(jié)構(gòu),在循環(huán)中只做動態(tài)掃描的工作,根據(jù)東西、南北兩向的剩余時時間進行動態(tài)掃描顯示。
計時以及狀態(tài)的切換通過定時器的中斷服務(wù)程序來實現(xiàn),在中斷服務(wù)程序中,每計時到一秒時,則各方向當前狀態(tài)的剩余時間減1,一直減到0時觸發(fā)下一個狀態(tài)的開始,改變交通燈的指示。
③程序流程
評論