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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4381|回復: 1
收起左側

基于51單片機的交通燈Proteus仿真程序 一個數碼管顯示

[復制鏈接]
ID:362692 發表于 2022-4-26 23:28 | 顯示全部樓層 |閱讀模式
  設計一個十字路口的交通燈控制電路,要求南北方向和東西方向兩個交叉路口的車輛交替運行。
    2) 每次綠燈變紅燈時,要求黃燈先亮5S,才能變換運行車輛.
    3) 東西方向、南北方向車道除了有紅、黃、綠燈指示外,每一種燈亮的時間都用數碼管顯示器進行顯示(采用LED倒計時的方法)

  附件有仿真電路,程序,框圖,參考文檔等等

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif

制作出來的實物圖如下:
IMG_20150307_231758.jpg


整個系統的構成以STC89C52RC單片機為核心,由I/O口擴展,LED數碼管顯示,還有復位電路、時鐘電路等組成。單片機作為整個硬件系統的核心,它既是協調整機工作的控制器,又是數據處理器。它由單片機、晶振電路、復位電路等組成。

行車方向指示采用LED發光二極管,可有紅、綠兩種顏色指示放行與禁止,黃燈作為紅綠轉換的提示,形象直觀。系統采用雙數碼管倒計時計數功能,最大顯示數字99。

3 系統硬件設計
3.1交通燈通行模式及行車方向指示

按交通燈控制規則,每個道口有紅、黃、綠三種指示燈,交道口模型如圖2.1所示:

圖3.1  交道口模型圖




2組LED數碼管按照設置的通行時間(各路口默認的通行時間均為30s)進行倒計時,倒計時到5S時,綠燈變成黃燈,并各自進行紅、黃、綠燈顯示,共有兩種通行方式分別為:

圖3.2  通行方式一示意圖                       圖3.3  通行方式二示意圖


通行方式一:倒計時時間為30s(通行時間),紅綠燈狀態為:東西通行:綠,南北禁行:紅;如圖3.2所示。              

通行方式二:倒計時時間為30s(通行時間),紅綠燈狀態為:南北通行:綠;東西禁行:紅;如圖3.3所示。

通行默認時間為30s,系統設置了任意更改功能,可以根據實際情況進行調整,以提高車輛通過率,緩減交通壓力。在通行結束前5秒鐘,黃燈亮直至結束。本設計選用LED發光二極管的紅綠燈狀態用來指示交通指示信息。綠色表示通行,紅色則表示禁止通行,黃燈等待。你所有指示信息一目了然。


3.2各單元電路模塊功能3.2.1時鐘電路模塊

時鐘電路由一個晶體振蕩器12MHZ和兩個30pF的瓷片電容組成。時鐘電路用于產生單片機工作所需的時鐘信號,而時序所研究的是指令執行中各信號之間的相互關系。單片機本身就是一個復雜的同步時序電路,為了保證同步工作方式的實現,電路應在唯一的時鐘信號控制下嚴格地工作。其電路如圖3.4所示:


                    
圖3.4  時鐘電路模塊

3.2.2復位電路模塊

    電容在上接高電平,電阻在下接地,中間為RST。這種復位電路為高電平復位。其工作原理是:通電時,電容兩端相當于是短路,于是RST引腳上為高電平,然后電源通過電阻對電容充電,RST端電壓慢慢下降,降到一定程度,即為低電平,單片機開始正常工作。其電路如圖3.5所示:


圖3.5  復位電路模塊

3.2.3主控制系統模塊

主控制器采用STC89C52RC,STC89C52RC 單片機是宏晶科技推出的新一代高速/低功耗/超強抗干擾的單 片機,指令代碼完全兼容傳統 8051 單片機,12 時鐘/機器周期和 6 時鐘/機器周 期可以任意選擇。

其特點如下:

1. 增強型 8051 單片機,6 時鐘/機器周期和 12 時鐘/機器周期可以任 意選擇,指令代碼完全兼容傳統 8051.

