找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12875|回復: 1
打印 上一主題 下一主題
收起左側(cè)

基于51單片機交通信號燈控制系統(tǒng)

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:305925 發(fā)表于 2018-4-11 15:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
摘 要
     隨著時代的進步和發(fā)展,單片機技術已經(jīng)普及到我們生活、工作、科研、各個領域,已經(jīng)成為一種比較成熟的技術。本模擬交通燈系統(tǒng)利用單片機AT89C51作為核心元件,實現(xiàn)了通過信號燈對路面狀況的智能控制。從一定程度上解決了交通路口堵塞、車輛停車等待時間不合理、急車強通等問題。系統(tǒng)具有結(jié)構(gòu)簡單、可靠性高、成本低、實時性好、安裝維護方便等優(yōu)點,有廣泛的應用前景。
  本模擬系統(tǒng)由單片機硬/軟件系統(tǒng),兩位8段數(shù)碼管和LED燈顯示系統(tǒng)等組成,較好的模擬了交通路面的控制。
關鍵詞:交通燈,單片機 ,數(shù)碼管 ,LED燈


目錄


引言
   當今,紅綠燈安裝在個個道口上,已經(jīng)成為疏導交通車輛最常見和最有效的手段。但這個技術在19世紀就已經(jīng)出現(xiàn)了。
    1858年,在英國倫敦主要街頭安裝了以燃煤氣為光源的紅、藍兩色的機械般手勢信號燈,用以指揮馬車通行。這是世界上最早的交通信號燈。1868年,英國機械工程師納伊特在倫敦威斯敏斯特區(qū)的會議大廈前的廣場上,安裝了世界上最早的煤氣紅綠燈。它由紅綠兩以旋轉(zhuǎn)方式玻璃提燈組成,紅色表示“停止”,綠色表示“注意”。1869年1月2日,煤氣燈爆炸,是警察受傷,遂被取消。
    電氣啟動的紅綠燈出現(xiàn)在美國,這種紅綠燈由紅黃綠三色圓形的投光器組成,1914年始裝于紐約市5號大街的一座高塔上。紅燈亮表示“停止”,綠燈亮表示“通行”。
    信號燈的出現(xiàn),使得交通得以有效的管理,對于疏導交通流量、提高道路通行能力、減少交通事故有明顯效果。1968年,聯(lián)合國《道路交通和道路標志信號協(xié)定》對各種信號燈的含義作了規(guī)定。綠燈時通行信號燈,面對綠燈的車輛可以直行,左轉(zhuǎn)彎和右轉(zhuǎn)彎,除非兩一種標志禁止某一種轉(zhuǎn)向。左右轉(zhuǎn)彎車輛必需讓合法的正在路口內(nèi)行駛的車輛和過人行橫線的行人優(yōu)先通行。紅燈是禁行信號燈,面對紅燈的車輛必需在交叉路口的停車線后停車。黃燈是警告信號,面對黃燈的車輛不能越過停車線,但車輛已經(jīng)十分接近停車線而不能安全停車的可以進入交叉路口。
1.設計背景1.1課題背景
隨著時代的進步和發(fā)展,單片機技術已經(jīng)普及到我們生活、工作、科研、各個領域,已經(jīng)成為一種比較成熟的技術。本交通燈控制系統(tǒng)利用單片機AT89C51作為核心元件,實現(xiàn)了通過信號燈對路面狀況的智能控制。從一定程度上解決了交通路口堵塞、車輛停車等待時間不合理、急車強通等問題。系統(tǒng)具有結(jié)構(gòu)簡單、可靠性高、成本低、實時性好、安裝維護方便等優(yōu)點,有廣泛的應用前景。
1.2設計內(nèi)容
    本設計主要是介紹了單片機控制下的交通燈控制系統(tǒng),詳細介紹了其硬件和軟件設計,并對其各功能模塊做了詳細介紹,其主要功能和指標如下:
    東西、南北兩干道交于十字路口,各干道有一組紅、綠、黃三個指示燈,指揮車輛和行人安全通行。東西方向為主干道,通行時間為40秒;南北方向為支干道,通行時間為30秒。通行時間最后3秒,綠燈滅,黃燈閃爍,黃燈閃爍完畢變更通行車道。通行時間由數(shù)字顯示器顯示,黃燈3秒閃爍不單另計時。
