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

單片機交通燈控制程序

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

第一篇:單片機交通燈控制程序

#include #define uchar unsigned char #define uint unsigned int uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40 };//*************digit display port******* sbit led_w1=P1^1;sbit led_w2=P1^0;sbit led_w3=P1^3;sbit led_w4=P1^2;

//*****define led port ********** sbit R1=P2^4;//east and west red led sbit Y1=P2^3;//east and west yellow led sbit G1=P2^2;//east and west green led sbit R2=P2^5;//south and north red led sbit Y2=P2^6;//south and north yellow led sbit G2=P2^7;//south and north green led

//*********define key************** sbit k0=P3^0;//emergency sbit k1=P3^1;//east and west pass sbit k2=P3^2;//south and north pass sbit k3=P3^3;//start and subtract 1 sbit k4=P3^4;//pause and add 1 sbit k5=P3^5;//set time

//*********define variable********* bit flag,flag_t;uchar dx_time,nb_time;uchar cnt,pass_time,cnt1,y_time;uchar k0num,k1num,k2num,k3num,k4num,k5num;

//*********define key******** void delay(uint i){ uint x,y;for(x=i;x>0;x--)

for(y=110;y>0;y--);} void timer0_init(){ TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;}

void led_display(uchar dx,nb){ uchar dx1,dx2,nb1,nb2;dx2=dx/10;dx1=dx%10;nb2=nb/10;nb1=nb%10;if(dx>99){

led_w1=1;

led_w2=1;} else {

led_w1=0;

P0=table[dx1];

delay(5);

led_w1=1;

if(dx<10&&dx>0)led_w2=1;

else

{

led_w2=0;

P0=table[dx2];

delay(5);

led_w2=1;

} } if(nb>99){

led_w3=1;

led_w4=1;} else {

led_w3=0;

P0=table[nb1];

delay(5);

led_w3=3;

if(nb<10&&nb>0)led_w4=1;

else

{

led_w4=0;

P0=table[nb2];

delay(5);

led_w4=4;

} } } //*************light work********** void circle_led(){ if(!flag){

if(pass_time>5)

{

led_display(pass_time-5,pass_time);

R1=1;Y1=1;G1=0;

//east and west pass

R2=0;Y2=1;G2=1;

//south and north stop

}

if(pass_time<=5&&pass_time>0)

{

if(cnt>=10)led_display(pass_time,pass_time);

else led_display(100,pass_time);

R1=1;G1=1;

//east and west yellow led flash

if(cnt>=10)Y1=0;

else Y1=1;

R2=0;Y2=1;G2=1;

}

if(pass_time==0)

{

pass_time=nb_time;

flag=1;

} } else {

if(pass_time>5)

{

led_display(pass_time,pass_time-5);

R1=0;Y1=1;G1=1;

//east and west stop

R2=1;Y2=1;G2=0;

//south and north pass

}

if(pass_time<=5&&pass_time>0)

{

if(cnt>=10)led_display(pass_time,pass_time);

else led_display(pass_time,100);

R1=0;Y1=1;G1=1;

R2=1;G2=1;

//south and north yellow led flash

if(cnt>=10)Y2=0;

else Y2=1;

}

if(pass_time==0)

{

pass_time=dx_time;

flag=0;

} } }

void emergency()

//east and west,south and north stop { led_display(0,0);R1=0;Y1=1;G1=1;R2=0;Y2=1;G2=1;} void dx_pass()

//east and west pass,south and north stop { led_display(100,100);if(y_time<=5&&y_time>0){

TR1=1;

R1=0;Y1=1;G1=1;

R2=1;G2=1;

//south and north yellow led flash

if(cnt1>=10)Y2=0;

else Y2=1;} if(y_time==0){

TR1=0;

R1=1;Y1=1;G1=0;

R2=0;Y2=1;G2=1;} } void nb_pass()

//south and north pass,east and west stop { led_display(100,100);if(y_time<=5&&y_time>0){

TR1=1;

R1=1;G1=1;

if(cnt1>=10)Y1=0;//east and west yellow led flash

else Y1=1;

