設(shè)計(jì)要求: 用單片機(jī)控制LED模擬交通燈。東西向通行時(shí)間為80s,南北向通行時(shí)間為60s,緩沖時(shí)間為3s。
本項(xiàng)目為典型的LED顯示和中斷定時(shí)電路。利用定時(shí)器T0產(chǎn)生每10ms一次的中斷,每100次中斷為1s。對(duì)兩個(gè)方向分別顯示紅、綠、黃燈,并顯示相應(yīng)的剩余時(shí)間。
本設(shè)計(jì)基于AT89C52單片機(jī),可用單片機(jī)控制信號(hào)燈的狀態(tài)變化,基本可以指揮交通的基本通行。用單片機(jī)控制紅、黃、綠LED燈模擬指示,模擬東西方向的十字路口交通信號(hào)控制情況。東西向通行時(shí)間為80s,南北向通行時(shí)間為60s,緩沖時(shí)間為3s,并將時(shí)間倒計(jì)時(shí)輸出,方便行人的觀看。 本設(shè)計(jì)主要設(shè)計(jì)指標(biāo): - 紅綠燈狀態(tài)提示模塊。
- T0定時(shí)器模塊,實(shí)現(xiàn)三種時(shí)間的定時(shí)。
- 驅(qū)動(dòng)顯示模塊,利用MAX7219驅(qū)動(dòng)數(shù)碼管的顯示倒計(jì)時(shí)。
1.3 系統(tǒng)結(jié)構(gòu)圖
圖1 系統(tǒng)結(jié)構(gòu)圖 系統(tǒng)正常運(yùn)行后,5V的穩(wěn)壓源給MAX7219芯片、LED信號(hào)燈和單片機(jī)供電,通過單片機(jī)內(nèi)部的定時(shí)器T0產(chǎn)生每10ms一次的中斷,每100次中斷為1s。所計(jì)的時(shí)間以秒為單位,通過MAX7219驅(qū)動(dòng)七段顯示器倒計(jì)時(shí)輸出,計(jì)滿時(shí)間后產(chǎn)生中斷,中斷產(chǎn)生后信號(hào)燈發(fā)生相應(yīng)的變化,以達(dá)到自動(dòng)控制的目的。
2 理論分析與計(jì)算 定時(shí)器初值的計(jì)算,并掌握十進(jìn)制到十六進(jìn)制的轉(zhuǎn)化。在進(jìn)行通行時(shí)間上的控制時(shí)應(yīng)注意生活中的常識(shí)。 2.1 定時(shí)器初值的計(jì)算
通過單片機(jī)內(nèi)部的定時(shí)器T0產(chǎn)生每10ms一次的中斷,每100次中斷為1s。在本設(shè)計(jì)中所用的晶振為12MHZ,定時(shí)器 T0為工作方式一。其中初值為X,定時(shí)間為m us。
 (1) 計(jì)算可得,定時(shí)m=10ms=10000us時(shí),X=55536,轉(zhuǎn)化為十六進(jìn)制,X=D8F0H。即寫入定時(shí)器的初值TH0=0xD8,TL0=0xF0。 2.2 通行時(shí)間的計(jì)算 A方向紅燈時(shí)間=B方向綠燈時(shí)間+黃燈緩沖時(shí)間 (2) 3 硬件設(shè)計(jì) 根據(jù)系統(tǒng)結(jié)構(gòu)圖,系統(tǒng)由MAX7219驅(qū)動(dòng)電路、顯示電路、晶振電路、復(fù)位電路、單片機(jī)供電電路、單片機(jī)電路組成。 3.1顯示電路通過該電路, 行人可以清楚的看見各路口狀態(tài)燈的亮滅情況,判斷是否通行。同時(shí),數(shù)碼管顯示剩下通行的時(shí)間,提示行人。 數(shù)碼管顯示方面,東西南北各個(gè)方向分別用兩位7段數(shù)碼管,南北方向接DIG0、DIG1,東西方向接DIG2、DIG3,進(jìn)行位選控制,如圖2。 圖2 顯示電路1 紅綠燈采用三個(gè)共陽二極管作為指示燈,南北、東西方向各個(gè)一組,分別對(duì)應(yīng)數(shù)碼管的倒計(jì)時(shí)。東西方向接單片機(jī)的P1^0 , P1^1 , P1^2口,南北方向接單片機(jī)的P0^0 , P0^1 , P0^2口,如圖3。 圖3 顯示電路2
