国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

51單片機匯編語言十字路口交通燈控制器Proteus仿真注釋詳細

[復制鏈接]
樓主
eng 發表于 2021-7-20 16:58:28 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51單片機匯編語言十字路口交通燈控制器Proteus仿真注釋詳細 3.gif
1. 設計一個智能十字路口交通燈控制器。
2.用單片機控制控制LED紅、黃、綠指示燈,模擬指示十字路口通行狀態。
3.控制東西、南北方向的十字路口交通信號燈。
4.東西向通行時間為80s,南北向通行時間為60s,緩沖時間為3s。
5.東西方向紅燈時間=南北方向綠燈時間+黃燈緩沖時間,反之亦然。
6.鼓勵新創意,增加新功能。
第二章 系統設計方案2.1設計思路
1.采用AT89S52單片機作為主控芯片及外圍控制芯片,設計十字路口交通燈控制器的硬件電路。
2.采用AT89S52單片機匯編語言,完成十字路口交通燈控制器的軟件編程。
3.采用LED顯示和中斷定時電路,利用定時器T0產生每10ms一次的中斷,每100次中斷為1s。對兩個方向分別顯示紅、綠、黃燈,以及相應的剩余時間(倒計時)。
4.用獨立式按鍵實現特殊車輛(消防車、救護車、警車)通行的控制功能。
5.設置闖紅燈報警功能
2.2方案設計
利用AT89S52單片機完成交通信號燈控制器的設計,該交通信號燈控制器由一條主干道和一條支干道匯合成十字路口,在每個入口處設置紅、綠、黃三色信號燈,數碼管顯示剩余時間
。紅燈亮禁止通行,綠燈亮允許通行,黃燈亮則給行駛中的車輛有時間停在禁行線外。用紅、綠、黃發光二極管作信號燈,8個共陰極數碼管顯示剩余時間。
設計文檔目錄:
目錄
第一章 緒論        1
1.1設計目的        1
1.2設計內容        1
第二章 系統設計方案        2
2.1設計思路        2
2.2方案設計        2
第三章 系統硬件電路設計        3
3.1 AT89S52單片機        3
3.1.1晶振電路設計        5
3.1.2復位電路設計        5
3.2顯示部分電路設計        6
3.2.1數碼管選擇        6
3.2.2十字路口交通燈設計        6
3.3系統硬件總電路圖        7
第四章 系統軟件程序設計        8
4.1主程序設計        8
4.1.1總體流程圖        8
4.2其他子程序設計        9
4.2.1循環流程控制思路        9
4.3單片機源程序設計        10
第五章 調試與仿真        15
5.1 Proteus軟件系統仿真        15
5.2仿真結果        15
第六章 總結        19
參考文獻        21


