久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

基于單片機控制的交通燈設計系統

時間:2019-05-14 01:32:47下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《基于單片機控制的交通燈設計系統》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《基于單片機控制的交通燈設計系統》。

第一篇:基于單片機控制的交通燈設計系統

基于單片機控制的交通燈設計系統

班級:

姓名:

學號:

第一章 概述 1.設計內容

本系統需要采用AT89C51單片機AT89C5中心器件來設計交通燈控制器,實現以下功能: 1.1初始東西綠燈亮,南北紅燈亮,東西方向通車。1.2黃燈閃爍后,東西路口紅燈亮同時南北路口綠燈亮,南北方向開始通車。1.3延時27s,南北方向綠燈滅,黃燈閃爍3次,然后又切換成東西方向通車,如此重復。

設計交通燈控制系統硬件電路與軟件控制程序,對硬件電路與軟件程序分別進行調試,并進行軟硬件聯調,要求獲得調試成功的仿真圖。2.設計目的

2.1 了解交通燈管理的基本工作原理。2.2 熟悉AT89C51工作原理和應用編程。

2.3 熟悉AT89C51行接口的各種工作方式和應用。

2.4 熟悉AT89C51數器/定時器的工作方式和應用編程外部中斷的方法。2.5 掌握多位LED顯示問題的解決。3.設計原理

AT89C51片機具有控制二連體共陰極數碼管和發光二極管的輸出顯示以及檢測按鍵輸入的功能。利用AT89C51片機模仿制作室外十字路口多功能交通燈,實現室內控制與室外顯示的功能。合理控制交通繁忙,交通特殊情況和恢復交通正常的三種情況。

本設計用4個共陽極LED數碼管的分別表示東、西、南、北四個方向路口,以數碼管的上、中、下3個橫段分別代表紅、黃、綠3盞燈,用P0、P1口分別輸出控制模擬交通燈的狀態顯示的數碼管和倒計時顯示數碼管的狀態碼,P3^

1、P3^

2、P3^4-P3^7控制數碼管的位選,P2^0-P2^4接收中斷信號并反饋給INT0接口進行中斷處理。

第二章 硬件設計

1.設計框圖 如圖2-1所示 此處要有文字說明

圖2-1設計框圖

2.元器件選擇及其功能介紹

AT89C51是一種帶4K字節LASH存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C51單片機為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。AT89C51片引腳圖如下圖2-2所示。

圖2-2 AT89C51片引腳圖

主要特性:

·與MCS-51 兼容

·4K字節可編程閃爍存儲器 ·壽命:1000寫/擦循環 ·數據保留時間:10年 ·全靜態工作:0Hz-24MHz ·三級程序存儲器鎖定 ·128×8位內部RAM ·32可編程I/O線

·兩個16位定時器/計數器,5個中斷源 ·可編程串行通道

·低功耗的閑置和掉電模式 ·片內振蕩器和時鐘電路 3.設計原理圖

硬件電路圖通過Proteus 仿真之后如圖2-3所示,其中: 按鈕K0連接P2^0端口實現紅燈全亮,處理交通意外 按鈕K1連接P2^1端口實現南北方向亮燈時間+1s 按鈕K2連接P2^2端口實現南北方向亮燈時間-1s 按鈕K3連接P2^3端口實現東西方向亮燈時間+1s 按鈕K4連接P2^4端口實現東西方向亮燈時間-1s

圖2-3整體連接電路原理圖

第三章 軟件設計

1.各個程序段介紹 1.1數碼管顯示

void Display(uchar j)//j控制顯示table中連續位的起始點 { char h,l;if(j<11)//根據狀態判定時間

{

h=Time_EW/10;//EW通行時間十位

l=Time_EW%10;//EW通行時間個位

} else if(j<23){

h=Time_SN/10;//SN通行時間十位

l=Time_SN%10;//SN通行時間個位

} for(i=0;i<4;)//按位顯示通行狀況及時間

{

P0=table1[j];//通行狀況顯示

P3=tab[i];//位選顯示

i++;

j++;

if(i%2)//兩位計時顯示

{

P1=table[l];

Delay(400);

}

else

{

P1=table[h];

Delay(400);

} } Delay(5);} 1.2 INT0外部中斷服務程序

void EXINT0(void)interrupt 0//INT0外部中斷 { EX0=0;//關中斷

if(Busy_Button==0){

P0=0xFE;//意外按鈕按下全顯示紅燈

for(;Busy_Button!=1;)//意外按鈕彈起時恢復之前狀態

Display(24);} /*四個時間控制按鈕分別控制SN、EW方向初始通行時間加減,最長不超過s,最少不低于s*/ if(SN_Add==0)//SN+1 {

SN1+=1;

if(SN1>99)

SN1=99;} if(SN_Red==0)//SN-1 {

SN1-=1;

if(SN1<20)

SN1=20;} if(EW_Add==0)//EW+1 {

EW1+=1;

if(EW1>99)

EW1=99;} if(EW_Red==0)//EW-1 {

EW1-=1;

if(EW1<20)

EW1=20;} EX0=1;//開中斷 } 1.3延時子程序

void Delay(uchar a)//循環a次 { uchar x;x=a;while(x--){;} } 2.程序

#define uchar unsigned char #include uchar code table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};uchar code table1[28]={0xF7,0xFE,0xF7,0xFE,0xBF,0xFE,0xBF,0xFE,0xFF,0xFE,0xFF,0xF E, 0xFE,0xF7,0xFE,0xF7,0xFE,0xBF,0xFE,0xBF,0xFE,0xFF,0xFE,0xFF, 0xFE,0xFE,0xFE,0xFE};uchar code tab[4]={0x1E,0x2D,0x4E,0x8D};uchar EW=30,SN=30,EW1=30,SN1=30;uchar count;uchar i,j;sbit Busy_Button=P2^0;sbit SN_Add=P2^1;sbit SN_Red=P2^2;sbit EW_Add=P2^3;sbit EW_Red=P2^4;char Time_EW;char Time_SN;void Delay(uchar a){

uchar x;x=a;while(x--){;} } void Display(uchar j){ char h,l;if(j<11){

h=Time_EW/10;

l=Time_EW%10;} else if(j<23){

h=Time_SN/10;

l=Time_SN%10;} for(i=0;i<4;){

P0=table1[j];

P3=tab[i];

i++;

j++;

if(i%2)

{

P1=table[l];

Delay(400);

}

else

{

P1=table[h];

Delay(400);

} } Delay(5);} void EXINT0(void)interrupt 0 { EX0=0;if(Busy_Button==0){

P0=0xFE;

for(;Busy_Button!=1;)Display(24);} if(SN_Add==0){

SN1+=1;

if(SN1>99)

SN1=99;} if(SN_Red==0){

SN1-=1;

if(SN1<20)

SN1=20;} if(EW_Add==0){

EW1+=1;

if(EW1>99)

EW1=99;} if(EW_Red==0){

EW1-=1;

if(EW1<20)

EW1=20;} EX0=1;

} void timer0(void)interrupt 1 using 1 { TH0=0x3C;TL0=0xB0;count++;if(count==20){

Time_EW--;

Time_SN--;

count=0;} } 第四章 仿真結果及其總結

1.仿真結果圖

1.1正常狀態的仿真結果如圖4-1所示

圖4-1正常狀態

1.2黃燈狀態的仿真結果如圖4-2所示

圖4-2黃燈狀態

1.3緊急狀態的仿真結果如圖4-3所示

圖4-3 緊急狀態

1.4延長通行時間的仿真結果如圖4-4所示

圖4-4延長通行時間

2.總結

通過這次交通燈的課程設計,使我得到了一次用專業知識、專業技能分析和解決現實問題的能力。使我在單片機的基本原理、單片機應用學習過程中,以及在常用編程設計思路技巧的掌握方面都能向前邁了一大步,為日后成為一名合格的應用型人才打下良好的基礎。綜合課程設計讓我把以前學習到的知識得到鞏固和進一步的提高認識,對已有知識有了更深層次的理解和認識。在此,由于自身能力有限,在課程設計中碰到了很多的問題,我通過查閱相關書籍、資料以及和周圍同學交流得到解決。

通過這次交通燈的課程設計,使我了解了寫畢業設計的流程和方法。為自己以后的畢業論文的設計做一次練習,具有積極的意義。還有交通燈是我們生活中非常常見的一種東西,對于我們學以致用的這種能力得到了很好鍛煉,能夠為我們以后的工作于學習打下基礎。

