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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機匯編語言實現交通燈 代碼有詳細注釋

[復制鏈接]
跳轉到指定樓層
樓主
ID:904688 發(fā)表于 2021-4-12 20:54 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
用51單片機實現一個交通燈的控制
交通燈的變化模式為:初始化狀態(tài)為東西紅燈都亮→延遲 3s 變?yōu)闁|西方向綠燈,南北方向紅燈→過 20S 后,東西方向變黃燈,南北方向依然是紅燈→過 3S,東西方向變紅燈,南北方向變綠燈→過 30S 后,東西方向依然為紅燈,南北方向變黃燈→過 3S 后變?yōu)闁|西綠燈, 南北紅燈,依次循環(huán)。

交通燈模塊電路板如圖
其中, J0 和 J0’是電源插座, POWER 為電源開關, P0 為 P0.0~P0.7 插座,對就數碼管段碼(a~f), P1 為 P1.0~P1.7 插。
P1.0 連接東西紅燈, P1.1 連接南北紅燈, P1.2 連接東西綠燈, P1.3 連接南北綠燈, P1.4連接東西黃燈, P1.5 連接南北黃燈, P1.6 連接東西車 , P1.7 連接南北車; P2.0 為 LED1和 LED3 的位選, P2.1 為 LED2 和 LED4 的位選, P2.2 為 LED5 和 LED7 的位選, P2.3 為LED6 和 LED8 的位選; P3.2 東西緊急按鈕, P3.3 南北緊急按鈕
當按下緊急按鈕,對應的通路會變?yōu)槌>G,同時本方向表示車的LED亮起,用以表示有救護車通過等緊急情況
通過匯編語言基于KEILC51實現
通過實際觀察發(fā)現  由于按鍵是中斷實現,故沒有添加去抖,導致按下緊急按鈕后可能沒有進入中斷狀態(tài),這個可以通過數碼管的顯示來判斷,當數碼管顯示暫停,說明進入緊急中斷;當再次按下時,數碼管繼續(xù)跑數字,則退出了中斷。還有一點做的不太好,沒有做好現場保存,當退出緊急中斷的時候,紅綠燈無法立刻恢復到原狀態(tài),當此狀態(tài)時間跑過,LED會直接顯示下一個狀態(tài)。
初學單片機的新手歡迎各位大佬指正
代碼放入了附件部分 備有詳細的注釋


