久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 45693|回復(fù): 13
收起左側(cè)

51單片機(jī)交通燈系統(tǒng)設(shè)計(流程框圖+硬件+源碼)

  [復(fù)制鏈接]
ID:410059 發(fā)表于 2018-10-15 17:21 | 顯示全部樓層 |閱讀模式
這是老師要求做的項目,現(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單片機(jī)芯片的選擇方案和論證:
    STC公司生產(chǎn)的8051內(nèi)核,CMOS工藝;
              1.2.2數(shù)碼管顯示模塊的選擇方案和論證:
    選擇的是共陽的數(shù)碼管,單片機(jī)的驅(qū)動能力不是很強(qiáng),故此選擇共陽數(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這個芯片進(jìn)行輸入輸出控制。
3.3主要單元電路的設(shè)計
              3.3.1單片機(jī)主控模塊的設(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)通,是否短路進(jìn)行檢測。
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++;                                                        //進(jìn)入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;                                                          //進(jìn)入0
  252.                                                         break;

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

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


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:531151 發(fā)表于 2019-6-8 14:19 | 顯示全部樓層
可以,很強(qiáng)勢
回復(fù)

使用道具 舉報

ID:548675 發(fā)表于 2019-6-10 12:59 來自觸屏版 | 顯示全部樓層
可以看看我的嗎?  大佬幫我加個按鍵
回復(fù)

使用道具 舉報

ID:531151 發(fā)表于 2019-6-27 11:27 | 顯示全部樓層
我也想加按鍵  但是不會
回復(fù)

使用道具 舉報

ID:575535 發(fā)表于 2019-7-1 15:04 來自觸屏版 | 顯示全部樓層
這不需要接晶振嗎?
回復(fù)

使用道具 舉報

ID:678389 發(fā)表于 2019-12-31 14:18 | 顯示全部樓層
很厲害,剛需
回復(fù)

使用道具 舉報

ID:687420 發(fā)表于 2020-1-19 19:08 | 顯示全部樓層
gxgxg 發(fā)表于 2019-7-1 15:04
這不需要接晶振嗎?

肯定需要接的!!!!!!!!
回復(fù)

使用道具 舉報

ID:732153 發(fā)表于 2020-4-18 23:48 | 顯示全部樓層
這個程序有點問題啊,單步調(diào)式了一下,p1口根本就不變化,交通燈不涼,數(shù)碼管是對的,另外我導(dǎo)入proteux里面得到的也是一樣的結(jié)果
回復(fù)

使用道具 舉報

ID:736487 發(fā)表于 2020-4-23 21:13 | 顯示全部樓層
可以把引腳的編碼再發(fā)一遍嗎?能看清數(shù)字的那種,謝謝
回復(fù)

使用道具 舉報

ID:738054 發(fā)表于 2020-5-6 18:33 來自觸屏版 | 顯示全部樓層
有做的成品提供下載
回復(fù)

使用道具 舉報

ID:776037 發(fā)表于 2020-6-11 11:48 | 顯示全部樓層
引腳看不清難受
回復(fù)

使用道具 舉報

ID:779601 發(fā)表于 2020-6-15 16:47 | 顯示全部樓層
在實驗箱上怎么連啊
回復(fù)

使用道具 舉報

ID:779392 發(fā)表于 2020-6-15 21:00 來自觸屏版 | 顯示全部樓層
雪菜 發(fā)表于 2020-4-18 23:48
這個程序有點問題啊,單步調(diào)式了一下,p1口根本就不變化,交通燈不涼,數(shù)碼管是對的,另外我導(dǎo)入proteux里 ...

我數(shù)碼管不亮咋辦
回復(fù)

使用道具 舉報

ID:845493 發(fā)表于 2020-11-25 20:37 | 顯示全部樓層
李李李89 發(fā)表于 2020-4-23 21:13
可以把引腳的編碼再發(fā)一遍嗎?能看清數(shù)字的那種,謝謝

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级大片免费看 | 国产日产精品一区二区三区四区 | 久久久久国产一区二区三区四区 | 草草视频在线播放 | 久久国产福利 | 国产精品一区一区三区 | 亚洲欧美网 | 亚洲精品视频一区二区三区 | 欧美精品在线一区 | 日韩三极 | 日本不卡免费新一二三区 | 看羞羞视频免费 | 天天天操操操 | 在线视频国产一区 | 久久精品中文字幕 | 91精品久久久久久久 | 成人av片在线观看 | 久热电影| 日韩精品一区二区三区视频播放 | 亚洲精品日本 | 视频一区在线观看 | 五月综合久久 | 色av一区| 91免费入口 | 成人中文字幕在线 | 国产人久久人人人人爽 | 国产美女久久 | 精品视频在线一区 | 欧美精品第三页 | 中文字幕成人网 | 婷婷综合色| 国产一区二区三区免费 | 亚洲精品一区二区三区蜜桃久 | 天堂中文av | 色婷婷综合在线观看 | 精品国产伦一区二区三区观看说明 | 亚洲精品v| 刘亦菲国产毛片bd | 中文字幕国产一区 | 欧美福利在线 | 中文字幕第十页 |