2交通燈控制系統(tǒng)系統(tǒng)簡介2.1方案選擇
    方案一:利用PLC實現(xiàn)對交通燈控制,其可靠性高,抗干擾能力強。對于交通燈這種特殊裝置,其可靠性是至關重要的,因為交通燈控制系統(tǒng)中途若發(fā)生什么意外,其后果是不堪設想。而且PLC系統(tǒng)的設計、制造工作量小,維護方便,體積小、重量輕、能耗低,還可以進行智能化控制以更有效、合理地控制交通。但是使用PLC控制也有缺點,因為PLC比起其它控制系統(tǒng),其價格較貴,一般一臺小型的PLC價格最便宜的也在二三千元以上。  
    方案二:運用單片機對交通燈系統(tǒng)進行實現(xiàn),使用51單片機為主控核心,通過軟件來控制過往車輛的正常運作。同時它也具有如下的優(yōu)點:
(1)單片機體積小巧、使用靈活、成本低,易于真正產(chǎn)品化。組裝各種智能式控制設備和儀器,能做到機電儀一體化。
(2)面向控制。能有針對性地解決各種從簡單到復雜的各類控制任務,因而能獲得最佳的性能價格比。
(3)抗干擾能力強,適應溫度范圍寬,在各種惡劣的環(huán)境下都能可靠的工作。這是其它微機集中無法比擬的。
(4)可以方便的實現(xiàn)多機、分布式的集散控制,使整個控制系統(tǒng)的效率大大地提高。
(5)單片機應用產(chǎn)品的研制周期短,所開發(fā)出來的樣機就是以后批量生產(chǎn)的產(chǎn)品,可以避免不必要的二次開發(fā)過程。
綜上所述,比較5種交通燈控制裝置的優(yōu)點與缺點,根據(jù)交通燈所工作的特殊環(huán)境,體積小巧、使用靈活、成本低,易于真正產(chǎn)品化面向控制抗干擾能力強,適應溫度范圍寬可以方便的實現(xiàn)多機、分布式的集散控制便等特點,現(xiàn)在擬采用單片機來控制交通燈。
本設計研究的是基于AT89C51單片機的交通燈智能控制系統(tǒng)。根據(jù)交通控制系統(tǒng)的設計原理,闡述了硬件和軟件方面開發(fā)的整個過程。主控系統(tǒng)采用AT89C51單片機作為控制器,控制通行倒計時及右拐、右拐、直行,占用端口少,耗電也最小。系統(tǒng)電源采用獨立的+5V穩(wěn)壓電源,有各種成熟電路可供選用,使此方案可靠穩(wěn)定。該設計可直接在I/O口上接按鍵開關,精簡并優(yōu)化了電路。結(jié)合實際情況,顯示界面采用LED提示和數(shù)碼管計時的方法,滿足了倒計時的時間顯示輸出和狀態(tài)燈提示信息輸出的要求,減少系統(tǒng)的復雜度。
2.2系統(tǒng)設計原理
開機上電便處于正常運行狀態(tài),東西方向通行40秒后變?yōu)槟媳狈较蛲ㄐ?0秒,如此70秒循環(huán)一次,使得東西方向和南北方向交替通行。
顯示系統(tǒng)則顯示到下一次改變通行方向所剩的時間,利于司機調(diào)整車輛狀況。每到通行方向轉(zhuǎn)換時,正在通行的方向綠燈熄滅,變?yōu)辄S燈閃爍,提醒司機注意通行方向的改變,避免不必要的危險。
延時方法可以有兩種,一種是利用MCS-51內(nèi)部定時器才生溢出中斷來確定1秒的時間,另一種是采用軟延時的方法。本程序的倒計時采用軟件延時。
3.系統(tǒng)硬件設計
    根據(jù)上面的功能要求,硬件系統(tǒng)主要有單片機模塊、指示燈模塊和倒計時顯示模塊。各模塊選擇如下