2. 工作電壓:5.5V~3.3V(5V 單片機)/3.8V~2.0V(3V 單片機)

3. 工作頻率范圍:0~40MHz,相當于普通 8051 的 0~80MHz,實際工 作頻率可達 48MHz

4. 用戶應用程序空間為 8K 字節

5. 片上集成 512 字節 RAM

6. 通用 I/O 口 (32 個) 復位后為: , P1/P2/P3/P4 是準雙向口/弱上拉, P0 口是漏極開路輸出,作為總線擴展用時,不用加上拉電阻,作為 I/O 口用時,需加上拉電阻。

7. ISP(在系統可編程)/IAP(在應用可編程) ,無需專用編程器,無 需專用仿真器,可通過串口(RxD/P3.0,TxD/P3.1)直接下載用戶程 序,數秒即可完成一片

8. 具有 EEPROM 功能

9. 具有看門狗功能

10. 共 3 個 16 位定時器/計數器。即定時器 T0、T1、T2

11. 外部中斷 4 路,下降沿中斷或低電平觸發電路,Power Down 模式可 由外部中斷低電平觸發中斷方式喚醒

12. 通用異步串行口(UART) ,還可用定時器軟件實現多個 UART

13. 工作溫度范圍:-40~+85℃(工業級)/0~75℃(商業級)

14. DIP 封裝



圖3.6主控置系統模塊電路

3.2.4交通燈輸出控制模塊
    道口交通燈指示采用紅、黃、綠發光二極管進行提示。其圖如圖3.7所示:

圖3.7LED顯示模塊電路

當R=1000歐時,按公式A=(5-1.8)/R計算,電路中的電流大小應為A=3.2mA。由于每個路口的通行雙向指示處理相同,因此每個端口應具有6.4mA的吸收電流能力。


3.2.5時間顯示電路模塊

考慮設計需要,我們在各個方向分別用二位數碼管用來顯示倒計時時間,構成交通提示信息,形象逼真。本系統使用數碼管完成倒計時顯示功能。以方向東西為為例,數碼管顯示的數值從綠燈的設置時間最大值往下減,每秒鐘減1,一直減到0。然后又從紅燈的設置時間最大值往下減,一直減到0。接下來又顯示綠燈時間,如此循環。

系統共有1個二位的LED 數碼管,分別放置在模擬交通燈控制板上四組交通燈中間。四個方向上都應該顯示同樣的內容,所以我們可以把它們同樣對待,只用了一組數碼管來模擬。也就是說各個方向的數碼管個位(把數碼管第二位定義為個位,第一位定義為十位)用一根信號線控制,十位用另一根信號線控制。

道口通行剩余時間采用紅色7段數碼管顯示,采用共陰數碼管,如用單片機P0口加上拉電阻驅動,P3.0/P3.1來控制數碼管的位。其顯示電路如圖3.8所示:



                        
圖3.8數碼管顯示模塊電路


3.2.6系統電源模塊電路
  由于該系統中 51 單片機及三極管工作電壓均為 5V 電壓,所以要保證系統穩定可靠的工作,需要設計一個可以穩定提供 5V 電壓的供電系統。本設計采用外置5V穩壓開關電源作為系統的供電電源,系統電源輸入接口要加濾波電容以確保工作電壓穩定。電源輸出接口加上LED 電源指示燈,用來判定電源是否正常工作。該系統電源電路設計如圖3.9所示:
圖3.9系統電源電路


  4 系統軟件設計

根據實際交通燈的變化情況和規律。假設一個十字路口為東南西北走向。初始狀態1東西綠燈通車,南北紅燈亮。過30s,轉狀態2,東西綠燈滅黃燈亮,南北紅燈滅黃燈亮,過5s,再轉狀態3,南北綠燈通車,東西紅燈亮。過30s,轉狀態4,南北綠燈滅黃燈亮,東西紅燈滅黃燈亮,過5s,又循環至狀態1。對于交通信號燈來說東西南北共四組燈,由于同一道上的兩組的信號燈的顯示情況是相同的,因此,采用單片機內部的I/O口來控制12個信號燈。通過編寫程序,實現對發光二極管的控制,來模擬交通信號燈的管理。

