1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

標(biāo)題: 51單片機交通燈系統(tǒng)設(shè)計(流程框圖+硬件+源碼) [打印本頁]

作者: tfyyu    時間: 2018-10-15 17:21
標(biāo)題: 51單片機交通燈系統(tǒng)設(shè)計(流程框圖+硬件+源碼)
這是老師要求做的項目,現(xiàn)在已經(jīng)做好了,沒有什么大問題。

一, 設(shè)計要求與方案論證
1.1設(shè)計要求:
              1.1.1基本要求:
              1、東西方向、南北方向均有紅、黃、綠三種信號燈,初始紅燈30秒,黃燈閃爍3秒,綠燈30秒,東西方向紅燈時刻,南北方向綠燈,南北方向綠燈,東西方向紅燈;
2、按鍵調(diào)節(jié)與控制功能,通過按鍵,可以控制某一個方向長時間綠燈,另一個方向長時間紅燈;通過按鍵可以控制某一個方向的紅燈時長,比如調(diào)整東西方向紅燈40秒,綠燈20秒,于此同時,南北方向紅燈20秒,綠燈40秒。
3、夜間模式按鈕按下,所有方向顯示黃燈閃爍
4、實時提醒燈亮的剩余時間

1.1.2拓展部分:
目前還沒拓展
1.2系統(tǒng)基本方案選擇和論證:
              1.2.1單片機芯片的選擇方案和論證:
    STC公司生產(chǎn)的8051內(nèi)核,CMOS工藝;
              1.2.2數(shù)碼管顯示模塊的選擇方案和論證:
    選擇的是共陽的數(shù)碼管,單片機的驅(qū)動能力不是很強,故此選擇共陽數(shù)碼管;。
              1.2.3Led燈的選擇方案與論證:
    通過一個Led燈的電流大約是10ms。
              1.3 電路設(shè)計最終方案
2.1  表數(shù)的產(chǎn)生由定時器T0產(chǎn)生
TH0=0xFC;TL0=0x67; 每1ms中斷一下,對整個項目的標(biāo)志量改變一下它的值。
2.2  略;
3.1 電路設(shè)計框圖
3.2系統(tǒng)硬件描述
  主要的硬件是89C51這個芯片進行輸入輸出控制。
3.3主要單元電路的設(shè)計
              3.3.1單片機主控模塊的設(shè)計
      
              3.3.2數(shù)碼管模塊的設(shè)計
      
              3.3.3Led燈模塊的設(shè)計
     
              3.3.4電源穩(wěn)壓模塊


4.1程序流程框圖
4.2 數(shù)碼管模塊流程圖
4.3 按鍵調(diào)整模塊設(shè)計框圖
5.1 測試儀器
萬能表對是否導(dǎo)通,是否短路進行檢測。
5.2軟件測試平臺 Keil C51


5.3 硬件測試
              5.3.1 顯示模塊測試
   
  
5.4 測試結(jié)果分析與結(jié)論
              5.4.1測試結(jié)果分析
    已經(jīng)可以實現(xiàn)上述功能。
              5.4.2測試結(jié)論
    測試已經(jīng)完成,已經(jīng)可以實現(xiàn)了要求的功能。
作品總結(jié)
  在這一次的作品制作過程中對萬用表,c語言,Proteus的使用更加的得心應(yīng)手,更加的熟練。
附錄一:系統(tǒng)電路圖