R2=0;Y2=1;G2=1;

} if(y_time==0){

TR1=0;

R1=0;Y1=1;G1=1;

R2=1;Y2=1;G2=0;} }

//***********keyboard scan************ void keyscan(){

if(!k5num)

{

if(k0==0)//*******emergency*******

{

delay(10);

if(k0==0)

{

while(!k0);

TR0=0;

k0num=1;

}

}

if(!k1num&&!k0num)

{

if(k1==0)

{

delay(10);

if(k1==0)

{

while(!k1);

k1num=1;

k2num=0;

y_time=5;//單方向通行時,黃燈閃爍時間

TR0=0;

TR1=1;

}

}

}

if(!k2num&&!k0num)

{

if(k2==0)

{

delay(10);

if(k2==0)

{

while(!k2);

k1num=0;

k2num=1;

y_time=5;//單方向通行時,黃燈閃爍時間

TR0=0;

TR1=1;

}

}

}

if(k3==0)

{

delay(10);

if(k3==0)

{

while(!k3);

if(k1num||k2num)pass_time=dx_time;//由東西或南北通行返回時,重新開始執行。

k0num=0;

k1num=0;

k2num=0;

k4num=0;

k5num=0;

TR0=1;

TR1=0;

flag_t=0;

}

} {

} if(!k4&&!k0num)

//pause { delay(10);if(k4==0){

while(!k4);

TR0=0;

k4num=1;} }

if(k4num==1)

//暫停鍵按下時,才可以調整兩個方向通行時間 if(k5==0){ delay(10);if(k5==0){

k5num++;

while(!k5);

switch(k5num)

{

case 1:

TR0=1;

flag_t=1;//調整時間時,pass_time值不變。

k5num=1;

break;

case 2:

k5num=2;

break;

case 3:

TR0=0;

k5num=0;

pass_time=dx_time;//重新賦值

break;

} } } if(k5num!=0){ if(k3==0){

delay(10);

if(k3==0)

{

while(!k3);

switch(k5num)

{

case 1:

dx_time--;

if(dx_time<10)

break;

case 2:

nb_time--;

if(nb_time<10)

break;

}

}

}

if(k4==0)

{

delay(10);

if(k4==0)

{

while(!k4);

switch(k5num)

{

case 1:

dx_time++;

if(dx_time>=100)

break;

case 2:

nb_time++;

if(nb_time>=100)

break;

}

}

}

} } } void main(){ timer0_init();dx_time=45;nb_time=30;

dx_time=99;nb_time=99;dx_time=10;nb_time=10;

pass_time=dx_time;while(1){ keyscan();if(k0num)emergency();else { switch(k4num){

case 0:

if(!k1num&&!k2num)

circle_led();

else

{

if(k1num)dx_pass();

if(k2num)nb_pass();

}

break;

case 1:

switch(k5num)

{

case 0:

if(!k1num&&!k2num)

circle_led();

else

{

if(k1num)dx_pass();

if(k2num)nb_pass();

}

break;

case 1:

R1=1;Y1=1;G1=1;//調整時間時,關閉所有燈

R2=1;Y2=1;G2=1;

if(cnt<=10)

led_display(100,nb_time);

else

led_display(dx_time,nb_time);

break;

case 2:

R1=1;Y1=1;G1=1;//調整時間時,關閉所有燈

R2=1;Y2=1;G2=1;

if(cnt<=10)

led_display(dx_time,100);

else

led_display(dx_time,nb_time);

break;

}

break;

}

}

} } void timer0()interrupt 1 { TH0=(65536-50000)/256;TL0=(65536-50000)%256;cnt++;if(cnt==20){

cnt=0;

if(flag_t==0)pass_time--;//調整時間時,不執行此操作

} } void timer1()interrupt 3 { TH1=(65536-50000)/256;TL1=(65536-50000)%256;cnt1++;if(cnt1==20){

cnt1=0;

y_time--;//單方向通行時,黃燈閃爍時間。

} }

第二篇:交通燈單片機課程設計

《單片機原理與接口技術課程設計報告》

課題:以交通燈為主的多功能任務設計

班級 學號 學生姓名

指導教師

淮陰工學院 電子與電氣工程學院

2015-6 1

目錄

一、課程設計目的......................................................................................................3