4.1 軟件總體流程圖

軟件總體設計及流程圖見圖3-1,主要完成各部分的軟件控制和協調。本系統主程序模塊主要完成的工作是對系統的初始化,發送顯示數據,同時對按鍵進行掃描,等待外部中斷,以及根據所需要的功能進行相應的操作。其流程圖如圖4.1

圖4.1正常情況下交通燈控制流程




5 系統調試分析及結果
因本設計本身要求有穩定性高、免維護、抗干擾能力強等功能,系統調試除了驗證數據處理的精度,確保判斷的準確性外,同時必須確認各項功能的正常運行。
5.1  電路板實物的制作
5.1.1印制電路板PCB圖的繪制
由于本電路硬件設計中,用單片機的一個IO口控制各路交通燈的循環點亮。用同一芯片單片機的P0口來控制數碼管的顯示點亮。因此,在同一芯片中,所要接的線路比較多。在硬件的布局中,各位LED燈和數碼管的布局比較固定化,集中分布在所控制的兩個路口。因此,若采用雙面PCB板的話,這個電路的布線比較容易實現。但是,現實水平中做雙面板會出現一些焊點接觸不良而導致電路調試過程不易實現。因此,決定使用單面板布線。單片面板的布線需要犧牲本設計電路板一部分實際電路的美觀。印制電路板的設計是以電路原理圖為根據,實現電路設計者所需要的功能。印刷電路板的設計主要指版圖設計,需要考慮外部連接的布局、內部電子元件的優化布局、金屬連線和通孔的優化布局、電磁保護、熱耗散等各種因素。優秀的版圖設計可以節約生產成本,達到良好的電路性能和散熱性能。
5.1.2實物的制做
    準備工作:采購萬能板若干張,實物電路所需的各種元器件;
還有其他的基本電子器件和制板工具。
①總制板工藝程序
1)先將所有元器件擺放到萬能板上,確實各個原件的最有位置,原則是,既美觀,又容易焊接。
2)把擺好位置的元器件焊到板子上,最好用焊臺來完成。
3)根據原理圖,把所有的連線連接起來,連接的導線,盡量用細一點的。  
②制板心得:我們在制板過程中,
1)首先是PROTEL設計的時候出現的錯誤導致印制電路板制作錯誤。
2)其次是由于設計的理論和實際有誤差導致無法實現目標。
3)焊接過程中出現了一些問題,比如焊跳線的時候,由于接線太多,而且是手工焊接,并且焊接設備不好,烙鐵頭高溫下容易老化氧化和溫度不可控制。因此導致焊盤脫落,原件燙傷等原因導致報廢了好幾塊板子。此外,有些焊盤太小并且有損壞跡象,所以焊接很不方便。但為了不出現虛焊,卻花了很長時間去焊,有些焊點并不是很美觀。
4)焊接過程中,有時候焊錫會不小心將相鄰的兩根引線短路。所以,此次做板積累了一些經驗,主要是,再次做板的時候一定要注意PCB的引線之間的距離不能設置太近。因為是手工制作,精度和密度都必須有一個自由度和能力所及的范圍,并且考慮到手工制板的局限性和線路過細密導致的氧化和短路故障。擁有了這些寶貴的經驗,相信今后制板,一定會完美保證電路的實現!