附錄二:系統(tǒng)C程序
  1. #include<reg52.h>
  2. #define              uint unsigned int;
  3. #define  uchar unsigned char;

  4. void  DigitalTube();   //數(shù)碼管顯示函數(shù)
  5. void  InterruptT0();              //內(nèi)部中斷0

  6. sbit  P10 = P1^0;                            //紅綠燈引腳的初始化
  7. sbit  P11 = P1^1;
  8. sbit  P12 = P1^2;
  9. sbit  P13 = P1^3;
  10. sbit  P14 = P1^4;
  11. sbit  P15 = P1^5;

  12. sbit  P16 = P1^6;                            //數(shù)碼管使能控制
  13. sbit  P17 = P1^7;
  14. sbit  P20 = P2^0;
  15. sbit  P21 = P2^1;

  16. sbit  K22 = P2^2;                 //按鍵22
  17. sbit  K23 = P2^3;
  18. sbit  K24 = P2^4;
  19. sbit dula = P2^5;

  20. uint LedBuf[10] = {
  21.                               0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
  22.                             0x80,0x90
  23. };                            //0~9的數(shù)字顯示共陽

  24. uint Kflag = 1;                              //按鍵24的標(biāo)志
  25. uint LedNumNS = 27;                 //南北的數(shù)字顯示
  26. uint LedNumEW = 30;                 //東西的數(shù)字顯示
  27. uint i = 0;
  28. uint j = 0;
  29. uint j1 = 0;
  30. uint k = 0;
  31. uint g = 0;
  32. uint z = 0;                                          //計數(shù)及狀態(tài)的變量

  33. uint LedTime1 = 30;
  34. uint LedTime2 = 27;
  35. uint LedTime3 = 30;
  36. uint LedTime4 = 27;

  37. uint Kf22 = 1;              //按鍵前一個狀態(tài)的值
  38. uint Kf23 = 1;
  39. uint Kf24 = 1;
  40. uint KSta24 = 1;              //按鍵的當(dāng)前值
  41. uint KSta23 = 1;
  42. uint KSta22 = 1;  
  43. uchar Kflag22 = 0;              //按鍵22的switch函數(shù)參數(shù)

  44. void main()
  45. {
  46.               EA = 1;                                          //開總中斷
  47.               ET0 = 1;                            //開內(nèi)部中斷0
  48.               TR0 = 1;
  49.               TMOD = 0x01;                 //方式1
  50.               TH0 = 0xFC;
  51.               TL0= 0x67; //1ms中斷
  52.               P1 = 0xEE;                            //

  53.               while(1)
  54.               {
  55.                             DigitalTube();              //數(shù)碼管顯示
  56.               }

  57. }


  58. void InterruptT0() interrupt 1
  59. {
  60.                                                         TH0 = 0xFC;
  61.                                                         TL0 = 0x67; //1ms中斷            
  62.                                                         i++;            
  63.                                                         k++;
  64.                                          
  65.                                                         KSta24 = K24;                                //按鍵K24  夜間模式
  66.                                                         if(Kf24 != KSta24)                            //按鍵有動作
  67.                                                         {
  68.                                                                       if(Kf24 == 1)                            //按鍵按下
  69.                                                                       {
  70.                                                                                     Kflag = !Kflag;                           
  71.                                                                       }
  72.                                                                       Kf24 = KSta24;
  73.                                                         }
  74.                                          


  75.                                           KSta23 = K23;                                //按鍵K23  增減時長
  76.                                           if(Kf23 != KSta23)                            //按鍵有動作
  77.                                           {
  78.                                                         if(Kf23 == 1)                            //按鍵按下
  79.                                                         {
  80.                                                         //              LedTime = LedTime +2;
  81.                                                                       LedTime1 = LedTime1 +5;              //32  34 36 38 30
  82.                                                                       LedTime2 = LedTime2 +5;              //25  23 21  19 17
  83.                                                                       LedTime3 = LedTime3 +5;
  84.                                                                       LedTime4 = LedTime4 +5;
  85.                                                                       if(LedTime1 >=60)
  86.                                                                                     {
  87.                                                                                                   LedTime1 = 10;
  88.                                                                                                   LedTime2 = 7;
  89.                                                                                                   LedTime3 = 10;
  90.                                                                                                   LedTime4 = 7;
  91.                                                                                     }            
  92.                                                                       LedNumEW = LedTime1;
  93.                                                                       LedNumNS = LedTime2;
  94.                                                         }
  95.                                                         Kf23= KSta23;
  96.                                           }
  97.                            


  98.                                           KSta22 = K22;                                //按鍵K22  某方向長時間紅燈
  99.                                           if(Kf22 != KSta22)                            //按鍵有動作
  100.                                           {
  101.                                                         if(Kf22 == 1)                            //按鍵按下
  102.                                                         {
  103.                                                                       Kflag22 ++;            
  104.                                                                       if(Kflag22>= 3)            
  105.                                                                                     {
  106.                                                                                     Kflag22 = 0;
  107.                                                                                     }

  108.                                                                       switch(Kflag22)
  109.                                                                       {
  110.                                                                                     case 1:
  111.                                                                                                   LedTime1 = 50;
  112.                                                                               LedTime2 = 47;              //case2
  113.                                                                                                   LedTime3 = 20;
  114.                                                                                                   LedTime4 = 17; //case1

  115.                                                                                                   LedNumEW = LedTime1;
  116.                                                                                                   LedNumNS = LedTime2;


  117.                                                                                         break;
  118.                                                                                     case 2:            
  119.                                                                                                   LedTime1 = 20;
  120.                                                                               LedTime2 = 17;                //case2
  121.                                                                                                   LedTime3 = 50;
  122.                                                                                                   LedTime4 = 47;              //case1

  123.                                                                                                   LedNumEW = LedTime1;
  124.                                                                                                   LedNumNS = LedTime2;
  125.                                                                                                   break;
  126.                                                                                     case 0:            
  127.                                                                      
  128.                                                                                                   LedTime1 = 30;
  129.                                                                               LedTime2 = 27;
  130.                                                                                                   LedTime3 = 30;
  131.                                                                                                   LedTime4 = 27;
  132.                                                                                                   LedNumEW = LedTime1;
  133.                                                                                                   LedNumNS = LedTime2;
  134.                                                                                     break;
  135.                                                                       }

  136.                                                         }
  137.                                                         Kf22 = KSta22;
  138.                                           }
  139.                                          

  140.               if(j >= 200)
  141.                             {
  142.                                           j  = 0;
  143.                                           j1++;
  144.                             }


  145.               if(i >= 1000)
  146.               {
  147.                             i = 0;
  148.                             LedNumNS--;              //27
  149.                             LedNumEW--;              //30
  150.                             switch(g)
  151.                             {                                            //剛開始東西紅  南北綠
  152.                                           case 0:                                                                                                                   //********2
  153.                                                         if(LedNumEW == 3)                                                           //*****3
  154.                                                         {
  155.                                                                                     P14 = ! P14;   //綠燈滅
  156.                                                         if(Kf24 == Kflag)                            P15 = ! P15;   //黃燈亮
  157.                                                                                     LedNumNS = 3;
  158.                                                         }            
  159.                                                         if(LedNumEW == 0)
  160.                                                         {
  161.                                                                       LedNumNS =  LedTime3;              //   30東西綠南北紅的時間
  162.                                                                       LedNumEW =               LedTime4;              //  27
  163.                                                                       P12 = ! P12;                 //東西綠燈亮
  164.                                                                       P10 = ! P10;                //東西紅燈滅
  165.                                                                       P13 = ! P13;                              //nanbei紅燈亮
  166.                                                             if(Kf24 == Kflag)
  167.                                                                       P15 = ! P15;                //南北黃燈滅
  168.                                                                       g = 1;
  169.                                                         }            
  170.                                                         break;

  171.                                           case 1:                                                                                                                              //******4
  172.                                                         if(LedNumNS == 3)                 //黃燈亮
  173.                                                                       {
  174.                                                                    P12 = !P12;
  175.                                                                                        P11 = !P11;            
  176.                                                                                        LedNumEW = 3;
  177.                                                                       }
  178.                                                         if(LedNumNS == 0)                                                                         //********5
  179.                                                         {
  180.                                                                       LedNumEW = LedTime1;//重新賦值
  181.                                                                       LedNumNS = LedTime2;
  182.                                                         if(Kf24 == Kflag)              P11 = !P11;                 //南北黃燈滅
  183.                                                                       P10 = !P10;                //dongxi紅燈亮
  184.                                                                       P14 = !P14;
  185.                                                                       P13 = !P13;
  186.                                                                       g = 0;
  187.                                                         }
  188.                                                         break;
  189.                                }
  190.                            

  191.                   if(Kf24 != Kflag)                                                        //夜間模式
  192.                             {
  193.                                           if(j1 % 2 == 0)
  194.                                           {
  195.                                                         P11 = ! P11;            
  196.                                                         P15 = ! P15;
  197.                                 }                                                          //所有方向黃燈閃爍
  198.                             }                             
  199.               }                                                                       
  200. }




  201. void  DigitalTube()                            //數(shù)碼管

  202. {                    
  203.               switch(z)
  204.               {
  205.                                           case 0:                                                                      //第一個數(shù)碼管顯示數(shù)字
  206.                                          
  207.                                               P0 =0xFF;                            //防止數(shù)字顯示混亂
  208.                                                         dula = 1;
  209.                                                         P0 = LedBuf[LedNumEW / 10];              //十位
  210.                                                         P20 = 0;
  211.                                                         P17 = 0;
  212.                                                         P21 = 0;
  213.                                                         P16 = 1;
  214.                                                         dula = 0;
  215.                                                         z++;            
  216.                                                         break;                             
  217.             
  218.                                           case 1:                                                          //第二個數(shù)碼管亮
  219.                                                            P0 =0xFF;
  220.                                                         dula = 1;
  221.                                                         P0 = LedBuf[LedNumEW % 10];              //個位
  222.                                                         P16 = 0;
  223.                                                         P20 = 0;
  224.                                                         P21 = 0;
  225.                                                         P17 = 1;
  226.                                                         dula = 0;
  227.                                               z++;
  228.                                                         break;
  229.                            
  230.                                           case 2:                                                        //第三個數(shù)碼管亮
  231.                                               P0 =0xFF;
  232.                                                         dula = 1;
  233.                                                         P0 = LedBuf[LedNumNS / 10]; //十位
  234.                                                         P21 = 0;
  235.                                                         P16 = 0;
  236.                                                         P17 = 0;                                            //關(guān)閉2
  237.                                                         P20 = 1;                                            //使能第3個數(shù)碼管
  238.                                                         dula = 0;
  239.                                                         z++;                                                        //進入3
  240.                                                         break;
  241.                                          
  242.                                           case 3:                                                          //第四個數(shù)碼管亮

  243.                                               P0 =0xFF;
  244.                                                         dula = 1;
  245.                                                         P0 = LedBuf[LedNumNS % 10];              //個位
  246.                                                         P20 = 0;                                          //第三個關(guān)閉
  247.                                                         P16 = 0;
  248.                                                         P17 = 0;
  249.                                                         P21 = 1;                                          //使能第四個數(shù)碼管
  250.                                                         dula = 0;
  251.                                                         z = 0;                                                          //進入0
  252.                                                         break;

  253.                                           default:break;                                                                                                   
  254.               }
  255. }
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
項目報告說明書.docx (239.11 KB, 下載次數(shù): 293)