二、設計要求..............................................................................................................3 1. 總體要求........................................................................................................3 2. 具體要求........................................................................................................3 3. 系統硬件總框圖............................................................................................4 1)AT89C52單片機.......................................................................................5 3)數碼管顯示電路........................................................................................6 4)LED燈顯示...............................................................................................7 5)鍵盤掃描模塊............................................................................................7 6)蜂鳴器電路................................................................................................8

三、硬件電路的設計及描述......................................................................................8 1. 硬件總框圖及原理圖....................................................................................8 2. 主程序流程圖..............................................................................................10 3. 各模塊流程圖..............................................................................................11 1)時間顯示程序流程圖..............................................................................12 2)流水燈程序流程圖..................................................................................12 3)利用蜂鳴器的音樂流程圖......................................................................13 4)交通燈控制..............................................................................................13

四、源程序代碼........................................................................................................14

六、調試情況

六、設計心得............................................................................................................20

七、參考文獻............................................................................................................20

一、設計目的

《單片機原理及應用》課程設計是一項重要的實踐性教育環節,是學生在校期間必須接受的一項工程訓練。在課程設計過程中,在教師指導下,應用工程的方法,通過一個簡單課題的設計練習,可使學生初步體驗單片機應用系統的設計過程、設計要求、完成的工作內容和具體的設計方法,了解必須提交的各項工程文件,也達到鞏固、充實和綜合運用所學知識解決實際問題的目的。

通過課程設計,應該能加強學生如下能力的培養:(1)獨立工作能力和創造力;

(2)綜合運用專業及基礎知識,解決實際工程技術問題的能力;(3)查閱圖書資料、產品手冊和各種工具書的能力;(4)工程繪圖的能力;

(5)編寫技術報告和編寫技術資料的能力。

二、設計要求

1.總體要求

(1)獨立完成設計任務(2)繪制系統硬件總框圖(3)繪制系統原理電路圖

(4)制定編寫設計方案,編制軟件框圖,完成詳細完整的程序清單和注釋(5)制定編寫調試方案,編寫用戶操作使用說明書

(6)寫出設計工作小結。對在完成以上文件過程所進行的有關步驟如設計思想、指標論證、方案確定、參數計算、元器件選擇、原理分析等作出說明,并對所完成的設計作出評價,對自己整個設計工作中經驗教訓,總結收獲和今后研究方向。

2.具體要求

本次工程實踐的校內部分主要以單片機為基礎,進行單片機軟件編程,目的 3 是為了提高學生的軟件編程和系統設計能力,整個設計系統包括兩個部分,硬件及軟件部分,硬件部分已經制作成功,學生只需要掌握其原理和焊接相應的元器件,掌握元器件的辨別和元器件的作用以及應用場所即可,另外對所焊接的電路還需要進行仔細的檢查,判斷是否有焊接錯誤的地方或者短路的地方,對出現的異常情況要能夠根據現象判別原因,并具備解決問題的能力,從而切實提高學生的硬件電子電路的分析、判斷能力。

軟件編程是本次課程設計的重要環節。在為期兩周的工程實踐中,將占據主要時間,完成的軟件編程任務主要包括以下幾點:

1)、熟悉Keil C51編程平臺及相關編程軟件

2)、編寫、調試蜂鳴器、繼電器動作、方波程序并進行軟硬件聯調 3)、編寫、調試LED流水燈(循環顯示)程序并進行軟硬件聯調 4)、編寫、調試鍵盤掃描子程序并進行軟硬件聯調 5)、編寫、調試數碼管動態掃描程序并進行軟硬件聯調 6)、基于交通燈的多功能控制設計

其中前五個內容是后兩個內容的基礎,主要是編制一些子程序,為后繼的整個系統設計打下基礎。交通燈控制是在五個課題中選做的一個設計,是一個簡單的單片機編程設計,來實現智能交通燈的多功能作用。

3.系統硬件總框圖

圖1 系統設計總框圖

此次課程設計,AT89C52是一種帶2K字節閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS 8位微處理器,俗稱單片機。1)AT89C52單片機

設計中所用的單片機型號為AT89C52,其主要功能為:

