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