作者: 三色丸子    時間: 2019-6-8 14:19
可以,很強勢
作者: gdg666    時間: 2019-6-10 12:59
可以看看我的嗎?  大佬幫我加個按鍵
作者: 三色丸子    時間: 2019-6-27 11:27
我也想加按鍵  但是不會
作者: gxgxg    時間: 2019-7-1 15:04
這不需要接晶振嗎?
作者: TEST133    時間: 2019-12-31 14:18
很厲害,剛需
作者: ajian518    時間: 2020-1-19 19:08
gxgxg 發(fā)表于 2019-7-1 15:04
這不需要接晶振嗎?

肯定需要接的!!!!!!!!
作者: 雪菜    時間: 2020-4-18 23:48
這個程序有點問題啊,單步調(diào)式了一下,p1口根本就不變化,交通燈不涼,數(shù)碼管是對的,另外我導(dǎo)入proteux里面得到的也是一樣的結(jié)果
作者: 李李李89    時間: 2020-4-23 21:13
可以把引腳的編碼再發(fā)一遍嗎?能看清數(shù)字的那種,謝謝

作者: 1471490645    時間: 2020-5-6 18:33
有做的成品提供下載
作者: lxcaitt    時間: 2020-6-11 11:48
引腳看不清難受
作者: Hibari    時間: 2020-6-15 16:47
在實驗箱上怎么連啊
作者: 961224    時間: 2020-6-15 21:00
雪菜 發(fā)表于 2020-4-18 23:48
這個程序有點問題啊,單步調(diào)式了一下,p1口根本就不變化,交通燈不涼,數(shù)碼管是對的,另外我導(dǎo)入proteux里 ...

我數(shù)碼管不亮咋辦
作者: dingxr12345    時間: 2020-11-25 20:37
李李李89 發(fā)表于 2020-4-23 21:13
可以把引腳的編碼再發(fā)一遍嗎?能看清數(shù)字的那種,謝謝

附議!!!!大佬可以再發(fā)下可以看清引腳的圖片的嗎?





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1