該文件包括了電路圖,仿真,程序,論文,資料等。當(dāng)時(shí)是課設(shè)時(shí)做得,拿出來(lái)與大家分享。
所有資料下載:
智能交通指示燈.rar
(4.84 MB, 下載次數(shù): 305)
2017-1-20 11:26 上傳
點(diǎn)擊文件名下載附件
下面是交通燈設(shè)計(jì)方案論證報(bào)告,壓縮包里面還有完整的word格式的正式論文下載,很全面.
專(zhuān)業(yè)課程設(shè)計(jì)設(shè)計(jì)方案論證報(bào)告
一、課題研究的目的和意義 交通燈在我們的生活中起著非常重要的作用,不僅與人們的生命安全息息相關(guān),同時(shí)也關(guān)系到交通的正常運(yùn)行。隨著人們安全意識(shí)的逐漸增高,人們對(duì)安全也有了新的認(rèn)識(shí),所以交通部門(mén)要認(rèn)識(shí)到交通燈控制系統(tǒng)的重要性,努力完善交通控制系統(tǒng)。 二、課題研究的主要任務(wù)和預(yù)期目標(biāo) 1.主要任務(wù)及要求 ①東西、南北方向均有紅、黃、綠三種信號(hào)燈 ②帶緊急制動(dòng)按鈕,按鈕按下,所有方向亮紅燈;再次按下,恢復(fù)正常顯示 ③夜間模式按鈕按下,所有方向顯示黃燈閃爍 ④實(shí)時(shí)提醒綠燈亮的剩余時(shí)間 ⑤并可實(shí)現(xiàn)通行時(shí)間的按鍵輸入。例如(1)南北紅燈亮維持25S。在南北紅燈亮的同時(shí)東西綠燈也亮,并維持20S。到20S時(shí),東西綠燈閃爍,閃爍3S后熄滅。在東西綠燈熄滅時(shí),東西黃燈亮,并維持2S。到2S時(shí),東西黃燈熄,東西紅燈亮。同時(shí),南北紅燈熄滅,南北綠燈亮。(2)東西紅燈亮維持30S。南北綠燈亮維持25S。然后閃爍3S,熄滅。同時(shí)南北黃燈亮,維持2S后熄滅,這時(shí)南北紅燈亮,東西綠燈亮。 2.預(yù)期目標(biāo) 實(shí)現(xiàn)主要任務(wù)及要求,并在其基礎(chǔ)上增添人行指示燈等其他功能。 三、設(shè)計(jì)方案 1.設(shè)計(jì)思想(總體的設(shè)計(jì)思路\想法) 一個(gè)交通指示燈系統(tǒng)分為指示燈顯示、倒計(jì)時(shí)顯示兩個(gè)大部分。指示燈顯示部分中各個(gè)燈的情況如圖所示。
倒計(jì)時(shí)部分則利用晶振進(jìn)行計(jì)時(shí),設(shè)計(jì)一個(gè)1s的定時(shí),設(shè)置初始值后每1s將初始值-1,并輸出給數(shù)碼管,從而達(dá)到倒計(jì)時(shí)的功能。 2.方案論證(要有多種方案的比較)
方案1:采用標(biāo)準(zhǔn)STC89C51單片機(jī)作為控制器通行倒計(jì)時(shí)顯示采用2位LED數(shù)碼管;指示燈采用發(fā)光二極管;LED顯示采用動(dòng)態(tài)掃描,以節(jié)省端口。緊急情況采用中斷完成。以上系統(tǒng)結(jié)構(gòu)框架設(shè)計(jì),單片機(jī)端口剛好滿足要求。該系統(tǒng)具有電路的簡(jiǎn)單,設(shè)計(jì)方便,顯示清晰等特點(diǎn)。整體框圖、流程圖如圖所示。
方案2:采用SCT89C2051單片機(jī)作為控制器,通行倒計(jì)時(shí)采用16X16點(diǎn)陣LED發(fā)光管;列驅(qū)動(dòng)采用74LS595以實(shí)現(xiàn)串行端口擴(kuò)展,行驅(qū)動(dòng)采用4/16譯碼器74LS154動(dòng)態(tài)掃描;譯碼器74LS154生成16條行選通信號(hào)線,再經(jīng)過(guò)驅(qū)動(dòng)器驅(qū)動(dòng)對(duì)應(yīng)的行線。每條行線上需要較大的驅(qū)動(dòng)電流,應(yīng)選用大功率三極管作為驅(qū)動(dòng)。這種方案顯示可以更加清晰明了,單片機(jī)占用端口少,但是需要大量硬件,電路復(fù)雜,耗電量大。整體電路如下圖
3.設(shè)計(jì)中要解決的主要問(wèn)題和措施 問(wèn)題一:如何實(shí)現(xiàn)倒計(jì)時(shí)與燈的變化相同步 在整個(gè)交通系統(tǒng)中,指示燈與倒計(jì)時(shí)相同步是重要的問(wèn)題,設(shè)定的時(shí)間不光是倒計(jì)時(shí)也是指示燈的顯示時(shí)間,因此解決此問(wèn)題就變得尤為重要。 問(wèn)題二:如何能夠調(diào)節(jié)數(shù)碼管所顯示的數(shù)值 任務(wù)要求需要使得倒計(jì)時(shí)時(shí)間可調(diào),那就需要將數(shù)碼管顯示的數(shù)值進(jìn)行合理調(diào)整,同時(shí)還要確保時(shí)間和指示燈相對(duì)應(yīng)。 解決方案一:可以看出,無(wú)論倒計(jì)時(shí)數(shù)十多少,指示燈發(fā)生變化的時(shí)間都是最后5s,因此,我們想出的方案是,不用想倒計(jì)時(shí)一共是多少時(shí)間而是僅在最后5s時(shí)做出判斷,判斷出是綠燈閃爍還是黃燈亮起。 解決方案二:對(duì)于數(shù)碼管數(shù)值調(diào)整,可以想到+1/-1的調(diào)整程序,這類(lèi)程序,我們?cè)趩纹瑱C(jī)的課程中已經(jīng)學(xué)習(xí),通過(guò)+1/-1的程序從而實(shí)現(xiàn)對(duì)數(shù)碼管數(shù)值的調(diào)整。 四、課題進(jìn)度安排 1、第一天至第三天:熟悉課題、查閱資料、合理分工、撰寫(xiě)方案論證報(bào)告。 2、第四天至十一天:硬件電路設(shè)計(jì)及軟件設(shè)計(jì)。 3、十二天至十九天:實(shí)物的焊接及調(diào)試。 4、二十至二十一天:準(zhǔn)備材料答辯。
單片機(jī)智能交通指示燈仿真效果圖:
智能交通指示燈的單片機(jī)源程序:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- // 0 1 2 3 4 5 6 7 8 9
- uchar code smg_du[]={0xc0,0xf5,0x8c,0x94,0xb1,0x92,0x82,0xf4,0x80,0x90};
- uchar dis_smg[10] = {0xc0,0xf5,0x8c,0x94,0xb1,0x92,0x82,0xf4,0x80,0x90};
- uchar smg_i = 4; //位數(shù)
- sbit smg_we1 = P2^0;
- sbit smg_we2 = P2^1;
- sbit smg_we3 = P3^6;
- sbit smg_we4 = P3^7;
- sbit LE1 = P3^3;
- sbit LE2 = P3^3;
- char dx_s = 0; //倒計(jì)時(shí)開(kāi)始
- char nb_s = 0;
- sbit dx_red = P2^4; //東西紅燈
- sbit dx_green = P2^3; //東西綠燈
- sbit dx_yellow = P2^2; //東西黃燈
- sbit nb_red = P2^7; //南北紅燈
- sbit nb_green = P2^6; //南北綠燈
- sbit nb_yellow = P2^5; //南北黃燈
- bit flag_1s = 0; //延時(shí)標(biāo)志
- bit flag_500ms;
- bit flag_dx_nb;
- uchar flag_5m_value;
- uchar i;
- uchar nb_time = 10,dx_time = 15; //東西南北時(shí)間初值
- uchar flag_jdgz ; //交通燈
- // 數(shù)碼管為位選
- void smg_we_switch(uchar i)
- {
- switch(i)
- {
- case 0: smg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break;
- case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break;
- case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break;
- case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break;
- }
- }
- // 延時(shí)程序
- void delay_01ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<110;j++);
- }
- // 數(shù)碼管顯示
- void display()
- {
- uchar i;
- for(i=0;i<smg_i;i++)
- {
- P0 = 0xff;
- smg_we_switch(i);
- P0 = dis_smg[i];
- delay_01ms(3);
- }
- }
- // 定時(shí)器初始化
- void time0_init()
- {
- EA = 1;
- TMOD = 0X11;
- ET0 = 1;
- TR0 = 1;
- ET1 = 0;
- TR1 = 0;
- }
- // 交通燈管理
- void jiaotongdeng_dis()
- {
- if(flag_1s == 1)
- {
- flag_1s = 0;
- if(dx_s == 0)
- {
- if(flag_dx_nb == 1)
- {
- dx_s = nb_time; //南北時(shí)間
- nb_s = dx_time;
- }
- else
- {
- dx_s = dx_time; //東西時(shí)間
- nb_s = nb_time;
- }
- flag_dx_nb = ~flag_dx_nb;
- }
- dx_s --;
- nb_s --;
- }
- dis_smg[0] = smg_du[dx_s % 10] ;
- dis_smg[1] = smg_du[dx_s / 10] ;
- dis_smg[2] = smg_du[nb_s % 10] ;
- dis_smg[3] = smg_du[nb_s / 10] ;
- // 東西時(shí)間
- if(flag_dx_nb == 0)
- {
- if(nb_s > 5)
- {
- dx_red = 1; //東西紅燈滅
- dx_green = 0; //東西綠燈亮
- dx_yellow = 1; //東西黃燈滅
- nb_red = 0; //南北紅燈亮
- nb_green = 1; //南北綠燈滅
- nb_yellow = 1; //南北綠燈亮
- flag_5m_value = 0;
- }
- if(nb_s >= 0&&nb_s <= 5) //綠燈閃爍
- {
- dx_red = 1; //東西紅燈滅
- dx_yellow = 1; //東西黃燈滅
- nb_red = 0; //南北紅燈亮
- nb_green = 1; //南北綠燈滅
- nb_yellow = 1; //南北黃燈滅
- if(flag_500ms == 0) //綠燈閃爍
- {
- dx_green = 0;
- }
- else
- {
- dx_green = 1;
- }
- }
-
- if(nb_s==0)
- {
- dx_red = 1; //東西紅燈滅
- dx_green = 1; //東西綠燈滅
- dx_yellow = 0; //東西黃燈亮
- nb_red = 0; //南北紅燈亮
- nb_green = 1; //南北綠燈滅
- nb_yellow = 1; //南北黃燈滅
- }
-
- }
- // 南北時(shí)間
- if(flag_dx_nb == 1)
- { LE1=1;
- if(dx_s > 5)
- {
- dx_red = 0; //東西紅燈亮
- dx_green = 1; //東西綠燈滅
- dx_yellow = 1; //東西黃燈滅
- nb_red = 1; //南北紅燈滅
- nb_green = 0; //南北綠燈亮
- nb_yellow = 1; //南北黃燈滅
- flag_5m_value = 0;
- }
- if(dx_s >= 0&&dx_s <= 5) //綠燈閃爍
- {
- dx_red = 0; //東西紅燈亮
- dx_green = 1; //東西綠燈滅
- dx_yellow = 1; //東西黃燈滅
- nb_red = 1; //南北紅燈滅
- nb_yellow = 1; //男別黃燈滅
- if(flag_500ms == 0) //綠燈閃爍
- {
- nb_green = 0;
- }
- else
- {
- nb_green = 1;
- }
- }
-
- }
- }
- // 按鍵設(shè)置
- uchar key_can; //定義按鍵鍵值
- void key() //按鍵
- {
- static uchar key_new;
- key_can = 5; //鍵值最大
- P1 |= 0x1f;
- if((P1 & 0x1f) != 0x1f) //確定按鍵
- {
- delay_01ms(1); //消除抖動(dòng)
- if(((P1 & 0x1f) != 0x1f) && (key_new == 1))
- { //確定鍵值按下
- key_new = 0;
- switch(P1 & 0x1f)
- {
- case 0x1e: key_can = 1; break; //模式鍵
- case 0x1d: key_can = 2; break; //加鍵
- case 0x1b: key_can = 3; break; //減鍵
- case 0x17: key_can = 4; break; //緊急模式鍵
- }
- }
- }
- else
- key_new = 1;
- }
- uchar menu_1,flag_s;
- // 四種鍵值
- void key_with()
- {
- if(key_can == 4) //緊急模式
- {
- flag_jdgz ++;
- if(flag_jdgz > 1)
- flag_jdgz = 0;
- if(flag_jdgz == 1) // 全部紅燈亮
- {
- dx_red = 0;
- dx_green = 1;
- dx_yellow = 1;
- nb_red = 0;
- nb_green = 1;
- nb_yellow = 1;
- }
-
- }
- if(key_can == 1) //模式鍵
- {
- menu_1 ++;
- if(menu_1 > 3)
- {
- menu_1 = 0;
- }
- }
- if(menu_1 == 2) //東西時(shí)間調(diào)整
- {
- if(key_can == 2)
- {
- dx_time ++ ; //+1
- if(dx_time > 99)
- dx_time = 99;
- }
- if(key_can == 3)
- {
- dx_time -- ; //-1
- if(dx_time <= 10)
- dx_time = 10;
- }
- dis_smg[0] = smg_du[dx_time % 10] ; //顯示時(shí)間
- dis_smg[1] = smg_du[dx_time / 10] ;
- dis_smg[2] = smg_du[10] ;
- dis_smg[3] = smg_du[10] ;
- }
- if(menu_1 == 3) //南北時(shí)間調(diào)整
- {
- if(key_can == 2)
- {
- nb_time ++ ; //+1
- if(nb_time > 99)
- nb_time = 99;
- }
- if(key_can == 3)
- {
- nb_time -- ; //-1
- if(nb_time <= 10)
- nb_time = 10;
- }
- dis_smg[0] = smg_du[10] ;
- dis_smg[1] = smg_du[10] ;
- dis_smg[2] = smg_du[nb_time % 10] ; //顯示時(shí)間
- dis_smg[3] = smg_du[nb_time / 10] ;
- }
- }
- //主函數(shù)
- void main()
- {
- time0_init();
- dx_s = nb_time; //初始時(shí)間為南北時(shí)間
- nb_s = dx_time;
- while(1)
- {
- key();
- if(key_can < 5)
- key_with();
- if(menu_1 == 1) // 夜間模式
- {
- dx_red = 1;
- dx_green = 1;
- nb_red = 1; //紅綠燈不亮
- nb_green = 1;
-
- if(flag_500ms == 0) //黃燈閃爍
- {
- dx_yellow = 0;
- nb_yellow = 0;
- }
- else
- {
- dx_yellow = 1;
- nb_yellow = 1;
- }
- }
- if((menu_1 == 0) && (flag_jdgz == 0))
- jiaotongdeng_dis();
- display();
- }
- }
- // 定時(shí)器中斷服務(wù)
- void time0_int() interrupt 1
- {
- static uchar value; //延時(shí)10ms
- TH0 = 0x3c;
- TL0 = 0xb0; //50ms
- value ++;
- flag_5m_value++;
- if(flag_5m_value % 10 == 0)
- flag_500ms = ~flag_500ms;
- if(value >= 20)
- {
- value = 0;
- flag_1s = 1;
- }
- }
復(fù)制代碼
|