3.1主控制器選擇
主控芯片采用AT89C51單片機,其管腳圖下圖所示。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif
圖3.1  AT89C51引腳圖
AT89C51是AT89C5X系列單片機的典型產(chǎn)品,它采用ATMEL的高密非易失存儲技術制造并和工業(yè)標準MCS—51指令集和引腳結(jié)構(gòu)兼容。通過在單塊芯片上組合通用的CPL1和快閃存儲器,ATMEL公司生產(chǎn)的AT89C52是一強勁的微型計算機,它對許多嵌入式控制的應用,提供了一種高度靈活和成本低的解決辦法。芯片AT89C52是ATMEL公司生產(chǎn)的帶2K字節(jié)快閃存儲器的8位單片機。它具有如下的一些特性:
(1)指令和89C51產(chǎn)品兼容
(2)內(nèi)含2K字節(jié)可重復編程快閃存儲器
(3)耐久性1,000寫/擦除周期   
(4)2.7V~6V的工作電壓范圍
(5)全靜態(tài)操作0Hz~24MHz      
(6)二級程序存儲器加鎖
(7)內(nèi)含128*8位內(nèi)部RAM     
(8)15根可編程I/0引線
(9)2個16位的計數(shù)器/定時器   
(10)6個中斷源
(11)帶有可編程串行通訊口      
(12)可直接驅(qū)動LED輸出
(13)片內(nèi)模擬電壓比較器        
(14)低功耗空載和掉電方式
   另外,該單片機還具有體積小,價格低等特點。AT89C51單片機包含中央處理器、程序存儲器(ROM)、數(shù)據(jù)存儲器(RAM)、定時/計數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
圖3.2  系統(tǒng)硬件結(jié)構(gòu)圖
中央處理器(CPU)是整個單片機的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進制數(shù)據(jù)或代碼,CPU負責控制、指揮和調(diào)度整個單元系統(tǒng)協(xié)調(diào)的工作,完成運算和控制輸入輸出功能等操作。
AT89C51內(nèi)部有128個8位用戶數(shù)據(jù)存儲單元和128個專用寄存器單元,它們是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶只能訪問,而不能用于存放用戶數(shù)據(jù),所以,用戶能使用的RAM只有128個,可存放讀寫的數(shù)據(jù),運算的中間結(jié)果或用戶定義的字型表。  
AT89C51共有4096個8位掩膜ROM,用于存放用戶程序,原始數(shù)據(jù)或表格。 AT89C51有兩個16位的可編程定時/計數(shù)器,以實現(xiàn)定時或計數(shù)產(chǎn)生中斷用于控制程序轉(zhuǎn)向。
AT89C51共有4組8位I/O口(P0、P1、P2或P3),用于對外部數(shù)據(jù)的傳輸。 AT89C51內(nèi)置一個全雙工串行通信口,用于與其它設備間的串行數(shù)據(jù)傳送,該串行口既可以用作異步通信收發(fā)器,也可以當同步移位器使用。
AT89C51具備較完善的中斷功能,有兩個外中斷、兩個定時/計數(shù)器中斷和一個串行中斷,可滿足不同的控制要求,并具有2級的優(yōu)先級別選擇。
3.2 時鐘及復位電路
AT89C51內(nèi)置最高頻率達12MHz的時鐘電路,用于產(chǎn)生整個單片機運行的脈沖時序,但AT89C51單片機需外置振蕩電容。
本設計中,使單片機運行在最小系統(tǒng)。
時鐘電路由兩個20nF的微調(diào)電容和一個晶振組成。AT89C51內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,它的輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。這兩個引腳接石英晶體振蕩器和微調(diào)電容,構(gòu)成一個穩(wěn)定的自激振蕩器。本系統(tǒng)采用12Hz的振蕩器,機器周期為1us。復位操作有上電自動復位、按鍵電平復位和外部脈沖復位三種方式。本設計采用按鍵電平復位。按鍵電平復位是通過復位端經(jīng)電阻與電源接通實現(xiàn),如下圖所示。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
圖3.3 AT89C51最小系統(tǒng)
3.3 指示燈及倒計時模塊
   (1)指示燈模塊:
   設計電路中每個路口的控制信號燈應有三個,即紅燈、黃燈、綠燈各一個。因此,本電路的設計中應用到紅燈、黃燈、綠燈個四個。同一方向的兩個路口的同一顏色指示燈是同時亮滅,為簡化電路,可讓這兩個燈接同一引腳。這樣可用P1口控制所有的指示燈。
