摘要:
近年來隨著科技的飛速發展,單片機的應用正在不斷深入,同時帶動傳統控制檢測技術日益更新。在實時檢測和自動控制的單片機應用系統中,單片機往往作為一個核心部件來使用,僅單片機方面知識是不夠的,還應根據具體硬件結構軟硬件結合,加以完善。
十字路口車輛穿梭,行人熙攘,車行車道,人行人道,有條不紊。那么靠什么來實現這井然秩序呢?靠的就是交通信號燈的自動指揮系統。交通信號燈控制方式很多。本系統采用MSC-51系列單片機ATSC51和可編程并行I/O接口芯片8255A為中心器件來設計交通燈控制器,實現了能根據實際車流量通過8051芯片的P1口設置紅、綠燈燃亮時間的功能;紅綠燈循環點亮,倒計時剩5秒時黃燈閃爍警示(交通燈信號通過PA口輸出,顯示時間直接通過8255的PC口輸出至雙位數碼管);車輛闖紅燈報警;綠燈時間可檢測車流量并可通過雙位數碼管顯示。本系統實用性強、操作簡單、擴展功能強。
1 引言
當今,紅綠燈安裝在各個道口上,已經成為疏導交通車輛最常見和最有效的手段。但這一技術在19世紀就已出現了。
1858年,在英國倫敦主要街頭安裝了以燃煤氣為光源的紅,藍兩色的機械扳手式信號燈,用以指揮馬車通行。這是世界上最早的交通信號燈。1868年,英國機械工程師納伊特在倫敦威斯敏斯特區的議會大廈前的廣場上,安裝了世界上最早的煤氣紅綠燈。它由紅綠兩以旋轉式方形玻璃提燈組成,紅色表示“停止”,綠色表示“注意”。1869年1月2日,煤氣燈爆炸,使警察受傷,遂被取消。
電氣啟動的紅綠燈出現在美國,這種紅綠燈由紅綠黃三色圓形的投光器組成,1914年始安裝于紐約市5號大街的一座高塔上。紅燈亮表示“停止”,綠燈亮表示“通行”。
1918年,又出現了帶控制的紅綠燈和紅外線紅綠燈。帶控制的紅綠燈,一種是把壓力探測器安在地下,車輛一接近紅燈便變為綠燈;另一種是用擴音器來啟動紅綠燈,司機遇紅燈時按一下嗽叭,就使紅燈變為綠燈。紅外線紅綠燈當行人踏上對壓力敏感的路面時,它就能察覺到有人要過馬路。紅外光束能把信號燈的紅燈延長一段時間,推遲汽車放行,以免發生交通事故。
信號燈的出現,使交通得以有效管制,對于疏導交通流量、提高道路通行能力,減少交通事故有明顯效果。1968年,聯合國《道路交通和道路標志信號協定》對各種信號燈的含義作了規定。綠燈是通行信號,面對綠燈的車輛可以直行,左轉彎和右轉彎,除非另一種標志禁止某一種轉向。左右轉彎車輛都必須讓合法地正在路口內行駛的車輛和過人行橫道的行人優先通行。紅燈是禁行信號,面對紅燈的車輛必須在交叉路口的停車線后停車。黃燈是警告信號,面對黃燈的車輛不能越過停車線,但車輛已十分接近停車線而不能安全停車時可以進入交叉路口。
2 單片機概述
單片機微型計算機是微型計算機的一個重要分支,也是頗具生命力的機種。單片機微型計算機簡稱單片機,特別適用于控制領域,故又稱為微控制器。
通常,單片機由單塊集成電路芯片構成,內部包含有計算機的基本功能部件:中央處理器、存儲器和I/O接口電路等。因此,單片機只需要和適當的軟件及外部設備相結合,便可成為一個單片機控制系統。
單片機經過1、2、3、3代的發展,目前單片機正朝著高性能和多品種方向發展,它們的CPU功能在增強,內部資源在增多,引角的多功能化,以及低電壓底功耗。
3 芯片簡介
3.1 MSC-51芯片簡介
MCS-51單片機內部結構
8051是MCS-51系列單片機的典型產品,我們以這一代表性的機型進行系統的講解。
8051單片機包含中央處理器、程序存儲器(ROM)、數據存儲器(RAM)、定時/計數器、并行接口、串行接口和中斷系統等幾大單元及數據總線、地址總線和控制總線等三大總線,現在我們分別加以說明:
·中央處理器:
中央處理器(CPU)是整個單片機的核心部件,是8位數據寬度的處理器,能處理8位二進制數據或代碼,CPU負責控制、指揮和調度整個單元系統協調的工作,完成運算和控制輸入輸出功能等操作。
·數據存儲器(RAM)
8051內部有128個8位用戶數據存儲單元和128個專用寄存器單元,它們是統一編址的,專用寄存器只能用于存放控制指令數據,用戶只能訪問,而不能用于存放用戶數據,所以,用戶能使用的RAM只有128個,可存放讀寫的數據,運算的中間結果或用戶定義的字型表。
圖1
·程序存儲器(ROM):
8051共有4096個8位掩膜ROM,用于存放用戶程序,原始數據或表格。
·定時/計數器(ROM):
8051有兩個16位的可編程定時/計數器,以實現定時或計數產生中斷用于控制程序轉向。
·并行輸入輸出(I/O)口:
8051共有4組8位I/O口(P0、P1、P2或P3),用于對外部數據的傳輸。
·全雙工串行口:
8051內置一個全雙工串行通信口,用于與其它設備間的串行數據傳送,該串行口既可以用作異步通信收發器,也可以當同步移位器使用。
·中斷系統:
8051具備較完善的中斷功能,有兩個外中斷、兩個定時/計數器中斷和一個串行中斷,可滿足不同的控制要求,并具有2級的優先級別選擇。
·時鐘電路:
8051內置最高頻率達12MHz的時鐘電路,用于產生整個單片機運行的脈沖時序,但8051單片機需外置振蕩電容。
單片機的結構有兩種類型,一種是程序存儲器和數據存儲器分開的形式,即哈佛(Harvard)結構,另一種是采用通用計算機廣泛使用的程序存儲器與數據存儲器合二為一的結構,即普林斯頓(Princeton)結構。INTEL的MCS-51系列單片機采用的是哈佛結構的形式,而后續產品16位的MCS-96系列單片機則采用普林斯頓結構。
下圖是MCS-51系列單片機的內部結構示意圖2。
圖2
MCS-51的引腳說明:
MCS-51系列單片機中的8031、8051及8751均采用40Pin封裝的雙列直接DIP結構,右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復用。現在我們對這些引腳的功能加以說明:
MCS-51的引腳說明:
MCS-51系列單片機中的8031、8051及8751均采用40Pin封裝的雙列直接DIP結構,右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復用。現在我們對這些引腳的功能加以說明:如圖3
圖3
Pin9:RESET/Vpd復位信號復用腳,當8051通電,時鐘電路開始工作,在RESET引腳上出現24個時鐘周期以上的高電平,系統即初始復位。初始化后,程序計數器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指針寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統即從0000H地址開始執行程序。然而,初始復位不改變RAM(包括工作寄存器R0-R7)的狀態,8051的初始態。
8051的復位方式可以是自動復位,也可以是手動復位,見下圖4。此外,RESET/Vpd還是一復用腳,Vcc掉電其間,此腳可接上備用電源,以保證單片機內部RAM的數據不丟失。
圖4
·Pin30:ALE/當訪問外部程序器時,ALE(地址鎖存)的輸出用于鎖存地址的低位字節。而訪問內部程序存儲器時,ALE端將有一個1/6時鐘頻率的正脈沖信號,這個信號可以用于識別單片機是否工作,也可以當作一個時鐘向外輸出。更有一個特點,當訪問外部程序存儲器,ALE會跳過一個脈沖。
如果單片機是EPROM,在編程其間,將用于輸入編程脈沖。
·Pin29:當訪問外部程序存儲器時,此腳輸出負脈沖選通信號,PC的16位地址數據將出現在P0和P2口上,外部程序存儲器則把指令數據放到P0口上,由CPU讀入并執行。
·Pin31:EA/Vpp程序存儲器的內外部選通線,8051和8751單片機,內置有4kB的程序存儲器,當EA為高電平并且程序地址小于4kB時,讀取內部程序存儲器指令數據,而超過4kB地址則讀取外部指令數據。如EA為低電平,則不管地址大小,一律讀取外部程序存儲器指令。顯然,對內部無程序存儲器的8031,EA端必須接地。
在編程時,EA/Vpp腳還需加上21V的編程電壓。
3.2 8255芯片簡介
8255可編程并行接口芯片簡介:
8255可編程并行接口芯片有三個輸入輸出端口,即A口、B口和C口,對應于引腳PA7~PA0、PB7~PB0和PC7~PC0。其內部還有一個控制寄存器,即控制口。通常A口、B口作為輸入輸出的數據端口。C口作為控制或狀態信息的端口,它在方式字的控制下,可以分成4位的端口,每個端口包含一個4位鎖存器。它們分別與端口A/B配合使用,可以用作控制信號輸出或作為狀態信號輸入。
8255可編程并行接口芯片方式控制字格式說明:
8255有兩種控制命令字;一個是方式選擇控制字;另一個是C口按位置位/復位控制字。其中C口按位置位/復位控制字方式使用較為繁難,說明也較冗長,故在此不作敘述,需要時用戶可自行查找有關資料。
方式控制字格式說明如表1:
表1
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
D7:設定工作方式標志,1有效。
D6、D5:A口方式選擇
0 0 —方式0
0 1 —方式1
1 ×—方式2
D4:A口功能(1=輸入,0=輸出)
D3:C口高4位功能 (1=輸入,0=輸出)
D2:B口方式選擇(0=方式0,1=方式1)
D1:B口功能(1=輸入,0=輸出)
D0:C口低4位功能 (1=輸入,0=輸出)
8255可編程并行接口芯片工作方式說明:
方式0:基本輸入/輸出方式。適用于三個端口中的任何一個。每一個端口都可以用作輸入或輸出。輸出可被鎖存,輸入不能鎖存。
方式1:選通輸入/輸出方式。這時A口或B口的8位外設線用作輸入或輸出,C口的4條線中三條用作數據傳輸的聯絡信號和中斷請求信號。
方式2:雙向總線方式。只有A口具備雙向總線方式,8位外設線用作輸入或輸出,此時C口的5條線用作通訊聯絡信號和中斷請求信號。
3.3 74LS373簡介
74LS373是一種帶三態門的8D鎖存器,其管腳示意圖如下示:
其中:1D-8D為8個輸入端。
1Q-8Q為8個輸出端。
LE為數據打入端:當LE為“1”時,鎖存器輸出
狀態同輸入狀態;當LE由“1”變“0”時,數據
打入鎖存器
OE為輸出允許端:當OE=0時,三態門打開;
當OE=1時,三態門關閉,輸出高阻。
4 系統硬件設計
4.1交通管理的方案論證
東西、南北兩干道交于一個十字路口,各干道有一組紅、黃、綠三色的指示燈,指揮車輛和行人安全通行。紅燈亮禁止通行,綠燈亮允許通行。黃燈亮提示人們注意紅、綠燈的狀態即將切換,且黃燈燃亮時間為東西、南北兩干道的公共停車時間。設東西道比南北道的車流量大,指示燈燃亮的方案如表2。
60S | 5S | 80S | 5S | …… | |
東西道 | 紅燈亮 | 黃燈亮 | 綠燈亮 | 黃燈亮 | …… |
南北道 | 綠燈亮 | 黃燈亮 | 紅燈亮 | 黃燈亮 | …… |
表2
表2說明:
(1)當東西方向為紅燈,此道車輛禁止通行,東西道行人可通過;南北道為綠燈,此道車輛通過,行人禁止通行。時間為60秒。
(2)黃燈閃爍5秒,警示車輛和行人紅、綠燈的狀態即將切換。
(3)當東西方向為綠燈,此道車輛通行;南北方向為紅燈,南北道車輛禁止通過,行人通行。時間為80秒。 東西方向車流大 通行時間長。
(4)這樣如上表的時間和紅、綠、黃出現的順序依次出現這樣行人和車輛就能安全暢通的通行。
(5)此表可根據車流量動態設定紅綠燈初始值。
4.2系統硬件設計
選用設備8031單片機一片選用設備:8031彈片機一片,8255并行通用接口芯片一片,74LS07兩片,MAX692‘看門狗’一片,共陰極的七段數碼管兩個雙向晶閘管若干,7805三端穩壓電源一個,紅、黃、綠交通燈各兩個,開關鍵盤、連線若干。
4.2.1 系統總框圖如下:
圖6
4.2.2 交通燈硬件線路圖
4.2.3 系統工作原理
(1)開關鍵盤輸入交通燈初始時間,通過8051單片機P1輸入到系統
(2)由8051單片機的定時器每秒鐘通過P0口向8255的數據口送信息,由8255的PA口顯示紅、綠、黃燈的燃亮情況;由8255的PC口顯示每個燈的燃亮時間。
(3)8051通過 設置 各個信號等的燃亮時間、通過8031設置,綠、紅時間分別為60秒、80秒循環由8051的P0口向8255的數據口輸出。
(4) 通過8051單片機的P3.0位來控制系統是工作或設置初值,當.牌位0就對系統進行初始化,為1系統就開始工作。
(5)紅燈倒計時時間,當有車輛闖紅燈時,啟動蜂鳴器進行報警,3S后然后恢復正常。
(6)增加每次綠燈時間車流量檢測的功能,并且通過查詢P2.0端口的電平是否為低,開關按下為低電平,雙位數碼管顯示車流量,直到下一次綠燈時間重新記入。
(7)綠燈時間倒計時完畢,重新循環。
5.控制器的軟件設計
5.1每秒鐘的設定
延時方法可以有兩種一中是利用MCS-51內部定時器才生溢出中斷來確定1秒的時間,另一種是采用軟延時的方法。
5.2計數器硬件延時
5.2.1 計數器初值計算
定時器工作時必須給計數器送計數器初值,這個值是送到TH和TL中的。他是以加法記數的,并能從全1到全0時自動產生溢出中斷請求。因此,我們可以把計數器記滿為零所需的計數值設定為C和計數初值設定為TC 可得到如下計算通式:
TC=M-C
式中,M為計數器摸值,該值和計數器工作方式有關。在方式0時M為213 ;在方式1時M的值為216;在方式2和3為28
5.2.2 計算公式
T=(M-TC)T計數
或TC=M-T/T計數
T計數是單片機時鐘周期TCLK的12倍;TC為定時初值
如單片機的主脈沖頻率為TCLK12MHZ,經過12分頻
方式0TMAX=213*1微秒=8.192毫秒
方式1TMAX=216*1微秒=65.536毫秒
顯然1秒鐘已經超過了計數器的最大定時間,所以我們只有采用定時器和軟件相結合的辦法才能解決這個問題.
5.2.3 1秒的方法
我們采用在主程序中設定一個初值為20的軟件計數器和使T0定時50毫秒.這樣每當T0到50毫秒時CPU就響應它的溢出中斷請求,進入他的中斷服務子程序。在中斷服務子程序中,CPU先使軟件計數器減1,然后判斷它是否為零。為零表示1秒已到可以返回到輸出時間顯示程序。
5.2.4相應程序代碼
(1)主程序
定時器需定時50毫秒,故T0工作于方式1。初值:
TC=M-T/T計數=216-50ms/1us=15536=3CBOH
ORG 1000H
START: MOV TMOD, #01H ; 令TO為定時器方式1
MOV TH0, #3CH ;裝入定時器初值
MOV TL0, #BOH;
MOV IE,#82H ;開T0中斷
SEBT TRO;啟動T0計數器
MOV RO,#14H;軟件計數器賦初值
LOOP:SJMP $;等待中斷
(2)中斷服務子程序
ORG000BH
AJMPBRT0
ORG00BH
BRTO:DJNZ R0,NEXT
AJMP TIME ; 跳轉到時間及信號燈顯示子程序
DJNZ:MOVRO,#14H;恢復R0值
MOV TH0, #3CH ;重裝入定時器初值
MOV TL0, #BOH;
MOV IE,#82H
RET1
END
5.3 軟件延時
MCS-51的工作頻率為2-12MHZ,我們選用的8031單片機的工作頻率為6MHZ。機器周期與主頻有關,機器周期是主頻的12倍,所以一個機器周期的時間為12*(1/6M)=2us。我們可以知道具體每條指令的周期數,這樣我們就可以通過指令的執行條數來確定1秒的時間。
具體的延時程序分析:
DELAY:MOV R4,#08H 延時1秒子程序
DE2:LCALL DELAY1
DJNZ R4,DE2
RET
DELAY1:MOV R6,#0 延時125ms 子程序
MOV R5,#0
DE1: DJNZ R5,$
DJNZ R6,DE1
RET
MOV RN,#DATA 字節數數為2 機器周期數為1
所以此指令的執行時間為2ms
DELAY1 為一個雙重循壞 循環次數為256*256=65536 所以延時時間=65536*2=131072us 約為125us
DELAY R4設置的初值為8 主延時程序循環8次,所以125us*8= 1秒
由于單片機的運行速度很快其他的指令執行時間可以忽略不計。
5.4 時間及信號燈的顯示
5.4.1 8051并行口的擴展
8051雖然有4個8位I/O端口,但真正能提供借用的只有P1口,因為P2和P0口通常用于傳送外部傳送地址和數據,P3口也有它的第二功能。因此,8031通常需要擴展。由于我們用外部輸入設定紅綠燈倒計時初值、數碼管的輸出顯示、紅綠黃信號燈的顯示都要用到一個I/O端口,顯然8031的端口是不夠,需要擴展。
擴展的方法有兩種:(1)借用外部RAM地址來擴展I/O端口;(2)采用I/O接口新片來擴充。我們用8255并行接口信片來擴展I/O端口。
5.4.2顯示原理:
當定時器定時為1秒,時程序跳轉到時間顯示及信號燈顯示子程序,它將依次顯示信號燈時間 ,同時一直顯示信號燈的顏色,這時在返回定時子程序定時一秒,在顯示黃燈的下一個時間,這樣依次把所有的燈色的時間顯示完后在重新給時間計數器賦初值 ,重新進入循環。
5.4.38255PA口輸出信號接信號燈:
由于發光二極管為共陽極接法,輸出端口為低電平,對應的二極管發光,所以可以用置位方法點亮紅,綠,黃發光二極管。
5.4.4 8255輸出信號與數碼管的連接:
LED 燈的顯示原理:通過同名管腳上所加電平的高低來控制發光二極管是否點量而顯示不同的字形如 SP,g,f,e,d,c,b,a管角上加上7FH所以SP上為0伏,不亮其余為TTL高電平,全亮則顯示為8
采用共陰級連接:
其中PC0PB0-a,
PC1PB1-b,
PC2PB2-c,
PC3PB3-d,
PC4PB4-e,
PC5PB5-f,
PC6PB6-g
PC7PB7 -SP接地
顯示數值 | dop g f e d c b a | 驅動代碼(16進制) |
0 | 0 0 1 1 1 1 1 1 | 3FH |
1 | 0 0 0 0 0 1 1 0 | 06H |
2 | 0 1 0 1 1 0 1 1 | 5BH |
3 | 0 1 0 0 1 1 1 1 | 4FH |
4 | 0 1 1 0 0 1 1 0 | 66H |
5 | 0 1 1 0 1 1 0 0 | 6DH |
6 | 0 1 1 1 1 1 0 0 | 7DH |
7 | 0 0 0 0 0 1 1 1 | 07H |
8 | 0 1 1 1 1 1 1 1 | 7FH |
表3 驅動代碼表
5.4.5 8255與8051的連接:
用8051的P0 口的 p0.7 連接8255的片選信號cs 我們用8031的地址采用全譯碼方式,當p0.7 =0 時片選有效, 其他無效, p0.1 p0.1 用于選擇8255端口
P0.7 p0.6 p0.5 p0.4 p0.3 p0.2 P0.1 P0.0
A7 A6 A5 A4 A3 A2 A1 A0
1 X X X X X 0 0 00H為8255 的PA口
1 X X X X X 0 1 01H 為8255的PB口
1 X X X X X 1 0 02H 為8255的PC口
1 X X X X X 1 1 03H 為8255的控制口
由于8051是分時對8255和儲存器進行訪問所以8051的P0口不會發生沖突
5.5 程序設計
5.5.1流程圖如圖所示
圖8
圖9 程序流程圖
5.5.2 程序源代碼
ORG 0000H ;主程序的入口地址
LJMP MAIN ;跳轉到主程序的開始處
ORG 0003H ;外部中斷0的中斷程序入口地址
ORG 000BH ;定時器0的中斷程序入口地址
LJMP T0_INT ;跳轉到中斷服務程序處
ORG 0013H ;外部中斷1的中斷程序入口地址
MAIN : MOV SP,#50H
MOV IE,#8EH ;CPU開中斷,允許T0中斷,T1中斷和外部中斷1中斷
MOV TMOD,#51H ;設置T1為計數方式,T0為定時方式,且都工作于模式1
MOV TH1,#00H ;T1計數器清零
MOV TL1,#00H
SETB TR1 ;啟動T1計時器
SETB EX1 ;允許INT1中斷
SETB IT1 ;選擇邊沿觸發方式
MOV DPTR ,#0003H
MOV A, #80H ;給8255賦初值,8255工作于方式0
MOVX @DPTR, A
AGAIN: JB P3.1,N0 ;判斷是否要設定東西方向紅綠燈時間的初值,若P3.1為1則跳轉
MOV A,P1
JB P1.7,RED ;判斷P1.7是否為1,若為1則設定紅燈時間,否則設定綠燈時間
MOV R0,#00H ;R0清零
MOV R0,A ;存入東西方向綠燈初始時間
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
RED: MOV A,P1
ANL A,#7FH ;P1.7置0
MOV R7,#00H ;R7清零
MOV R7,A ;存入東西方向紅燈初始時間
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
;-------------------------------------------
N0: SETB TR0 ;啟動T0計時器
MOV 76H,R7 ;紅燈時間存入76H
N00: MOV A,76H ;東西方向禁止,南北方向通行
MOV R3,A
MOV DPTR,#0000H ;置8255A口,東西方向紅燈亮,南北方向綠燈亮
MOV A,#0DDH
MOVX @DPTR, A
N01: JB P2.0,B0
N02: SETB P3.0
CJNE R3,#00H,N01 ;比較R3中的值是否為0,不為0轉到當前指令處執行
;------黃燈閃爍5秒程序------
N1: SETB P3.0
MOV R3,#05H
MOV DPTR,#0000H ;置8255A口,東西,南北方向黃燈亮
MOV A,#0D4H
MOVX @DPTR,A
N11: MOV R4,#00H
N12: CJNE R4,#7DH,$ ;黃燈持續亮0.5秒
N13: MOV DPTR,#0000H ;置8255A口,南北方向黃燈滅
MOV A,#0DDH
MOVX @DPTR,A
N14: MOV R4,#00H
CJNE R4,#7DH,$ ;黃燈持續滅0.5秒
CJNE R3,#00H,N1 ;閃爍時間達5秒則退出
;------------------------------------------------------------
N2: MOV R7,#00H
MOV A,R0 ;東西通行,南北禁止
MOV R3,A
MOV DPTR,#0000H ;置8255A口,東西方向綠燈亮,南北方向紅燈亮
MOV A,#0EBH
MOVX @DPTR,A
N21: JB P2.0,T03
N22: CJNE R3,#00H,N21
;------黃燈閃爍5秒程序------
N3: MOV R3,#05H
MOV DPTR,#0000H ;置8255A口,東西,南北方向黃燈亮
MOV A,#0E2H
MOVX @DPTR,A
N31: MOV R4,#00H
CJNE R4,#7DH,$ ;黃燈持續亮0.5秒
N32: MOV DPTR,#0000H ;置8255A口,南北方向黃燈滅
MOV A,#0EBH
MOVX @DPTR,A
N33: MOV R4,#00H
CJNE R4,#7DH,$ ;黃燈持續滅0.5秒
CJNE R3,#00H,N3 ;閃爍時間達5秒則退出
SJMP N00
;------闖紅燈報警程序------
B0: MOV R2,#03H ;報警持續時間3秒
B01: MOV A,R3
JZ N1 ;若倒計時完畢,不再報警
CLR P3.0 ;報警
CJNE R2,#00H,B01 ;判斷3秒是否結束
SJMP N02
;------1秒延時子程序-------
N7: RETI
T0_INT:MOV TL0,#9AH ;給定時器T0送定時10ms的初值
MOV TH0,#0F1H
INC R4
INC R5
CJNE R5,#0FAH,T01 ;判斷延時是否夠一秒,不夠則調用顯示子程序
MOV R5,#00H ;R5清零
DEC R3 ;倒計時初值減一
DEC R2 ;報警初值減一
T01: ACALL DISP ;調用顯示子程序
RETI ;中斷返回
;------顯示子程序------
DISP: JNB P2.4,T02
DISP1: MOV B,#0AH
MOV A,R3 ;R3中值二轉十顯示轉換
DIV AB
MOV 79H,A
MOV 7AH,B
DIS: MOV A,79H ;顯示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY
DS2: MOV A,7AH ;顯示個位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
RET
;------東西方向車流量檢測程序------
T03: MOV A,R3
SUBB A,#00H ;若綠燈倒計時完畢,不再檢測車流量
JZ N3
JB P2.0,T03
INC R7
CJNE R7,#64H,E1
MOV R7,#00H ;中斷到100次則清零
E1: SJMP N22
;------東西方向車流量顯示程序------
T02: MOV B,#0AH
MOV A,R7 ;R7中值二轉十顯示轉換
DIV AB
MOV 79H,A
MOV 7AH,B
DIS3: MOV A,79H ;顯示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY
DS4: MOV A,7AH ;顯示個位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
LJMP N7
;------延時4MS子程序----------
DELAY: MOV R1,#0AH
LOOP: MOV R6,#64H
NOP
LOOP1: DJNZ R6,LOOP1
DJNZ R1,LOOP
RET
;------字符表------
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
6 結論
本系統就是充分利用了8051和8255芯片的I/O引腳。系統統采用MSC-51系列單片機Intel8051和可編程并行I/O接口芯片8255A為中心器件來設計交通燈控制器,實現了能根據實際車流量通過8031芯片的P1口設置紅、綠燈燃亮時間的功能;紅綠燈循環點亮,倒計時剩5秒時黃燈閃爍警示(交通燈信號通過PA口輸出,顯示時間直接通過8255的PC口輸出至雙位數碼管);車輛闖紅燈報警;綠燈時間可檢測車流量并可通過雙位數碼管顯示。。系統不足之處不能控制車的左、右轉、以及自動根據車流改變紅綠燈時間等。這是由于本身地理位子以及車流量情況所定,如果有需要可以設計擴充原系統來實現。
通過這次畢業設計,使我得到了一次用專業知識、專業技能分析和解決問題全面系統的鍛煉。使我在單片機的基本原理、單片機應用系統開發過程,以及在常用編程設計思路技巧(特別是匯編語言)的掌握方面都能向前邁了一大步,為日后成為合格的應用型人才打下良好的基礎。
責任編輯:lq
-
單片機
+關注
關注
6043文章
44622瀏覽量
638658 -
存儲器
+關注
關注
38文章
7528瀏覽量
164364 -
交通燈
+關注
關注
13文章
324瀏覽量
39837
原文標題:基 于 單 片 機 的 交 通 燈 設 計
文章出處:【微信號:A1411464185,微信公眾號:multisim】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
如何實現51單片機與PC機的串行通信
單片機的三種總線結構
單片機燒錄程序的基本步驟是什么
單片機引腳懸空是什么電平
基于51單片機兩路紅黃綠交通燈電路圖及程序
基于51單片機四路紅黃綠交通燈電路圖及程序
基于STM32單片機的交通燈系統設計
![基于STM32<b class='flag-5'>單片機</b>的<b class='flag-5'>交通燈</b>系統設計](https://file1.elecfans.com/web2/M00/F3/20/wKgaomZ40O2ANM-KAAAV5Z2pOwE159.jpg)
評論