交通燈單片機課程設計
⑴ 單片機課程設計的要求 交通燈系統設計
:利用抄單片機的定時器功能,令十字路口的紅綠燈交替點亮和熄滅(用實驗箱上的8隻發光二極體分成南北、東西兩組各4隻表示),並且用LED數碼管顯示時間(實驗箱上的8隻數碼管中,用兩端的各2隻表示南北、東西兩組的計時)
我可以幫你做,提供電路圖和源程序
⑵ 急!!!求單片機8255交通燈控制課程設計報告
你的題目寫的太簡單了,我只能看出來ABC口的地址是一樣的
底下是我的論文,倒計時是用LED做的,紅綠燈是用發光二極體做的
你自己在裡面截吧
單片機控制交通燈的設計
論文目錄
一、 摘要及關鍵字、參考文獻
二、 方案設計與論證
三、正文:一、功能描述
二、系統硬體電路的設計
三、系統主要程序的設計
四、電路總原理圖
五、主程序
一 摘要:
本系統採用單片機、鍵盤、LED顯示、交通燈演示系統組成。設計一個用於十字路口的車輛及行人的交通管理,系統包括左拐、右拐、及行基本的交通燈的功能,計時牌顯示路口通行轉換剩餘時間,在出現緊急情況時可由交通手動實現全路口車輛禁行而行人通行狀態。另外,在特種車輛如119、120通過路口時,系統可自動轉為特種車輛放行,其他車輛禁止通行的狀態,15s後系統自動恢復正常管理。其他還有 84s與60s通行管理轉換等功能。採用數碼管與點陣LED相結合的顯示方法,既要求倒計時數字輸出,又要求有狀態燈輸出等。
關鍵字:
單片機系統(AT89C51)控制8255、交通規則、LED顯示、動態掃描、按鍵輸入、分時段調整
參考文獻:《單片機課程設計指導》 北京航天航空大學出版社
《基於MCS-51系列的單片機原理的應用設計》 國防工業出版社
《單片機實訓教程》 北京大學出版社
《單片機系統原理及應用》
《微機原理及應用》
二 、方案設計與論證
1電源提供方案:
採用獨立的穩壓電源,此方案穩定可靠,且有各種成熟電路可供選用
2顯示界面方案
採用數碼管和點陣LED相結合的方法,因為實際既要求倒計時施主輸出,又要求又狀態燈輸出等,為方便觀看並考慮到現實狀況,用數碼管與LED分別顯示時間和提示信息。這種方案既滿足系統功能要求,又減少了系統實現的復雜度。
3輸入方案
直接在IO口上接按鍵開關。因為設計時精簡和優化了電路,所以剩餘口的資源還比較多。
4主控制方案
採用AT89C51單片機作為控制器,控制8255實行通行倒計時及左拐、右拐、直行、行人通行指示採用單塊LCD液晶點陣顯示器。這種方案設計佔用單片機的埠最少,硬體也少。耗電也最小;
系 統 框 圖
正 文
一、功能描述
本系統由單片機系統、鍵盤、發光二極體、交通燈演示系統組成,單片機作為主控制器用於十字路口的車輛及行人的交通管理,每個方向具有左拐、右拐、直行及行人4種通行指示燈,計時牌顯示路口通行轉換剩餘時間。另外,在特種車輛如119、120通過路口時,系統可自動轉為特種車輛放行,其他車輛禁止通行的狀態,15s後系統自動恢復正常管理。並有手動控制分時段 84s與60s通行管理轉換等功能。
二、系統硬體電路的設計
整套電路系統由控制系統模塊、通行燈輸出控制顯示模塊、時間顯示模塊、時間顯示模塊和自動特種車輛控制模塊等組成。
1、主控制系統
單片機的P0口用於控制8255。8255的PA口和PB口用於控制南北及東 西的通行燈,。PC口及P3.0~P3.2口用於4組2位LED計時器的控制,特種車通過時使用外中斷1口(P3.3),手動自動轉換採用P1.0按鍵。
選擇8255的工作方式0,在這種情況下三個埠都可以由程序設置為輸入和輸出。
2、通行燈輸出控制
道口交通燈指示採用高亮度紅綠雙色發光二極體,左拐、直行、右拐及行人各一個。當發光電流為6mA時,按公式R=(5-1.8)/0.006計算,限流電阻應為510Ω.由於南北通行時雙向指示牌相同,因此每個埠應具有12mA的吸收電流能力。圖7.4所示為指示燈電路圖。
3、時間顯示模塊
道口通行剩餘時間採用高亮紅色7段LED發光數碼管顯示,採用共陽數碼管,如用單片機吸收電流驅動,列掃描驅動使用三極體,按每段6mA電流算,全顯示字形「8」時,每個數碼管需6mA×8=48mA。由於時間顯示每個道口相同,4組需192mA,因此設計中採用中功率三極體9012.由於單片機每個斷碼輸出口需吸收24mA 電流,因此在電路設計中也使用了驅動集成塊74HC244。其顯示驅動電路如圖示。
4、特種車輛自動控制模塊
自動道口燈在特種車輛到來時能自動關閉所有綠燈,讓特種車通過。設計中採用紅外線發生器作為特種車的發生器,使用實時中斷來影響特種車的通行要求。紅外線接收器一般採用電視機上用的一體化紅外接收器,具有很高的靈敏度和較強的抗干擾能力.
5、電源電路
由於整個系統採用的電源電壓需+5V電壓,所以採用不可調的3端穩壓器件,用常用的lm7850就可以滿足系統電源的要求。LM7850三端集成穩壓電源內部由准電壓迴路、恆流源、過流保護、過壓保護和短路保護迴路等8部分組成具有低功耗,高效率,波紋系數小,輸出電壓穩定等優點。
三、系統主要程序的設計
道口交通控制系統程序主要分為以下幾個模塊:初始化程序、主程序、定時中斷程序和特種車實時響應程序等。
1、 初始化程序
初始化程序主要完成內存劃,定時器的工作模式、中斷方式等的設定。由於子程序調用較多,因此初始化時堆棧指針設於80H處。定時器T0、T1設為16位定時器模式,定時時間位50ms,為秒計時用,T1為通行結束閃爍用。
2、 主程序
主程序要負責總體程序管理功能,實現人機交換設定。由於採用動態掃描方式顯示時間,因此主程序大部分時間要調用掃描顯示程序。主程序流程圖如下圖示。
3、 外中斷1中斷服務程序
經過時,車中發射紅外線信號,其信號被道口控制板上的接收器接收,並輸出一個低電平處外中斷1.中斷處理程序流程圖如下頁圖所示。
4、 定時服務中斷程序
序主要用於行車與行人的通行指示,按照交通規則,紅綠燈控制轉換邏輯表如7.1表所列。
南北方向 埠 控制功能 120~110s 110~70s 70~60s 60~10s 10~0s
P*.7 左拐紅 0 0 0 1 1
P*.6 左拐綠 1 1 1 0 0/1
P*.5 直行紅 1 1 1 0 0
P*.4 直行綠 0 0 0/1 1 1
P*.3 右拐紅 0 1 1 1 1
P*.2 右拐綠 1 0 0 0 0/1
P*.1 行人紅 1 1 1 0 0
P*.0 行人綠 0 0 0/1 1 1
道口控制字 66H 6AH 6AH/7BH 99H 99H/DDH
東西方向 P*.7 左拐紅 0 0 0 0 0
P*.6 左拐綠 1 1 1 1 1
P*.5 直行紅 0 0 0 0 0
P*.4 直行綠 1 1 1 1 1
P*.3 右拐紅 0 1 1 1 1
P*.2 右拐綠 1 0 0 0 0/1
P*.1 行人綠 0 0 0 0 0
P*.0 行人紅 1 1 1 1 1
道口控制字 55H 59H 59H 59H 59H/5DH
通行規則如下:
(1) 車輛南北直行、各路右拐,南北向行人通行。南北向通行時間為1min,各路右拐比直行滯後10s開放。
(2) 車輛南北向左拐、各路右拐,行人禁行。通行時間為1min。
(3) 車輛東西向直行、各路右拐,東西向行人通行。東西向通行時間為1min,各路右拐比直行滯後10s開放。
(4) 車輛東西向左拐、各路右拐,行人禁行。通行時間為1min。
表中通行規則,是以給控制紅綠燈埠送控制碼的方式實現的。它的原理是,將按不同通行規則時的各路口的紅綠燈亮滅情況轉換為單片機埠控制碼。其指示燈功能通過T0定時中斷服務程序實現。
定時器T0定時益出中斷周期為10ms,中斷累計20次(即1s)時對120s倒計時單元減1操作。設計中將4種通行規則分成集中不同的亮燈方式,通過查詢秒倒計時單元的數據,實現在不同的時間段給控制埠送不同的控制數據碼。控制碼分為5個時間段:84—74s、74—58s、58—48s、48—10s、10—0s。交通管理定時功能程序流程圖如下頁圖所示。
5、 調試及性能分析
設計時按紅綠交通燈控製程序和特種車輛經過中斷程序兩大部分電路進行測試。
1、 紅綠交通燈控製程序
時器T0,直接按照表7.1中算好的數據碼送出來控制燈,觀察其邏輯狀態是否符合要求。可多次、反復地進行調試,直至邏輯關系正確。值得注意的是,南北方向、東西方向的指示燈要同時調試。
2、 特殊車輛通行時紅外線檢測電路的調試
在模擬小車中放一塊紅外發射模塊,將示波器輸入端接在交通控制燈的紅外接收模塊的輸出引腳上,當小車通過路口時,檢測紅外線是否被接收。若該腳輸出為低電平,則說明可以收到信號,電路正常。
本系統以AT89C51單片機為核心,開發程序調試階段採用W78E516B進行在線編程及修改,可大大加快調試進度。設計的交通燈可用於十字路口的車輛及行人的交通管理,顯示採用2位7段數碼管,可以很直觀的顯示紅綠燈的開放和關閉的時間;設計中應用了兩種倒計時顯示方式, 84S 倒計時適用於車流量較大的城市,60s倒計時可用於中小型城市;功能完整,不僅有普通交通燈的指示功能,還增加了特種車輛自動通行功能。其控制功能和效果與真實道口管理紅綠燈完全一致。
⑶ 交通燈的單片機設計
哥們啊你是不是做畢業設計啊,那還不自己好好做啊,這個作出專來很有用啊,這個既不需屬要擴展口,真的很簡單啊,好好做吧,給你個圖看看吧,基本上就是這個電路就行了啊
程序也很簡單,用定時器就好了啊,中斷也用的到,加油啦,支持你,Myfriends!!!(這個圖中用了8個LED,做交通燈再加上4個就行了,口也夠)
⑷ 求幫我做一個單片機控制交通燈課程設計,包括原理圖和程序。
難度不大,我稍微指點你。
⑸ 單片機交通信號燈課程設計
你好!
這里有一個交通燈模擬演示,基本滿足你的設計要求
⑹ {求助}單片機課程設計,具有讀秒功能的交通燈控制
/*****************************************************
十字路口交通燈控制 C 程序
******************************************************/
#defineucharunsigned char
#defineuintunsigned int
#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;//南北方向倒計時單元
uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化賦值,正常模式
uchar EW1=60,SN1=40,EWL1=19,SNL1=19;//用於存放修改值的變數
uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段選碼
uchar code S[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信號燈控制代碼
/**********************延時子程序************************/
voidDelay(uchar a)
{
uchari;
i=a;
while(i--){;}
}
/*****************顯示子函數**************************/
voidDisplay(void)
{
char h,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)interrupt 0 using 1
{
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中斷服務程序*******************/
void timer0(void)interrupt 1 using 1
{
static uchar count;
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;
}
}
⑺ 單片機課程設計:交通燈控制!
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit RED_A=P3^0; //東西向指示燈
sbit YELLOW_A=P3^1;
sbit GREEN_A=P3^2;
sbit RED_B=P3^3; //南北向指示燈
sbit YELLOW_B=P3^4;
sbit GREEN_B=P3^5;
sbit KEY1=P1^0;
sbit KEY2=P1^1;
sbit KEY3=P1^2;
//延時倍數,閃爍次數,操作類型變數
uchar Flash_Count=0,Operation_Type=1,LEDsng,LEDsns,LEDewg,LEDews,discnt;
uint Time_Count=0,time;
uchar ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
void displaysn()
{
LEDsng=((time-Time_Count)/20)%10;
LEDsns=((time-Time_Count)/20)/10;
LEDewg=0x10;
LEDews=0x10;
}
void displayew()
{
LEDewg=((time-Time_Count)/20)%10;
LEDews=((time-Time_Count)/20)/10;
LEDsng=0x10;
LEDsns=0x10;
}
//定時器0 中斷函數
void T0_INT() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
switch(Operation_Type)
{
case 1: //東西向綠燈與南北向紅燈亮
if((Time_Count%20)==0)displayew();
RED_A=0;YELLOW_A=0;GREEN_A=1;
RED_B=1;YELLOW_B=0;GREEN_B=0;
if(++Time_Count!=time) return;
Time_Count=0;
Operation_Type=2;
break;
case 2: //東西向黃燈開始閃爍,綠燈關閉
LEDewg=0x0;
LEDews=0x0;
if(++Time_Count!=8) return;
Time_Count=0;
YELLOW_A=~YELLOW_A;GREEN_A=0;
if(++Flash_Count!=6) return; //閃爍
Flash_Count=0;
Operation_Type=3;
break;
case 3: //東西向紅燈與南北向綠燈亮
if((Time_Count%20)==0)displaysn();
RED_A=1;YELLOW_A=0;GREEN_A=0;
RED_B=0;YELLOW_B=0;GREEN_B=1;
if(++Time_Count!=time) return;
Time_Count=0;
Operation_Type=4;
break;
case 4: //南北向黃燈開始閃爍,綠燈關閉
LEDsng=0x0;
LEDsns=0x0;
if(++Time_Count!=8) return;
Time_Count=0;
YELLOW_B=~YELLOW_B;GREEN_A=0;
if(++Flash_Count!=6) return; //閃爍
Flash_Count=0;
Operation_Type=1;
break;
}
}
void t1_isr() interrupt 3
{
TR1=0;
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
TR1=1;
switch(discnt)
{
case 0:
P2=0x02;
P0=ledtab[LEDewg];
break;
case 1:
P2=0x01;
P0=ledtab[LEDews];
break;
case 2:
P2=0x08;
P0=ledtab[LEDsng];
break;
case 3:
P2=0x04;
P0=ledtab[LEDsns];
break;
default:discnt=0;break;
}
discnt++;
discnt&=0x03;
}
void delay()
{
uint i;
for(i=0;i<1000;i++);
}
//主程序
void main()
{
TMOD=0x11; //T0 方式1
EA=1;
ET0=1;
TR0=1;
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
TR1=1;
ET1=1;
time=120;
Time_Count=100;
Time_Count=0;
Operation_Type=1;
while(1)
{
if(KEY1==0) //按一下加1S
{
delay();
if(KEY1==0)
{
while(KEY1==0);
TR0=0;
time+=20;
LEDsng=(time/20)%10;
LEDsns=(time/20)/10;
LEDewg=0x10;
LEDews=0x10;
}
}
if(KEY2==0) //按一下減1S
{
delay();
if(KEY2==0)
{
while(KEY2==0);
TR0=0;
time-=20;
if(time==0)time=20;
LEDewg=(time/20)%10;
LEDews=(time/20)/10;
LEDsng=0x10;
LEDsns=0x10;
}
}
if(KEY3==0) //啟動
{
delay();
if(KEY3==0)
{
while(KEY2==0);
TR0=1;
Time_Count=0;
}
}
}
}
⑻ 單片機課程設計—交通燈論文
這個是存抄儲空間是程序定義的 或者說是交給編譯器定的
電路和程序都有
買個開發板 問題解決 學生為了將來的工作也應該好好學習下單片機
這個開發板帶了USB的模擬和編程功能 一板在手就可以開始學習了
shop_avrvi_com/goods-332.html (麻煩把下劃線換成點)