由于本人的水平有限,設計中難免會有一些不合理的部分,系統的穩定性還有待提高,望批評更正。

第二篇:單片機控制交通燈的案例

單片機控制交通燈

AT89C51單片機及由Keil 軟件編寫單片機程序,并且通過Proteus仿真測試,設計一個交通燈系統,實現簡單的交通燈的管理功能。在交通燈系統的管理中,用發光二極管模擬交通信號燈,用邏輯電平開關模擬控制開關。在交通繁忙時,交通信號燈控制系統應有手控開關,可人為地改變信號燈的狀態,以緩解交通擁擠狀況。

工作內容及最終成果:

十字路口的交通指揮信號燈控制要求如下:

(1)信號燈受一個起動開關控制,當起動開關接通時,信號系統開始工作,且先南北紅燈亮,東西綠燈亮。當起動開關斷開時,所有信號燈都熄滅。(2)南北綠燈和東西綠燈不能同時亮,如果同時亮時應關閉信號燈系統,并報警。

(3)南北紅燈亮維持25S。在南北紅燈亮的同時東西綠燈也亮,并維持20S。到20S時,東西綠燈閃爍,閃爍3S后熄滅。在東西綠燈熄滅時,東西黃燈亮,并維持2S。到2S時,東西黃燈熄,東西紅燈亮。同時,南北紅燈熄滅,南北綠燈亮。

(4)東西紅燈亮維持30S。南北綠燈亮維持25S。然后閃爍3S,熄滅。同時南北黃燈亮,維持2S后熄滅,這時南北紅燈亮,東西綠燈亮。(5)周而復始。

ORG

0000H

LJMP START

ORG

0040H START:

MOV

SP,#60H

LCALL STATUS0;初始狀態(都是紅燈)CIRCLE:

LCALL STATUS1;南北綠燈,東西紅燈

LCALL STATUS2;南北綠燈閃轉黃燈,東西紅燈

LCALL STATUS3;南北紅燈,東西綠燈

LCALL STATUS4;南北紅燈,東西綠燈閃轉黃燈

LJMP CIRCLE STATUS0:

;南北紅燈,東西紅燈

MOV DPTR,#8300H

MOV A,#0FH

MOVX @DPTR,A

MOV R2,#10

;延時1秒

LCALL DELAY

RET STATUS1:

;南北綠燈,東西紅燈

MOV DPTR,#08300H

MOV A,#96H

;南北綠燈,東西紅燈

MOVX @DPTR,A

MOV R2,#200

;延時20秒

LCALL DELAY

RET STATUS2:

;南北綠燈閃轉黃燈,東西紅燈

MOV DPTR,#8300H

MOV R3,#03H

;綠燈閃3次 FLASH:

MOV A,#9FH

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

MOV A,#96H

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

DJNZ R3,FLASH

MOV A,#06H

;南北黃燈,東西紅燈

MOVX @DPTR,A

MOV R2,#10

;延時1秒

LCALL DELAY

RET STATUS3:

;南北紅燈,東西綠燈

MOV DPTR,#8300H

MOV A,#69H

MOVX @DPTR,A

MOV R2,#200

;延時20秒

LCALL DELAY

RET STATUS4:

;南北紅燈,東西綠燈閃轉黃燈

MOV DPTR,#8300H

MOV R3,#03H

;綠燈閃3次 FLASH1:

MOV A,#6FH

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

MOV A,#69H

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

DJNZ R3,FLASH1

MOV A,#09H

;南北紅燈,東西黃燈

MOVX @DPTR,A

MOV R2,#10

;延時1秒

LCALL DELAY

NOP

RET DELAY:

;延時子程序

PUSH 2

PUSH 1

PUSH 0 DELAY1:

MOV 1,#00H DELAY2:

MOV 0,#0B2H

DJNZ 0,$

DJNZ 1,DELAY2;延時 100 mS

DJNZ 2,DELAY1

POP 0

POP 1

POP 2

RET

END

第三篇:單片機控制的交通燈控制系統設計

摘要

本設計是單片機控制的交通燈控制系統設計。由單片機系統、LED顯示、交通燈演示系統、鍵盤電路及其控制電路組成。該系統除基本交通燈功能外,還具有倒計時、緊急情況處理、調整通行時間以及根

據具體情況手動控制等功能。

十字路口的交通燈在工作時應具有如下特點:紅燈表示該條道路禁止通性;黃燈表示該條道路上未過停車線的車輛禁止通行,已過停車線的車輛繼續通性;綠燈亮表示該條道路允許通行。該系統使用12MHZ晶振與單片機AT89S52相連接,通過軟件編程的方法實現十字路口的交通燈控制,輸入裝置是鍵盤開關,用于控制交通燈的運行模式以及設置通行時間,顯示裝置是兩位的LED七段數碼管。該系統是由AT89S52單片機控制的,可以實現以下功能:

1.南北方向(主干道)車道和東西方向(支干道)兩條交叉道路上的車輛交替運行,主干道每次通行時間都設為30秒、支干道每次通行間為20秒,時間可設置修改。

2.在綠燈轉為紅燈時,要求黃燈先亮5秒鐘,才能變換運行車道。

3.黃燈亮時,要求每秒閃亮一次。

4.東西方向、南北方向車道除了有紅、黃、綠燈指示外,每一種燈亮的時間都用顯示器進行顯示(采

用計時的方法)。

5.一道有車而另一道無車(實驗時用開關 K0 和 K1 控制),交通燈控制系統能立即讓有車道放行。

6.有緊急車輛要求通過時,系統要能禁止普通車輛通行,A、B道均為紅燈。

關鍵字:AT89S52單片機,交通燈,LED顯示,鍵盤開關電路。

目 錄

1概述…………………………………………………………………………-3-1.1設計背景 ……………………………………………………………-3-1.2設計目的 ……………………………………………………………-3-1.3設計要求 ……………………………………………………………-3-2 系統總體方案及硬件設計 ………………………………………………-4-2.1 設計原理……………………………………………………………-4-2.2 各功能模塊設計……………………………………………………-4-2.2.1單片機AT89S52介紹 …………………………………………-4-2.2.2總體方案 ………………………………………………………-5-2.2.3時鐘電路模塊 …………………………………………………-6-2.2.4復位電路模塊 …………………………………………………-6-2.2.5交通燈演示模塊 ………………………………………………-7-2.2.6 LED顯示模塊 …………………………………………………-7-2.2.7鍵盤開關模塊 …………………………………………………-8-3 軟件設計 …………………………………………………………………-10-3.1程序流程圖 …………………………………………………………-10-3.2系統軟件設計………………………………………………………-11-3.2.1 LED的編程……………………………………………………-11-3.2.2交通燈模塊的編程設計………………………………………-12-3.2.3定時器程序……………………………………………………-12-3.2.4鍵盤程序………………………………………………………-13-3.2.4.1通行時間設置程序………………………………………-13-3.2.4.2緊急情況處理程序………………………………………-14-3.2.4.3狀態調整程序……………………………………………-14-4 Proreus仿真 ……………………………………………………………-15-4.1正常工作狀態………………………………………………………-15-4.2時間調整……………………………………………………………-17-4.3緊急狀況……………………………………………………………-19-4.4狀態調整……………………………………………………………-20-5課程設計體會 ……………………………………………………………-22-參考文獻……………………………………………………………………-23-附1:源程序代碼 …………………………………………………………-24-附2:系統原理圖 …………………………………………………………-32-概述 1.1 設計背景

人們越來越關注城市交通問題,而交通燈在安全行車過程中起十分重要的作用, 現在交通燈一般設在十字路口,在醒目位置用紅、綠、黃三種顏色的指示燈, 加上一個倒計時的顯示計時器來控制行車, 對于一般情況下的安全行車、車輛分流發揮著作用, 但根據實際行車過程中出現的情況, 主要有如下幾個缺點:

1、車道讓車輪流放行時間相同且固定, 在十字路口, 經常出現有些車道車輛較多, 放行時間應該長些;而有些車道車輛較少,放行時間應短些。

2、沒有考慮緊急車通過時, 兩車道應采取的措施, 譬如, 有消防車通過執行緊急任務時, 兩車道的車都應停止, 讓緊急車輛通過。根據行車過程中出現的實際情況, 如何合理高效地利用交通燈指示交通情況,這是一個迫切需要解決的問題。