5.2 系統硬件調試
在設計過程中,實物交通燈控制系統的PCB電路板焊接工作量非常大,電路安裝完成后,首先進行檢查,即確認電路無虛焊,無短路,無斷路,集成元件安裝是否正確,之后進行電路功能模塊的分級調試,根據電路功能逐級進行:通行方式功能調試:包括對兩種通行方式控制調試,指示燈亮度和驅動電路調試;倒計時功能調試:數碼管亮度調試;復位功能調試。
5.3 系統軟件調試
本系統的軟件系統很大,選用一般的單片機通信C語言程序進行編寫和調試。除了語法差錯外,當確認程序沒問題時,通過直接下載到單片機來調試。采取的是自下到上的調試方法,即單獨調試好每一個模塊,然后再連接成一個完整的系統,最后完成一個完整的系統調試。
5.4 系統總體調試
系統做好后,進行系統的完整調試。主要任務是檢驗實現的功能及其效果并校正誤差。
測試一開始,我們就發現了系統出現了兩個問題:一是有一部分交通燈亮度不夠,所發出來的光非常的微弱以致于幾乎感覺不到它的亮度;二是數碼管不工作,沒有時間顯示。這與設計的要求完全不符。為了找出這個問題和解決方法,查找了電路的輸出各部分的輸出電平。發現了一個現象,我們采用的數碼管是共陰極數碼管。而控制數碼段顯示的P3.0和P3.1口輸出的是高電平。
經多方查閱資料,解決第二個問題可以有兩個解決方法。其一,將硬件電路作修改,將數碼管換成共陽極的數碼管。這樣數碼管就可以正常進行時間顯示了。其二,修改程序,讓控制數碼管段碼的P0輸出的是低電平。若采用修改硬件電路的方法的話,硬件電路就得作變動。已經布好的線也必須有相應的變動,操作起來比較麻煩。所以,我們采用了第二種方法。修改了程序電路中的段碼代碼。再次調試,按照設計要求的指標,系統數碼管電路部分基本能按照預先設定的要求來進行倒計時的顯示。亮度要求也基本符合預先設想。
接下來還有一個問題有待解決,交通燈亮度不足,以致于部分交通燈只能勉強看得出來它在亮而已。這明顯不能滿足設計要求。經多方檢測,我們認為這是由于LED燈驅動能力不足引起的亮度弱問題。若要修正這個問題,那就得為LED燈增加驅動電路以提高電路的驅動能力。要實現這一步驟必須對硬件電路進行一定的改動。LED燈的驅動電路可以用集成電路電路芯片來進行驅動。在初步方案中考慮要用集成電路來完成。但是由于客觀方面的原因,沒有制作實物的環境條件。因此,這部分改進只作了一個設想,并沒有時間去付諸實施。但基本問題和解決問題的原理還是有一定的了解。

51hei.png

附錄B:總體電路原理圖、PCB、仿真圖及實物圖



