找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 8183|回復(fù): 3
收起左側(cè)

單片機(jī)智能交通燈 設(shè)計(jì)方案論證報(bào)告 仿真,程序,正式論文等

[復(fù)制鏈接]
ID:157125 發(fā)表于 2017-1-20 11:27 | 顯示全部樓層 |閱讀模式
該文件包括了電路圖,仿真,程序,論文,資料等。當(dāng)時(shí)是課設(shè)時(shí)做得,拿出來(lái)與大家分享。
0.png
所有資料下載:
智能交通指示燈.rar (4.84 MB, 下載次數(shù): 305)


下面是交通燈設(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è)燈的情況如圖所示。 0.png
    倒計(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)。整體框圖、流程圖如圖所示。
0.png
0.png 0.png

方案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ù)雜,耗電量大。整體電路如下圖
0.png



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ī)智能交通指示燈仿真效果圖:
0.png

智能交通指示燈的單片機(jī)源程序:
  1. #include <reg52.h>               
  2. #define uchar unsigned char   
  3. #define uint  unsigned int         



  4. //                                                                                 0     1    2    3           4           5        6                 7          8           9        
  5. uchar code smg_du[]={0xc0,0xf5,0x8c,0x94,0xb1,0x92,0x82,0xf4,0x80,0x90};                 

  6. uchar dis_smg[10] = {0xc0,0xf5,0x8c,0x94,0xb1,0x92,0x82,0xf4,0x80,0x90};        
  7. uchar smg_i = 4;    //位數(shù)


  8. sbit smg_we1 = P2^0;         
  9. sbit smg_we2 = P2^1;
  10. sbit smg_we3 = P3^6;
  11. sbit smg_we4 = P3^7;
  12. sbit LE1                 = P3^3;
  13. sbit LE2                 = P3^3;

  14. char dx_s = 0;                                                        //倒計(jì)時(shí)開(kāi)始
  15. char nb_s = 0;        
  16. sbit dx_red    = P2^4;            //東西紅燈
  17. sbit dx_green  = P2^3;                        //東西綠燈
  18. sbit dx_yellow = P2^2;                        //東西黃燈

  19. sbit nb_red    = P2^7;                        //南北紅燈
  20. sbit nb_green  = P2^6;                        //南北綠燈
  21. sbit nb_yellow = P2^5;                        //南北黃燈


  22. bit flag_1s = 0;                                                //延時(shí)標(biāo)志
  23. bit flag_500ms;
  24. bit flag_dx_nb;                 
  25. uchar flag_5m_value;
  26. uchar i;
  27. uchar nb_time = 10,dx_time = 15;   //東西南北時(shí)間初值
  28. uchar flag_jdgz ;                             //交通燈


  29. // 數(shù)碼管為位選
  30. void smg_we_switch(uchar i)
  31. {
  32.         switch(i)
  33.         {
  34.                 case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;
  35.                 case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;
  36.                 case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;
  37.                 case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;
  38.         }        
  39. }



  40. // 延時(shí)程序

  41. void delay_01ms(uint q)
  42. {
  43.         uint i,j;
  44.         for(i=0;i<q;i++)
  45.                 for(j=0;j<110;j++);
  46. }


  47. // 數(shù)碼管顯示

  48. void display()
  49. {
  50.         uchar i;
  51.         for(i=0;i<smg_i;i++)
  52.         {               
  53.                 P0 = 0xff;                  
  54.                 smg_we_switch(i);            
  55.                 P0 = dis_smg[i];            
  56.                 delay_01ms(3);
  57.         }
  58. }

  59. // 定時(shí)器初始化

  60. void time0_init()         
  61. {
  62.         EA  = 1;                  
  63.         TMOD = 0X11;         
  64.         ET0 = 1;                  
  65.         TR0 = 1;                  
  66.         ET1 = 0;                  
  67.         TR1 = 0;                  
  68. }

  69. // 交通燈管理

  70. void jiaotongdeng_dis()
  71. {
  72.         if(flag_1s == 1)
  73.         {
  74.                 flag_1s = 0;
  75.                 if(dx_s == 0)
  76.                 {
  77.                         if(flag_dx_nb == 1)
  78.                                 {
  79.                                 dx_s = nb_time;          //南北時(shí)間
  80.                                 nb_s = dx_time;
  81.                                 }
  82.                         else
  83.                                 {
  84.                                 dx_s = dx_time;          //東西時(shí)間
  85.                                 nb_s = nb_time;
  86.                                 }
  87.                         flag_dx_nb = ~flag_dx_nb;
  88.                 }
  89.                 dx_s --;
  90.                 nb_s --;
  91.         }
  92.         dis_smg[0] = smg_du[dx_s % 10] ;
  93.         dis_smg[1] = smg_du[dx_s / 10] ;
  94.         dis_smg[2] = smg_du[nb_s % 10] ;
  95.         dis_smg[3] = smg_du[nb_s / 10] ;

  96. // 東西時(shí)間
  97.                 if(flag_dx_nb == 0)  
  98. {               
  99.                         if(nb_s > 5)
  100. {
  101.                                 dx_red    = 1;  //東西紅燈滅
  102.                                 dx_green  =        0;        //東西綠燈亮
  103.                                 dx_yellow = 1;        //東西黃燈滅
  104.                                 nb_red    = 0;  //南北紅燈亮
  105.                                 nb_green  =        1;        //南北綠燈滅
  106.                                 nb_yellow = 1;        //南北綠燈亮
  107.                                 flag_5m_value = 0;        
  108.                         }
  109.                          if(nb_s >= 0&&nb_s <= 5)                 //綠燈閃爍
  110. {
  111.                                 dx_red    = 1;            //東西紅燈滅
  112.                                 dx_yellow  =        1;          //東西黃燈滅
  113.                                 nb_red    = 0;            //南北紅燈亮
  114.                                 nb_green  =        1;                  //南北綠燈滅
  115.                                 nb_yellow = 1;                  //南北黃燈滅
  116.                                 if(flag_500ms == 0) //綠燈閃爍
  117. {
  118.                                         dx_green = 0;
  119.                                 }
  120.                                 else
  121. {
  122.                                         dx_green = 1;
  123.                                 }
  124.                         }
  125.                         
  126.                         if(nb_s==0)
  127. {
  128.                                 dx_red    = 1;  //東西紅燈滅
  129.                                 dx_green  =        1;        //東西綠燈滅
  130.                                 dx_yellow = 0;        //東西黃燈亮
  131.                                 nb_red    = 0;  //南北紅燈亮
  132.                                 nb_green  =        1;        //南北綠燈滅
  133.                                 nb_yellow = 1;        //南北黃燈滅
  134.                                 }
  135.                         

  136.                 }

  137. // 南北時(shí)間
  138.                 if(flag_dx_nb == 1)  
  139. {                        LE1=1;
  140.                         if(dx_s > 5)
  141. {
  142.                                 dx_red    = 0;     //東西紅燈亮
  143.                                 dx_green  =        1;           //東西綠燈滅
  144.                                 dx_yellow = 1;           //東西黃燈滅
  145.                                 nb_red    = 1;     //南北紅燈滅
  146.                                 nb_green  =        0;           //南北綠燈亮
  147.                                 nb_yellow = 1;           //南北黃燈滅
  148.                                 flag_5m_value = 0;        
  149.                         }
  150.                         if(dx_s >= 0&&dx_s <= 5)                 //綠燈閃爍
  151. {
  152.                                 dx_red    = 0;     //東西紅燈亮
  153.                                 dx_green  =        1;           //東西綠燈滅
  154.                                 dx_yellow = 1;           //東西黃燈滅
  155.                                 nb_red    = 1;     //南北紅燈滅
  156.                                 nb_yellow =        1;           //男別黃燈滅
  157.                                 if(flag_500ms == 0)           //綠燈閃爍
  158. {
  159.                                         nb_green = 0;        
  160.                                 }
  161.                                 else
  162. {
  163.                                         nb_green = 1;        
  164.                                 }
  165.                         }

  166.                         
  167. }
  168. }
  169. // 按鍵設(shè)置
  170. uchar key_can;         //定義按鍵鍵值

  171. void key()         //按鍵
  172. {
  173.         static uchar key_new;
  174.         key_can = 5;                   //鍵值最大
  175.         P1 |= 0x1f;
  176.         if((P1 & 0x1f) != 0x1f)                //確定按鍵
  177.         {
  178.                 delay_01ms(1);                     //消除抖動(dòng)
  179.                 if(((P1 & 0x1f) != 0x1f) && (key_new == 1))
  180.                 {                                                //確定鍵值按下
  181.                         key_new = 0;
  182.                         switch(P1 & 0x1f)
  183.                         {
  184.                                 case 0x1e:  key_can = 1;  break;         //模式鍵
  185.                                 case 0x1d:  key_can = 2;  break;         //加鍵
  186.                                 case 0x1b:  key_can = 3;  break;         //減鍵
  187.                                 case 0x17:  key_can = 4;  break;         //緊急模式鍵
  188.                         }
  189.                 }                        
  190.         }
  191.         else
  192.                 key_new = 1;        
  193. }

  194. uchar menu_1,flag_s;


  195. // 四種鍵值
  196. void key_with()
  197. {
  198.         if(key_can == 4)   //緊急模式
  199.         {
  200.                 flag_jdgz ++;
  201.                 if(flag_jdgz > 1)
  202.                         flag_jdgz = 0;        
  203.                 if(flag_jdgz == 1)         //  全部紅燈亮
  204.                 {
  205.                         dx_red    = 0;  
  206.                         dx_green  =        1;        
  207.                         dx_yellow = 1;        
  208.                         nb_red    = 0;   
  209.                         nb_green  =        1;        
  210.                         nb_yellow = 1;                        
  211.                 }

  212.         
  213.         }
  214.         if(key_can == 1)          //模式鍵
  215.         {
  216.                 menu_1 ++;
  217.                 if(menu_1 > 3)
  218.                 {
  219.                         menu_1  = 0;
  220.                 }
  221.         }

  222.         if(menu_1 == 2)           //東西時(shí)間調(diào)整
  223.         {
  224.                 if(key_can == 2)
  225.                 {
  226.                         dx_time ++ ;                //+1
  227.                         if(dx_time > 99)
  228.                                 dx_time = 99;
  229.                 }
  230.                 if(key_can == 3)
  231.                 {
  232.                         dx_time -- ;                //-1
  233.                         if(dx_time <= 10)
  234.                                 dx_time = 10;
  235.                 }
  236.                 dis_smg[0] = smg_du[dx_time % 10] ;        //顯示時(shí)間
  237.                 dis_smg[1] = smg_du[dx_time / 10] ;        
  238.                 dis_smg[2] = smg_du[10] ;               
  239.                 dis_smg[3] = smg_du[10] ;        

  240.         }        
  241.         if(menu_1 == 3)           //南北時(shí)間調(diào)整
  242.         {
  243.                 if(key_can == 2)
  244.                 {
  245.                         nb_time ++ ;                //+1
  246.                         if(nb_time > 99)
  247.                                 nb_time = 99;
  248.                 }
  249.                 if(key_can == 3)
  250.                 {
  251.                         nb_time -- ;                //-1
  252.                         if(nb_time <= 10)
  253.                                 nb_time = 10;
  254.                 }
  255.                 dis_smg[0] = smg_du[10] ;
  256.                 dis_smg[1] = smg_du[10] ;        
  257.                 dis_smg[2] = smg_du[nb_time % 10] ;                //顯示時(shí)間        
  258.                 dis_smg[3] = smg_du[nb_time / 10] ;        

  259.         }
  260. }


  261. //主函數(shù)
  262. void main()
  263. {
  264.         time0_init();

  265.         dx_s = nb_time;          //初始時(shí)間為南北時(shí)間
  266.         nb_s = dx_time;
  267.         while(1)
  268.         {
  269.                 key();
  270.                 if(key_can < 5)
  271.                         key_with();
  272.                                 if(menu_1 == 1)         //  夜間模式
  273.         {
  274.                         dx_red    = 1;  
  275.                         dx_green  =        1;        
  276.                         nb_red    = 1;  //紅綠燈不亮
  277.                         nb_green  =        1;        
  278.                         
  279.                         if(flag_500ms == 0)  //黃燈閃爍

  280. {
  281.                                         dx_yellow = 0;
  282.                                         nb_yellow = 0;
  283.                                 }
  284.                                 else
  285. {
  286.                                         dx_yellow = 1;
  287.                                         nb_yellow = 1;        
  288.                                 }

  289.                 }

  290.                 if((menu_1 == 0) && (flag_jdgz == 0))
  291.                         jiaotongdeng_dis();
  292.                 display();        
  293.         }
  294. }  

  295. // 定時(shí)器中斷服務(wù)
  296. void time0_int() interrupt 1  
  297. {                                                   
  298.         static uchar value;                         //延時(shí)10ms
  299.         TH0 = 0x3c;
  300.         TL0 = 0xb0;     //50ms
  301.         value ++;
  302.         flag_5m_value++;
  303.         if(flag_5m_value % 10 == 0)
  304.                 flag_500ms = ~flag_500ms;
  305.         if(value >= 20)
  306.         {
  307.                 value = 0;
  308.                 flag_1s = 1;
  309.         }
  310. }
復(fù)制代碼


相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2017-2-12 22:44 | 顯示全部樓層
好資料,51黑有你更精彩�。�!
回復(fù)

使用道具 舉報(bào)

ID:26572 發(fā)表于 2017-10-13 11:35 | 顯示全部樓層
不錯(cuò),謝謝LZ
回復(fù)

使用道具 舉報(bào)

ID:467919 發(fā)表于 2019-3-26 10:01 | 顯示全部樓層
謝謝LZ
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表