AT89C52是低功耗、高性能的CMOS 8位單片機。片內帶有8KB的Flash存儲器,且允許在系統內改寫或用編程器編程。另外,AT89C52的指令系統和引腳與80C52完全兼容,所以,近幾年AT89C52單片機應用極為廣泛。

AT89C52單片機除了含有8KB的Flash存儲器外,片內還有256 B的RAM,32條I/O口線,3個16位定時/計算器、6個中斷源、1個全雙工串行口等。同時,與80C52一樣,有空閑和掉電兩種節電運行方式。

AT89C52引腳如下圖所示:

圖2 AT89C52引腳

AT89C52單片機為40腳雙列直插封裝的8 位通用微處理器,采用工業標準的C51內核,在內部功能及管腳排布上與通用的8xc52 相同,其主要用于會聚調整時的功能控制。功能包括對會聚主IC 內部寄存器、數據RAM及外部接口等功能部件的初始化,會聚調整控制,會聚測試圖控制,紅外遙控信號IR的接收解碼及與主板CPU通信等。

2)DS1302模塊

DS1302的RST是復位/片選線,通過把RST輸入驅動置高電平來啟動所有的數據傳送。當RST為高電平時,所有的數據傳送被初始化,允許對DS1302進行操作。如果在傳送過程中RST置為低電平,則會終止此次數據傳送,I/O引腳變為高阻態。

其管腳圖如下:

圖3 DS1302管腳圖

各引腳功能:Vcc1為后備電源,VCC2為主電源,X1和X2是振蕩源,SCLK為輸入端

RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節或多字節數據的傳送手段。

3)數碼管顯示電路

圖4 數碼管顯示電路

設計中采用六位共陰極數碼管,通過單片機STC89C52的P0口控制其位選和段選,以達到動態顯示相應數值的效果。在其位選控制部分,采用了一個9012型三極管,要求當P0口輸出低電平時,位選成功。

所謂動態掃描就是指我們采用分時的方法,輪流控制各個顯示器的COM端,6 使各個顯示器輪流點亮。在輪流點亮掃描過程中,每位顯示器的點亮時間是極為短暫的(約1ms),但由于人的視覺暫留現象及發光二極管的余輝效應,盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會有閃爍感。

4)LED燈顯示

圖5 LED顯示模塊

本次課程設計中,“程序語言”通過“翻譯”軟件“翻譯”成單片機所需的二進制代碼,單片機可工作。要用外加電源和分壓電阻來控制低電平驅動點亮,因為單片機不能直接高電平驅動LED燈。如圖D1-D8和R1、R2以及R6-R11連接到單片機IO口,當P1口某腳變低時相應LED發光。實現LED燈的閃爍,只需利用編程方法依次從低位到高位逐個變為低電平,等待少許時刻再變高即可。

5)鍵盤掃描模塊

圖6 按鍵輸入電路

本模塊四個開關分別用于控制流水燈控制電路,時間顯示電路,音樂蜂鳴器電路,交通燈四部分功能。當按下其中一個開關時,該部分電路導通,給單片機 發出地址信號,實現其中一項功能的運做,如圖4所示。

KEYA鍵:其功能是當該鍵按下時,蜂鳴器程序工作; KEYB鍵:其功能是當該鍵按下時,流水燈程序工作;

KEYC鍵:其功能是當該鍵按下時,數碼管動態掃描程序工作; KEYD鍵:其功能是當該鍵按下時,交通燈程序工作。

6)蜂鳴器電

圖7 蜂鳴器電路

蜂鳴器單元電路是通過一個PNP三極管來放大驅動蜂鳴器,蜂鳴器的正極接到+5V電源上面,蜂鳴器的負極接到三極管的發射極,三極管的基極經過限流電阻后由單片機的P3.4控制。

當輸出高電平時,三極管截止,蜂鳴器的兩引腳間的直流電壓接近于0V,沒有電流流過線圈,蜂鳴器不發聲;當輸出低電平時,三極管導通,使蜂鳴器的兩個引腳間獲得將接近+5V的直流電壓,這樣蜂鳴器的電流形成回路,發出聲音。因此,我們可以通過程序控制IO口輸出的電平來控制蜂鳴器是否發出聲音,實現各種可能音響的產生。