1.2 設計目的

1.進一步熟悉和掌握單片機的結構及工作原理。

2.掌握單片機的接口技術及相關外圍芯片的外特性,控制方法。3.通過課程設計,掌握以單片機核心的電路設計的基本方法和技術。4.通過實際程序設計和調試,逐步掌握模塊化程序設計方法和調試技術。5.了解開發單片機應用系統的全過程,為今后從事相關事業打下基礎。

1.3 設計要求

1.設計一個十字路口的交通燈控制電路,要求南北方向(主干道)車道和東西方向(支干道)車道兩條交叉道路上的車輛交替運行,主干道每次通行時間都設為30秒、支干道每次通行時間為20秒,時間

可設置修改。

2.在綠燈轉為紅燈時,要求黃燈先亮5秒鐘,才能變換運行車道;

3.黃燈亮時,要求每秒閃亮一次。

4.東西方向、南北方向車道除了有紅、黃、綠燈指示外,每一種燈亮的時間都用顯示器進行顯示(采

用計時的方法)。

5.一道有車而另一道無車(實驗時用開關 K0 和 K1 控制),交通燈控制系統能立即讓有車道放行。

6.有緊急車輛要求通過時,系統要能禁止普通車輛通行,A、B道均為紅燈。系統總體方案及硬件設計

2.1 設計原理

本設計使用的是單片機作為核心的控制元件,使得電路的可靠性比較高,功能也比較強大,而且可以隨時更新系統,根據道路情況適時調整交通燈的狀態,全面有效地利用交通燈指示交通情況。該設計是以單片機AT89S52為核心完成的,在硬件電路中采用P1口點亮交通指示燈,采用P0口和P2口作為2位LED數碼管的驅動接口,可顯示各個方向的交通燈的持續時間,單片機外圍接有按鍵開關電路,可以響應外部中斷及鍵盤程序,實現緊急情況處理、調整交通燈的點亮時間等功能。芯片選用AT89C51 單片機,電路由下列部分組成:時鐘電路、復位電路、鍵盤電路、交通燈演示電

路、LED顯示電路。

2.2 各功能模塊設計 2.2.1 單片機AT89S52介紹

AT89S52是一個低電壓,高性能CMOS型 8位單片機,片內含8KB的可反復擦寫的Flash只讀程序存儲器(ROM)和256 B的隨機存取數據存儲器(RAM)。AT89S52是一個低功耗高性能單片機,40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內含2個外中斷口,2個16位可編程定時計數器,2個全雙工串行通信口,AT89S52可以按照常規方法進行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結合在一起,特別是可反復擦寫的Flash存儲器可有效地降低開發成本。

引腳使用說明:

I/O端口的編程實際上就是根據應用電路的具體功能和要求對I/O寄存器進行編程。具體步驟如下:

l.根據實際電路的要求,選擇要使用哪些I/O端口。

2.初始化端口的數據輸出寄存器,應避免端口作為輸出時的開始階段出現不確定狀態,影響外圍電

路正常工作。

3.根據外圍電路功能,確定PO端口的方向,初始化端口的數據方向寄存器。對于用作輸入的端口可以不考慮方向初始化,因為PO的復位缺省值為輸入。

4.用作輸入的PO管腳,需上拉電阻。

5.最后對I/O端口進行輸出(寫數據輸出寄存器)和輸入(讀端口)編程,完成對外圍電路的相應功能。

幾個特殊管腳:

XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。

XTAL2:來自反向振蕩器的輸出。

RST: 復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平。

2.2.2 總體方案 此交通燈系統位于一個十字路口,此路口為東南西北走向。南北方向為主干道,東西方向為支干道。各干道有一組紅、綠、黃三色的指示燈,指揮車輛和行人安全通行。紅燈亮禁止通行,綠燈亮允許通行,黃燈亮提示人們注意紅、綠燈的狀態即將切換。

此交通燈系統工作過程分為4個狀態。狀態0南北方向綠燈亮,東西方向紅燈亮。過25秒后轉為狀態1,南北方向綠燈滅,黃燈每秒閃亮一次,東西方向還是紅燈亮。歷時5秒鐘再轉為狀態2,南北方向紅燈亮,東西方向綠燈亮。過15秒后轉為狀態3,南北方向還是紅燈亮,東西方向綠燈滅,黃燈每秒閃亮

一次。歷時5秒鐘又循環至狀態0。

交通燈的狀態表如下:

狀態(時間)主干道—SN 紅—R 0 1 2 3 0 0 1 1

綠—G 1 0 0 0

黃—Y 0 1/0 0 0

表01 交通燈的狀態表

注:

1:SN:南北方向。WE:東西方向。2:狀態:0:熄。1:亮。1/0:閃。

2.2.3 時鐘電路模塊

時鐘電路模塊給單片機提供特定的時鐘周期,以備單片機工作使用。單片機的機器周期有6MHz和12MHz的兩種。這里采用的是12MHZ的晶振,以給單片機提供12MHz的機器周期。另外有兩個30P的電容,兩晶振引腳分別連到XTAL1和XTAL2振蕩脈沖輸入引腳。

其電路圖如圖02所示:

支干道—WE 紅—R 1 1 0 0

綠—G 0 0 1 0

黃—Y 0 0 0 1/0

圖02 時鐘電路模塊

2.2.4 復位電路模塊

單片機系統的復位電路采用的是上電+按鈕復位電路形式,其中電阻R采用10KΩ的阻值,電容采用

電容值為10μF的電解電容。其具體連接電路如圖03所示:

圖03 復位電路模塊 2.2.5 交通燈演示模塊

此交通燈演示模塊由單片機的P1口作信號輸出端來控制12個交通燈的亮滅,交通燈采用的是發光二極管。因為單片機的輸出電流非常小,為了使發光二極管能夠發光或者更亮,二極管采用共陽極接法。即陽極通過470Ω電阻接+5V直流電源,陰極接單片機P1口。同時南北方向同色燈連同上拉電阻一起并聯,東西方向也是一樣,以保證同一干道上的同色燈同時點亮或熄滅,并且流過二極管的電流不會因并聯

而減半。

其具體連接電路如圖04所示:

圖04交通燈演示電路 2.2.6 LED顯示模塊 由于同一干道上的兩個方向的紅燈,綠燈,黃燈點亮時間相同,所以南北方向只需一個數碼管顯示

相應的時間即可,同理東西方向也只需一個。

本次交通燈設計采用兩位一體的共陰極數碼管來顯示相應的時間。由單片機的P0口輸出字型碼,P2口的前四位P2.0~P2.3作位選端。位選端接LED的共陰極,故低電位有效。因為單片機I/O口的驅動電流很小,一般只有幾個毫安。為了增加驅動能力,每個LED上都加上一個上拉電阻,接入+5V電源,本次設計采用的是排阻。當P0口輸出低電平時,LED不導通,上拉電阻電流灌進單片機,而當P0口輸出高電平時,LED導通。而且上拉電阻的電流也通過LED,這自然就增加了LED的發光亮度。

其具體連接電路如圖05所示:

圖05 LED顯示電路 2.2.7 鍵盤開關模塊

此系統通過5個開關實現所有的要求,開關一端接地,另一端接單片機的P3口。K0接P3^7,當主干道有車而支干道無車時,按一下K0鍵,可以實現主干道通行。K1接P3^6,當支干道有車而主干道無車時,按一下K1鍵,可以實現支干道通行。K2接P3^3,利用中斷1的方式對緊急情況進行處理,即使東南西北四個方向都亮紅燈停車。K4接P3^2,利用中斷0的方式對各個干道的通行時間進行設置。在相應中斷0期間,K0,K1起調整時間的作用。每按一下K0,主干道通行時間加一,每按一下K0,主干道通行時間加一。K3接P3^5,按一下K3,可以使系統退出中斷,回到主程序。

其具體連接電路如06圖示:

圖06 鍵盤開關電路 軟件設計 3.1 系統流程圖

(注:判斷框SN=0,WE=0處的Y,N位置標反了,讀者自己改正。)

3.2 系統軟件設計 本次單片機課程設計軟件部分利用C語言編程,采用模塊化程序設計。程序部分由主程序、定時器程序、T0/T1中斷服務程序、鍵盤掃描程序、交通燈點亮程序、LED數碼管掃描顯示程序和延時程序構成。

