找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

51單片機(jī)交通燈(四個(gè)方向)word格式設(shè)計(jì)報(bào)告與源碼下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
《微型計(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ī)

評(píng)語(yǔ):

基于單片機(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í)間顯示程序。


  • 2.2相應(yīng)程序代碼

定時(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ù)器賦初值

  • 相應(yīng)中斷服務(wù)子程序

。希遥              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

  • 數(shù)碼管動(dòng)態(tài)顯示

用于四個(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ī)源程序如下:
  1. #include<reg52.h>
  2. #include<LED.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar time,second,seconde,miao1,miao0;
  6. sbit smg1=P2^5;//低位
  7. sbit smg2=P2^6;//東西高位
  8. sbit smg3=P2^7;//南北高位
  9. uchar code table1[]={0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f};
  10. uchar code table2[]={0x6d,0x66,0x4f,0x5b,0x06,0x3f};
  11. uchar code table3[]={0x4f,0x5b,0x06,0x3f,0x06,0x3f};
  12. void display(uchar miao1,miao0);
  13. void delay(uint z);
  14. void init();
  15. void LED();
  16. void EW_LED();
  17. void NS_LED();
  18. void main()
  19. {        
  20.         init();//初始化子程序
  21.         while(1)
  22.         {
  23.                 display(miao1,miao0);
  24.                 LED();
  25.         }
  26. }

  27. void delay(uint z)
  28. {
  29.         uint x,y;
  30.         for(x=z;x>0;x--)
  31.                 for(y=110;y>0;y--);
  32. }

  33. void display(uchar miao1,miao0)
  34. {
  35.         smg1=0;
  36.         P0=table1[miao0];
  37.         delay(3);
  38.         smg1=1;
  39.         if(seconde<60)
  40.         {
  41.                 smg2=0;
  42.                 P0=table2[miao1];
  43.                 delay(3);
  44.                 smg2=1;        
  45.                 smg3=0;
  46.                 P0=table3[miao1];
  47.                 delay(3);
  48.                 smg3=1;        
  49.         }               
  50.         else if(seconde>=60)
  51.         {
  52.                 smg3=0;
  53.                 P0=table2[miao1];
  54.                 delay(3);
  55.                 smg3=1;        
  56.                
  57.                 smg2=0;
  58.                 P0=table3[miao1];
  59.                 delay(3);
  60.                 smg2=1;        
  61.         }
  62. }

  63. void init()
  64. {        
  65.         smg1=0;
  66.         smg2=0;
  67.         smg3=0;
  68.         P0=0xff;
  69.         TMOD=0x01;
  70.         TH0=0x3c;
  71.   TL0=0xb0;
  72.         EA=1;
  73.         ET0=1;
  74.         TCON=0x10;
  75.         second=0;
  76.         seconde=0;
  77. }

  78. void timer0() interrupt 1
  79. {
  80.         TH0=0x3c;
  81.   TL0=0xb0;
  82.         time++;
  83.         if(time==20)
  84.         {
  85.                 time=0;
  86.                 second++;
  87.                 seconde++;
  88.         }
  89.         if(second>=60)
  90.         {
  91.                 second=0;
  92.         }
  93.         miao0=second%10;
  94.         miao1=second/10;
  95.         if(seconde>=120)
  96.                 seconde=0;
  97. }
  98. void LED()
  99. {
  100.         if(seconde<60)
  101.         {
  102.                 P1=0x12;//60s內(nèi)東西紅燈亮
  103.                 NS_LED();
  104.         }
  105.         
  106.         else if(seconde>=60)
  107.         {
  108.                 P3=0x12;//60s以上南北紅燈亮
  109.                 EW_LED();
  110.         }
  111. }
  112. void NS_LED()
  113. {
  114.         if(seconde<36)
  115.         {
  116.                 P3=0x28;//36s南北綠燈亮
  117.         }
  118.         else if(seconde>=36&&seconde<40)
  119.         {
  120.                 NSRP=1;
  121.                 NSGP=0;//人行道綠燈滅,紅燈亮
  122.                 NSG=0;
  123.                 NSY=seconde%2;//南北綠燈滅,黃燈閃爍
  124.         }
  125.         else if(seconde>=40&&seconde<60)
  126.         {
  127.                 P3=0x11;//南北左轉(zhuǎn)燈亮;人行紅燈亮
  128.         }
  129. }
  130. void EW_LED()
  131. {
  132.         if(seconde>=60&&seconde<96)
  133.         {
  134.                 P1=0x28;//東西綠燈亮
  135.         }
  136.         else if(seconde>=96&&seconde<100)
  137.         {
  138.                 EWRP=1;
  139.                 EWGP=0;//人行綠燈滅,紅燈亮
  140.                 EWG=0;
  141.                 EWY=seconde%2;//東西綠燈滅,黃燈閃
  142.         }
  143.         else
  144.         {
  145.                 P1=0x11;//東西左轉(zhuǎn)燈亮,人行紅燈亮;
  146.         }

  147. }












  148. ……………………

  149. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼


所有資料51hei提供下載(word格式的設(shè)計(jì)報(bào)告文件):
交通燈設(shè)計(jì).rar (9.99 MB, 下載次數(shù): 112)


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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:337199 發(fā)表于 2018-5-24 12:02 | 只看該作者
朋友 能不能把你pcb的打印圖發(fā)一份給我啊 急用
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表