目錄
一、設(shè)計背景
二、實現(xiàn)功能
三、 硬件電路設(shè)計說明
3.1?主控模塊電路設(shè)計
3.2?數(shù)碼管顯示電路設(shè)計
???????3.3?鍵盤電路設(shè)計
???????3.4?復(fù)位電路設(shè)計
???????3.5?時鐘電路設(shè)計
三、仿真演示
四、源程序
一、設(shè)計背景
? ? ? ?交通是城市經(jīng)濟(jì)活動的生命線,它在促進(jìn)城市經(jīng)濟(jì)發(fā)展和人民生活水平方面發(fā)揮著舉足輕重的作用。城市交通問題一直困擾著城市的發(fā)展和經(jīng)濟(jì)發(fā)展。城市道路數(shù)量的限制和汽車數(shù)量的不斷增加是造成城市擁堵的主要因素。城市路網(wǎng)中的交通流量持續(xù)增長,說明了車輛對道路承載能力的需求依然較大,且在近期內(nèi)不會發(fā)生變化。自從采用了電腦控制系統(tǒng)以來,無論在控制硬件上有多大的進(jìn)步,都沒有在控制邏輯上有過大的突破??梢哉f,在緩解擁堵和減少擁堵的同時,也缺少一個有效的應(yīng)對措施,尤其是在大規(guī)模的路網(wǎng)中。由于計算機(jī)的硬件性能和控制軟件的性能不匹配,導(dǎo)致了許多交通控制策略無法達(dá)到的效果。在少數(shù)情況下,有些新的控制策略可以被實施,但是他們沒有能夠改善以前的控制策略。缺乏實時控制策略,尤其是缺乏交通狀況,尤其是缺乏交通流量的情況下,可以說,目前還沒有成熟的交通控制方法。
? ? ? ?智能化、集成化是未來交通控制技術(shù)發(fā)展的方向和前沿方向,而基于交通規(guī)模復(fù)雜特性的控制結(jié)構(gòu)以及基于智能決策的阻塞處理技術(shù),是實現(xiàn)智能交通控制的核心和突破口。因此,對基于智能綜合技術(shù)的城市交通信號控制系統(tǒng)進(jìn)行研究,既有一定的理論意義,也有一定的實際意義。在城市交通控制系統(tǒng)中引入了智能控制技術(shù),使其能夠更好地適應(yīng)城市的發(fā)展。這一研究在長期內(nèi)有著重要的意義。
二、實現(xiàn)功能
? ? ? ?本設(shè)計采用AT89C51單片機(jī)最小系統(tǒng)以及外圍的按鍵、LED和數(shù)碼管顯示等部件,設(shè)計一個基于51單片機(jī)的交通燈。設(shè)計通過兩位一體共陽極數(shù)碼管實時顯示倒計時時間,并能通過按鍵實現(xiàn)模擬路口緊急情況交通燈狀態(tài)。本系統(tǒng)實用性強(qiáng)、操作簡單、擴(kuò)展功能強(qiáng)。系統(tǒng)框圖如下圖所示。
三、 硬件電路設(shè)計說明
3.1?主控模塊電路設(shè)計
? ? ? ?STC89單片機(jī)與傳統(tǒng)的51內(nèi)核單片機(jī)都具有兩個相同的管腳,XTAL1與XTAL2,這兩個為時鐘管腳。在常規(guī)的設(shè)計中大多數(shù)電子工程師都會在這兩個管腳上接入一個晶體振蕩器和兩個瓷片電容,組成一個外部的時鐘電路為單片機(jī)的工作提供一個基本的時序。單片機(jī)執(zhí)行的各種操作都必須在這個時間順序的控制下才能進(jìn)行,時鐘電路是由電容、晶體振蕩器和主芯片三種器件共同協(xié)調(diào)完成。雖然在理論上單片機(jī)內(nèi)部有自己的時鐘,但是如果不接外部時鐘電路,芯片的工作將變得十分的不穩(wěn)定。因此組成了一個內(nèi)部起振電路,這樣的一個電路可以產(chǎn)生本次設(shè)計所需要的時鐘脈沖。
???????3.2?數(shù)碼管顯示電路設(shè)計
? ? ? ? 顯示模塊采用的是2位共陽數(shù)碼管,通過軟件設(shè)計中的不同斷碼與位碼的編寫會點亮數(shù)碼管里面的led,從而顯示出數(shù)字能夠顯示重量等所有可用數(shù)字表示的參數(shù)。?本設(shè)計選用的共陽數(shù)碼管總共有10個引腳,這一類的數(shù)碼管中有8個段選引腳和2個位選引腳,該類數(shù)碼管的每一位的數(shù)碼管由7個條狀和一個點狀發(fā)光二極管管芯組成,對應(yīng)的段選分別為:a,b,c,d,e,f,g和dp以及4個位選引腳。根據(jù)共陽數(shù)碼管的內(nèi)部結(jié)構(gòu),每一個led燈的陽極為段選,陽極為位選,該類數(shù)碼管需要在程序中只需合理的編寫對應(yīng)的段碼和位碼,相對于其它的顯示元件而言代碼相對簡單實際操作也非??尚?。
???????3.3?鍵盤電路設(shè)計
? ? ? ? 因為本設(shè)計I/0口足夠用,鍵盤設(shè)計采用線性鍵盤,一個引腳通過按鍵接地,由程序控制掃描。通過按鍵按下,實現(xiàn)路口緊急狀態(tài)的切換。
???????3.4?復(fù)位電路設(shè)計
? ? ? AT89C51的復(fù)位輸入引腳RST為單片機(jī)提供了初始化的手段,可以使程序從指定處開始執(zhí)行,在AT89C51的時鐘電路工作后,只要RST引腳上出現(xiàn)超過兩個機(jī)器周期以上的高電平時,即可產(chǎn)生復(fù)位的操作,只要RST保持高電平,則AT89C51循環(huán)復(fù)位,只有當(dāng)RET由高電平變成低電平以后,AT89S52才從0000H地址開始執(zhí)行程序,本系統(tǒng)采用按鍵復(fù)位方式和上電復(fù)位方式的復(fù)位電路。
???????3.5?時鐘電路設(shè)計
? ? ? AT89C51雖然有內(nèi)部振蕩電路,但要形成時鐘,必須外接元件,所以實際構(gòu)成的振蕩時鐘電路需外接晶振以與兩個電容構(gòu)成并聯(lián)諧振電路接在放大器的反饋回路中,對接電容的值雖然沒有嚴(yán)格的要求,但電容的大小會影響振蕩頻率的高低,振蕩器的穩(wěn)定性,起振的快速性和溫度的穩(wěn)定性。晶振的頻率可在1.2MHZ~12MHZ之間任選,電容的典型值在20pf~100pf 之間選擇。由于本系統(tǒng)用到定時器,為了方便計算,采用了12M的晶振﹐采用電容選擇30pf 。
三、仿真演示
南北通行,通行時間25s
?南北通行即將轉(zhuǎn)東西通行,等待時間5s
?東西通行,通行時間25s文章來源:http://www.zghlxwxcb.cn/news/detail-483487.html
?按鍵觸發(fā)緊急狀態(tài),所有路口禁止通行文章來源地址http://www.zghlxwxcb.cn/news/detail-483487.html
四、源程序
#include<reg51.h> //我們對51單片機(jī)編程,要引用頭函數(shù)
//時間只修改下面兩行就可以了
#define T_GREEN 25 //綠燈時間
#define T_YELLOW 5 //黃燈時間
sbit led_A=P0^0; //數(shù)碼管位
sbit led_B=P0^1; //數(shù)碼管位
//***************led指示燈引腳定義*****************//
sbit dx_R=P0^2;
sbit dx_Y=P0^3;
sbit dx_G=P0^4;
sbit nb_R=P0^7;
sbit nb_Y=P0^6;
sbit nb_G=P0^5;
bit flag=0;
sbit key_stop=P3^3;
char N=T_GREEN; //初始時間是T_GREEN
char tab_disp[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共陽極碼表
/*延時子函數(shù)*/
void delay(int t ){while(t--);}
/*顯示子函數(shù)*/
void display(char dat)
{
led_A=led_B=0; //先位滅顯
P2=0XFF; //再段滅顯
P2=tab_disp[dat/10]; //賦顯示的數(shù)
if(dat/10)led_A=1;
delay(1000); //延時
P2=0XFF;led_A=led_B=0; //段滅顯 位滅顯
P2=tab_disp[dat%10]; //賦顯示的數(shù)
led_B=1;
delay(1000); //延時
}
//這個是循環(huán)顯示60遍顯示的函數(shù)
void deal(char m)
{
int t=60;
while(t--)display(m); //循環(huán)顯示60遍顯示的函數(shù)
}
void KEY() //按鍵函數(shù)
{
unsigned char save; //定義保存燈狀態(tài)的變量
if(key_stop==0) //按鍵是否按下
{
delay(20); //延時去抖
if(key_stop==0) //再次判斷按鍵是否按下
{
flag=1; //緊急狀態(tài)標(biāo)志位置1,進(jìn)入緊急通行狀態(tài)
save=P0; //保存燈的狀態(tài)
P0=0x84; //全部亮紅燈
while(key_stop==0); //按鍵釋放,當(dāng)按鍵一直按下的時候,程序就會一直執(zhí)行這里,直到按鍵按下
while(flag==1) //如果是緊急狀態(tài)就一直執(zhí)行下面的程序
{
if(key_stop==0) //在緊急狀態(tài)時判斷按鍵是否按下
{
delay(50); //延時去抖
if(key_stop==0) //再次判斷按鍵是否按下
{
flag=0; //緊急狀態(tài)標(biāo)志位清零,退出緊急狀態(tài)
P0=save; //LED燈恢復(fù)到之前狀態(tài)
while(key_stop==0); //按鍵釋放
}
}
}
}
}
}
/*主函數(shù)*/
void main(void)
{
char i;
EA=1; //全局中斷開關(guān)
IT1=1; //外部中斷下降沿有效
EX1=1;
while(1)
{
N=T_GREEN; //初始時間是T_GREEN
dx_R=1;dx_Y=0;dx_G=0; //指示燈0是亮,1是滅
nb_R=0;nb_Y=0;nb_G=1; //指示燈0是亮,1是滅
for(i=N;i>0;i--) //一秒一秒的減
{
deal(i);
KEY();
}
dx_R=1;dx_Y=0;dx_G=0; //指示燈0是亮,1是滅
nb_R=0;nb_Y=1;nb_G=0; //指示燈0是亮,1是滅
N=T_YELLOW; //時間變成T_YELLOW
for(i=N;i>0;i--) //一秒一秒的減
{
deal(i);
KEY();
}
dx_R=0;dx_Y=0;dx_G=1; //指示燈0是亮,1是滅
nb_R=1;nb_Y=0;nb_G=0; //指示燈0是亮,1是滅
N=T_GREEN; //時間變成T_GREEN
for(i=N;i>0;i--) //一秒一秒的減
{
deal(i);
KEY();
}
dx_R=0;dx_Y=1;dx_G=0; //指示燈0是亮,1是滅
nb_R=1;nb_Y=0;nb_G=0; //指示燈0是亮,1是滅
N=T_YELLOW; //時間變成T_YELLOW
for(i=N;i>0;i--) //一秒一秒的減
{
deal(i);
KEY();
}
}
}
到了這里,關(guān)于基于51單片機(jī)的交通燈Protues仿真設(shè)計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!