3.2.1 LED的編程

本次交通燈設計采用兩位一體的共陰極數碼管來顯示相應的時間。數碼管為七段數碼管,由8個發光二極管構成,通過不同的組合可用來顯示數字0-9,字符A-F、H、L、P、R、U、Y、符號“-”及小數點“.”。

本設計只需要顯示數字0-9,來表示相應的時間。

共陰極數碼管的8個發光二極管的陰極連接在一起接位選端。兩個兩位一體的共陰極數碼管共有4個位選端,分別接在 P2^O-P2^3,低電平有效。數碼管各個陽極管腳接各段的驅動電路輸出端,既P0口。P0^0接a,P0^1接b,……P0^6接g,P0^7接dp,高電平有效。

本設計采用逐位掃描的方式實現相應時間的動態顯示。先將P2^1置低電平,P2^0、P2^

2、P2^3置高電平,來選中南北方向數碼管的個位,此時P0口的數據接傳送給它顯示。經延時一段時間,將P2^1置低電位選中南北方向數碼管的十位,此時P0口的數據接傳送給它顯示。再用同樣的方法依次驅動東西方向數碼管。通過不斷改變P0口、P2口的輸出,用循環掃描的方式,即可實現LED的動態顯示。

LED動態顯示的流程圖如圖08:

3.2.2交通燈模塊的編寫設計

本次設計的交通燈演示模塊由單片機的P1口作信號輸出端來控制12個交通燈的亮滅。P1^1-P1^6依次連接南北的紅燈、綠燈、黃燈,東西的紅燈、綠燈,黃燈。所以4種狀態依次為0x6A,0x66,0x5C,0x3C。當交通燈的剩余時間為零時,改變P1口的輸出,進而改變交通燈的點亮狀態。交通燈依次循環上面的4個狀態,就可以實現指揮交通的作用。

3.2.3 定時器程序

本次設計用定時計數器T1,TMOD是定時計算器的工作方式控制寄存器,通過對該寄存器的操作可以改變T1的工作方式。T1有4種工作方式,由TMOD寄存器中間的M1、M0這兩位來決定。本次設計的定時計數器工作在工作方式1,M1、M0設定為01。定時計算器采用加1計數的方式,當接收到一個驅動事件時計數器加1。工作方式1的內部計數器寬度為16位,由TH1的8位和TL1的8位組成。當TL1溢出時將向TH1進位,當TH1溢出后會產生相應的溢出中斷。

驅動事件之間的時間間隔即為定時計數器的定時寬度。在定時的工作方式下,定時寬度是單片機的機械周期,也是外部時鐘頻率的1/12。本次設計的外部時鐘頻率為12MHz。可知,接收106個驅動事件的時間為1s。

定是1s的流程圖如圖09所示:

3.2.4 鍵盤程序

為了實現設置通行時間、緊急情況處理、有車放行等功能,本次設計中有鍵盤電路。通行時間設置由外部中斷0實現,緊急情況由外部中斷1處理,有車放行是用普通的鍵盤程序實現的。按鍵實際是一種常用的按鈕,按鍵未按下時,鍵的兩個觸點處于斷開狀態,按鍵按下時,兩個觸點閉合。按鍵是利用機械觸點來實現鍵的閉合和釋放,由于彈性作用的影響,機械觸點在閉合及斷開瞬間均

有抖動過程,從而使鍵輸入也出現抖動。

抖動時間一般為5—10ms。本次設計采用軟件的辦法消抖。在第一次檢測到有鍵按下時不動作,延時10ms,再次檢測按鍵的狀態,如果仍保持閉合狀態,則確定真的有鍵按下。當按鍵釋放后,轉入按鍵的處理程序 延時程序如下: /*延時t毫秒*/ void delay(uchar t)

{

uchar i;/*定義無符號字符常量*/ for(t;t>0;t--)/*執行t次循環*/

{ for(i=2000;i>0;i--)/*由于時鐘脈沖是12MHz,執行2000次循環的時間為1ms*/

{ } } }

3.2.4.1 通行時間設置程序

本次設計通過外部中斷0設置各個干道的通行時間。

外部中斷0的請求信號由P3^2引腳輸入,采用低電平有效的方式響應中斷,即IT0=1。響應中斷0期間,CPU禁止響應其他中斷,按鍵K0,K1起調整時間的作用。采用加1的方式,每按一下K0,主干道通行時間加1,每按一下K1,支干道通行時間加1。通行時間可以直接在數碼管上顯示出來。按一下K3,可以使系統退出中斷,回到主程序斷點處,從下一個狀態開始執行新設置的通行時間。CPU再開放總中斷。

由于本次設計使用兩位一體的共陰極數碼管顯示時間,故設置各個干道的通行時間的范圍為0—100s。考慮道路通車的實際情況,時間太短無法通過交通路口,所以本設計中通行時間下限為6s(綠燈1s,黃燈5s)。在6—99s之間可以任意設置通行時間,更合理高效的指揮交通。

3.2.4.2 緊急情況處理程序

本次設計通過外部中斷1實現對緊急情況的處理。

與外部中斷0相仿。外部中斷1的請求信號有P3^3引腳輸入,采用低電平有效的方式相應中斷,即IT0=1。響應中斷1期間,CPU禁止響應其他中斷,東南西北四個方向均亮紅燈,各個干道都禁止通行。由于不確定要持續多久,不采用倒計時的方式顯示時間,數碼管顯示00。緊急情況結束時,按一下K3,可以使系統退出中斷,回到主程序斷點處,CPU再開放總中斷。

3.2.4.3 狀態調整程序

在實際交通系統中,很有可能會不時的出現一道有車而另一道無車的情況,為了更合理高效的指揮交通,本次設計的交通燈控制系統能立即讓有車道放。由開關 K0 和 K1 控制。采用查詢的方式不斷掃描K0、K1,看有沒有鍵按下。按一下K0鍵,可以實現主干道通行,按一下K1鍵,可以實現支干道通行。

此時交通狀態的改變是因為另一路無車,所以不需要設置返回,直接按主程序循環指揮。也有可能較長時間出現一道有車另一道無車的情況,只需多次按K0或K1鍵即可。Proteus仿真 4.1 正常工作狀態

本次設計的交通燈控制系統共有四個工作狀態,分別是狀態0、狀態

1、狀態2和狀態3。開始時先執行狀態0,南北方向綠燈亮,東西方向紅燈亮。歷時25秒。如圖10所示:

圖10 狀態0 25秒后轉為狀態1,南北方向綠燈滅,黃燈每秒閃亮一次,東西方向還是紅燈亮。歷時5秒。如圖

11所示:

圖11 狀態1 5秒后再轉狀態2,南北方向紅燈亮,東西方向綠燈亮。歷時15秒。如圖12所示:

圖12 狀態2 15秒后轉狀態3,南北方向還是紅燈亮,東西方向綠燈滅,黃燈每秒閃亮一次。歷時5秒。如圖1

3所示:

圖13 狀態3

此狀態結束后再回到狀態0,如此循環進行。

4.2 時間調整

按一下開關K4,系統響應外部中斷0,進入通行時間調整程序。各個干道的通行時間有數碼管顯

示。如圖14所示:

圖14 時間調整

按鍵K0,K1起調整時間的作用,每按一下K0,主干道通行時間加1,每按一下K1,支干道通行時間加1。多次按鍵即可調整到合理的通行時間。如圖15所示:

圖15 通行時間+1 按一下K3,可以使系統退出中斷,回到主程序斷點處,從下一個狀態開始執行新設置的通行時間。

如圖16、17所示:

圖16 主干道按新設置的時間執行

圖17 支干道按新設置的時間執行

4.3 緊急情況

當出現緊急情況時,按一下開關K2,系統響應外部中斷1,各個方向均亮紅燈禁止通行,數碼管均顯示0。按一下K3,可以使系統退出中斷,回到主程序斷點處。如圖18所示

圖18 緊急情況 4.4 狀態調整

為了更合理高效的指揮交通,當南北方向有車而東西方向無車時,按K0,系統會自動跳轉到狀態0,實現南北方向通行。如圖19所示:

圖19 南北方向有車而東西方向無車時,南北放行

當東西方向有車而南北方向無車時,按K1,系統會自動跳轉到狀態2,實現東西方向通行。如圖20

