1. 程式人生 > >基於51微控制器的交通燈控制系統設計

基於51微控制器的交通燈控制系統設計

第一章 硬體設計與原理
以AT89C51微控制器為核心,起著控制作用。系統包括數碼管顯示電路、復位電路、時鐘電路、發光二級管電路和按鍵電路。設計思路分為六個模組:復位電路、晶振電路模組、AT89C51、數碼管顯示電路、發光二級管電路和按鍵電路這六個模組。

在這裡插入圖片描述

1.2 硬體設計分析
1.2.1 電源的設計
系統電源使用直流5伏。
由電腦USB介面提供電源。
USB是通用序列匯流排(Universal Serial Bus)介面的簡稱。它是目前使用比較廣泛的電腦介面之一,主要版本有1.0、1.1和最新的2.0三種版本。根據USB匯流排的工業標準,它可以提供額定功率為5V/500mA的電源供USB裝置使用。
1.2.2 微控制器最小系統
51微控制器是對目前所有相容intel 8031指令系統的微控制器的統稱。該系列微控制器的始祖是intel的8031微控制器,後來隨著技術的發展,成為目前廣泛應用的8為微控制器之一。微控制器是在一塊晶片內集成了CPU、RAM、ROM、定時器/計數器和多功能I/O口等計算機所需要的基本功能部件的大規模積體電路,又稱為MCU。51系列微控制器內包含以下幾個部件:
一個8位CPU;一個片內振盪器及時鐘電路;
4KB的ROM程式儲存器;
一個128B的RAM資料儲存器;
定址64KB外部資料儲存器和64KB外部程式儲存空間的控制電路;
32條可程式設計的I/O口線;
兩個16位定時/計數器;
一個可程式設計全雙工序列口;
5箇中斷源、兩個優先順序巢狀中斷結構。
如圖1-2-1所示為AT89C51微控制器基本構造,其基本效能介紹如下:
圖1-2-1 AT89C51微控制器

AT89C51本身內含40個引腳,32個外部雙向輸入/輸出(I/O)埠,同時內含2個外中埠,3個16位可程式設計定時計數器,2個全雙工序列通訊口,STC89C51RC可以按照常規方法進行程式設計,但不可以線上程式設計。其將通用的微處理器和Flash儲存器結合在一起,特別是可反覆擦寫的Flash儲存器可有效地降低開發成本。
AT89C51的主要特性如下表所示:

在這裡插入圖片描述

