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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 44989|回復: 13
打印 上一主題 下一主題
收起左側

51單片機交通燈系統設計(流程框圖+硬件+源碼)

  [復制鏈接]
跳轉到指定樓層
樓主
ID:410059 發表于 2018-10-15 17:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是老師要求做的項目,現在已經做好了,沒有什么大問題。

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

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


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


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


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

  4. void  DigitalTube();   //數碼管顯示函數
  5. void  InterruptT0();              //內部中斷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;                            //數碼管使能控制
  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的數字顯示共陽

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

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

  37. uint Kf22 = 1;              //按鍵前一個狀態的值
  38. uint Kf23 = 1;
  39. uint Kf24 = 1;
  40. uint KSta24 = 1;              //按鍵的當前值
  41. uint KSta23 = 1;
  42. uint KSta22 = 1;  
  43. uchar Kflag22 = 0;              //按鍵22的switch函數參數

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

  53.               while(1)
  54.               {
  55.                             DigitalTube();              //數碼管顯示
  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()                            //數碼管

  202. {                    
  203.               switch(z)
  204.               {
  205.                                           case 0:                                                                      //第一個數碼管顯示數字
  206.                                          
  207.                                               P0 =0xFF;                            //防止數字顯示混亂
  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:                                                          //第二個數碼管亮
  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:                                                        //第三個數碼管亮
  231.                                               P0 =0xFF;
  232.                                                         dula = 1;
  233.                                                         P0 = LedBuf[LedNumNS / 10]; //十位
  234.                                                         P21 = 0;
  235.                                                         P16 = 0;
  236.                                                         P17 = 0;                                            //關閉2
  237.                                                         P20 = 1;                                            //使能第3個數碼管
  238.                                                         dula = 0;
  239.                                                         z++;                                                        //進入3
  240.                                                         break;
  241.                                          
  242.                                           case 3:                                                          //第四個數碼管亮

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

  253.                                           default:break;                                                                                                   
  254.               }
  255. }
復制代碼

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


評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂4 踩
回復

使用道具 舉報

沙發
ID:531151 發表于 2019-6-8 14:19 | 只看該作者
可以,很強勢
回復

使用道具 舉報

板凳
ID:548675 發表于 2019-6-10 12:59 來自手機 | 只看該作者
可以看看我的嗎?  大佬幫我加個按鍵
回復

使用道具 舉報

地板
ID:531151 發表于 2019-6-27 11:27 | 只看該作者
我也想加按鍵  但是不會
回復

使用道具 舉報

5#
ID:575535 發表于 2019-7-1 15:04 來自手機 | 只看該作者
這不需要接晶振嗎?
回復

使用道具 舉報

6#
ID:678389 發表于 2019-12-31 14:18 | 只看該作者
很厲害,剛需
回復

使用道具 舉報

7#
ID:687420 發表于 2020-1-19 19:08 | 只看該作者
gxgxg 發表于 2019-7-1 15:04
這不需要接晶振嗎?

肯定需要接的!!!!!!!!
回復

使用道具 舉報

8#
ID:732153 發表于 2020-4-18 23:48 | 只看該作者
這個程序有點問題啊,單步調式了一下,p1口根本就不變化,交通燈不涼,數碼管是對的,另外我導入proteux里面得到的也是一樣的結果
回復

使用道具 舉報

9#
ID:736487 發表于 2020-4-23 21:13 | 只看該作者
可以把引腳的編碼再發一遍嗎?能看清數字的那種,謝謝
回復

使用道具 舉報

10#
ID:738054 發表于 2020-5-6 18:33 來自手機 | 只看該作者
有做的成品提供下載
回復

使用道具 舉報

11#
ID:776037 發表于 2020-6-11 11:48 | 只看該作者
引腳看不清難受
回復

使用道具 舉報

12#
ID:779601 發表于 2020-6-15 16:47 | 只看該作者
在實驗箱上怎么連啊
回復

使用道具 舉報

13#
ID:779392 發表于 2020-6-15 21:00 來自手機 | 只看該作者
雪菜 發表于 2020-4-18 23:48
這個程序有點問題啊,單步調式了一下,p1口根本就不變化,交通燈不涼,數碼管是對的,另外我導入proteux里 ...

我數碼管不亮咋辦
回復

使用道具 舉報

14#
ID:845493 發表于 2020-11-25 20:37 | 只看該作者
李李李89 發表于 2020-4-23 21:13
可以把引腳的編碼再發一遍嗎?能看清數字的那種,謝謝

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美国产日本一区 | 国产精品一级 | av中文网| 国产精品久久久久影院色老大 | 亚洲成人国产综合 | 新超碰97| 日韩在线观看网站 | 亚洲精彩免费视频 | 免费视频一区 | 日韩免费网 | 看毛片的网站 | 麻豆精品久久 | 成人夜晚看av | 日韩精品在线看 | 国产视频1区 | 亚洲一区av在线 | 蜜桃视频成人 | 午夜电影福利 | 在线不卡视频 | 国产精品视频一二三 | 欧美亚洲网站 | 成人乱人乱一区二区三区软件 | 人人九九精 | 亚洲美女网站 | 伊人激情综合网 | 国产精品theporn | www.9191.com| 国产精品精品视频一区二区三区 | 95国产精品 | 一区二区成人 | 国产精品久久久久久久久久久久 | 久久久久国产一区二区三区四区 | 久久国产精品一区二区三区 | 日日碰狠狠躁久久躁96avv | 精品久久久久久亚洲精品 | 国产成人精品一区二区三区视频 | 亚洲aⅴ| 欧美日韩电影一区 | 欧美中文字幕一区二区三区亚洲 | 免费一区二区 | 久久精品一级 |