所示:

圖20 東西方向有車而南北方向無車時,東西放行 課程設計體會

很榮幸有這次課程設計的機會,我可以把理論的學習與實踐有機的結合起來。

在設計過程中,首先要分析課題,根據所學知識繪制出系統總體設計框圖。然后按照自己的設計思路,利用所給的元器件繪制出設計圖。在繪制設計圖連接各個元器件的時候,要盡量使布線合適,從而使所作設計圖清晰易看。繪制完設計圖后,接下來就是要根據設計所要求的功能和已完成的設計圖編寫程序,在編程時,首先應該繪制出主程序流程圖,然后采用模塊化程序設計的方式,編寫實現各個功能的子程序,再將各個子程序與主程序連接起來。在設計程序時要不斷對程序進行修改,同時在設計程序的過程中要養成注釋程序的習慣,在對程序進行修改的時候,可以通過注釋很容易的看出各句程序的功能,清晰明朗。當程序設計出來之后,就可以通過仿真軟件對其進行編譯,生成仿真所需要的HEX文件。將生成的文件加載到系統圖的單片機上,就可以進行系統仿真。通過仿真,檢測所作設計是否能實現預期功能。本次課程設計使我對單片機的工作原理有了更深刻的認識,掌握了許多在以前學習中混淆不清的知識點。在翻閱相關書籍和查詢相關資料過程中學到了豐富的單片機知識,開闊了眼界,增廣了知識面。在編輯程序中,對C語言又有了新的認識和理解。實物焊接中不僅鍛煉了自己的動手能力,而且真正作到了

理論聯系實際的重要性,收益匪淺。

本次課程設計我參考的三本書。一本是余發山教授的《單片機原理及其應用技術》,一本是在圖書館借的王為青老師編寫的《單片機Keil Cx51應用開發技術》,還有一本就是賈宗璞老師的《C語言程序

設計》。在此向編者表示誠摯的謝意。

本次設計中,我曾多次在課堂上向譚興國老師請教各個模塊設計的細節問題,得到了譚老師的大力

幫助,在此深表感謝!

參考文獻 [1] 余發山,王福忠.單片機原理及應用技術 徐州:中國礦業大學出版社,2008 [2] 賈宗璞,許合利.C語言程序設計 徐州:中國礦業大學出版社,2007 [3] 王為青,程國剛.單片機Keil Cx51應用開發技術 北京:人民郵電出版社,2007

附1 源程序代碼

#include /*對單片機的口進行了定義********/ #define uchar unsigned char /*定義字符串類型為無符號型*/ uchar code a[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};/*段碼組合,P0口,高

有效*/ uchar code b[4]={0x0D,0x0E,0x07,0x0B};/****P2口,低有效*/ uchar code c[4]={0x6A,0x66,0x5C,0x3C};/****P1口.低有效*/ char SN=25,WE=30;/*SN表示南北方向——主干道,WE表示東西方向——支干道*/ char SN_G=25,WE_G=15,Y=5;/*SN_G表示南北方向的綠燈,WE_G表示東西方向的綠燈,Y表

示黃燈*/

uchar i,k=0,count=0;/*定義無符號字符串變量*/

void delay(uchar t);/*定義函數*/

void light();/*定義函數*/ void led();/*定義函數*/ void ledthrough();/*定義函數*/ void leddrive();/*定義函數*/ sbit K0=P3^7;/*開關K0接P3^7管腳*/ sbit K1=P3^6;/*開關K1接P3^6管腳*/ sbit K2=P3^3;/*開關K2接P3^3管腳*/ sbit K3=P3^5;/*開關K3接P3^5管腳*/ sbit K4=P3^2;/*開關K4接P3^2管腳*/

/*程序初始化*/ void init(void)

{ /*12MHz */ TMOD=0x01;/**計數器用模式1,為16位計數器*****/

TH1=(65536-50000)/256;/*0x3C*/ TL1=(65536-50000)%256;/*0xB0*//*計50000個數,用時50ms*/

IT0=1;/*外部中斷為低電平觸發方式*/

ET0=1;/*允許T0中斷*/ TR0=1;/*啟動計數器*/ EA=1;/*CPU開放總中斷*/ EX0=1;/*允許外部中斷0中斷,即允許響應端口P3^2(K4)中斷*/ EX1=1;/*允許外部中斷1中斷,即允許響應端口P3^3(K2)中斷*/

}

/*中斷0處理程序*/ void int0(void)interrupt 0

{

EA=0;/*CPU禁止響應一切中斷*/ P1=0x6C;/*東西南北方向均紅燈亮*/

TR0=!TR0;/*計數器停止工作*/

for(;;)/*無條件循環*/

{

ledthrough();/*調用通行時間顯示函數*/

/*設置南北方向通行時間*/ if(K0==0)/*P3^7=0*/

{

delay(10);/*延時,把抖動的時間拋掉*/

if(K0==0)

{ while(!K0)/*當松開K0開關時,跳出循環,執行后面的程序*/

{

ledthrough();/*調用通行時間顯示函數*/

}

SN_G++;/*南北方向綠燈時間+1*/ if((SN_G+Y)==100)/*南北方向通行時間(綠燈加黃燈時間)為100s*/ SN_G=1;/*由于使用的是兩位數碼管,當南北方向通行時間加到100后綠燈時間歸1*/

}

}

/*設置東西方向通行時間*/ if(K1==0)/*P3^6=0*/

{

delay(10);/*延時,把抖動的時間拋掉*/

if(K1==0)

{ while(!K1)/*當松開K1開關時,跳出循環,執行后面的程序*/

{ ledthrough();/*調用通行時間顯示函數*/

}

WE_G++;/*東西方向綠燈時間+1*/ if((WE_G+Y)==100)/*東西方向通行時間(綠燈加黃燈時間)為100s*/ WE_G=1;/*由于使用的是兩位數碼管,當東西方向通行時間加到100后綠燈時間歸1*/

} } /*返回*/

if(K3==0)/*P3^5=0*/

{

delay(10);/*延時,把抖動的時間拋掉*/

if(K3==0)

{ while(!K3)/*當松開K3開關時,跳出循環,執行后面的程序*/

{

ledthrough();/*調用通行時間顯示函數*/

}

TR0=!TR0;/*啟動計數器*/ EA=1;/*CPU開放總中斷*/

break;/*跳出*/

}

} } }

/*中斷1處理程序*/ void int1(void)interrupt 2

{ P1=0x6C,P0=a[0];/*東西南北方向均紅燈亮,P0口輸出0*/

EA=0;/*CPU禁止響應一切中斷*/ TR0=!TR0;/*計數器停止工作*/

for(;;)/*無條件循環*/

{

leddrive();/*數碼管驅動程序*/

/*返回*/

if(K3==0)/*P3^5=0*/

{

delay(10);/*延時,把抖動的時間拋掉*/

if(K3==0)

{ while(!K3)/*當松開K3開關時,跳出循環,執行后面的程序*/

{

leddrive();/*數碼管驅動程序*/

}

EA=1;/*CPU開放總中斷*/ TR0=!TR0;/*啟動計數器*/ break;/*跳出*/ }

} }

} /*鍵盤程序*/ void key()

{

/*南北有車而東西無車*/ if(K0==0)/*K0=0*/

{

delay(10);/*延時,把抖動的時間拋掉*/

if(K0==0)

{ while(!K0)/*當松開K0開關時,跳出循環,執行后面的程序*/

{

light();/*調用交通燈函數*/

led();/*調用數碼管函數*/

} count=0;/*清零*/

k=0;/*南北方向通車,東西方向不通車*/ SN=SN_G,WE=SN_G+Y;/*南北方向顯示時間為南北方向綠燈通行時間,東西方向顯示時間為

南北方向綠燈通行時間加黃燈閃亮時間*/

} }

/*南北無車而東西有車*/ if(K1==0)/*K1=0*/

{

delay(10);/*延時,把抖動的時間拋掉*/

if(K1==0)

{ while(!K1)/*當松開K1開關時,跳出循環,執行后面的程序*/

{

light();/*調用交通燈函數*/

led();/*調用數碼管函數*/

} count=0;/*清零*/

k=2;/*南北方向不通車,東西方向通車*/ SN=WE_G+Y,WE=WE_G;/*南北方向顯示時間為東西方向綠燈通行時間加黃燈閃亮時間,東

西方向顯示時間為東西方向綠燈通行時間*/

} } } /*定時函數*/