按照設計,指示燈采用紅/綠/黃三種發(fā)光二極管。該組件及其與單片機引腳的接法如下:
表3.1  引腳接口
  
  
東西方向
南北方向
指示燈
引腳
P2.2
P2.0
P2.1
P2.3
P2.4
P2.5
   (2)倒計時模塊:
由于黃燈3秒閃爍時間不單另計時,四個路口的倒計時是同步的。兩位的倒計時采用兩個八位的七段數(shù)碼顯示管。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg
圖3.4 倒計時顯示模塊
3.4系統(tǒng)總體電路圖
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg
圖3.5 系統(tǒng)總體電路圖
4.系統(tǒng)軟件設計簡介
4.1 系統(tǒng)主程序流程
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg
圖4.1 系統(tǒng)主程序流程圖
開機上電便處于正常運行狀態(tài),東西方向通行40秒后變?yōu)槟媳狈较蛲ㄐ?0秒,如此70秒循環(huán)一次,使得東西方向和南北方向交替通行。
顯示系統(tǒng)則顯示到下一次改變通行方向所剩的時間,利于司機調(diào)整車輛狀況。每到通行方向轉(zhuǎn)換時,正在通行的方向綠燈熄滅,變?yōu)辄S燈閃爍,提醒司機注意通行方向的改變,避免不必要的危險。
延時方法可以有兩種,一種是利用MCS-51內(nèi)部定時器才生溢出中斷來確定1秒的時間,另一種是采用軟延時的方法。本程序的倒計時采用軟件延時。     
5.Proteus軟件仿真5.1 Proteus軟件介紹
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image013.jpg
圖5.1 啟動頁面
    Proteus軟件是英國Labcenter electronics公司出版的EDA工具軟件,可完成從原理圖布圖、PCB設計、代碼調(diào)試到單片機與外圍電路的協(xié)同仿真,真正實現(xiàn)了從概念到產(chǎn)品的完整設計,是目前世界上唯一將電路仿真軟件、PCB設計軟件和虛擬模型仿真軟件三合一的設計平臺,其處理器模型支持8051、HC11、PIC、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。Proteus軟件主要具有以下特點:
