欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

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

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

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


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


5.3 硬件測(cè)試
              5.3.1 顯示模塊測(cè)試
   
  
5.4 測(cè)試結(jié)果分析與結(jié)論
              5.4.1測(cè)試結(jié)果分析
    已經(jīng)可以實(shí)現(xiàn)上述功能。
              5.4.2測(cè)試結(jié)論
    測(cè)試已經(jīng)完成,已經(jīng)可以實(shí)現(xiàn)了要求的功能。
作品總結(jié)
  在這一次的作品制作過程中對(duì)萬(wàn)用表,c語(yǔ)言,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ù)字顯示共陽(yáng)

  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;                                          //計(jì)數(shù)及狀態(tài)的變量

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

  37. uint Kf22 = 1;              //按鍵前一個(gè)狀態(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)                            //按鍵有動(dòng)作
  67.                                                         {
  68.                                                                       if(Kf24 == 1)                            //按鍵按下
  69.                                                                       {
  70.                                                                                     Kflag = !Kflag;                           
  71.                                                                       }
  72.                                                                       Kf24 = KSta24;
  73.                                                         }
  74.                                          


  75.                                           KSta23 = K23;                                //按鍵K23  增減時(shí)長(zhǎng)
  76.                                           if(Kf23 != KSta23)                            //按鍵有動(dòng)作
  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  某方向長(zhǎng)時(shí)間紅燈
  99.                                           if(Kf22 != KSta22)                            //按鍵有動(dòng)作
  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東西綠南北紅的時(shí)間
  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:                                                                      //第一個(gè)數(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:                                                          //第二個(gè)數(shù)碼管亮
  219.                                                            P0 =0xFF;
  220.                                                         dula = 1;
  221.                                                         P0 = LedBuf[LedNumEW % 10];              //個(gè)位
  222.                                                         P16 = 0;
  223.                                                         P20 = 0;
  224.                                                         P21 = 0;
  225.                                                         P17 = 1;
  226.                                                         dula = 0;
  227.                                               z++;
  228.                                                         break;
  229.                            
  230.                                           case 2:                                                        //第三個(gè)數(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個(gè)數(shù)碼管
  238.                                                         dula = 0;
  239.                                                         z++;                                                        //進(jìn)入3
  240.                                                         break;
  241.                                          
  242.                                           case 3:                                                          //第四個(gè)數(shù)碼管亮

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

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

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



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

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

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

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

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





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