void time1(void)interrupt 1

{ TH0=0x3c;

TL0=0xb0;/*計50000個數,用時50ms*/

count++;/*自增運算*/

if(count>=20)/*當count大于或等于20時,歷時1s,執行程序*/

{

SN--;/*自減運算*/ WE--;/*自減運算*/ count=0;/*清零*/ if(SN==0||WE==0)/*當SN=0或者WE=0時,執行程序*/

{

k++;/*自增運算*/ if(k>3)/*當k>3時,執行程序*/

k=0;/*清零*/ switch(k)/*switch 語句*/

{ case 0:SN=SN_G,WE=SN_G+Y;break;/*南北方向顯示時間為南北方向綠燈通行時間,東西方向顯示時間為南北方向綠燈通行時間加黃燈閃亮時間*/ case 1:SN=Y,WE=Y;break;/*東西南北方向顯示時間均為黃燈閃亮時間*/ case 2:SN=WE_G+Y,WE=WE_G;break;/*南北方向顯示時間為東西方向綠燈通行時間加黃燈閃亮時間,東西方向顯示時間為東西方向綠燈通行時間*/ case 3:SN=Y,WE=Y;break;/*東西南北方向顯示時間均為黃燈閃亮時間*/

} } } } /*延時t毫秒*/ void delay(uchar t)

{

uchar i;/*定義無符號字符常量*/ for(t;t>0;t--)/*執行t次循環*/

{ for(i=2000;i>0;i--)/*由于時鐘脈沖是12MHz,執行2000次循環的時間為1ms*/

{ } } } /*交通燈函數*/ void light()

{

P1=c[k];/*交通燈對應著k的值變化*/ if(P1==c[1]&&count==0)/*當南北方向亮黃燈且count=0時,執行程序*/

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;/*延時50ms*/ P1=0x6E;/*南北方向黃燈熄滅,東西方向亮紅燈*/

} else if(P1==c[3]&&count==0)/*當東西方向亮黃燈且count=0時,執行程序*/

{

TH1=(65536-300000)/256;TL1=(65536-300000)%256;/*延時50ms*/ P1=0x7C;/*南北方向亮紅燈,東西方向黃燈熄滅*/

} } /*數碼管函數*/ void led()

{

P2=b[0],P0=a[SN%10];/*顯示南北方向個位*/

delay(5);/*延時*/

P2=b[1],P0=a[SN/10];/*顯示南北方向十位*/

delay(5);/*延時*/

P2=b[2],P0=a[WE%10];/*顯示東西方向個位*/

delay(5);/*延時*/

P2=b[3],P0=a[WE/10];/*顯示東西方向十位*/

delay(5);/*延時*/

}

/*通行時間顯示函數*/ void ledthrough()

{ P2=b[0],P0=a[(SN_G+Y)%10];/*南北方向數碼管顯示可通行時間的個位*/

delay(5);/*延時*/

P2=b[1],P0=a[(SN_G+Y)/10];/*南北方向數碼管顯示可通行時間的十位*/

delay(5);/*延時*/

P2=b[2],P0=a[(WE_G+Y)%10];/*東西方向數碼管顯示可通行時間的個位*/

delay(5);/*延時*/

P2=b[3],P0=a[(WE_G+Y)/10];/*東西方向數碼管顯示可通行時間的十位*/

delay(5);/*延時*/

}

/*數碼管驅動函數*/ void leddrive()

{

P2=b[0];/*顯示南北方向個位*/

delay(5);/*延時*/

P2=b[1];/*顯示南北方向十位*/

delay(5);/*延時*/ P2=b[2];/*顯示東西方向個位*/

delay(5);/*延時*/ P2=b[3];/*顯示東西方向十位*/

delay(5);/*延時*/

} /*主函數*/ void main(void)

{

init();/*調用程序初始化函數*/

for(;;)/*無條件循環*/

{

key();/*調用鍵盤程序*/ light();/*調用交通燈函數*/ led();/*調用數碼管函數*/

} }

附2 系統原理圖

第四篇:單片機:交通燈控制系統設計

交通燈控制系統設計

摘要:本系統由單片機系統、鍵盤、LED 顯示、交通燈演示系統組成。系統包括人行道、左轉、右轉、以及基本的交通燈的功能。系統除基本交通燈功能外,還具有倒計時、時間設置、緊急情況處理、分時段調整信號燈的點亮時間以及根據具體情況手動控制等功能。關鍵詞:AT89S51,交通規則

一、方案比較、設計與論證 1 電源提供方案

為使模塊穩定工作,須有可靠電源。我們考慮了兩種電源方案

方案一:采用獨立的穩壓電源。此方案的優點是穩定可靠,且有各種成熟電路可供選用;缺點是各模塊都采用獨立電源,會使系統復雜,且可能影響電路電平。方案二:采用單片機控制模塊提供電源。改方案的優點是系統簡明扼要,節約成本;缺點是輸出功率不高。綜上所述,我們選擇第二種方案。2 顯示界面方案

該系統要求完成倒計時、狀態燈等功能。基于上述原因,我們考慮了三種方案: 方案一:完全采用數碼管顯示。這種方案只顯示有限的符號和數碼字苻,無法勝任題目要求。

方案二:完全采用點陣式LED 顯示。這種方案實現復雜,且須完成大量的軟件工作;但功能強大,可方便的顯示各種英文字符,漢字,圖形等。

方案三:采用數碼管與點陣LED 相結合的方法因為設計既要求倒計時數字輸出,又要求有狀態燈輸出等,為方便觀看并考慮到現實情況,用數碼管與LED燈分別顯示時間與提示信息。這種方案既滿足系統功能要求,又減少了系統實現的復雜度。權衡利弊,第三種方案可互補一二方案的優缺,我們決定采用方案三以實現系統的顯示功能。3 輸入方案:

題目要求系統能手動設燈亮時間、緊急情況處理,我們討論了兩種方案: 方案一:采用8155擴展I/O 口及鍵盤,顯示等。該方案的優點是:

使用靈活可編程,并且有RAM,及計數器。若用該方案,可提供較多I/O 口,但操作起來稍顯復雜。

方案二: 直接在IO口線上接上按鍵開關。因為設計時精簡和優化了電路,所以剩余的口資源還比較多,我們使用四個按鍵,分別是K1、K2、K3、K4。由于該系統對于交通燈及數碼管的控制,只用單片機本身的I/O 口就可實現,且本身的計數器及RAM已經夠用,故選擇方案二。

二、理論分析與計算

1.交通燈顯示時序的理論分析與計算

對于一個交通路口來說,能在最短的時間內達到最大的車流量,就算是達到了最佳的性能,我們稱在單位時間內多能達到的最大車流為車流量,用公式:車流量= 車流 / 時間 來表示。

先設定一些標號如圖2-1 所示。

說明:此圖為直方圖,上邊為北路口燈,右邊為東路口燈,下邊為南路口燈,左邊為西 路口燈。

圖2-2 所示為一種紅綠燈規則的狀態圖,分別設定為S1、S2、S3、S4,交通燈以這四 的狀態為一個周期,循環執行(見圖2-3)。

請注意圖2-1b和圖2-1d,它們在一個時間段中四個方向都可以通車,這種狀態能在

一定的時間內達到較大的車流量,效率特別高。

依據上述的車輛行駛的狀態圖,可以列出各個路口燈的邏輯表,由于相向的燈的狀態圖

是一樣的,所以只需寫出相鄰路口的燈的邏輯表;根據圖2-3 可以看出,相鄰路口的燈它

們的狀態在相位上相差180°。因此最終只需寫出一組S1、S2、S3、S4的邏輯狀態表。

如表2-1 所示。

表中的“×”代表是紅燈亮(也代表邏輯上的0),“√”是代表綠燈亮(也代表邏輯上 的1),依上表,就可以向相應的端口送邏輯值。2.交通燈顯示時間的理論分析與計算

東西和南北方向的放行時間的長短是依據路口的各個方向平時的車流量來設定,并且

S1、S2、S3、S4各個狀態保持的時間之有嚴格的對應關系,其公式如下所示。T-S1+T-S2=T-S3 T-S2=T-S4 T-S1=T-S3 我們可以依據上述的標準來改變車輛的放行時間。按照一般的規則,一個十字路口可分