三、硬件電路的設計及描述

1.硬件總框圖及原理圖

圖8 硬件總框圖

圖9 硬件總原理圖

2.主程序流程圖

3.各模塊流程圖 1)時間顯示程序流程圖

2)流水燈程序流程圖

3)利用蜂鳴器的音樂流程圖

4)智能交通燈

四、源程序代碼

/******************************************************************** * 文件名

: 4個功能由按鍵控制.c * 描

: 按下A鍵,實現蜂鳴器動作。

按下B鍵,實現LED流水燈循環顯示。

按下C鍵,實現數碼管動態掃描顯示。

按下D鍵,實現交通燈功能。* 創建人

***********************************************************************/ #include #include

#define uint unsigned int

// 無符號整形習慣的定義

#define uchar unsigned char

//無符號字符型習慣的定義 void buzz_key(void);

//子函數聲明 void led_key(void);void tube_key(void);void traffic(void);unsigned char code duanma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 0 1 2 3 4 5 6 7 8 9

unsigned char code weima[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

// 選擇哪個數碼管

unsigned char temp[6];uchar i=35;uchar k=30;uchar l=5;uchar j;uchar b;

//定義變量

sbit duan=P2^6;//定義管腳 sbit wei=P2^7;sbit key_A=P3^4;sbit key_B=P3^5;sbit key_C=P3^6;sbit key_D=P3^7;sbit buzz=P2^3;sbit DIOLA=P2^5;sbit csda=P3^2;sbit red=P1^0;//交通燈管腳定義 sbit green=P1^1;sbit yellow=P1^2;/******************************************************************** * 名稱 : Delay_1ms()* 功能 : 延時子程序,延時時間為 1ms * x * 輸入 : x(延時一毫秒的個數)* 輸出 : 無

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

void Delay_1ms(unsigned int t){ unsigned char x,y;for(x=t;x>0;x--)for(y=110;y>0;y--);

}

/******************************************************************** * 名稱 : Main()* 功能 : 實現蜂鳴器,流水燈,數碼管,交通燈

***********************************************************************/ void main(){

DIOLA=0;//流水燈鎖存器關 流水燈未選通

wei=0;//位選關

duan=1;

P0=0;

duan=0;

csda=0;

while(1){

if(key_A==0 || key_B==0 || key_C==0|| key_D==0)

{

if(key_A==0)

//A鍵按下

{

buzz_key();

//調用蜂鳴器子程序

}

else if(key_B==0)//B鍵按下

{

led_key();

//調用流水燈子程序

}

else if(key_C==0)//C鍵按下時

{

tube_key();//調用數碼管顯示子程序

}

else

//D鍵按下時

{

traffic();

//調用交通燈子程序

i=35;

k=30;

l=5;

return;

}

}

} }

/******************************************************************** * 名稱 : buzz_key(void)* 功能 : 蜂鳴器子程序

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

void buzz_key(void)

{

DIOLA=0;wei=0;

buzz=0;

//蜂鳴器響

while(key_B&&key_C&&key_D&&!key_A);

buzz=1;

//關蜂鳴器

}

/********************************************************************* * 名稱 : led_key(void)* 功能 : 流水燈子程序

***********************************************************************/ void led_key(void){

DIOLA=1;b=0xfe;

P1=b;//11111110 while(key_B==0){

b=_crol_(b,1);

//左移11111101

Delay_1ms(500);

P1=b;

//111111011

Delay_1ms(500);

}

while(key_A&&key_B&&key_C&&key_D);

P1=0xff;

}

