《微型計(jì)算機(jī)系統(tǒng)》 課程設(shè)計(jì) 題目名稱:基于單片機(jī)的交通燈控制系統(tǒng)設(shè)計(jì) 專業(yè):電氣工程及其自動(dòng)化 班級(jí):15級(jí)1班 姓名:趙* 學(xué)號(hào):201*58 指導(dǎo)教師:辛*平 青島理工大學(xué)自動(dòng)化工程學(xué)院 課程設(shè)計(jì)任務(wù)書(shū) 課程名稱:微型計(jì)算機(jī)系統(tǒng) 設(shè)計(jì)題目:基于單片機(jī)的交通燈控制系統(tǒng)設(shè)計(jì) 系統(tǒng)要求: 可用紅、黃、綠三種顏色發(fā)光二極管和兩位LED數(shù)碼管模擬交通燈的變化規(guī)律: - 首先,東西路口紅燈亮,同時(shí)開(kāi)始60秒倒計(jì)時(shí);
- 南北路口“直行”綠燈亮,同時(shí)開(kāi)始40秒倒計(jì)時(shí),南北人行道綠燈亮。當(dāng)南北路口倒計(jì)時(shí)至4秒時(shí),黃燈開(kāi)始閃爍,南北人行道紅燈亮;倒計(jì)時(shí)至0秒時(shí),直行燈變紅,左轉(zhuǎn)綠燈亮,同時(shí)開(kāi)始20秒倒計(jì)時(shí)。當(dāng)20秒倒計(jì)時(shí)結(jié)束時(shí),南北路口紅燈亮,開(kāi)始60秒倒計(jì)時(shí);
- 東西路口直行綠燈亮,開(kāi)始40秒倒計(jì)時(shí),東西人行道綠燈亮;按照上述變化規(guī)律依次循環(huán)。
硬件設(shè)計(jì): - 最小系統(tǒng)設(shè)計(jì): 51單片機(jī)為本設(shè)計(jì)的控制器,包括外擴(kuò)ROM、RAM(其大小由設(shè)計(jì)者自己設(shè)計(jì)),系統(tǒng)時(shí)鐘電路、復(fù)位電路等構(gòu)成的最小系統(tǒng);
- 接口電路的設(shè)計(jì):設(shè)計(jì)者擴(kuò)展一個(gè)并行接口〔8155〕;
- 鍵盤(pán)設(shè)計(jì):由設(shè)計(jì)者根據(jù)需要設(shè)計(jì)鍵盤(pán)的數(shù)量
- 顯示設(shè)計(jì):采用LED數(shù)碼管顯示時(shí)間,顯示電路根據(jù)顯示的內(nèi)容設(shè)計(jì);采用三種顏色(紅、黃、綠)的發(fā)光二極管模擬交通燈;有開(kāi)機(jī)顯示狀態(tài)(如顯示888888);
- 在完成基本設(shè)計(jì)功能的基礎(chǔ)上可以另加其他功能。
軟件設(shè)計(jì): 1)主程序設(shè)計(jì) 2)各功能子程序設(shè)計(jì) 其他要求: - 每位同學(xué)獨(dú)立完成本設(shè)計(jì)。
- 依據(jù)題目要求,提出系統(tǒng)設(shè)計(jì)方案。
- 設(shè)計(jì)系統(tǒng)電路原理圖。
- 調(diào)試系統(tǒng)硬件電路、功能程序。
- 編制課程設(shè)計(jì)報(bào)告書(shū)并裝訂成冊(cè),報(bào)告書(shū)內(nèi)容(按順序)
(1)報(bào)告書(shū)封面 (2)課程設(shè)計(jì)任務(wù)書(shū) (3)系統(tǒng)設(shè)計(jì)方案的提出、分析 (4)系統(tǒng)中典型電路的分析 (5)系統(tǒng)軟件結(jié)構(gòu)框圖 (6)系統(tǒng)電路原理圖 (7)源程序 (8)課設(shè)字?jǐn)?shù)不少于3000字 基于單片機(jī)的交通燈控制系統(tǒng)設(shè)計(jì) 摘要: 當(dāng)你路過(guò)一個(gè)十字路口時(shí),你是否注意到各個(gè)方向車輛和信任有條不紊的通過(guò)十字路口。這樣井然有序的情景靠什么來(lái)實(shí)現(xiàn)呢?靠的是交通燈控制系統(tǒng)。在論文中我使用STC89C51作為主控單元。通過(guò)單片機(jī)芯片的P1口和P2口分別控制東西方向和南北方向紅黃綠燈的點(diǎn)亮。通過(guò)單片機(jī)芯片STC89C51的RXD和TXD控制數(shù)碼管的顯示時(shí)間。采用發(fā)光二極管來(lái)實(shí)現(xiàn)交通燈的點(diǎn)亮,由數(shù)碼管實(shí)現(xiàn)時(shí)間的顯示。該系統(tǒng)不僅僅具有交通等的基本功能還有倒計(jì)時(shí),還可以通過(guò)按鍵在緊急事件中四個(gè)方向都設(shè)置為紅燈緊急模式。當(dāng)然也可以通過(guò)按鍵來(lái)設(shè)置倒計(jì)時(shí)時(shí)間,使系統(tǒng)更加符合實(shí)際交通情況。 我設(shè)計(jì)的交通燈控制系統(tǒng)可以較好的模擬十字路口出現(xiàn)的交通狀況,使行人和車輛能有序的通行。 關(guān)鍵詞:交通控制系統(tǒng) 單片機(jī) AT89C51 數(shù)碼管 按鍵 LED 內(nèi)容 1系統(tǒng)方案論證 1.1設(shè)計(jì)方案 方案一:控制系統(tǒng)主要控制東西方向和南北方向交通狀況,系統(tǒng)以單片機(jī)芯片STC89C51為主控單元,通過(guò)控制三種顏色LED燈的亮滅來(lái)指導(dǎo)個(gè)車道通行,上電時(shí)復(fù)位系統(tǒng)使系統(tǒng)進(jìn)入運(yùn)行狀態(tài)?傮w框圖如下:(見(jiàn)51hei附件)
1.2功能概述 在東西方向和南北方向的十字路口分別設(shè)立紅黃綠交通指示燈,用數(shù)碼管倒計(jì)時(shí)顯示。正常情況下兩個(gè)主干線上的紅黃綠燈進(jìn)行交換。紅燈亮表示禁止通行,綠燈亮表示可以通行,每次綠燈變紅燈之前,黃燈亮五秒,方便那些未能及時(shí)通過(guò)十字路口的車輛能繼續(xù)通過(guò)。十字路口設(shè)立數(shù)碼管有倒計(jì)時(shí)功能,方便人們直關(guān)把握通過(guò)時(shí)間。本設(shè)計(jì)也考慮緊急情況,當(dāng)按下緊急模式按鍵后,四個(gè)方向紅燈都會(huì)常亮。對(duì)于夜晚車輛比較少,本設(shè)計(jì)設(shè)計(jì)了夜晚模式,按下按鍵后四個(gè)方向黃燈會(huì)常亮。 2系統(tǒng)硬件設(shè)計(jì) 2.1交通信號(hào)燈控制系統(tǒng)的組成 2.1.1 ATC89C51芯片 選用的ATC89C51與同系列AT89C51在功能上有明顯的提高,最突出的是可以實(shí)現(xiàn)在線編程。用于系統(tǒng)的總控制。其主要功能列舉如下: - 為一般控制應(yīng)用的8位單片機(jī)
- 內(nèi)部具有時(shí)鐘振蕩器
- 內(nèi)部程序存儲(chǔ)器(ROM)位4KB
- 內(nèi)部數(shù)據(jù)存儲(chǔ)器(RAM)為128B
- 外部程序存儲(chǔ)器可擴(kuò)充至64KB
- 外部數(shù)據(jù)存儲(chǔ)器可擴(kuò)充至64KB
- 32條雙向輸入線,且每條均可以單獨(dú)做I/O的控制
- 5個(gè)中斷源
- 2組獨(dú)立的16位定時(shí)器
- 1個(gè)全雙工串行通信端口
- 單片機(jī)芯片提供位邏輯運(yùn)算指令
單片機(jī)引腳圖如下: 
2.1.2交通燈控制系統(tǒng)構(gòu)成 芯片ATC89C51一片,2段共陰極數(shù)碼管四個(gè),紅黃綠發(fā)光二極管各四個(gè),電阻若干,晶振一個(gè),電容若干,按鍵若干。 交通燈控制系統(tǒng)結(jié)構(gòu)框圖:(見(jiàn)51黑附件) 系統(tǒng)各部分工作原理:采用單片機(jī)的I/O口P0口通過(guò)上拉電阻和交通燈相連接,P3.0、P3.1口接到數(shù)碼管控制位上,控制數(shù)碼管的顯示,程序放在ATC89C51單片機(jī)的ROM中來(lái)設(shè)置初始時(shí)間,在十字路口的四組紅、黃、綠交通燈中,由單片機(jī)的P1.5—P1.7、P1.0—P1.2、P2.5—P2.7、P2.0—P2.2分別控制東西南北方向的三色燈。由于交通燈為發(fā)光二極管并且陽(yáng)極通過(guò)限流電阻與電源正極相連,因此I/O口輸出電平時(shí),與之相連的指示燈才會(huì)點(diǎn)亮,然后通過(guò)數(shù)碼管倒計(jì)時(shí)時(shí)間。I/O口輸出高電平時(shí),相應(yīng)指示燈會(huì)滅。由于ATC89C51本身集成了看門(mén)狗指令,當(dāng)系統(tǒng)出現(xiàn)異常時(shí)看門(mén)狗會(huì)發(fā)出溢出中斷。通過(guò)專用的端口輸出,引起RESET復(fù)位信號(hào)復(fù)位系統(tǒng)。 2.2各單元電路模塊功能 2.2.1時(shí)鐘電路模塊 本時(shí)鐘電路由一個(gè)晶體振蕩器12MHz和兩個(gè)30pF的瓷片電容組成。時(shí)鐘電路用于產(chǎn)生單片機(jī)工作所需的時(shí)鐘信號(hào),而是需所研究的是指令執(zhí)行中各信號(hào)之 間的相互關(guān)系。單片機(jī)本身就是一個(gè)復(fù)雜的同步時(shí)序電路,為了保證同步工作方式的實(shí)現(xiàn),電路應(yīng)在唯一的時(shí)鐘信號(hào)控制下嚴(yán)格的工作。其電路圖所示: 2.2.2復(fù)位電路模塊 電容在上接高電平,電阻在下接低電平,中間為RST。這種復(fù)位電路為高電平復(fù)位。其工作原理是:通電時(shí),電容兩端相當(dāng)于是短路,于是RST引腳上為高電平,然后電源通過(guò)電容對(duì)電阻充電,RST端電壓慢慢下降,降到一定程度,即為低電平,單片機(jī)開(kāi)始正常工作。其電路如下: 2.2.3信號(hào)燈輸出控制模塊 路口交通燈指示采用紅、黃、綠發(fā)光二極管進(jìn)行提示。其電路如下: 2.2.4時(shí)間顯示電路模塊 本系統(tǒng)使用數(shù)碼管完成倒計(jì)時(shí)顯示功能。以東西方向?yàn)槔,?shù)碼管顯示的數(shù)值從綠燈的設(shè)置時(shí)間最大值往下減,每秒鐘減1,一直減到零。然后又從紅燈的設(shè)置時(shí)間最大值往下減,一直減到零。接下來(lái)又顯示綠燈時(shí)間,如此循環(huán)。系統(tǒng)共有4個(gè)兩位LED數(shù)碼管,分別放在模擬交通燈的上方。路口通行剩余時(shí)間采用紅色7段數(shù)碼管顯示,采用共陰極數(shù)碼管,如用單機(jī)IP0口加上拉電阻驅(qū)動(dòng),P3.0/P3.1口來(lái)控制數(shù)碼管的位。其顯示電路如下: 2.2.5按鍵輸入模塊 由于該系統(tǒng)具有夜間模式,緊急情況模式和交通燈倒計(jì)時(shí)時(shí)間設(shè)定功能,所有需要加上這些功能鍵,如下圖所示:
3系統(tǒng)軟件設(shè)計(jì)
3.2延時(shí)的設(shè)定 3.2.1 計(jì)數(shù)器初值計(jì)算 定時(shí)器工作時(shí)必須給計(jì)數(shù)器送初值,這個(gè)值是送到TH和TL中的。他是以加法記數(shù)的,并能從全1到全0自動(dòng)產(chǎn)生溢出中斷請(qǐng)求。因此,可以把計(jì)數(shù)器記滿為零所需的計(jì)數(shù)值設(shè)定為C和計(jì)數(shù)初值設(shè)定為T(mén)C可得到如下計(jì)算公式: TC=M-C 式中,M為計(jì)數(shù)器模值,該值與計(jì)數(shù)器工作方式有關(guān)。在方式0時(shí)M為 2^13;在方式1時(shí)M的值為2^16;在方式2和3中為2^8。 算法公式:T=(M-TC)T(計(jì)數(shù))或TC=M-T/T(計(jì)數(shù)) T(計(jì)數(shù))是單片機(jī)時(shí)鐘周期T(clk)的12倍;TC為定時(shí)的初值 如果單片機(jī)的主脈沖頻率為T(clk)12MHz,經(jīng)過(guò)12分頻 方式0。裕停粒兀剑玻蓿保常蔽⒚睿剑.192毫秒 方式1 TMAX=2^16*1微妙=65.536毫秒 實(shí)現(xiàn)1秒鐘方法: 采用在主程序中設(shè)定一個(gè)初值為20的軟件計(jì)數(shù)器和使T1定時(shí)50毫秒。 這樣每當(dāng)T1到50毫秒時(shí)CPU就響應(yīng)他的溢出中斷請(qǐng)求,進(jìn)入他的中斷服務(wù)子程序。在中斷服務(wù)子程序中,CPU先使軟件計(jì)數(shù)器減1,然后判斷他是否為零。為0表示1秒已到可以返回到輸出時(shí)間顯示程序。
定時(shí)器需定時(shí)50毫秒,故T1工作于方式1。 初值計(jì)算:TC=M-T/T(計(jì)數(shù))=2^16-50ms/1us=15536=3CB0H 延時(shí)程序: START:MOV TMOD,#10H ;令TO為定時(shí)器方式1 。停希 TH0,#3CH ;裝入定時(shí)器初值 。停希 TL0,#0B0H 。樱牛裕隆。牛 ;打開(kāi)總中斷 SETB。牛裕 ;開(kāi)T1中斷 SETB。牛 ;啟動(dòng)T1計(jì)數(shù)器 。茫蹋摇 。疲蹋粒牵 。茫蹋摇 。疲蹋粒牵 。茫蹋 FLAG3 。停希帧 。遥,#20H ;軟件計(jì)數(shù)器賦初值 。希遥 001BH LJMP。模樱 ORG。埃常埃埃 DSD:INC R3 MOV。裕龋埃#常茫 ;重裝定時(shí)器初值 。停希帧。裕蹋,#B0H 。茫剩危拧。遥,#20,FH 。模牛谩。遥 。模牛谩。遥 。停希帧。遥,#00H 。疲龋骸。遥牛裕 程序的軟件延時(shí): 單片機(jī)的工作頻率為12MHz。機(jī)器周期與主頻有關(guān),機(jī)器周期是主頻的12倍,所以一個(gè)機(jī)器周期的時(shí)間為12*(1/12M)=1us?梢灾谰唧w每條指令的周期數(shù),這樣就可以通過(guò)指令的執(zhí)行條數(shù)來(lái)確定1秒的時(shí)間。 具體的延時(shí)程序分析: DELY: MOV R4,#80H ;延時(shí)一秒主程序 DE2: LCALL DELAY1 DJNE R4,DE2 RET DELAY1: MOV R4,#00H ;延時(shí)125us子程序 D1: MOV R5,DL2 DJNE R4,D1 RET DELAY1為一個(gè)雙重循環(huán),循環(huán)次數(shù)為256*256=65536次,所以延時(shí)時(shí)間=65536*2=131072us約為125ms。 DELY R4設(shè)置為初值8,主延時(shí)程序循環(huán)8次,所以125ms*8=1s 用于四個(gè)數(shù)碼管的倒計(jì)時(shí)顯示,代碼如下: sbit smg1=P3^0; //定義南北方向數(shù)碼管低位 sbit smg2=P3^1; //定義南北方向數(shù)碼管高位 sbit smg1=P3^2; //定義東西方向數(shù)碼管低位 sbit smg2=P3^3; //定義東西方向數(shù)碼管高位 void djsxs() { int b1=0,b2=0; b1=djs/10; //將倒計(jì)時(shí)時(shí)間的高位賦予b1 b2=djs%10; //將倒計(jì)時(shí)時(shí)間的低位賦予b2 P0=table[b1]; smg1=0; delayms(3); smg1=1; //顯示b1 P0=table[b2]; smg2=0; delayms(3); smg2=1; //顯示b2 P0=table[b1]; smg3=0; delayms(3); smg3=1; //顯示b1 P0=table[b2]; smg4=0; delayms(3); smg4=1; //顯示b2
仿真電路圖:
實(shí)物: 
總結(jié):
經(jīng)過(guò)我反復(fù)思考及驗(yàn)證,逐漸完善電路以及程序 bug,具體程序及電路圖請(qǐng)?jiān)斠?jiàn)附錄。通過(guò)此次課程設(shè)計(jì)的學(xué)習(xí),我已掌握老師課堂所述內(nèi)容,并應(yīng)用于實(shí)踐中,在設(shè)計(jì)及過(guò)程中,發(fā)現(xiàn)自己好多知識(shí)都掌握不扎實(shí),通過(guò)詢問(wèn)其他同學(xué),以及查閱資料等,已逐步掌握未扎實(shí)的內(nèi)容,為此,我從心底不免升起一份感激之情,感謝老師為了我們著想,老師謝謝您!
單片機(jī)源程序如下:
- #include<reg52.h>
- #include<LED.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar time,second,seconde,miao1,miao0;
- sbit smg1=P2^5;//低位
- sbit smg2=P2^6;//東西高位
- sbit smg3=P2^7;//南北高位
- uchar code table1[]={0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f};
- uchar code table2[]={0x6d,0x66,0x4f,0x5b,0x06,0x3f};
- uchar code table3[]={0x4f,0x5b,0x06,0x3f,0x06,0x3f};
- void display(uchar miao1,miao0);
- void delay(uint z);
- void init();
- void LED();
- void EW_LED();
- void NS_LED();
- void main()
- {
- init();//初始化子程序
- while(1)
- {
- display(miao1,miao0);
- LED();
- }
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void display(uchar miao1,miao0)
- {
- smg1=0;
- P0=table1[miao0];
- delay(3);
- smg1=1;
- if(seconde<60)
- {
- smg2=0;
- P0=table2[miao1];
- delay(3);
- smg2=1;
- smg3=0;
- P0=table3[miao1];
- delay(3);
- smg3=1;
- }
- else if(seconde>=60)
- {
- smg3=0;
- P0=table2[miao1];
- delay(3);
- smg3=1;
-
- smg2=0;
- P0=table3[miao1];
- delay(3);
- smg2=1;
- }
- }
- void init()
- {
- smg1=0;
- smg2=0;
- smg3=0;
- P0=0xff;
- TMOD=0x01;
- TH0=0x3c;
- TL0=0xb0;
- EA=1;
- ET0=1;
- TCON=0x10;
- second=0;
- seconde=0;
- }
- void timer0() interrupt 1
- {
- TH0=0x3c;
- TL0=0xb0;
- time++;
- if(time==20)
- {
- time=0;
- second++;
- seconde++;
- }
- if(second>=60)
- {
- second=0;
- }
- miao0=second%10;
- miao1=second/10;
- if(seconde>=120)
- seconde=0;
- }
- void LED()
- {
- if(seconde<60)
- {
- P1=0x12;//60s內(nèi)東西紅燈亮
- NS_LED();
- }
-
- else if(seconde>=60)
- {
- P3=0x12;//60s以上南北紅燈亮
- EW_LED();
- }
- }
- void NS_LED()
- {
- if(seconde<36)
- {
- P3=0x28;//36s南北綠燈亮
- }
- else if(seconde>=36&&seconde<40)
- {
- NSRP=1;
- NSGP=0;//人行道綠燈滅,紅燈亮
- NSG=0;
- NSY=seconde%2;//南北綠燈滅,黃燈閃爍
- }
- else if(seconde>=40&&seconde<60)
- {
- P3=0x11;//南北左轉(zhuǎn)燈亮;人行紅燈亮
- }
- }
- void EW_LED()
- {
- if(seconde>=60&&seconde<96)
- {
- P1=0x28;//東西綠燈亮
- }
- else if(seconde>=96&&seconde<100)
- {
- EWRP=1;
- EWGP=0;//人行綠燈滅,紅燈亮
- EWG=0;
- EWY=seconde%2;//東西綠燈滅,黃燈閃
- }
- else
- {
- P1=0x11;//東西左轉(zhuǎn)燈亮,人行紅燈亮;
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (48.39 KB, 下載次數(shù): 42)
下載附件
2018-4-2 01:47 上傳
所有資料51hei提供下載(word格式的設(shè)計(jì)報(bào)告文件):
交通燈設(shè)計(jì).rar
(9.99 MB, 下載次數(shù): 112)
2018-3-31 19:40 上傳
點(diǎn)擊文件名下載附件
51交通燈 下載積分: 黑幣 -5
|