為主干道和次干道,主干道的放行時間大于次干道的放行時間,我們設定值時也應以此為參 考。

三、電路圖及設計文件 1.燈控制電路設計

由于32個LED 來實現紅綠燈狀態,若直接接在單片機的口線,路口倒計時的顯示就不

能實現,所以本次設計中采用一種新型的電路如圖3-1 所示。

圖中74LS04的作用是倒相和驅動,它輸出的電流大約48mA,實際測試發現足以滿足要

求,而且發光管也能達到足夠的亮度。

觀察圖可以看出:兩組發光管(一組紅、一組綠)由于反相器的作用,其邏輯狀態恰恰 相反。

圖中和電阻串聯的二極管的作用是為了分壓,防止因上下兩組發光管分壓不同導致邏輯 的錯誤。

共四組和上述相同的電路分別代表東西南北四個方向的紅綠燈,使用兩片74LS04 作為 驅動。

2.倒計時顯示電路設計

前面已經分析過相向的燈的狀態和倒計時都是相同的,所以為了節省,采用兩組四個數碼管

作為倒計時的顯示;同時為了節省口資源,采用串口顯示的方式驅動數碼管。見圖3-2 所 示。

四、程序設計思路與流程圖 1.主程序流程圖

主程序中主要是一個死循環,不停的循環四個狀態,如圖4-1 所示。

2.按鍵子程序流程圖

它包含倒計時調整和緊急狀態兩個狀態。

主程序中放了一個按鍵的判斷指令,當有按鍵按下的時候,程序就自動的跳轉到按鍵子

程序處理。當檢測到K2鍵按下的時候就自動返回到主程序。當出現緊急的情況的時候,按下K3或者K4 就切換到緊急狀態,當緊急事件處理完畢 的時候,按下K2,就可以返回正常狀態。

五、測試、數據及結果分析 1.狀態燈顯示測試

當電路連接完畢后,將寫好的測試程序刷寫到芯片內,K1 和K2分別給端口送高電平和

低電平,通電即可檢測。2.數碼管的測試

將串口的和電路板上的接口連接,將寫好的測試程序刷寫到芯片內,開電源即可測試。

3.整體電路測試

系統上電,刷寫好程序即可開始測試,觀測一個周期(共計S1~S4四個狀態,默認140 秒)燈的顯示狀態是否正常,同時觀察倒計的計數是否正常。

六、總結

由于使用的是單片機作為核心的控制元件,使得電路的可靠性比較高,功能也比較強大,而且可以隨時的更新系統,進行不同狀態的組合。

但是在我們設計和調試的過程中,也發現了一些問題,譬如紅燈和綠燈的切換還不夠迅

速,紅綠燈規則不效率還不是很高等等,這需要在實踐中進一步完善。附錄 系統總體電路圖

1.滿足南北向紅綠燈亮,東西向紅燈亮,占25秒——南北向黃燈亮,東西向紅燈亮,占5秒——南北向紅燈亮,東西向綠燈亮,占25秒——南北向紅燈亮,東西向黃燈亮,占5秒。如此循環,周而復始。2.十字路口要有數字顯示,提示行人把握時間:當某方向綠燈亮時,置顯示器為24,然后以每秒減1計數方式工作,直到減為0,綠燈滅,黃燈亮。黃燈滅,紅燈亮時,再次置顯示器為29,并開始減計數,直到為0,十字路口紅綠燈交換,完成一次工作循環。

3.可手動調整和自動調整,夜間為黃燈閃耀。下面是一個單片機交通燈程序 /*

****************************************************************************************** * *

* Keil C 89S51 交通信號控制程序 * *(C)版權所有 Dai_Weis@hotmail.com * * *

****************************************************************************************** */

#include “reg51.h” #define UINT unsigned int #define ULONG unsigned long #define UCHAR unsigned char /*

信號燈變量

南北方向綠燈

sbit n_bike_g = P1^0;//自行車

sbit n_right_g = P1^1;//右轉

sbit n_up_g = P1^2;//直行

sbit n_left_g = P1^3;//左轉 調頭

南北方向紅燈

sbit n_bike_r = P1^4;//自行車

sbit n_right_r = P1^5;//右轉

sbit n_up_r = P1^6;//直行

sbit n_left_r = P1^7;//左轉 調頭 南北方向黃燈

sbit n_bike_y = P3^0;//自行車

sbit n_right_y = P3^1;//右轉

sbit n_up_y = P3^2;//直行

sbit n_left_y = P3^3;//左轉 調頭

東西方向綠燈

sbit e_bike_g = P2^0;//自行車

sbit e_right_g = P2^1;//右轉

sbit e_up_g = P2^2;//直行

東西方向紅燈

sbit e_bike_r = P2^4;//自行車

sbit e_right_r = P2^5;//右轉

sbit e_up_r = P2^6;//直行

東西方向黃燈

sbit e_bike_y = P3^4;//自行車

sbit e_right_y = P3^5;//右轉

sbit e_up_y = P3^6;//直行

*/ //延時

void delay(UINT t, UINT s){ while(t){ UINT i;

for(i = 0;i < s;i++){ } t--;} }

//信號燈狀態

void time_x(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3){

P1 = P_P1;P2 = P_P2;P3 = P_P3;delay(150, 65535);}

void time_s(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3, UCHAR P_P11, UCHAR P_P22){ UINT i;

for(i = 0;i < 3;i ++){

P1 = P_P1;P2 = P_P2;delay(5, 65535);P1 = P_P11;P2 = P_P22;delay(5, 65535);}

P1 = P_P1;P2 = P_P2;P3 = P_P3;delay(10, 65535);} //主程序

void main(){

P1 = P2 = P3 = 0x0;while(1){

time_x(0xA5, 0x38, 0x0);

time_s(0xA4, 0x38, 0x1, 0xA5, 0x38);time_x(0x96, 0x52, 0x0);

time_s(0x92, 0x52, 0x4, 0x96, 0x52);time_x(0x5A, 0x52, 0x0);

time_s(0x50, 0x50, 0x2A, 0x5A, 0x52);time_x(0xF0, 0x25, 0x0);

time_s(0xF0, 0x24, 0x20, 0xF0, 0x25);time_x(0xD2, 0x16, 0x0);

time_s(0xD0, 0x10, 0x62, 0xD2, 0x16);} }

給你一個定時控制的信號系統,我只做的簡單的測試,至于延時我用的軟件,你自己想辦法。^_^

Dai_Weis 于 2005-5-4 13:43:23 重新給你說明

/*

*********************************************************************************** * *

* Keil C AT89S51 交通信號控制程序 * *(C)版權所有 Dai_Weis@hotmail.com * * *

*********************************************************************************** 開發說明:

固定時間信號變換,南北設置調頭、左傳、直行、右轉、自行車。

東西設置左傳、直行、右轉、自行車。

時序狀態:

紅 綠 紅 綠

序號 左 前 右 自 左 前 右 自 前 右 自 前 右 自1 0 1 0 0 1 0 1 1 1 1 0 0 0 2 1 0 0 1 0 1 1 0 1 0 1 0 1 0 3 0 1 0 1 1 0 1 0 1 0 1 0 1 0 4 1 1 1 1 0 0 0 0 0 1 0 1 0 1 5 1 1 0 1 0 0 1 0 0 0 1 1 1 0 */

另外修正個錯誤