AT89C51為40腳雙列直插封裝的8位通用微處理器,採用工業標準的C51核心,在內部功能及管腳排布上與通用的8xc52相同,其主要用於會聚調整時的功能控制。功能包括對會聚主IC內部暫存器、資料RAM及外部介面等功能部件的初始化,會聚調整控制,會聚測試圖控制,紅外遙控訊號IR的接收解碼及與主機板CPU通訊等。主要管腳有:XTAL1(19腳)和XTAL2(18腳)為振盪器輸入輸出埠,外接12MHz 晶振。RST/Vpd(9腳)為復位輸入埠,外接電阻電容組成的復位電路。VCC(40腳)和VSS(20腳)為供電埠,分別接+5V電源的正負端。P0~P3 為可程式設計通用I/O腳,其功能用途由軟體定義,在本設計中,P0埠(32~39腳)被定義為N1功能控制埠,分別與N1的相應功能管腳相連線,13腳定義為IR輸入端,10腳和11腳定義為I2C匯流排控制埠,分別連線N1的SDAS(18腳)和SCLS(19腳)埠,12腳、27腳及28腳定義為握手訊號功能埠,連線主機板CPU的相應功能端,用於當前制式的檢測及會聚調整狀態進入的控制功能。
P0口:P0口是一組8位漏極開路型雙向I/O 口,也即地址/資料匯流排複用口。作為輸出口用時,每位能吸收電流的方式驅動8個TTL邏輯閘電路,對埠P0寫“1”時,可作為高阻抗輸入端用。在訪問外部資料儲存器或程式儲存器時,這組口線分時轉換地址(低8位)和資料匯流排複用,在訪問期間啟用內部上拉電阻。在Flash 程式設計時,P0口接收指令位元組,而在程式校驗時,輸出指令位元組,校驗時,要求外接上拉電阻。
P1口:P1是一個帶內部上拉電阻的8位雙向I/O口,P1的輸出緩衝級可驅動(吸收或輸出電流)4個TTL邏輯閘電路。對埠寫“1”,通過內部的上拉電阻把埠拉到高電平,此時可作輸入口。作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部訊號拉低時會輸出一個電流(IIL)。與AT89C51不同之處是,P1.0和P1.1還可分別作為定時/計數器2 的外部計數輸入(P1.0/T2)和輸入(P1.1/T2EX)。Flash程式設計和程式校驗期間,P1接收低8位地址。
P2口:P2是一個帶有內部上拉電阻的8 位雙向I/O口,P2的輸出緩衝級可驅動(吸收或輸出電流)4個TTL邏輯閘電路。對埠P2寫“1”,通過內部的上拉電阻把埠拉到高電平,此時可作輸入口,作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部訊號拉低時會輸出一個電流(IIL)。在訪問外部程式儲存器或16位地址的外部資料儲存器(例如執行MOVX @DPTR指令)時,P2口送出高8位地址資料。在訪問8位地址的外部資料儲存器(如執行MOVX @RI指令)時,P2口輸出P2鎖存器的內容。Flash程式設計或校驗時,P2亦接收高位地址和一些控制訊號。
P3口:P3口是一組帶有內部上拉電阻的8位雙向I/O口。P3口輸出緩衝級可驅動(吸收或輸出電流)4個TTL邏輯閘電路。對P3口寫入“1”時,它們被內部上拉電阻拉高並可作為輸入埠。此時,被外部拉低的P3口將用上拉電阻輸出電流(IIL)。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能P3口還接收一些用於Flash 閃速儲存器程式設計和程式校驗的控制訊號。
RST:復位輸入。當振盪器工作時,RST引腳出現兩個機器週期以上高電平將使微控制器復位。
ALE/PROG:當訪問外部程式儲存器或資料儲存器時,ALE(地址鎖存允許)輸出脈衝用於鎖存地址的低8位位元組。一般情況下,ALE仍以時鐘振盪頻率的1/6輸出固定的脈衝訊號,因此它可對外輸出時鐘或用於定時目的。要注意的是:每當訪問外部資料儲存器時將跳過一個AL脈衝。對Flash儲存器程式設計期間,該引腳還用於輸入程式設計脈衝(PROG)。如有必要,可通過對特殊功能暫存器(SFR)區中的8EH單元的D0位置位,可禁止ALE操作。該位置位後,只有一條 MOVX 和MOVC指令才能將ALE啟用。此外,該引腳會被微弱拉高,微控制器執行外部程式時,應設定ALE禁止位無效。
PSEN:程式儲存允許(PSEN)輸出是外部程式儲存器的讀選通訊號,當AT89C51由外部程式儲存器取指令(或資料)時,每個機器週期兩次PSEN有效,即輸出兩個脈衝。在此期間,當訪問外部資料儲存器,將跳過兩次PSEN訊號。
EA/VPP:外部訪問允許。欲使CPU僅訪問外部程式儲存器(地址為0000H—FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被程式設計,復位時內部會鎖存EA端狀態。如EA端為高電平(接Vcc端),CPU則執行內部程式儲存器中的指令。Flash儲存器程式設計時,該引腳加上+12V的程式設計允許電源Vpp,當然這必須是該器件是使用12V程式設計電壓Vpp。
XTAL1:振盪器反相放大器的及內部時鐘發生器的輸入端。
XTAL2:振盪器反相放大器的輸出端。
微控制器最小原理圖如圖1-2-2所示。
圖1-2-2 微控制器最小系統

微控制器最小系統說明:
時鐘訊號的產生:在MCS-51晶片內部有一個高增益反相放大器,其輸入端為晶片引腳XTAL1,其輸出端為引腳XTAL2。而在晶片的外部,XTAL1和XTAL2之間跨接晶體振盪器和微調電容,從而構成一個穩定的自激振盪器,這就是微控制器的時鐘振盪電路。
時鐘電路產生的振盪脈衝經過觸發器進行二分頻之後,才成為微控制器的時鐘脈衝訊號。
一般地,電容C2和C3取30pF左右,晶體的振盪頻率範圍是1.2-12MHz。如果晶體振盪頻率高,則系統的時鐘頻率也高,微控制器的執行速度也就快。
微控制器復位使CPU和系統中的其他功能部件都處在一個確定的初始狀態下,並從這個狀態開始工作。微控制器復位條件:必須使9腳加上持續兩個機器週期(即24個振盪週期)的高電平。
1.2.3 顯示系統
數碼管是一種半導體發光器件,其基本單元是發光二極體。
數碼管按段數分為七段數碼管和八段數碼管,八段數碼管比七段數碼管多一個發光二極體單元(多一個小數點顯示);按能顯示多少個“8”可分為1位、2位、4位等等數碼管;按發光二極體單元連線方式分為共陽極數碼管和共陰極數碼管。共陽數碼管是指將所有發光二極體的陽極接到一起形成公共陽極(COM)的數碼管。共陽數碼管在應用時應將公共極COM接到+5V,當某一欄位發光二極體的陰極為低電平時,相應欄位就點亮。當某一欄位的陰極為高電平時,相應欄位就不亮。。共陰數碼管是指將所有發光二極體的陰極接到一起形成公共陰極(COM)的數碼管。共陰數碼管在應用時應將公共極COM接到地線GND上,當某一欄位發光二極體的陽極為高電平時,相應欄位就點亮。當某一欄位的陽極為低電平時,相應欄位就不亮。
數碼管要正常顯示,就要用驅動電路來驅動數碼管的各個段碼,從而顯示出我們要的數字,因此根據數碼管的驅動方式的不同,可以分為靜態式和動態式兩類。
1) 靜態顯示驅動:靜態驅動也稱直流驅動。靜態驅動是指每個數碼管的每一個段碼都由一個微控制器的I/O埠進行驅動,或者使用如BCD碼二-十進位制譯碼器譯碼進行驅動。靜態驅動的優點是程式設計簡單,顯示亮度高,缺點是佔用I/O埠多,如驅動5個數碼管靜態顯示則需要5×8=40根I/O埠來驅動(要知道一個89C51微控制器可用的I/O端口才32個呢),實際應用時必須增加譯碼驅動器進行驅動,增加了硬體電路的複雜性。
2) 動態顯示驅動:數碼管動態顯示介面是微控制器中應用最為廣泛的一種顯示方式之一,動態驅動是將所有數碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當微控制器輸出字形碼時,所有數碼管都接收到相同的字形碼,但究竟是那個數碼管會顯示出字形,取決於微控制器對位選通COM端電路的控制,所以我們只要將需要顯示的數碼管的選通控制開啟,該位就顯示出字形,沒有選通的數碼管就不會亮。通過分時輪流控制各個數碼管的的COM端,就使各個數碼管輪流受控顯示,這就是動態驅動。
本設計中數碼管採用的是動態驅動方式。
數碼管外形如圖1-2-3,數碼管電路結構如圖1-2-4。