/******************************************************************** * 名稱 : tube_key(void)* 功能 : 數碼管子程序

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

void tube_key(void){

DIOLA=0;

//流水燈使能端置0 while(key_C==0)

{ unsigned int i;

for(i=0;i<6;i++)

{

wei=1;

P0=weima[i];

//位選信號

wei=0;

duan=1;

P0=duanma[i];//段選信號

duan=0;

Delay_1ms(500);

}

duan=1;

P0=0;

duan=0;

//清零

}

}

/******************************************************************** * 名稱 : traffic_key(void)* 功能 : 交通燈子程序

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

void traffic(void)

{

DIOLA=0;

while(key_D==0)

{

if(i>0)

{

DIOLA=1;

b=0xfe;

P1=b;//11111110

for(j=0;j<40;j++)

{

P0 = 0;

wei=1;

//消隱

P0 = weima[0];

wei=0;

duan=1;

//第1位數碼管顯示

P0 = duanma[(i / 10)%10];//在這里取 i 的個位數

Delay_1ms(40);

//延時40毫秒后顯示下一個數

P0 = 0;

wei=1;

//消隱

P0 = weima[1];

wei=0;

duan=1;

//第2位數碼管顯示

P0 = duanma[i % 10];

//在這里取 i 的個位數

Delay_1ms(40);

//延時40毫秒后顯示下一個數

}

i--;

}

else if(k>0)

{

DIOLA=1;

b=0xfd;

P1=b;//11111110

for(j=0;j<40;j++)

{

P0 = 0;

wei=1;

//消隱

P0 = weima[0];

wei=0;

duan=1;

//第1位數碼管顯示

P0 = duanma[(k / 10)%10];//在這里取 i 的個位數

Delay_1ms(40);

//延時3毫秒后顯示下一個數

P0 = 0;

wei=1;

//消隱

P0 = weima[1];

wei=0;

duan=1;

//第2位數碼管顯示

P0 = duanma[k % 10];

//在這里取 i 的個位數

Delay_1ms(40);

//延時3毫秒后顯示下一個數

}

k--;

}

else if(l>0)

{

DIOLA=1;

b=0xfb;

P1=b;//11111110

for(j=0;j<40;j++)

{

P0 = 0;

wei=1;

//消隱

P0 = weima[0];

wei=0;

duan=1;

//第1位數碼管顯示

P0 = duanma[(l / 10)%10];//在這里取 i 的個位數

Delay_1ms(40);

//延時3毫秒后顯示下一個數

P0 = 0;

wei=1;

//消隱

P0 = weima[1];

wei=0;

duan=1;

//第2位數碼管顯示

P0 = duanma[l % 10];

//在這里取 i 的個位數

Delay_1ms(40);

//延時3毫秒后顯示下一個數

}

l--;

}

}

}

五、設計心得

通過兩個星期的實驗,我的設計雖然有一些毛病,但總體上還是成功的。兩周的時間雖然短暫,但我從中受益匪淺,畢竟在課堂學習到的東西真真正正的用到實際中還是有很大困難的,要把理論運用于實踐確實并非一件易事。我從最初的設想設計一個什么樣的數字電路到繪制電路圖,然后打印排版,最后矯正設計中的漏洞與不足,整個過程我翻閱了大量的資料。

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

還有交通燈是我們生活中非常常見的一種東西,對于我們學以致用的這種能力得到了很好鍛煉,能夠為我們以后的工作于學習打下基礎。

六、參考文獻

1.《單片機原理及接口技術》 李朝青 北京航空航天大學出版社,2004 2.《單片機原理及應用》 李全力 高等教育出版社,2001 3.《電子系統設計與實踐》 楊剛,周群 電子工業出出版社,1997 4.《單片機微型計算機技術》 劉國榮 機械工業出版社,1997 5.《數字電子技術》 楊志忠 高等教育出版社,2003 6.《電子技術》 胡宴如 高等教育出版社,2001 7.《電子線路CAD》 王延才 機械工業出版社,2001 8.《單片機應用技術選編》 何利民 北京航空航天大學出版社,1996 9.《單片機應用技術》 吳國經 中國電力出版社,2004 10.《單片機及接口技術實踐教程》 胡健 北京機械工業出版社,2002 11.《使用接口技術》 李廣軍 成都電子科技大學出版社,1998

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

交通燈控制系統設計

摘要:本系統由單片機系統、鍵盤、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);

}

}

電路圖如下:

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

單片機原理及系統課程設計報告

基于單片機的交通燈控制系統 引言

單片機是一種集成電路芯片,是采用超大規模集成電路技術把具有數據處理能力的中央處理器CPU隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計時器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊硅片上構成的一個小而完善的微型計算機系統,在工業控制領域具有廣泛的應用。本文設計了基于單片機的交通燈控制系統以AT89C51單片機為核心芯片,通過控制三色LED燈的亮滅來控制各車道的通行。設計方案及原理

本系統由AT89C51單片機、紅、黃、綠LED交通信號燈、共陰極數碼管、緊急通車開關等模塊組成該電路具有設計簡單,顯示亮度高,能耗小,可靠性高燈特點。其總體設計框圖如圖1所示。

復位電路七段數碼管倒計時顯示電路AT89C51晶振電路A、B車道LED顯示電路按鍵電路

圖1 系統總體設計方框圖

2.1 系統設計

交通燈控制系統主要控制A,B兩車道的交通,以AT89C51單片機為核心芯片,通過控制三色LED燈的亮滅來控制各車道的通行;另外通過3個按鍵來模擬各車道有無車輛的情況和有緊急車輛的情況。根據設計要求,制定總體設計思想如下:

(1)用AT89C51單片機控制交通燈電路,晶振采用12MHz。(2)用發光二極管模擬交通信號燈,用按鍵開關模擬車輛檢測信號。

(3)有緊急車輛通過時,按下K3開關使A、B車道均為紅燈,禁行20s。此時,

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

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在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......

    單片機控制交通燈的案例

    單片機控制交通燈 AT89C51單片機及由Keil 軟件編寫單片機程序,并且通過Proteus仿真測試,設計一個交通燈系統,實現簡單的交通燈的管理功能。在交通燈系統的管理中,用發光二極管模......

    單片機交通燈綜合實驗報告(大全5篇)

    河 北 工 業 大 學 實驗報告 學院: 專業:班級: 姓名:學號:實驗課程:單片機應用系統設計開發入門 指導教師: 實驗名稱: 交通信號燈控制實驗實驗時間:2019 年5月 23 日2019 年 5 月 23......

    交通燈單片機實現實習報告

    單 片 機 課 程 設 計學院: 專業: 班級: 小組成員:交通燈單片機課程設計 SECOND1 EQU 30H ;東西路口計時寄存器 LED_G1 BIT P1.0 ;東西路口綠燈 LED_Y1 BIT P1.1 ;東西路......

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

    基于C51單片機的交通燈控制系統 1、實驗方案論證: 進行十字路口的交通信號燈控制電路設計,畫出電路原理圖及實驗電路圖,進行軟件編程、以及使用說明文檔的建立等一整套工作任務......

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

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

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

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

主站蜘蛛池模板: 久久这里只精品国产免费10| 99这里只有是精品2| 公与淑婷厨房猛烈进出| 久久久精品人妻一区二区三区蜜桃| 在线亚洲午夜理论av大片| 亚洲男女羞羞无遮挡久久丫| 国产国产人免费视频成69| 999国内精品永久免费视频| 免费无码又爽又刺激高潮的动漫| 熟女乱牛牛视频在线观看| 亚洲爆乳中文字幕无码专区网站| 国产v视频在线亚洲视频| 精品av中文字幕在线毛片| 亚洲国产精品无码久久久| 粗大的内捧猛烈进出在线视频| 99精品国产在热久久婷婷| 日韩高清在线亚洲专区小说| 亚洲日韩精品无码专区加勒比海| 无码专区视频精品老司机| 在线视频免费观看爽爽爽| 99无码人妻一区二区三区免费| 欧美变态人zozo禽交| 欧美性xxxx极品hd欧美风情| 97碰碰碰免费公开在线视频| 亚洲人成网站18禁止一区| 国产精品你懂的在线播放| 精品日产一卡2卡三卡4卡在线| 亚洲欧洲日产国码在线| 伊人久久五月丁香综合中文亚洲| 超碰97人人做人人爱亚洲| 亚洲乱色熟女一区二区三区丝袜| 欧美老熟妇乱子伦牲交视频| 国产av一二三无码影片| 老外和中国女人毛片免费视频| 韩国无码一区二区三区免费视频| aⅴ精品无码无卡在线观看| 任你躁久久精品6| 日韩一区二区三区免费高清| 97久久精品午夜一区二区| 国产成人高清亚洲综合| 国产精品原创巨作av|