while(1){

time_x(0xA5, 0x70, 0x0);time_s(0xA4, 0x70, 0x1, 0xA5, 0x70);

材料: 1、89S51 11.0592M 晶振

1K電阻、10UF電容

12個燈,紅、黃、綠各四個,12個1K電阻

,十字路口嘛。蜂鳴器一個。

按鍵一個,按鍵復位

采用AT89s51型號的單片機,由于交通十字路口的對稱性,所以一個引腳可以同時控制兩個燈,將發光二極管分別接到P1各個引腳,在其中加入一個時振蕩當電路,來控制時間,在P3.0引腳接入蜂鳴器只黃燈亮的時候發出聲響,這里我們讓每次黃燈亮的時候發出六聲響,通過C程序的控制就可以實現,每次循環是10秒。2、9cm*15cm萬用板 1片 單片機及IC座 1套 12M晶振 1只 22P電容 2只 10uF電容 1只 10K電阻 1只 1K排阻 1只 兩位一體數碼管 2只 DC座 1只 自鎖開關 1只

發光二極管紅綠黃

各4只 按鍵 7只 USB電源線 1條 導線

若干

1、基于51系列單片機(型號:STC89C52、AT89C51/C52、AT89S51/S52,隨機選擇,如有特

殊要求請與店主討論)設計實現。(以上幾種單片機全部為51系列單片機,除了名字不一樣外,功能及應用完全一樣,互相

兼容)

2、兩個兩位一體數碼管顯示東西、南北方向時間。

3、四方向各有紅綠黃三顆燈。

4、七個按鍵操作,分別是:禁止通行、東西通行、南北通行、時間加、時間減、切換方向、確認。

第五篇:基于單片機的交通燈設計

基于單片機的交通燈設計

設計程序:

#include #define uchar unsigned char /**************************變量、控制位定義**************************/ uchar code table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~~9段選碼

//共陽極

uchar

code table1[5]={0xf3,0xf5,0xde,0xee,0xf6};/*各種狀態下紅綠燈段選碼, 狀態1:A綠燈,B紅燈;狀態2:A黃燈亮,B紅燈;狀態3:A紅燈,B綠燈;狀態4:A紅燈,B黃燈亮;狀態5:A紅燈,B紅燈;*/ uchar

code tab[4]={0x1E,0x2D,0x4E,0x8D};//數碼管顯示位選碼 sbit key1=P1^0;//放行A sbit key2=P1^1;//放行B sbit key3=P1^2;//禁止通行

uchar EW=40,SN=30,K1_T=15,K2_T=15,K3_T=20;//初始化交通燈時間 uchar count;//計時中斷次數 uchar i,j;//循環控制變量 char Timer;//子程序說明語句 void Process();void Display(uchar j);void Delay(uchar a);/**************************主程序**************************/ main(){ IP=0X02;//設置定時器中斷為高優先級//成為中斷嵌套

TMOD=0x01;//定時器工作方式

TH0=0x3C;//定時器初始化

TL0=0xB0;IT0=1;//中斷觸發方式為下降沿觸發

EA=1;//CPU開中斷

ET0=1;//開定時中斷

TR0=1;//啟動定時

EX0=1;//啟動外部中斷0 while(1)

{

Process();

} } /*************************交通燈顯示子程序*************************/ void Display(uchar j)//j控制顯示table中連續位的起始點 {

char h,l;

h=Timer/10;//EW通行時間十位

l=Timer%10;//EW通行時間個位

for(i=0;i<4;)//按位顯示通行狀況及時間 {

P0=table1[j];//通行狀況顯示

P3=tab[i];//位選顯示

i++;

//j++;

if(i%2)//兩位計時顯示

{

P2=table[l];

Delay(400);

}

else

{

P2=table[h];

Delay(400);

} } Delay(5);

//設置掃描時間

} /*********鍵控*******/ void Keyboard()interrupt 0 using 0 {

if(key1==0)

{ Timer=K1_T;

while(Timer>0)

{

j=0;

Display(0);

//顯示一次

}

if(key2==0)

{

Timer=K2_T;

while(Timer>0)

{

j=2;

Display(j);

}

if(key3==0)

{

Timer=K3_T;

while(Timer>0)

{

j=4;

Display(j);

}

} } /**************************延時子程序**************************/ void Delay(uchar a)//循環a次 { uchar x;x=a;while(x--){;} }

/************************TO計時中斷服務程序************************/ void timer0(void)interrupt 1 using 1//T0中斷 { TH0=0x3C;TL0=0xB0;//定時計數初值

count++;//中斷溢出一次count+1 if(count==20){

Timer--;

count=0;//中斷次計數,count回,倒計時時間

} } /**************************亮燈控制**************************/ void Process(){ Timer=EW;//初始化方向通行時間

while(Timer>3)//狀態:A綠燈,B紅燈;{

j=0;

Display(j);//調用顯示函數

} while(Timer>0)//狀態:A黃燈亮,B紅燈;{

j=1;

Display(j);

} Timer=SN;while(Timer>3)//狀態:A紅燈,B綠燈;{

j=2;

Display(j);} while(Timer>0)//狀態:A紅燈,B黃燈亮;{

j=3;

Display(j);

}

}

電路圖如下:

下載基于單片機控制的交通燈設計系統word格式文檔
下載基于單片機控制的交通燈設計系統.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    基于51單片機的交通燈控制電路設計

    交通燈 一、功能要求 要求甲車道和乙車道兩條交叉道路上的車輛交替運行,每次通行時間都設為25秒,黃燈先亮5秒鐘,才能變換運行車道;黃燈亮時,要求每秒鐘閃亮一次。 二、電路圖 說......

    基于單片機的交通燈控制系統設計

    基于單片機的交通燈控制系統設計 摘要:十字路口車輛穿梭,行人熙攘,車行車道,人行人道,有條不紊。那么靠什么來實現這井然秩序呢?靠的就是交通信號燈的自動指揮系統。交通信號燈控......

    基于單片機的交通燈控制系統設計

    P10P11P12P13設置鍵加鍵減鍵模式鍵P00P01P02P03P04P05P06U18765P134P123P112P101P1.7P1.6P1.5P1.4P1.3P1.2P1.1/T2EXP1.0/T2P3.7/RDP3.6/WRP3.5/T1P3.4/T0P3.3/INT1P3.2/INT......

    單片機交通燈控制程序

    #include #define uchar unsigned char #define uint unsigned int uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40 }; //*************d......

    交通燈單片機課程設計

    《單片機原理與接口技術課程設計報告》 課題:以交通燈為主的多功能任務設計 班級 學號 學生姓名指導教師 淮陰工學院 電子與電氣工程學院 2015-6 1 目錄 一、 課程設計目......

    單片機定時器控制交通燈程序1(精選5篇)

    定時器控制交通指示燈 /* 名稱:定時器控制交通指示燈說明:東西向綠燈亮5s后,黃燈閃爍,閃爍5次亮紅燈, 紅燈亮后,南北向由紅燈變成綠燈,5s后南北向黃燈閃爍, 閃爍5次后亮紅燈,東西向綠......

    基于單片機AT89C51的交通燈控制器的設計

    2014屆本科生畢業設計分類號:TP368.1 題目:基于單片機AT89C51的交通燈控制器的設計 姓 名: 張建猛 學 號 : 2010080870 學 院: 機械與電子工程學院 專 業: 自動化 指導教師職稱: 胡......

    基于AT89S51單片機多功能交通燈控制系統設計下載

    交通燈控制系統設計 摘要:本系統由單片機系統、鍵盤、LED 顯示、交通燈演示系統組成。系統包括人行道、左轉、右轉、以及基本的交通燈的功能。系統除基本交通燈功能外,還具有......

主站蜘蛛池模板: 日韩一区二区三区无码a片| 久久久久国产精品人妻aⅴ院| 亚洲综合另类小说色区色噜噜| 天天躁日日躁狠狠很躁| 日本高清一区免费中文视频| 国产做爰xxxⅹ久久久| 中文字幕一区二区三区人妻少妇| 欧美老熟妇又粗又大| 麻豆精品国产综合久久| 国产精品久久久久影院嫩草| 乱人伦中文字幕成人网站在线| 国内精品久久久久久久久齐齐| 国产精品av免费观看| 精品人妻无码区二区三区| 欧美乱妇高清无乱码在线观看| 成在人线av无码免费高潮求绕| 国产午夜免费高清久久影院| 图片区 小说区 区 亚洲五月| 国产卡一卡二卡三| 亚洲国产成人精品青青草原| 国产亚洲精品一品区99热| 曰韩人妻无码一区二区三区综合部| 免费超爽大片黄| 日本www网站色情乱码| 777米奇色狠狠888俺也去乱| 久久婷婷五月国产色综合| 色欲色香天天天综合网站| 产后漂亮奶水人妻无码| 国产精品内射后入合集| 中文成人无字幕乱码精品区| 一区二区三区四区在线 | 网站| 18岁日韩内射颜射午夜久久成人| 久爱无码精品免费视频在线观看| 在线亚洲午夜理论av大片| 国产精品制服丝袜第一页| 国产综合久久99久久| 97碰碰碰免费公开在线视频| 亚洲精品自产拍在线观看| 无码人妻丰满熟妇啪啪网站| 又紧又大又爽精品一区二区| 无码人妻精品一区二区三区在线|