圖1-2-3 數碼管外形圖
圖1-2-4 數碼管電路結構示意圖

在這裡插入圖片描述
圖1-2-5 數碼管顯示電路
1.2.4 發光二級管電路

圖1-2-6 發光二級管電路
1.2.5 按鍵電路
圖1-2-7 按鍵電路

第二章 軟體設計與分析
2.1 軟體設計的組成
該系統由延時子函式、數碼管顯示子函式、定時器0中斷子函式、主函式和資料定義這幾部分組成。
在這裡插入圖片描述

在這裡插入圖片描述

//----------------------------------------------------------------------//
上傳過程感覺繁瑣,裡面可能有不全面的地方,請見諒。下面的是實現的目的。以及電路原理圖

**本次設計的主要目的是設計一個城市十字路口的交通燈控制系統,設計中將交通燈控制系統分為東西方向(主幹道)和南北方向(次幹道)兩個方向,且在東西南北四個路口的每個路口設定紅、綠、黃三個交通訊號燈(用發光二極體模擬)和一個二位的LED數碼顯示管。設計的要求是規定在每一段時間內東西和南北兩個方向中只有一個方向能夠通行,另一個方向處於禁行狀態,然後在經過一段時間後,禁行的方向和通行的方向互相轉換狀態,原來通行的狀態變禁行狀態,原來禁行的狀態變為通行狀態,如此迴圈下去。詳細過程如下圖2-1:
狀態① 狀態②
圖 1圖2-1 交通燈狀態圖
狀態①:東西方向的交通燈黃燈閃爍3秒後,紅燈熄滅,綠燈點亮(東西方向允許車輛和行人通行),同時南北方向綠燈熄滅,紅燈點亮(南北方向禁止車輛和行人通行),LED數碼管倒計時顯示40秒,在倒計時3秒時進入狀態②。
狀態②:南北方向黃燈閃爍3秒後,紅燈熄滅綠燈點亮(南北允許車輛和行人通行);同時東西方向綠燈熄滅,紅燈點亮
(東西方向禁止車輛和行人通行),LED數碼管倒計時顯示40秒,在倒計時3秒時進入狀態①。
接下來在沒有人為干涉下將會一直按照上述進行迴圈。設計中還外設6個按鍵實現對交通燈控制系統的調控作用。

電路原理圖

在這裡插入圖片描述

在這裡插入圖片描述

//——————————————————————————-——————————//
相應的程式碼已經上傳
下載地址 https://download.csdn.net/download/weixin_43442020/10804634