單片機源程序如下:
  1.         ORG 0000H;程序起始地址
  2.         LJMP START;初始化標號
  3.         ORG 0003H;外部中斷地址--東西緊急按鈕觸發(fā)
  4.         LJMP DXJJ;東西緊急標號
  5.         ORG 0013H;外部中斷地址--南北緊急按鈕觸發(fā)
  6.         LJMP NBJJ;南北緊急標號
  7.         ORG 000BH;定時器T0中斷地址        
  8.         LJMP OT         ;定時器T0標號
  9.         ORG 0100H;程序起始位置
  10. START:        SETB EA         ;中斷允許        
  11.         SETB ET0 ;允許定時器T0中斷
  12.         CLR IT0 ;設置外部中斷為電平觸發(fā)
  13.         CLR IT1 ;同上
  14.         SETB EX0 ;允許外部中斷
  15.         SETB EX1 ;同上
  16.         SETB PX0 ;設置外部中斷優(yōu)先級高于定時器中斷
  17.         SETB PX1 ;
  18.         CLR PT0         ;
  19.         MOV TMOD,#01H;設置定時器模式1
  20.         MOV TH0,#3CH ;
  21.         MOV TL0,#0B0H;設置定時器初值--50ms
  22.         SETB TR0     ;開啟定時器        

  23. MAIN:        MOV R0,#20;設置R0 記錄20個50ms 產生1s
  24.         MOV R1,#56;設置主時間判斷時間軸 表示循環(huán)周期
  25.         MOV R2,#3 ;
  26.         MOV R3,#3 ;東西南北初始紅燈時間為3S
  27.         MOV R4,#0FCH;初始全紅 1111 1100
  28.         MOV 70H,#0;判斷是否按下了緊急按鈕的標志位 0 第一次按(進入緊急狀態(tài)) 1 第二次按(退出緊急狀態(tài))
  29.         MOV R7,#00H ;判斷是要執(zhí)行緊急程序還是正常交通燈顯示  00H正常交通燈 01H 東西緊急 02H南北緊急
  30. XS:        LCALL DISPLAY;調用顯示程序
  31.         LJMP XS     ;循環(huán)進行顯示
  32.         SJMP [        DISCUZ_CODE_3        ]nbsp;     ;死循環(huán) 保護程序執(zhí)行? 可能沒用

  33. OT:        CJNE R7,#00H,PD ;R7不等于0跳轉判斷是哪個緊急,R7=0 說明未中斷正常跑程序
  34. ZCP:        DJNZ R0,OVER2;        ;R0 不為零說明沒有記夠20個50ms即沒有產生1s,跳出中斷等待下一次50ms產生中斷信號
  35.         MOV TH0,#3CH ;
  36.         MOV TL0,#0B0H;記完一次50ms 重新裝載定時器初值
  37.         DEC R1        ;進入此部分說明已經經過了1s 那么總時間-1
  38.         DEC R2        ;顯示時間-1
  39.         DEC R3        ;顯示時間-1
  40. KK1:        CJNE R1,#53,KK2        ;判斷是否經過了3s 到達了第一個狀態(tài)(初始狀態(tài)全紅為第狀態(tài))
  41.         MOV R2,#20        ;
  42.         MOV R3,#23        ;賦值顯示
  43.         MOV R4,#0F9H;DX綠,NB紅 1111 1001
  44.         LJMP OVER2
  45. KK2:        CJNE R1,#33,KK3        ;判斷是否又經過了20s 到達了第二個狀態(tài)
  46.         MOV R2,#3        ;賦值顯示
  47.         MOV R4,#0EDH;DX黃,NB紅 1110 1101
  48.         LJMP OVER2
  49. KK3:        CJNE R1,#30,KK4        ;判斷是否又經過了3s 到達了第三個狀態(tài)
  50.         MOV R2,#33        ;
  51.         MOV R3,#30        ;賦值顯示
  52.         MOV R4,#0F6H;DX紅,NB綠 1111 0110
  53.         LJMP OVER2
  54. KK4:        CJNE R1,#0,OVER1 ;判斷是否又經過了30s 到達了第四個狀態(tài)   此時為了跳出中斷 還不能重新賦值記錄50ms的個數 采用了OVER1和OVER2
  55.         MOV R3,#3        ;賦值顯示
  56.         MOV R4,#0DEH;DX紅,NB黃 1101 1110
  57.         MOV R1,#56        ;重新賦值總時間
  58. OVER1:        MOV R0,#20        ;重新賦值20 以產生1s
  59. OVER2:        RETI                 ;跳出中斷 如果用ERT是跳出子程序調用 兩者有區(qū)別!

  60. PD:        CJNE R7,#01H,NB;判斷是哪種緊急 01H 是DX緊急  02H是NB緊急
  61. DX:        MOV R4,#0B9H;DXJJ將東西車和綠燈打開,將南北燈變紅 1011 1001
  62.         MOV P2,#0FFH;關掉數碼管選通 達到暫停數碼管效果
  63.         RETI
  64. NB:        MOV R4,#76H;NBJJ將南北車和南北綠燈打開,將東西燈變紅 0111 0110
  65.         MOV P2,#0FFH;關掉數碼管選通 達到暫停數碼管效果
  66.         RETI

  67. DXJJ:        JB 70H,OFF1;判斷是否第一次按下緊急按鈕
  68. ON1:        CPL 70H           ;按下一次后就翻轉 下次就能檢測出是第二次
  69.         MOV R7,#01H;第一次按下說明開啟中斷 那么進入緊急狀態(tài) 緊急狀態(tài)標志變?yōu)?01H表示產生東西中斷
  70.         LJMP OUT1
  71. OFF1:        CPL 70H           ;如果要關掉中斷那么也要對標志位取反 下次就能檢測出是要開啟
  72.         MOV R7,#00H;第二次按下說明是關閉中斷 緊急標志變?yōu)?00H進入正常交通燈顯示
  73. OUT1:        RETI

  74. NBJJ:        JB 70H,OFF2;道理同上
  75. ON2:        CPL 70H
  76.         MOV R7,#02H
  77.         LJMP OUT2
  78. OFF2:        CPL 70H
  79.         MOV R7,#00H
  80. OUT2:        RETI

  81. DISPLAY:MOV DPTR,#TAB;東西的數碼管十位顯示
  82.         MOV A,R2;
  83.         MOV B,#10
  84.         DIV AB
  85.         MOVC A,@A+DPTR;
  86.         MOV P2,#11111101B;
  87.         MOV P0,A
  88.         LCALL YS
  89.         MOV DPTR,#TAB;東西的數碼管個位顯示
  90.         MOV A,B;
  91.         MOVC A,@A+DPTR;
  92.         MOV P2,#11111110B
  93.         MOV P0,A;
  94.         LCALL YS
  95.         MOV DPTR,#TAB;南北的數碼管十位顯示
  96.         MOV A,R3;
  97.         MOV B,#10
  98.         DIV AB
  99.         MOVC A,@A+DPTR;
  100.         MOV P2,#11110111B;
  101.         MOV P0,A
  102.         LCALL YS
  103.         MOV DPTR,#TAB;南北的數碼管個位顯示
  104.         MOV A,B;
  105.         MOVC A,@A+DPTR;
  106.         MOV P2,#11111011B
  107.         MOV P0,A;
  108.         LCALL YS
  109.         
  110.         MOV P1,R4;紅綠燈的顯示
  111.         LCALL YS
  112.         RET

  113. YS:        MOV R5,#150 ;延時函數
  114. JY:        DJNZ R5,JY ;減一操作
  115.         RET

  116. TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;數碼管共陰極


  117. END
復制代碼

hex下載:
TraficLight.zip (14.31 KB, 下載次數: 21)

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一二三区 | 在线播放国产一区二区三区 | 国产片淫级awww| 国产精品高潮呻吟久久av野狼 | 国产精品久久久久久久模特 | av网址在线 | 成人视屏在线观看 | 91传媒在线观看 | 国产一区h| 欧美一区二区三区免费在线观看 | 亚洲精品一区二区网址 | 国产亚洲精品精品国产亚洲综合 | av毛片在线免费观看 | 亚洲欧美一区二区三区在线 | www.久久久.com| 人人干人人玩 | 欧美激情一区二区三级高清视频 | 看亚洲a级一级毛片 | av福利网 | 天天爽综合网 | 国产三级国产精品 | 国产在线播放av | 亚洲视频中文字幕 | 色婷婷久久久亚洲一区二区三区 | 久久久久久久久蜜桃 | 国产日韩视频 | 99九九视频 | 韩国av电影网 | 精品日韩在线 | 人人爽人人爽 | 国产成人免费视频 | 亚洲精品乱码久久久久v最新版 | 在线视频 欧美日韩 | 日本在线精品视频 | 天堂一区二区三区 | 国产精品欧美一区二区 | 亚洲综合色丁香婷婷六月图片 | 日韩一区二区三区av | 国产精品女人久久久 | 一级少妇女片 | 免费观看国产视频在线 |