1. 單片機控制的交通燈
題目 交通燈控制系統的設計 一、課程設計的目的與要求 1、課程設計目的: (1)進一步理解和消化書本知識,運用所學知識和技能進行簡單的設計。 (2)通過課程設計提高應用能力,分析問題和解決問題的能力。 (3)培養查閱資料的習慣,訓練和提高自學,獨立思考的能力。 2、課程設計要求 交通燈控制系統的設計 1) 掌握在單片機系統中擴展簡單I/O介面的方法。 2) 掌握數據輸出程序的設計方法。 3) 掌握模擬交通燈控制的實現方法。 4) 掌握外部中斷技術的基本使用方法。 5) 掌握中斷處理程序的編程方法。 從課程設計的目的出發,通過設計工作的各個環節,達到以下要求: (1)能夠正確理解課程設計的題目和意義,全面思考問題。 (2)運用科學合理的方法,認真按時完成。 二、課程設計課題的分析 1、電路的設計 1)原理 要完成本實驗,首先必須了解交通燈的亮滅規律。本實驗需要用到試驗箱上八個發光二極體中的六個,即紅、綠、黃各兩個。將L1(紅)、L2(綠)、L3(黃)作為東西方向的指示燈,將L5(紅)、L6(綠)、L7(黃)作為南北方向的指示燈。交通燈的亮滅規律為:初始態是兩個路口的紅燈全亮,之後,東西路口的綠燈亮,南北路口的紅燈亮,東西方向通車,延時一段時間後,東西路口綠燈滅,黃燈開始閃爍。閃爍若干次後,東西路口紅燈亮,而同時南北路口的綠燈亮,南北方向開始通車,延時一段時間後,南北路口的綠燈滅,黃燈開始閃爍。閃爍若干次後,再切換到東西路口方向,重復上述過程。 各發光二極體的陽極通過保護電阻接到+5V的電源上,陰極接到輸入端上,因此使其點亮使相應使相應輸入端為低電平。 當有急救車到達時,兩個方向上的紅燈亮,以便讓急救車通過,假設急救車通過路口的時間為10秒,急救車通過後,交通燈恢復中斷前的狀態。本程序以單次脈沖為中斷申請,表示有急救車通過,單次脈沖輸出端P-接CPU板上的INT0。 2)、硬體電路圖 圖1—1 交通燈控制系統的硬體接線圖 74LS273的輸出00—07接發光二極體L1—L8,74LS273的片選CS273接片選信號CS2,此時74LS273的片選地址為CFA0—CFA7之間任選。 3)、程序流程圖 主程序流程 圖1—2 主程序軟體流程圖 中斷程序流程圖 三、課程設計的結果 1、程序 NAME JIAOTONGGENG OUTPORT EQU 0CFB0H ;埠地址 SAVE EQU 55H ;SAVE保存從埠CFA0輸出的數據 CSEG AT 0000H LJMP START CSEG AT 4003H LJMP INT CSEG AT 4100H START: SETB IT0 ;中斷程序初始化 SETB EX0 SETB EA MOV A,#11H ;置首顯示碼,兩紅燈全亮 MOV SAVE,A ;保存 ACALL DISP ;顯示輸出 ACALL DE3S ;延時3秒 LLL: MOV A,#12H ;東西路口綠燈亮,南北路口紅燈亮 MOV SAVE,A ACALL DISP ACALL DE10S ;延時10秒 MOV A,#10H ;東西路口綠燈滅 MOV SAVE,A ACALL DISP MOV R2,#05H ;東西路口黃燈閃爍5次 TTT: MOV A,#14H MOV SAVE,A ACALL DISP ACALL DE02S ;延時0.2秒 MOV A,#10H MOV SAVE,A ACALL DISP ACALL DE02S DJNZ R2,TTT MOV A,#11H ;紅燈全亮 MOV SAVE,A ACALL DISP ACALL DE02S ;延時0.2秒 MOV A,#21H ;東西路口紅燈亮,南北路口綠燈亮 MOV SAVE,A ACALL DISP ACALL DE10S ;延時10秒 MOV A,#01H ;南北路口綠燈滅 MOV SAVE,A ACALL DISP MOV R2
2. 單片機交通燈畢業設計
單片機交通燈畢業設計
在日常生活中,交通燈是一項必不可少的公共設施,可以維護道路的暢通和交通的秩序。如若交通燈發生故障,那麼後果可想而知。因此,交通燈的正常工作就顯得尤為重要。由於交通燈對於公共安全的重要性,本文基於51單片機模擬雙向交通燈的設計。下面是我整理的單片機交通燈畢業設計,歡迎來參考!
一、交通燈的設計要求
雙向交通燈紅、黃、綠燈對應相同,紅燈5s,黃燈1s,綠燈5s。當有急救車到達時,雙向交通信號為全紅,以便讓急救車通過。假定急救車通過路口時間為10s,急救車通過後,交通燈恢復中斷前狀態。
二、AT89C51單片機的中斷系統介紹
計算機系統中止當前的正常工作,轉入處理突發事件,等到突發事件處理完畢之後,再回到原來被中斷的地方,繼續原來的工作,這樣的整個過程稱為中斷。能夠實現這種功能的.部件稱為中斷系統。產生中斷請求的事件稱為中斷源。其中AT89C51單片機具有5個中斷源,在本次設計中我們採用的是外部事情中斷請求源0,以及T1計數溢出事情中斷請求這兩個中斷源。
三、AT89C51單片機的定時/計數器介紹
在單片機中,通常計數器和定時器設計成一個部件――計數器,當計數脈沖的周期一定時,計數器就作為定時器,定時時間就是計數器計數次數和計數脈沖周期的乘積。在此我們採用的就是計數器的這個定時功能。
四、交通燈的硬體電路搭建
本次設計的硬體電路搭建如圖1。兩路交通燈的6個燈依次接在51單片機P1口的P1.0到P1.5,另外在單片機的P3.2口接一個按壓式開關作為救護車到來時的中斷源。
五、交通燈的軟體編程設計
中斷部分的程序設計。首先,應將51單片機中中斷允許寄存器IE的EA位設為1,這代表允許中斷源向CPU申請中斷,即CPU開放中斷。同時將IE的EX0位設為1,這代表允許外中斷0向CPU申請中斷。這樣的話,當救護車來的時候,可以藉此發出中斷請求。接下來,應將定時器控制寄存器TCON的IT0位設為1,這代表外部中斷0的觸發方式選擇為邊沿觸發方式。由於筆者採用了按壓式的開關作為中斷的發出方式,這樣會產生一個脈沖,因此應當選擇邊沿觸發方式。定時部分的程序設計。首先,應將控制寄存器TCON的TR1位置1,啟動定時器T1計數。接下來,應將方式寄存器TMOD的值設為0x01,使得定時器T1工作在方式1,即16位定時/計數方式。然後,由於計時器的定時周期是1s,筆者使用定時/計數器T1精確定時50ms,則20次50ms中斷時,定時時間就是1s。在定時器中斷部分,筆者採用的是查詢方式,即CPU不斷查詢TF1的狀態,當TF1為1時,表示50ms定時已到,在主程序中判斷是否20次50ms定時已到,如是,則時間恰好為1s。同時TF1位軟體清0。根據公式,當定時時間為50ms時,計數初值應為15536,換算成十六進制是3CB0H,即計數器T1中TL1的初值為B0H;TH0的初值為3CH。當救護車到來時,雙向交通燈置紅,即將雙向交通燈的紅燈所對應的P1口位置1,其他位清0即可。時間長短的設置方法同上。最後,由於雙向交通燈紅燈5s,黃燈1s,綠燈5s,共11個狀態,我們利用switch語句為這11個狀態分別設置相應P1口的值,再利用一個循環即可。
六、結語
在機動車數量激增的今天,車輛擁堵、交通崩潰的現象還是時有發生的。其原因多半是交通燈時長設置的不合理,抑或無法根據一天之內不同時間的車流狀況,對交通燈的狀態進行調整。因此,合理地設計交通系統,同時對於交通燈的適當調試無疑將會派上很大用場。
;3. 用單片機模擬控制交通燈
到網路文庫中找找,參考論文也比較多。你也可到「淘寶網」上找找:「51單片機交通燈控制系統C語言設計源程序送模擬圖」,有現成的,有實物圖、模擬、原理圖、源程序等,這款交通燈有以下功能。
1. 系統除基本交通燈功能外;
2. 還具有倒計時、顯示時間設置;
3. 緊急情況處理、LED信息顯示;
4. 時間可以根據具體情況手動控制等功能。
4. 單片機控制交通燈
ORG 0000H
STA: MOV P0,#11011011B ;干線亮綠燈,支線亮紅燈
MOV P2,#0001000B ;選通LED
MOV P3,#11101111B ;K1列線置0
MOV R7,#3
STA1: JB P3.3,$ ;無按鍵等待
LCALL DELAY30MS ;去抖動
JB P3.3,STA1
JNB P3.3,$ ;等鍵釋放
DJNZ R7,STA1
MOV R6,#200
STA2: LCALL DELAY30MS ;延時30MS
DJNZ R6,STA2 ;延時6秒
MOV P0,#10111011B ;干線亮黃燈,支線亮紅燈
MoV R6,#100
STA3: LCALL DELAY30MS
DJNZ R6,STA3 ;延時3秒
MOV P0,#01111110B ;干線亮紅燈,支線亮綠燈
MOV R5,#4
STA4: MOV R6,#200
STA5: LCALL DELAY30MS
DJNZ R6,STA5
DJNZ R5,STA4 ;延時24秒
MOV P0,#01111101B ;干線亮綠燈,支線亮黃燈
MOV R6,#100
STA6: LCALL DELAY30MS
DJNZ R6,STA6 ;延時3秒
LJMP STA
DELAY30MS:MOV R4,#55
DELAY:MOV R3,#250
DJNZ R3,$ ;1.085us(指令周期)*2*250+2=547.5us
DJNZ R4,DELAY
5. 交通燈的單片機設計
哥們啊你是不是做畢業設計啊,那還不自己好好做啊,這個作出來很有用啊,這個既不需要擴展口,真的很簡單啊,好好做吧,給你個圖看看吧,基本上就是這個電路就行了啊
程序也很簡單,用定時器就好了啊,中斷也用的到,加油啦,支持你,Myfriends!!!(這個圖中用了8個LED,做交通燈再加上4個就行了,口也夠)
6. 單片機交通燈課程設計
/*****************************************************
十字路口交通燈控制C程序
******************************************************/
#defineucharunsignedchar
#defineuintunsignedint
#include<reg52.h>
/*****定義控制位**********************/
sbit Time_Show_LED2=P2^5;//Time_Show_LED2控制位
sbit Time_Show_LED1=P2^4;//Time_Show_LED1控制位
sbitEW_LED2=P2^3;//EW_LED2控制位
sbitEW_LED1=P2^2;//EW_LED1控制位
sbitSN_LED2=P2^1;//SN_LED2控制位
sbitSN_LED1=P2^0;//SN_LED1控制位
sbit SN_Yellow=P1^6;//SN黃燈
sbit EW_Yellow=P1^2;//EW黃燈
sbit EW_Red=P1^3;//EW紅燈
sbit SN_Red=P1^7;//SN紅燈
sbit EW_ManGreen=P3^0;//EW人行道綠燈
sbit SN_ManGreen=P3^1;//SN人行道綠燈
sbit Special_LED=P2^6;//交通正常指示燈
sbit Busy_LED=P2^7;//交通繁忙指示燈
sbit Nomor_Button=P3^5;//交通正常按鍵
sbit Busy_Btton=P3^6;//交通繁忙按鍵
sbit Special_Btton=P3^7;//交通特殊按鍵
sbit Add_Button=P3^3;//時間加
sbit Reces_Button=P3^4;//時間減
bit Flag_SN_Yellow;//SN黃燈標志位
bit Flag_EW_Yellow;//EW黃燈標志位
charTime_EW;//東西方向倒計時單元
charTime_SN;//南北方向倒計時單元
ucharEW=60,SN=40,EWL=19,SNL=19;//程序初始化賦值,正常模式
ucharEW1=60,SN1=40,EWL1=19,SNL1=19;//用於存放修改值的變數
ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段選碼
ucharcodeS[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信號燈控制代碼
/**********************延時子程序************************/
voidDelay(uchara)
{
uchari;
i=a;
while(i--){;}
}
/*****************顯示子函數**************************/
voidDisplay(void)
{
charh,l;
h=Time_EW/10;
l=Time_EW%10;
P0=table[l];
EW_LED2=1;
Delay(2);
EW_LED2=0;
P0=table[h];
EW_LED1=1;
Delay(2);
EW_LED1=0;
h=Time_SN/10;
l=Time_SN%10;
P0=table[l];
SN_LED2=1;
Delay(2);
SN_LED2=0;
P0=table[h];
SN_LED1=1;
Delay(2);
SN_LED1=0;
h=EW1/10;
l=EW1%10;
P0=table[l];
Time_Show_LED1=1;
Delay(2);
Time_Show_LED1=0;
P0=table[h];
Time_Show_LED2=1;
Delay(2);
Time_Show_LED2=0;
}
/**********************外部0中斷服務程序************************/
voidEXINT0(void)interrupt0using1
{
EX0=0;//關中斷
if(Add_Button==0)//時間加
{
EW1+=5;
SN1+=5;
if(EW1>=100)
{
EW1=99;
SN1=79;
}
}
if(Reces_Button==0)//時間減
{
EW1-=5;
SN1-=5;
if(EW1<=40)
{
EW1=40;
SN1=20;
}
}
if(Nomor_Button==0)//測試按鍵是否按下,按下為正常狀態
{
EW1=60;
SN1=40;
EWL1=19;
SNL1=19;
Busy_LED=0;//關繁忙信號燈
Special_LED=0;//關特殊信號燈
}
if(Busy_Btton==0)//測試按鍵是否按下,按下為繁忙狀態
{
EW1=45;
SN1=30;
EWL1=14;
SNL1=14;
Special_LED=0;//關特殊信號燈
Busy_LED=1;//開繁忙信號燈
}
if(Special_Btton==0)//測試按鍵是否按下,按下為特殊狀態
{
EW1=75;
SN1=55;
EWL1=19;
SNL1=19;
Busy_LED=0;//關繁忙信號燈
Special_LED=1;//開特殊信號燈
}
EX0=1;//開中斷
}
/**********************T0中斷服務程序*******************/
voidtimer0(void)interrupt1using1
{
staticucharcount;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==10)
{
if(Flag_SN_Yellow==1)//測試南北黃燈標志位
{SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1) //測試東西黃燈標志位
{EW_Yellow=~EW_Yellow;}
}
if(count==20)
{
Time_EW--;
Time_SN--;
if(Flag_SN_Yellow==1)//測試南北黃燈標志位
{SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1)//測試東西黃燈標志位
{EW_Yellow=~EW_Yellow;}
count=0;
}
}
/*********************主程序開始**********************/
voidmain(void)
{
Busy_LED=0;
Special_LED=0;
IT0=1;//INT0負跳變觸發
TMOD=0x01;//定時器工作於方式1
TH0=(65536-50000)/256;//定時器賦初值
TL0=(65536-50000)%256;
EA=1;//CPU開中斷總允許
ET0=1;//開定時中斷
EX0=1;//開外部INTO中斷
TR0=1;//啟動定時
while(1)
{/*******S0狀態**********/
EW_ManGreen=0;//EW人行道禁止
SN_ManGreen=1;//SN人行道通行
Flag_EW_Yellow=0; //EW關黃燈顯示信號
Time_EW=EW;
Time_SN=SN;
while(Time_SN>=5)
{P1=S[0];//SN通行,EW紅燈
Display();}
/*******S1狀態**********/
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1;//SN開黃燈信號位
EW_Red=1; //SN黃燈亮,等待左拐信號,EW紅燈
Display();
}
/*******S2狀態**********/
Flag_SN_Yellow=0;//SN關黃燈顯示信號
Time_SN=SNL;
while(Time_SN>=5)
{P1=S[2];//SN左拐綠燈亮,EW紅燈
Display();}
/*******S3狀態**********/
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1;//SN開黃燈信號位
EW_Red=1; //SN黃燈亮,等待停止信號,EW紅燈
Display();}
/***********賦值**********/
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
/*******S4狀態**********/
EW_ManGreen=~EW_ManGreen;//EW人行道通行
SN_ManGreen=~SN_ManGreen;//SN人行道禁止
Flag_SN_Yellow=0; //SN關黃燈顯示信號
Time_EW=SN;
Time_SN=EW;
while(Time_EW>=5)
{P1=S[4];//EW通行,SN紅燈
Display();}
/*******S5狀態**********/
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1;//EW開黃燈信號位
SN_Red=1;//EW黃燈亮,等待左拐信號,SN紅燈
Display();}
/*******S6狀態**********/
Flag_EW_Yellow=0; //EW關黃燈顯示信號
Time_EW=EWL;
while(Time_EW>=5)
{P1=S[6];//EW左拐綠燈亮,SN紅燈
Display();}
/*******S7狀態**********/
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1;//EN開黃燈信號位
SN_Red=1;//EW黃燈亮,等待停止信號,SN紅燈
Display();}
/***********賦值**********/
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
}
}
7. 單片機課程設計:交通燈控制!
我給你發一個看看,是protues的模擬電路圖,可以運行看效果,還有keil的匯編程序,有郵箱給你發去
我給你發了啊!!!下邊是程序:
org 0000h
sjmp main
org 0030h
main: mov p0,#11101110b
acall del1
acall del1
acall del1
acall mmm
mov p0,#11011011b
acall del1
acall del1
mov p0,#11110101b
lcall del1
acall del1
acall del1
acall mmm
sjmp main
del1:mov r0,#0ffh
loop1:mov r1,#0ffh
loop2:djnz r1,loop2
djnz r0,loop1
ret
mmm:mov p1,#0ffh
mov p2,#0ffh
mov r3,#02h
mmm2:mov p1,r3
mov r2,#09h
mmm1:mov p2,r2
acall del1
acall del1
djnz r2,mmm1
djnz r3,mmm2
mov p1,r3
mov r2,#09h
mmm3: mov p2,r2
acall del1
acall del1
djnz r2,mmm3
ret
end
8. 單片機控制交通燈
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
沒有問題。
9. 求單片機交通燈控制系統設計的程序(最後有中文解析)
要求:
1、一路延時60S,
一路延時40S
(演示時為節省時間,一路延時15S,一路延時10S>>
兩路時間分別用不同的數碼管顯示;
--相同的,即可。
--比如:
--東西綠燈、南北紅燈,兩個方向的數字顯示,都是60s倒計時。
--東西紅燈、南北綠燈,兩個方向的數字顯示,都是40s倒計時。
--兩路時間雖然不同,數碼管顯示應該是相同的,完全可以用一組數碼管顯示。
2.緊急通行控制,如某一方向現為紅燈,通過按鍵強行切換為綠燈,而另一路改為紅燈,延時若干秒(10S)後,恢復原狀態(紅燈)繼續倒數
--不應恢復原狀態。
--比如:
--東西綠燈、南北紅燈,兩個方向的數字顯示,都是60s倒計時。
--在 59s 時,即僅僅剩下 1s 時,被強制轉換了紅綠燈。
--那麼 10s 後,再恢復原狀態 ?
--原狀態,僅僅有 1s,還恢復它干什麼 ?
--這時間,可能,都不夠汽車起步用的。
--恢復原來的半截狀態,顯然不合理。