完整文檔見本文尾部附件。
單片機源程序如下:部分源碼,完整見附件
  1. ;***********************************************
  2. ;***********************************************
  3. ;*********內存、IO口分配************************
  4. SHANSHUO        EQU        20H                ;閃爍標志
  5. JISHU1        EQU        30H                ;計數變量
  6. JISHU2        EQU        31H
  7. TIME_0        EQU        32H                ;中斷變量
  8. TIME_1        EQU        33H                ;
  9. SHUCHU        EQU        P0                ;數碼管段輸出
  10. G_1                BIT        P1.0                ;定義LED
  11. Y_1                BIT        P1.1
  12. R_1                BIT        P1.2
  13. G_2                BIT        P1.3
  14. Y_2                BIT        P1.4
  15. R_2                BIT        P1.5
  16. WEI1                BIT        P2.0                ;數碼管片選
  17. WEI2                BIT        P2.1
  18. WEI3                BIT        P2.2
  19. WEI4                BIT        P2.3

  20. K1       BIT   P3.0      ;緊急按鍵

  21. ;********************************************
  22.         ORG        0000H
  23.         SJMP        START
  24.         ORG        000BH                         ;定時器0中斷入口
  25.         LJMP        T0_0
  26.         ORG        0030H
  27. START:
  28.         MOV        P1,#0                         ;LED高電平有效,清零
  29.         MOV        P2,#0                         ;數碼管片選高電平有效,清零
  30.         CLR        SHANSHUO                 ;閃爍標志清零
  31.         CLR        JISHU1                 ;計數變量清零
  32.         CLR        JISHU2                 ;
  33.         CLR        TIME_0                 ;中斷變量清零
  34.         CLR         TIME_1                 ;
  35.         MOV        TMOD,#01H                 ;定時器0方式1
  36.         MOV        TH0,#3CH                 ;裝初值,50MS
  37.         MOV        TL0,#0B0H                 ;
  38.         SETB        EA                         ;開總中斷
  39.         SETB        ET0                         ;開定時器中斷
  40.         SETB        TR0                         ;啟動定時器
  41. ;***************狀態1*************************
  42. ZT1:                                         
  43.         MOV        P1,#0                         ;LED清零
  44.         MOV        JISHU1,#83                 ;計數裝初值
  45.         MOV        JISHU2,#80                 ;
  46.         MOV        R6,JISHU1                 ;
  47.         MOV        R7,JISHU2                 ;
  48.         SETB        G_1                         ;東西綠燈亮
  49.         SETB        R_2                         ;南北紅燈亮
  50. AA:        CALL        DISPLAY                 ;顯示
  51.         MOV        A,R7                         ;
  52.         CJNE        A,#0,AA                 ;判斷時間是否已到
  53. ;*************狀態2***************************
  54. ZT2:      
  55.         MOV        P1,#0                           ;LED清零
  56.         MOV        JISHU1,#3                 ;計數器重裝初值
  57.         MOV        JISHU2,#3                 ;
  58.         MOV        R6,JISHU1                 ;
  59.         MOV        R7,JISHU2                 ;
  60.         SETB        Y_1                         ;東西黃燈點亮
  61.         SETB        R_2                         ;南北紅燈繼續亮
  62. BB:        JNB        SHANSHUO,CC                 ;判斷閃爍標志位
  63.         SETB        Y_1                         ;是一則點亮黃燈
  64.         AJMP        QW                         ;跳到顯示
  65. CC:        CLR        Y_1                         ;是零則熄滅黃燈,達到閃爍的效果
  66. QW:        CALL        DISPLAY                 ;顯示
  67.         MOV        A,R6                         ;
  68.         CJNE        A,#0,BB                 ;判斷是否到了三秒
  69.         CLR        SHANSHUO                 ;清閃爍
  70. ;*************狀態3***************************
  71. ZT3:
  72.         MOV        P1,#0                         ;LED清零
  73.         MOV        JISHU1,#60                 ;計數器重新裝初值
  74.         MOV        JISHU2,#63                 ;
  75.         MOV        R6,JISHU1                 ;
  76.         MOV        R7,JISHU2                 ;
  77.         SETB        R_1                         ;東西紅燈點亮
  78.         SETB        G_2                         ;南北綠燈點亮
  79. EE:        CALL        DISPLAY                 ;顯示
  80.         MOV        A,R6                         ;
  81.         CJNE        A,#0,EE                  ;判斷時間是否到了
  82. ;*************狀態4***************************
  83. ZT4:      
  84.         MOV        P1,#0                         ;LED清零
  85.         MOV        JISHU1,#3                 ;計數器重新裝初值
  86.         MOV        JISHU2,#3                 ;
  87.         MOV        R6,JISHU1                 ;
  88.         MOV        R7,JISHU2                 ;
  89.         SETB        R_1                         ;東西紅燈點亮
  90.         SETB        Y_2                         ;南北黃燈點亮
  91. FF:        JNB        SHANSHUO,QR                 ;判斷閃爍位是1/0
  92.         SETB        Y_2                         ;1則點亮黃燈
  93.         SJMP        QE                         ;顯示
  94. QR:        CLR        Y_2                         ;0則熄滅黃燈
  95. QE:        CALL        DISPLAY                 ;顯示
  96.         MOV        A,R6                         ;
  97.         CJNE        A,#0,FF                 ;判斷時間到沒
  98.         CLR        SHANSHUO                 ;閃爍清零
  99.         LJMP        START                         ;跳 循環
  100. ;**************中斷子程序*********************
  101. T0_0:
  102.         CLR        EA                         ;關總中斷
  103.         MOV        TH0,#3CH                 ;重新裝初值
  104.         MOV        TL0,#0B0H                 ;
  105.         INC        TIME_0                 ;定時器變量加1
  106.         INC        TIME_1                 ;
  107.         MOV        A,TIME_0                 ;
  108.         CJNE        A,#0AH,NEXT                 ;判斷是否到了500MS
  109.         MOV        TIME_0,#0                 ;到則清變量
  110.         CPL        SHANSHUO                 ;給閃爍位取反
  111.         JB  K1,NEXT                  ; 按鍵K1處理,緊急處理
  112.         MOV   A,P1                        ;讀取當前LED顯示
  113.         MOV        P1,#0                         ;LED清零
  114.         MOV   P0,#0                        ;P0口輸出0
  115.         MOV   P2,#0     ;P2口輸出0,不顯示
  116.         SETB  R_1                        ;點亮紅色指示燈
  117.         SETB  R_2                ;點亮紅色指示燈
  118.         JNB  K1,$                ;等待按鍵松開
  119.         MOV  P1,A        ;P1口LED還原
  120. NEXT:        MOV        A,TIME_1                 ;
  121.         CJNE        A,#20,QUIT                 ;判斷是否到了1S,沒到則退出
  122.         MOV        TIME_1,#0                 ;到則清變量
  123.         DEC        R7                         ;寄存器自減一
  124.         DEC        R6                         ;寄存器自減一
  125. QUIT:        SETB        EA                         ;開總中斷
  126.         RETI                                 ;中斷返回
  127. ;**************顯示子程序*********************
  128. DISPLAY:
  129.         PUSH        ACC                         ;進堆棧
  130.         MOV        A,R7                         ;裝載東西方向顯示緩存值到寄存器A
  131.         MOV        B,#0AH                 ;寄存器B裝載10
  132.         DIV        AB                         ;進制轉換
  133.         MOV        DPTR,#TAB                 ;十位
  134.         MOVC        A,@A+DPTR                 ;查表,獲得東西方向10位上的顯示段碼
  135.         MOV        SHUCHU,A                 ;        顯示段碼輸出到顯示端口
  136.         SETB        WEI1                         ; 10位的數碼管位選信號設置為1,點亮數碼管
  137.         CALL        DELAY1MS                 ; 延時1ms
  138.         CLR        WEI1                         ; 10位的數碼管位選信號設置為0,熄滅數碼管
  139.         MOV        A,B                         ;個位
  140.         MOV        DPTR,#TAB                 ;查表,獲得東西方向個位上的顯示段碼
  141.         MOVC        A,@A+DPTR                 ;
  142.         MOV        SHUCHU,A                 ;顯示段碼輸出到顯示端口
  143.         SETB        WEI2                         ;個位的數碼管位選信號設置為1,點亮數碼管
  144.         CALL        DELAY1MS                 ;延時1ms
  145.         CLR        WEI2                         ;個位的數碼管位選信號設置為0,熄滅數碼管

  146.         MOV        A,R6                         ;裝載東西方向顯示緩存值到寄存器A
  147.         MOV        B,#0AH                 ;寄存器B裝載10
  148.         DIV        AB                         ;進制轉換
  149.         MOV        DPTR,#TAB                 ;十位
  150.         MOVC        A,@A+DPTR                 ;查表,獲得南北方向10位上的顯示段碼
  151.         MOV        SHUCHU,A                 ;顯示段碼輸出到顯示端口
  152.         SETB        WEI3                         ;10位的數碼管位選信號設置為1,點亮數碼管
  153.         CALL        DELAY1MS                 ;延時1ms
  154.         CLR        WEI3                         ;10位的數碼管位選信號設置為0,熄滅數碼管
  155.         MOV        A,B                         ;個位
  156.         MOV        DPTR,#TAB                 ;查表,獲得東西方向個位上的顯示段碼
  157.         MOVC        A,@A+DPTR                 ;
  158.         MOV        SHUCHU,A                 ;顯示段碼輸出到顯示端口
  159.         SETB        WEI4                         ;個位的數碼管位選信號設置為1,點亮數碼管
  160.         CALL        DELAY1MS                 ;延時1ms
  161.         CLR        WEI4                         ;個位的數碼管位選信號設置為0,熄滅數碼管
  162.         POP        ACC                         ;退出堆棧
  163.         RET                                 ;返回
  164. ;**************** 延時 ***********************
  165. DELAY1MS:        ;延時1ms子函數
  166.         MOV R1,#01H
  167.       MOV R2,#0FFH
  168. DD:   DJNZ R2,DD
  169.       DJNZ R1,DD
  170.       RET
  171. ;****************共陽數碼管字符表******************************
  172. TAB:        DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H        
  173.         END         
復制代碼
十字路口交通燈.docx (570.03 KB, 售價: 3 E幣)
源碼和Proteus源程序.zip (139.59 KB, 售價: 3 E幣)
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 01:08

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表