單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>           //包含庫文件
  3. sbit smg1=P3^0;                   //定義南北方向數碼管低位
  4. sbit smg2=P3^1;                   //定義南北方向數碼管高位
  5. sbit N_green=P2^0;           //定義北向綠燈端口
  6. sbit N_red=P2^1;           //定義北向紅燈端口
  7. sbit N_yellow=P2^2;           //定義北向黃燈端口           

  8. sbit S_green=P2^7;           //定義南向綠燈端口
  9. sbit S_red=P2^6;           //定義南向紅燈端口
  10. sbit S_yellow=P2^5;           //定義南向黃燈端口

  11. sbit W_green=P1^0;           //定義西向綠燈端口
  12. sbit W_red=P1^1;           //定義西向紅燈端口
  13. sbit W_yellow=P1^2;           //定義西向黃燈端口   

  14. sbit E_green=P1^7;           //定義東向綠燈端口
  15. sbit E_red=P1^6;           //定義東向紅燈端口
  16. sbit E_yellow=P1^5;           //定義東向黃燈端口


  17. int js=0,djs=30;                       //初始倒計時時間
  18. int table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40};          //共陰極數碼管段值
  19. /************以下為函數聲明*************/
  20. void jtd();
  21. void jtda();
  22. void jtdb();
  23. void djsxs();
  24. void yj();
  25. void jj();
  26. void jtday();
  27. void jtdby();

  28. /*****************************************************/
  29. /*             函數名:delayms                                             */
  30. /*           功能:產生毫秒級延時                                         */
  31. /*****************************************************/
  32. void delayms(int x)
  33. {
  34. char i;
  35. while(x--)
  36. {
  37.   for(i=150;i>0;i--);
  38. }
  39. }
  40. /*****************************************************/
  41. /*             函數名:Timer0_init()                                  */
  42. /*             功能:定時器0初始化                                         */
  43. /*****************************************************/
  44. void Timer0_init()
  45. {
  46.       js=0;
  47.           TMOD=0x01;                  //定義定時器0工作模式        
  48.       TH0=0x4c;                        //賦初值高位
  49.           TL0=0x00;                        //賦初值低位
  50.       TR0=1;                        //啟動定時器
  51.           ET0=1;                        //開中斷
  52.           EA=1;                                //開全局中斷
  53. }
  54. /*****************************************************/
  55. /*        函數名:timer0() interrupt 1 using 1             */
  56. /*             功能:定時器0中斷服務函數                     */
  57. /*****************************************************/
  58. void timer0() interrupt 1 using 1        
  59. {
  60.             TF0=0;
  61.                  TH0=0x4c;
  62.                 TL0=0x00;                  //重新賦高地位初值
  63.                 js++;
  64.                 if(js==22)
  65.                   { js=0;
  66.                     djs--;
  67.                    }
  68. }
  69. /*****************************************************/
  70. /*                 函數名:djsxs11()                     */
  71. /*                功能:數碼管動態顯示                       */
  72. /*****************************************************/
  73. void  djsxs11()                 //此函數注視同djsxs22()
  74. {        int b1,b2;
  75.          b1=djs/10;                 //將倒計時時間的高位賦予b1
  76.         b2=djs%10;                 //將倒計時時間的低位賦予b2
  77.         P0=table[b1];
  78.     smg1=0;
  79.     delayms(3);
  80.     smg1=1;                         //顯示b1

  81.         P0=table[b2];
  82.         smg2=0;
  83.         delayms(3);
  84.         smg2=1;                        //顯示b2
  85. }


  86. /*****************************************************/
  87. /*                 函數名:qm()                             */
  88. /*        功能:使所有的交通信號燈全部熄滅           */
  89. /*****************************************************/
  90. void qm()
  91. {
  92. N_green=1;
  93. N_red=1;
  94. N_yellow=1;                  

  95. S_green=1;
  96. S_red=1;
  97. S_yellow=1;

  98. W_green=1;
  99. W_red=1;
  100. W_yellow=1;                  

  101. E_green=1;
  102. E_red=1;
  103. E_yellow=1;
  104. }
  105. /*****************************************************/
  106. /*                 函數名:jtdb()                         */
  107. /*       功能:交通燈東西方向綠燈亮,紅燈滅          */
  108. /*             交通燈南北方向紅燈亮,綠燈滅          */
  109. /*****************************************************/
  110. void jtdb()
  111. {
  112. qm();                                                                         //所有信號燈滅
  113. W_green=0;                                                                 //西向綠燈亮
  114. E_green=0;                                                                 //東向綠燈亮
  115. N_red=0;                                                                 //北向紅燈亮
  116. S_red=0;                                                                         //南向紅燈亮
  117. while(1)
  118. {
  119.         if(djs>5)                                                         //當倒計時時間大于5秒時,執行
  120.                 {
  121.              djsxs11();                                                          //數碼管時間顯示
  122.         }
  123.     if(djs<=5)                                                       //當倒計時時間小于5秒時,執行
  124.                 {
  125.                   jtdby();                                                          //調用函數
  126.                 }
  127. }
  128. }
  129. /*****************************************************/
  130. /*                 函數名:jtdby()                         */
  131. /*       功能:交通燈東西方向黃燈亮,紅燈滅          */
  132. /*             交通燈南北方向紅燈亮,綠燈滅          */
  133. /*****************************************************/
  134. void jtdby()
  135. {
  136. qm();                                                                          //所有信號燈全滅
  137. W_green=1;                                                                  //西向綠燈滅
  138. E_green=1;                                                                  //東向綠燈滅
  139. W_yellow=0;                                                                  //西向黃燈亮
  140. E_yellow=0;                                                                  //東向黃燈亮
  141. N_red=0;                                                                  //北向紅燈滅
  142. S_red=0;                                                                  //南向紅燈滅
  143. while(1)
  144. {
  145. djsxs11();                                                                  //數碼管時間顯示
  146. if(djs<0)                                                                   //當倒計時時間小于0秒時,執行
  147.   {
  148.     djs=30;
  149.         jtda();                                                                  //調用jtda()函數
  150.   }
  151. }
  152. }

  153. /*****************************************************/
  154. /*                 函數名:jtda()                         */
  155. /*       功能:交通燈南北方向綠燈亮,紅燈滅          */
  156. /*             交通燈東西方向紅燈亮,綠燈滅          */
  157. /*****************************************************/
  158. void jtda()
  159. {
  160. qm();                                                                          //所有信號燈滅
  161. N_green=0;                                                                  //北向綠燈亮
  162. S_green=0;                                                                  //南向綠燈亮
  163. W_red=0;                                                                  //西向紅燈亮
  164. E_red=0;                                                                  //東向紅燈亮
  165. while(1)
  166. {
  167. if(djs>5)                                                                  //當倒計時時間大于5秒時,執行
  168. {
  169.                 djsxs11();                                                  //數碼管時間顯示
  170. }
  171. if(djs<=5)                                                   //當倒計時時間小于5秒時,執行
  172. {
  173.         jtday();                                  //調用函數
  174. }
  175. }
  176. }

  177. /*****************************************************/
  178. /*                 函數名:jtday()                         */
  179. /*       功能:交通燈南北方向黃燈亮,紅燈滅          */
  180. /*             交通燈東西方向紅燈亮,綠燈滅          */
  181. /*****************************************************/
  182. void jtday()
  183. {
  184. qm();                                                                          //所有信號燈全滅
  185. N_green=1;                                                                  //北向綠燈滅
  186. ……………………

  187. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
仿真程序文檔下載:
基于51單片機的交通燈一個數碼管.zip (2.41 MB, 下載次數: 60)

評分

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

查看全部評分

回復

使用道具 舉報

ID:262 發表于 2022-4-27 21:49 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99久久夜色精品国产亚洲96 | 亚洲一区中文字幕在线观看 | 一区二区三区视频在线 | 国产精品一区二区在线播放 | 国产高清一区二区 | 日韩视频―中文字幕 | 欧美视频在线播放 | 中文字幕一区二区三区不卡 | 亚洲精品aⅴ | 视频一区在线观看 | 国产精品久久久久久一区二区三区 | 国产一区二区三区四区在线观看 | 少妇无套高潮一二三区 | 国产精品视频网 | 中文字幕在线剧情 | 夜夜骑综合 | 日本午夜免费福利视频 | 天天干天天爽 | 亚洲v日韩v综合v精品v | 亚洲一级黄色 | 日韩欧美在线免费观看视频 | 婷婷久久五月天 | 国产成人精品一区二区三区 | 中文字幕日韩欧美一区二区三区 | 亚洲欧洲在线观看视频 | 国产精品日产欧美久久久久 | 国产激情视频 | 久热免费在线 | 国产日韩欧美一区二区 | 国产成人小视频 | 国产精品久久久久久久久久三级 | 日韩一级免费电影 | 日韩在线播放视频 | 亚洲 精品 综合 精品 自拍 | 久久大陆 | 中文字幕视频在线 | 久久精品—区二区三区 | 人人射人人 | 狠狠操在线 | 国产乱码精品1区2区3区 | 日韩最新网址 |