首先東西方向通行時(shí)間為80s,東西綠燈亮,南北紅燈亮。時(shí)間到后,東西南北黃燈亮3s。然后南北方向通行時(shí)間為60s,南北綠燈亮,東西紅燈亮。時(shí)間到后3s,東西南北黃燈亮3s。 3.2MAX7219驅(qū)動(dòng)電路 采用專用數(shù)碼管顯示控制芯片MAX7219。MAX7219是美國MAXI生產(chǎn)的串行輸入/輸出共陰極顯示驅(qū)動(dòng)器,該芯片最多可驅(qū)動(dòng)8位7段數(shù)字LED顯示器或多個(gè)LED和條形圖顯示器。  圖4 MAX7219驅(qū)動(dòng)電路
4 軟件設(shè)計(jì) 在硬件的基礎(chǔ)上對(duì)軟件進(jìn)行設(shè)計(jì),本程序由主程序,定時(shí)中斷子程序和顯示驅(qū)動(dòng)子程序組成。主程序主要負(fù)責(zé)系統(tǒng)初始化和等待中斷,以及紅黃綠燈各種狀態(tài)判斷。定時(shí)中斷子程序主要負(fù)責(zé)各個(gè)狀態(tài)的定時(shí)要求,以及狀態(tài)的跳轉(zhuǎn)。顯示驅(qū)動(dòng)子程序負(fù)責(zé)倒計(jì)時(shí)時(shí)間的顯示。 根據(jù)系統(tǒng)軟件設(shè)計(jì)要求將軟件劃分為:延時(shí)模塊,狀態(tài)判斷模塊,中斷服務(wù)模塊,驅(qū)動(dòng)顯示模塊。 4.1 主程序主程序完成MAX7219的初始化,定時(shí)器的初始化,狀態(tài)燈的初始化并進(jìn)行狀態(tài)的判斷。
圖 5 程序流程圖 進(jìn)入主程序后,先初始化并開啟定時(shí)器1和MAX7219芯片,再裝入初始狀態(tài)和初始值,然后等待中斷響應(yīng)。根據(jù)收到的中斷響應(yīng),主程序依次判斷。首先南北綠燈亮,東西紅燈亮,倒計(jì)時(shí)60S;定時(shí)結(jié)束后,由中斷跳轉(zhuǎn)到下一個(gè)狀態(tài),再東西南北黃燈亮,倒計(jì)時(shí)3S;定時(shí)結(jié)束后,由中斷跳轉(zhuǎn)到下一個(gè)狀態(tài),東西綠燈亮,南北紅燈亮,倒計(jì)時(shí)80S;定時(shí)結(jié)束后,再由中斷跳轉(zhuǎn)到下一個(gè)狀態(tài),東西南北黃燈亮,倒計(jì)時(shí)3S。依次循環(huán)執(zhí)行。
主要(關(guān)鍵)代碼: - void main()
- {
- T0_init();
- MAX7219_init();
- EA=1;
- NS=60; //初始南北通行60秒
- EW=63;
- R2=0,G1=0; //南北綠燈亮,東西紅燈亮
- while (1)
- {
- uint k;
- display();
- switch(i)
- {
- case 1: R2=1,G1=1; //關(guān)閉南北綠燈,東西紅燈
- Y1=0,Y2=0; //黃燈閃爍
- for(k=0;k<3;k++)
- {
- Y1=~Y1;
- Y2=~Y2;
- delay(10000);
- }
- break;
- case 2: G2=0,R1=0; //東西綠燈亮,南北紅燈亮
- break;
- case 3: G2=1,R1=1;
- Y1=0,Y2=0; //黃燈閃爍
- for(k=0;k<3;k++) //循環(huán)三次進(jìn)行延時(shí)閃爍
- {
- Y1=~Y1;
- Y2=~Y2;
- delay(10000);
- }
- break;
- case 4: R2=0,G1=0; //東西紅燈亮,南北綠燈亮
- break;
- }
- }
- }
復(fù)制代碼
此段程序是對(duì)狀態(tài)的判斷,利用switch()....case語句對(duì)狀態(tài)進(jìn)行判斷。 4.2 定時(shí)中斷子程序定時(shí)器子程序是進(jìn)行時(shí)間的設(shè)定,并實(shí)現(xiàn)狀態(tài)的自動(dòng)跳轉(zhuǎn)。跳轉(zhuǎn)過后產(chǎn)生的中斷送入主程序進(jìn)行判斷并輸出。
圖 6 定時(shí)中斷子程序流程圖 設(shè)置通行時(shí)間,并利用定時(shí)器進(jìn)行倒計(jì)時(shí),其中狀態(tài)一60S,其中狀態(tài)二3S,其中狀態(tài)三80S,其中狀態(tài)四3S。 關(guān)鍵代碼介紹: void T0_(void)interrupt 1 { temp++; TH0=0XD8; TL0=0XF0; if(temp==100) { temp=0; NS--; EW--; if((NS==0)&&(EW==3)) { NS=3; EW=3; i=1; } if((NS==0)&&(EW==0)&&(i==1)) { NS=83; EW=80; i=2; } if((NS==3)&&(EW==0)) { NS=3; EW=3; i=3; } if((NS==0)&&(EW==0)&&(i==3)) { NS=60; EW=63; i=4; } } display(); } 利用if語句對(duì)計(jì)時(shí)是否完畢進(jìn)行判斷,如計(jì)時(shí)完畢,執(zhí)行if中的內(nèi)容。 4.2 MAX7219驅(qū)動(dòng)程序 MAX7219采用串行尋址方式,在傳送的串行數(shù)據(jù)中包含內(nèi)部RAM的地址。加在DIN腳上的串行數(shù)據(jù),必須在LOAD信號(hào)為高電平的前提下,以每個(gè)字節(jié)為一個(gè)數(shù)據(jù)包,在CLK信號(hào)上升沿移入16位的移位寄存器。然后在LOAD信號(hào)的上升沿鎖存進(jìn)數(shù)字或控制寄存器中。LOAD信號(hào)必須在第16個(gè)CLK信號(hào)上升沿的同時(shí),或在下一個(gè)CLK信號(hào)上升沿之前升高,否則,數(shù)據(jù)會(huì)丟失。DIN腳上的串行數(shù)據(jù)在16.5個(gè)CLK信號(hào)后出現(xiàn)在DOUT腳上,以便級(jí)聯(lián)應(yīng)用時(shí)傳到下一個(gè)MAX7219上。 圖 7 數(shù)據(jù)串行傳送時(shí)序圖
關(guān)鍵代碼介紹: - void MAX_write(uchar ch) //以8位一個(gè)字節(jié)進(jìn)行寫值
- {
- uchar j,ads;
- for(j=0;j<8;j++) //8位
- {
- ads=ch&0x80; //取最高位
- CLK = 0; //時(shí)鐘線置低
- if(ads) DIN = 1;
- else DIN = 0;
- ch=ch<<1; //左移一位
- CLK=1; //上升沿,DIN的數(shù)據(jù)寫入到7219
- }
- }
- void MAX7219(uchar addr, uchar num) //寫地址,寫數(shù)據(jù)
- {
- LOAD = 0;
- _nop_();
- MAX_write(addr);
- _nop_();
- MAX_write(num);
- _nop_();
- LOAD = 1; //鎖存
- }
復(fù)制代碼
系統(tǒng)測(cè)試
5.1 倒計(jì)時(shí)狀態(tài)測(cè)試由Proteus仿真軟件進(jìn)行系統(tǒng)測(cè)試。
圖8 60S、80S計(jì)時(shí) 結(jié)論:?jiǎn)纹瑱C(jī)內(nèi)部定時(shí)器能夠進(jìn)行定時(shí)。 5.2 紅綠燈狀態(tài)測(cè)試由Proteus仿真軟件進(jìn)行系統(tǒng)測(cè)試。 表1 紅綠燈狀態(tài)測(cè)試
結(jié)論:每個(gè)狀態(tài)能夠正常的跳轉(zhuǎn)。 5.3 系統(tǒng)聯(lián)機(jī)測(cè)試1、接硬件圖接線,為了確保東西南北紅黃綠燈能夠?qū)?yīng)顯示,實(shí)驗(yàn)時(shí),對(duì)P1口的接線做了調(diào)整。即,P1.0接G2綠燈,P1.1接Y2黃燈,P1.2接R2紅燈,P0.1接G1綠燈,P0.2接Y1黃燈,P0.3接R1紅燈。 2、從第一個(gè)狀態(tài)開始連續(xù)運(yùn)行,觀察六個(gè)LED燈是否與交通顯示情況對(duì)應(yīng),如果有偏差,則單步運(yùn)行或斷點(diǎn)運(yùn)行,進(jìn)行調(diào)試,直至滿足設(shè)計(jì)要求。 3、調(diào)試完燈的顯示后,從第一個(gè)狀態(tài)開始連續(xù)運(yùn)行,觀察數(shù)碼管顯示的是否正常,如果不正常,則運(yùn)用單步運(yùn)行或斷點(diǎn)運(yùn)行進(jìn)行分析和調(diào)試,直至滿足要求。 4、整體運(yùn)行,觀察燈顯示和時(shí)間顯示是否都符合要求,如果不符合,則再調(diào)試。直至滿足要求
6 總結(jié)以及展望 本設(shè)計(jì)實(shí)現(xiàn)設(shè)計(jì)要求。 本設(shè)計(jì)在實(shí)現(xiàn)相應(yīng)功能的時(shí)候主要是考慮到現(xiàn)有的條件,采用成熟度高的STC89C52作為CPU的解決方案,同時(shí)用LED燈和雙位數(shù)碼管作為顯示模塊,軟件則使用了移植性好的C語言。從功能需求上來看,已經(jīng)能夠滿足簡(jiǎn)單的應(yīng)用需要。 在設(shè)計(jì)過程中,從開始設(shè)計(jì)該系統(tǒng)的功能,到方案的論證,再到最后的調(diào)試,每一步都顯得是那么的重要,在這個(gè)過程中學(xué)習(xí)到了比這次設(shè)計(jì)本身更多的知識(shí),除此之外,在這次設(shè)計(jì)中也奠定了我對(duì)一個(gè)工業(yè)產(chǎn)品設(shè)計(jì)的思維,收獲頗豐。 展望,由于時(shí)間有限,本設(shè)計(jì)還需要做很多的改進(jìn)才能作為產(chǎn)品進(jìn)入市場(chǎng),如:在對(duì)單片機(jī)供電方案中可以改為更簡(jiǎn)單的電容降壓電路;在狀態(tài)的多樣性方面還很單一,可以增加一些更加符合實(shí)際情況的狀態(tài),如彎道時(shí)的狀態(tài)、擁堵時(shí)的狀態(tài)、應(yīng)急狀態(tài);在PCB元器件布局還可以更科學(xué)使線的寬度做的更寬等元器件選擇方面的問題,使其能夠通過一些標(biāo)準(zhǔn)。
圖9 系統(tǒng)原理圖
本系統(tǒng)的PCB版圖為雙重布線。 圖10 系統(tǒng)PCB圖
51hei.png (3.87 KB, 下載次數(shù): 60)
下載附件
2020-4-28 15:29 上傳
全部資料51hei下載地址:
通信交通燈.7z
(981.18 KB, 下載次數(shù): 121)
2020-4-28 15:35 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|