(1)具有強大的原理圖繪制功能。
(2)實現(xiàn)了單片機仿真和SPICE電路仿真相結(jié)合。具有模擬電路仿真、數(shù)字電路仿真、單片機及其外圍電路的系統(tǒng)仿真、RS232動態(tài)仿真、I2
C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器等。
(3)支持主流單片機系統(tǒng)的仿真。目前支持的單片機類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。
(4)提供軟件調(diào)試功能。具有全速、單步、設置斷點等調(diào)試功能,同時可以觀察各變量以及寄存器等的當前狀態(tài),并支持第三方編譯和調(diào)試環(huán)境,如wave6000、Keil等軟件。file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image015.jpg
圖5.2 軟件預覽頁面5.2  交通控制系統(tǒng)Proteus仿真
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image017.jpg
圖5.2 交通控制系統(tǒng)運行(南北通行)
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image019.jpg
圖5.3 交通控制系統(tǒng)運行(南北等待)
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image021.jpg
圖5.4 交通控制系統(tǒng)運行(東西通行)
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image023.jpg
圖5.5 交通控制系統(tǒng)運行(東西等待)
6.總結(jié)
    隨著科學技術發(fā)展的日新日異,單片機已經(jīng)成為當今計算機應用中空前活躍的領域,在生活中可以說得是無處不在,因此作為二十一世紀的大學來說掌握單片機的開發(fā)技術是十分重要的。單片機作為我們的主要專業(yè)課之一,雖然在開始學習時我對這門課并沒有什么興趣,覺得那些程序指令枯燥乏味,但在這次課程設計后我發(fā)現(xiàn)自己在一點一滴的努力中對單片機的興趣也在逐漸增加。
    在設計中,我對單片機系統(tǒng)有了一個更深刻的認識。通過此次課程設計,熟練掌握了匯編語言的編程方法,進一步熟悉了外部中斷的使用方法。在參與硬件設計的同時,我學到了如何通過使用仿真軟件Proteus,深化了對軟硬件聯(lián)合調(diào)試的意義的理解。
    作為一名自動化專業(yè)的學生,單片機的課程設計是很有意義的,在這個過程中可以學會如何把自己平時所學的東西應用到實際中。雖然我對這門課懂的并不多,很多基礎的東西都還沒有很好的掌握,覺得有點難,但是靠著這兩個多星期的學習突擊,自己開始主動學習并逐步從基礎慢慢開始弄懂它。我認為這個收獲應該說是相當大的。我覺得課程設計反映的是一個從理論到實際應用的過程,這個過程對缺乏實際經(jīng)驗的我們是非常重要的。通過這次單片機課程設計使我認識到自身知識及能力的薄弱,更讓我知道實踐的重要性。在以后的學習過程中,我會更加努力學習單片機的相關知識和應用,真正能夠運用單片機組成的微控制系統(tǒng)解決各種實際的問題。


參考文獻
[1]李群芳.《單片機原理及接口技術》.北京:電子工業(yè)出版社,2008
附錄:源程序代碼
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar j,k,m,n,temp1,temp2,aa,bb;
sbit sh=P2^1;
sbit sl=P2^0;
sbit so=P2^2;
sbit zh=P2^5;
sbit zl=P2^4;
sbit zo=P2^3;

sbit shiz=P1^1;
sbit gez=P1^0;
sbit shis=P1^2;
sbit ges=P1^3;

uchar code table[]={
0xed,0x81,0xf4,0xb5,
0x99,0x3d,0x7d,0x85,
0xfd,0xbd};
void display(uchar j,k,m,n);
void delay(uint z);
void init();
void main()
{
init();
while(1)
{

       if(bb==20)
       {
         bb=0;
         aa++;
         }
       if(aa<=32)
         {
           P2=0;
           zo=1;
           sl=1;
           temp1=36-aa;
           j=temp1/10;
           k=temp1%10;
           temp2=33-aa;
           m=temp2/10;
           n=temp2%10;
           
             }

       if(aa>32&&aa<=35)
         {
           P2=0;
           zo=1;
           sh=1;
           temp1=36-aa;
           j=temp1/10;
           k=temp1%10;
           m=j;
           n=k;
             }
       if(aa>35&&aa<=67)
         {
           P2=0;
           zl=1;
           so=1;
           temp1=68-aa;
           j=temp1/10;
           k=temp1%10;
           temp2=71-aa;
           m=temp2/10;
           n=temp2%10;
           
             }
       if(aa>67&&aa<=70)
         {
           P2=0;
           zh=1;
           so=1;
           temp1=71-aa;
           j=temp1/10;
           k=temp1%10;
           m=j;
           n=k;
              }

       if(aa>70)
         aa=0;
      display(j,k,m,n);
}
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void display(uchar j,k,m,n)
{
        shiz=0;
        P0=table[j];
        delay(1);
        shiz=1;
        
        gez=0;
        P0=table[k];
        delay(1);
        gez=1;
         
        shis=0;
        P0=table[m];
        delay(1);
        shis=1;
     
        ges=0;
        P0=table[n];
        delay(1);
        ges=1;
}

void init()
{
temp1=0;
temp2=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
    shiz=1;
    gez=1;
    shis=1;
    ges=1;
    bb=0;
    aa=0;
    P2=0;
}

void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
bb++;
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:532257 發(fā)表于 2019-6-29 14:34 | 只看該作者
怎么下載
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表