1 概述
1.1設(shè)計背景
如今隨著人們生活水平的提高,車輛越來越多,交通事故頻繁發(fā)生。交通信號燈的出現(xiàn),使交通得以有效管制,對于疏導(dǎo)交通流量,提高道路通行能力,減少交通事故有明顯效果。交通燈在城市交通中起著重要的作用,它與人們?nèi)粘I蠲芮邢嚓P(guān),是人們出行的安全保障。因此提供一個可靠、安全、便捷的多功能交通燈控制系統(tǒng)有著現(xiàn)實的必要性。為了解決這些問題,我們更應(yīng)該提高交通控制和管理水平,合理使用現(xiàn)有交通設(shè)施,充分發(fā)揮其能力,提高交通效率,促進和諧交通的建立。,
近年來隨著科技的飛速發(fā)展,單片機的應(yīng)用正在不斷地走向深入,同時帶動傳統(tǒng)控制檢測日新月益更新。在實時檢測和自動控制的單片機應(yīng)用系統(tǒng)中,單片機往往是作為一個核心部件來使用,僅單片機方面知識是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu),以及針對具體應(yīng)用對象特點的軟件結(jié)合,加以完善。
而本系統(tǒng)設(shè)計一個基于單片機的交通燈控制系統(tǒng)。能方便的對交通燈進行控制,使交通更和諧。
1.2設(shè)計目的
通過自主設(shè)計和調(diào)試交通紅綠燈系統(tǒng),綜合應(yīng)用單片機原理、微機原理、微機接口技術(shù)等課程方面的知識,熟練掌握單片機仿真系統(tǒng)的使用方法,達到提高綜合應(yīng)用相關(guān)知識的能力,掌握單片機系統(tǒng)設(shè)計全部設(shè)計過程的目的。
1.3設(shè)計思路
此系統(tǒng)核心元件為單片機AT89C51,對其編寫相關(guān)程序來控制交通信號燈和數(shù)碼管的時間顯示。系統(tǒng)共采用8個發(fā)光二極管來模擬各路交通信號燈,4個顯示倒計時的顯示器,通過倒計時的顯示這種方式顯示各個方向上允許通行或禁止通行的信號燈剩余的時間。在東西和南北兩個方向上這兩種狀態(tài)不斷循環(huán)。源程序采用C語言編寫,并通過kei1軟件進行編譯,最后倒入AT89C51單片機中,運行系統(tǒng)。設(shè)計好后通過proteus軟件仿真,并調(diào)試。
2 軟件設(shè)計
2.1keil簡介
Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、鏈接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(μVision)將這些部分組合在一起。運行Keil軟件需要WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。如果你使用C語言編程,那么Keil幾乎就是你的不二之選,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強大的軟件仿真調(diào)試工具也會令你事半功倍。
2.2proteus簡介
Proteus軟件是英國Lab Center Electronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是比較好的仿真單片機及外圍器件的工具。雖然國內(nèi)推廣剛起步,但已受到單片機愛好者、從事單片機教學(xué)的教師、致力于單片機開發(fā)應(yīng)用的科技工作者的青睞。
Proteus是英國著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計,真正實現(xiàn)了從概念到產(chǎn)品的完整設(shè)計。是世界上唯一將電路仿真軟件、PCB設(shè)計軟件和虛擬模型仿真軟件三合一的設(shè)計平臺,其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DSPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MATLAB等多種編譯器。
3 系統(tǒng)總體方案與硬件設(shè)計
3.1硬件電路各元件介紹
3.1.1核心芯片AT89C51單片機的說明
1.主要特性
(1)與MCS-51兼容
(2)4K字節(jié)可編程閃爍存儲器
(3)壽命:1000寫/擦循環(huán)
(4)數(shù)據(jù)保留時間:10年
(5)全靜態(tài)工作:0Hz-24Hz
(6)三級程序存儲器鎖定
(7)128*8位內(nèi)部RAM
(8)32可編程I/O線
(9)兩個16位定時器/計數(shù)器
(10)5個中斷源
(11)可編程串行通道
(12)低功耗的閑置和掉電模式
圖3-1 AT89C51
2.管腳說明
VCC:供電電壓。
GND:接地。
P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)或地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。
P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收,輸出4個
TTL門電流。P3口也可作為AT89C51的一些特殊功能口
RST :復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。
ALE/PR0G:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。
/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。
/EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
3.1.2兩位共陰七段數(shù)碼管
兩位共陰七段式數(shù)碼管其實就是將兩個一位八段式數(shù)碼接相應(yīng)的電路組合在一起。并引出兩控制端1和2,同過其電平的高低來控制兩個數(shù)碼管的高低位
工作。
圖3-2 兩段共陰七段數(shù)碼管
3.1.3其他元件說明
交通信號燈:采用紅、黃、綠三種顏色的二極管組成三色交通信號。
圖3-3 三色二極管
3.2總體電路工作原理
十字路口要有數(shù)字顯示裝置,作為時間提示,以便人們更直觀地把握時間。具體要求為:當(dāng)某方向綠燈亮?xí)r,置定時器為某一個數(shù)值,然后以每秒減1的計數(shù)方式工作,直至減到數(shù)為0,十字路口紅、綠燈交換,一次工作循環(huán)結(jié)束,進入另一個方向的工作循環(huán)。數(shù)碼顯示管就是用來顯示東西和南北兩個道口的紅黃綠三種顏色的燈的倒計時時間。
南北路處于禁止通行的狀態(tài),東西路處于允許通行的狀態(tài)。南北路亮紅燈時,東西路亮綠燈;南北路亮綠燈時,東西路亮紅燈。南北路亮紅燈時,東西路亮綠燈;當(dāng)綠燈時間減完之后,東西路換為黃燈,南北路仍為紅燈.這樣?xùn)|西路與南北路的時間同時減完。減完之后,東西路換為紅燈,南北路換為綠燈,再經(jīng)過一個綠燈時間,南北路換為黃燈,東西路仍為紅燈。這時東西路與南北路時間相同,同時減完。減完后,南北路為紅燈,東西路為綠燈。如此隔環(huán)下去。
整個設(shè)計滿足了任務(wù)的要求,即完成了四個狀態(tài)的轉(zhuǎn)換,完成了倒計時數(shù)碼管的顯示,所以這個系統(tǒng)的設(shè)計足以控制十字路口的交通燈正常變換,保證各道車輛的暢通運行。
4 程序設(shè)計
4.1系統(tǒng)流程圖
此系統(tǒng)主要以東西南北紅、綠、黃三種顏色的LED燈來表示交通燈組成交通紅綠燈管理系統(tǒng),紅燈等待時間為25秒,綠燈通行時間是20秒,相差的5秒時間為黃燈閃爍時間,用來提示行人和車輛,具體流程圖如下:
圖4-1 系統(tǒng)總流程圖
4.2源程序代碼
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define DIG0 0x01
#define DIG1 0x02
#define DIG2 0x03
#define DIG3 0x04
void delay(uint i);
void T0_init();
void MAX7219(uchar addr,uchar num);
void MAX7219_init();
void display();
sbit DIN=P3^0;
sbit LOAD=P3^1;
sbit CLK=P3^2;
sbit G1=P0^0;
sbit Y1=P0^1;
sbit R1=P0^2;
sbit G2=P1^0;
sbit Y2=P1^1;
sbit R2=P1^2;
uchar NS_S,NS_G,EW_S,EW_G;
uchar NS,EW;
uchar temp=0,i;
uchar code table[10]= {0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b}; //12ò???êy??1üêy×é
void delay(uint i)
{
uint j;
for(j=0;j
}
void T0_init()
{
TMOD=0X01;
TH0=0XD8;
TL0=0XF0;
ET0=1;
TR0=1;
}
void MAX_write(uchar ch)
{
uchar j,ads;
for(j=0;j<8;j++)
{
ads=ch&0x80;
CLK = 0;
if(ads)
DIN = 1;
else
DIN = 0;
ch=ch<<1;
CLK=1; //é?éy??£?DINμ?êy?YD′è?μ?7219
}
}
void MAX7219(uchar addr, uchar num)
{
LOAD = 0;
nop ();
MAX_write(addr);
nop ();
MAX_write(num);
nop ();
LOAD = 1;
}
void MAX7219_init()
{
MAX7219(0x0c,0x01);
MAX7219(0x0b,0x03); //éè??é¨?è·??§DIG0-3
MAX7219(0x0a,0x05);
MAX7219(0x09,0x00); //2éó?ò???·?ê? ,2?ò???
}
void display()
{
NS_S=NS/10;
NS_G=NS%10;
EW_S=EW/10;
EW_G=EW%10;
MAX7219(DIG0,table[NS_S]);
MAX7219(DIG1,table[NS_G]);
MAX7219(DIG2,table[EW_S]);
MAX7219(DIG3,table[EW_G]);
}
void T0_(void)interrupt 1
{
temp++;
TH0=0xD8;
TL0=0xF0;
if(temp==100)
{
temp=0;
NS--;
EW--;
if((NS==0)&&(EW==5)&&(i==0))
{
NS=5;
EW=5;
i=1;
}
if((NS==0)&&(EW==0)&&(i==1))
{
NS=25;
EW=20;
i=2;
}
if((NS==5)&&(EW==0)&&(i==2))
{
NS=5;
EW=5;
i=3;
}
if((NS==0)&&(EW==0)&&(i==3))
{
NS=20;
EW=25;
i=4;
}
}
display();
}
void main()
{
T0_init();
MAX7219_init();
EA=1;
NS=20;
EW=25;
while (1)
{
uint k;
display();
switch(i)
{
case 0:
R2=0;
G1=0;
break;
case 1:
G1=1;
Y1=0;
for(k=0;k<3;k++)
{
Y1=~Y1;
delay(10000);
}
break;
case 2:
G2=0;
R2=1;
R1=0;
Y1=1;
break;
case 3:
G2=1;
Y2=0;
for(k=0;k<3;k++)
{
Y2=~Y2;
delay(10000);
}
break;
case 4:
i=0;
R1=1;
break;
}
}
}
5 仿真測試
5.1軟件調(diào)試
整個程序是一個主程序調(diào)用各個子程序?qū)崿F(xiàn)功能的過程,要使主程序和整個程序都能平穩(wěn)運行,各個模塊的子程序的正確與平穩(wěn)運行必不可少,所以在軟件調(diào)試的最初階段就是把各個子程序進行分別調(diào)試。
(1)keil軟件中生成hex文件如圖所示::
圖5-1生成相應(yīng)程序hex的圖
(2)將keil程序下生成的文件導(dǎo)入AT89C51中,如圖所示:
圖5-2導(dǎo)入文件圖
5.2仿真調(diào)試
在keil中調(diào)試完成后,生成文件,再到proteus中進行仿真。首先在proteus中需要的元件依次找出來,根據(jù)電路所需要實現(xiàn)的功能畫好電路原理圖,當(dāng)檢查電路完全沒有錯誤后,雙擊芯片,再將在keil中生成的hex文件導(dǎo)入芯片,接著點擊play鍵開始進行電路仿真。其中,此次的交通燈整個中循環(huán)共有四個工作狀態(tài)。
5.1.1
5.2.1所需軟件查詢展示
圖5-3所需元件展示圖
5.2.2四種狀態(tài)展示
(1)狀態(tài)一:點擊play鍵,電路開始進行仿真,此時紅綠燈顯示的情況為:東西方向為綠燈亮,南北方向為紅燈亮,即東西方向通行,南北方向禁止通行,大東西方向通行時間為20秒,南北禁止通行時間為25秒,交通燈顯示狀態(tài)如圖所示。
圖5-4狀態(tài)一
(2)狀態(tài)二:在開始仿真經(jīng)過20秒后,黃燈開始閃爍,閃爍時間為5秒,紅綠燈的狀態(tài)將發(fā)生變化,即東西方向黃燈閃爍,顯示情況如圖所示。
圖5-5狀態(tài)二
(3)狀態(tài)三:此時紅綠燈顯示的情況為:東西方向為紅燈亮,南北方向為綠燈亮,即東西方向禁止通行,南北方向通行,東西方向禁止通行時間為25秒,南北通行時間為20秒,交通燈顯示狀態(tài)如圖所示。
圖5-6狀態(tài)三
(4)狀態(tài)四:經(jīng)過20秒后,黃燈開始閃爍,閃爍時間為5秒,紅綠燈的狀態(tài)將發(fā)生變化,即南北方向黃燈閃爍,顯示情況如圖所示。
圖5-7狀態(tài)四
5.3結(jié)果分析
本次交通信號燈設(shè)計基本滿足了所需要的要求,保證了行人和車輛可以順利通過,避免出現(xiàn)擁擠、堵車等現(xiàn)象,但設(shè)計也有不足,由于程序設(shè)計較為簡便,無法對具體的的路況進行適時地調(diào)整,無法通過對當(dāng)前道路的狀況進行智能化調(diào)節(jié),比如;早高峰和晚高峰期間的人流和車輛較多,可以適當(dāng)增加綠燈時間,減少紅燈時間,以此來減少道路擁擠。而中午和夜間人流量相對較少,可以僅閃爍黃燈來進行提示。
-
單片機
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634634 -
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1882瀏覽量
91063 -
LED顯示
+關(guān)注
關(guān)注
0文章
361瀏覽量
38032 -
AT89C51
+關(guān)注
關(guān)注
27文章
543瀏覽量
81184
發(fā)布評論請先 登錄
相關(guān)推薦
評論