找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機匯編語言交通燈的仿真制作

[復制鏈接]
跳轉到指定樓層
樓主
ID:908250 發(fā)表于 2021-4-19 11:39 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式


單片機源程序如下:
  1. ORG 0000H
  2. A_BIT EQU 20H ;用于存放南北十位數(shù)
  3. B_BIT EQU 21H ;用于存放南北十位數(shù)
  4. C_BIT EQU 22H ;用于存放東西十位數(shù)
  5. D_BIT EQU 23H ; 用于存放東西位數(shù)


  6. TEMP1 EQU 24H  ;用于存放第一二南北狀態(tài)要顯示的時間
  7. TEMP2 EQU 25H  ;用于存放第一二東西狀態(tài)要顯示的時間

  8. TEMP3 EQU 26H ;用于存放第三第四南北狀態(tài)要顯示的時間
  9. TEMP4 EQU 27H;用于存放第三第四南北狀態(tài)要顯示的時間
  10. LJMP MAIN

  11. ORG 0003H     ;外部中斷0入口
  12. LJMP INTA     ;跳轉到外部0中斷
  13. ORG 0013H     ;外部中斷1入口
  14. LJMP INTB     ;跳轉到外部1中斷

  15. INTA: MOV A,P1   ;外部0中斷
  16.       PUSH ACC
  17.       MOV A,P2  ;中斷保護
  18.       PUSH ACC
  19. MOV P1,#0FFH    ;清除先前狀態(tài)
  20. MOV P2,#0FFH
  21. CLR P1.0
  22. CLR P1.4      ;南北通行,東西禁止通行
  23. CLR P1.6
  24. CLR P2.3
  25. JNB P3.2 ,$  ;判斷是否還在中斷狀態(tài)
  26. POP ACC
  27. MOV P2,A     ;返回中斷前狀態(tài)
  28. POP ACC
  29. MOV P1,ACC
  30. RETI          ;中斷返回



  31. INTB:MOV A,P1  ;外部1中斷
  32.      PUSH ACC   ;中斷保護
  33.      MOV A,P2
  34.      PUSH ACC
  35. MOV P1,#0FFH  ;清除先前狀態(tài)
  36. MOV P2,#0FFH
  37. CLR P1.2
  38. CLR P2.1
  39. CLR P1.3    ;東西通行,南北禁止通行
  40. CLR P1.5
  41. JNB P3.3 ,$  ;判斷是否還在中斷狀態(tài)
  42. POP ACC
  43. MOV P2,A    ;返回中斷前狀態(tài)
  44. POP ACC
  45. MOV P1,A
  46. RETI         ;中斷返回



  47. MAIN:
  48. ORG 0100H        ;初始情況
  49. MOV P1,#0FFH
  50. MOV P2,#0FFH   ;滅所有燈
  51. MOV TMOD,#55H  ;計數(shù)方式方式1
  52. MOV IE,#85H    ;開中斷
  53. MOV TEMP1,#20 ;
  54. MOV TEMP2,#25
  55. MOV TEMP3,#25
  56. MOV TEMP4,#20

  57. STAR:
  58. MOV P1,#0FFH
  59. MOV P2,#0FFH   ;滅所有燈
  60. MOV A,24H    ;將顯示時間送A
  61. CJNE A,#20,T40T  ;判斷時間,選初始值
  62. T20T:       ;南北通行要顯示的時間為20的計數(shù)器初始值
  63. CLR TF0   ;清TF0
  64. CLR TF1 ;清TF1
  65. MOV TH1 ,#0FFH ;送20秒時的初始值
  66. MOV TL1 ,#0FCH ;在些設計20秒6輛為多車
  67. MOV TH0 ,#0FFH
  68. MOV TL0 ,#0FCH
  69. LJMP TEMP20   ;跳到20秒
  70. T40T:     ;南北通行要顯示的時間為40的計數(shù)器初始值
  71. CLR TF0 ;清TF0
  72. CLR TF1 ;清TF1
  73. MOV TH1,#0FFH ;送40秒時的初始值
  74. MOV TL1 ,#0F8H ;在些設計40秒8輛為多車
  75. MOV TH0 ,#0FFH
  76. MOV TL0 ,#0F8H
  77. LJMP TEMP40  ;跳到40秒



  78. TEMP20:     ;TEMP1=20情況
  79. SETB TR0    ;開始計數(shù)
  80. SETB TR1
  81. CLR P1.2
  82. CLR P2.1    ;南北通行,東西禁止通行
  83. CLR P1.3
  84. CLR P1.5
  85. MOV TEMP1,#20  ;南北要顯示的時間,
  86. MOV TEMP2,#25 ;東西要顯示的時間
  87. STLOP:
  88. ACALL DISPLAY1   ;調用顯示
  89. DEC TEMP1      ;時間夠一秒顯示時間減1
  90. DEC TEMP2
  91. MOV A,TEMP1
  92. CJNE A,#0,NEXT ;若顯示時間不為0保持現(xiàn)在狀態(tài)
  93. LJMP STAR2     ;若顯示時間為 0跳到第二狀態(tài)
  94. NEXT: LJMP STLOP


  95. STAR2:     ;狀態(tài)1
  96. SETB P1.2
  97. CLR P1.1    ;南北黃燈,東西禁止通行
  98. SETB P1.3
  99. CLR P1.4
  100. MOV TEMP1,#05  ;南北要顯示的時間,
  101. MOV TEMP2,#05 ;東西要顯示的時間,

  102. STLOP2:
  103. ACALL DISPLAY1   ;調用顯示
  104. DEC TEMP1      ;時間夠一秒顯示時間減1
  105. DEC TEMP2
  106. MOV A,TEMP1
  107. CJNE A,#0,NEXT2   ;若顯示時間不為0保持現(xiàn)在狀態(tài)
  108. JB TF1 ,T40      ;判斷南北是否多車
  109. JB TF0 ,T40       ;判斷北南是否多車
  110. MOV TEMP1,#20    ;少車下次顯示時間為20秒
  111. LJMP STAR3       ;跳到狀態(tài)3
  112. T40:
  113. MOV TEMP1,#40    ; 多車下次顯示時間為40秒
  114. LJMP STAR3        ;若顯示時間為 0跳到第三狀態(tài)
  115. NEXT2:LJMP STLOP2


  116. TEMP40:;TEM=40 程序
  117. SETB TR0  ; 開始計數(shù)
  118. SETB TR1
  119. CLR P1.2
  120. CLR P2.1    ;南北通行,東西禁止通行
  121. CLR P1.3
  122. CLR P1.5
  123. MOV TEMP1,#40  ;南北要顯示的時間,
  124. MOV TEMP2,#45 ;東西要顯示的時間
  125. STLOP11:
  126. ACALL DISPLAY1   ;調用顯示
  127. DEC TEMP1      ;時間夠一秒顯示時間減1
  128. DEC TEMP2
  129. MOV A,TEMP1
  130. CJNE A,#0,NEXT11 ;若顯示時間不為0保持現(xiàn)在狀態(tài)
  131. LJMP STAR22     ;若顯示時間為 0跳到第二狀態(tài)
  132. NEXT11: LJMP STLOP11


  133. STAR22:     ;狀態(tài)1
  134. SETB P1.2
  135. CLR P1.1    ;南北黃燈,東西禁止通行
  136. SETB P1.3
  137. CLR P1.4
  138. MOV TEMP1,#05  ;南北要顯示的時間,
  139. MOV TEMP2,#05 ;東西要顯示的時間,

  140. STLOP22:
  141. ACALL DISPLAY1   ;調用顯示
  142. DEC TEMP1      ;時間夠一秒顯示時間減1
  143. DEC TEMP2
  144. MOV A,TEMP1
  145. CJNE A,#0,NEXT22   ;若顯示時間不為0保持現(xiàn)在狀態(tài)
  146. JB TF1 ,T401      ; 判斷是否多車
  147. JB TF0 ,T401
  148. MOV TEMP1,#20  ;少車下次顯示時間為20秒
  149. LJMP STAR3
  150. T401:MOV TEMP1,#40 ;多車下次顯示時間為40秒
  151. LJMP STAR3        ;若顯示時間為 0跳到第三狀態(tài)
  152. NEXT22:LJMP STLOP22


  153. STAR3:
  154. MOV A,26H
  155. CJNE A,#25,T40T1  ;判斷時間,選初始值
  156. T20T1:       ;南北通行要顯示的時間為20的計數(shù)器初始值
  157. CLR TF0        ; 清溢出位
  158. CLR TF1
  159. MOV TH1 ,#0FFH  ; 給初值
  160. MOV TL1 ,#0FCH
  161. MOV TH0 ,#0FFH
  162. MOV TL0 ,#0FCH
  163. LJMP TEMP320
  164. T40T1:     ;南北通行要顯示的時間為40的計數(shù)器初始值
  165. CLR TF0  ;
  166. CLR TF1
  167. MOV TH1,#0FFH ;給初值
  168. MOV TL1 ,#0F8H
  169. MOV TH0 ,#0FFH
  170. MOV TL0 ,#0F8H
  171. LJMP TEMP340

  172. TEMP320:;狀態(tài)三
  173. SETB TR1      ;南北停止計數(shù)
  174. SETB TR0     ;東西開始計數(shù)
  175. SETB P1.1    ;東西通行,南北禁止通行
  176. CLR P1.0
  177. SETB P1.1
  178. CLR P1.0
  179. SETB P1.5
  180. CLR P1.6
  181. SETB P2.1
  182. CLR P2.3
  183. MOV TEMP3,#25  ;南北要顯示的時間,
  184. MOV TEMP4,#20 ;東西要顯示的時間,

  185. STLOP33:
  186. ACALL DISPLAY  ;調用顯示
  187. DEC TEMP3       ;時間夠一秒顯示時間減1
  188. DEC TEMP4
  189. MOV A,TEMP4
  190. CJNE A,#0,NEXT33  ;若顯示時間不為0保持現(xiàn)在狀態(tài)
  191. LJMP STAR34       ;若顯示時間為 0跳到第四狀態(tài)
  192. NEXT33:LJMP STLOP33


  193. STAR34:           ;狀態(tài)四
  194. SETB P2.3
  195. CLR P2.2
  196. SETB P1.6      ;東西黃燈,南北禁止通行
  197. CLR P1.5




  198. MOV TEMP3,#05   ;南北要顯示的時間,
  199. MOV TEMP4,#05   ;東西要顯示的時間,
  200. STLOP34:
  201. ACALL DISPLAY  ;調用顯示
  202. DEC TEMP3       ;時間夠一秒顯示時間減1
  203. DEC TEMP4
  204. MOV A,TEMP4
  205. CJNE A,#0,NEXT34  ;若顯示時間不為0保持現(xiàn)在狀態(tài)
  206. JB TF1 ,T402
  207. JB TF0 ,T402
  208. MOV TEMP3,#25
  209. LJMP STAR
  210. T402:
  211. MOV TEMP3,#45
  212. LJMP STAR
  213. NEXT34:   LJMP STLOP34


  214. TEMP340 :
  215. SETB TR1      ;南北停止計數(shù)
  216. SETB TR0     ;東西開始計數(shù)
  217. SETB P1.1    ;東西通行,南北禁止通行
  218. CLR P1.0
  219. SETB P1.1
  220. CLR P1.0
  221. SETB P1.5
  222. CLR P1.6
  223. SETB P2.1
  224. CLR P2.3
  225. MOV TEMP3,#45  ;南北要顯示的時間,
  226. MOV TEMP4,#40 ;東西要顯示的時間,

  227. STLOP43:
  228. ACALL DISPLAY  ;調用顯示
  229. DEC TEMP3       ;時間夠一秒顯示時間減1
  230. DEC TEMP4
  231. MOV A,TEMP4
  232. CJNE A,#0,NEXT43  ;若顯示時間不為0保持現(xiàn)在狀態(tài)
  233. LJMP STAR44       ;若顯示時間為 0跳到第四狀態(tài)
  234. NEXT43:LJMP STLOP43


  235. STAR44:           ;狀態(tài)四
  236. SETB P2.3
  237. CLR P2.2
  238. SETB P1.6      ;東西黃燈,南北禁止通行
  239. CLR P1.5




  240. MOV TEMP3,#05   ;南北要顯示的時間,
  241. MOV TEMP4,#05   ;東西要顯示的時間,
  242. STLOP44:
  243. ACALL DISPLAY  ;調用顯示
  244. DEC TEMP3       ;時間夠一秒顯示時間減1
  245. DEC TEMP4
  246. MOV A,TEMP3
  247. CJNE A,#0,NEXT44  ;若顯示時間不為0保持現(xiàn)在狀態(tài)
  248. JB TF1 ,T403
  249. JB TF0 ,T403
  250. MOV TEMP3,#25
  251. LJMP STAR
  252. T403:
  253. MOV TEMP3,#45
  254. LJMP STAR
  255. NEXT44:   LJMP STLOP44


  256. ;顯示
  257. DISPLAY1:
  258. MOV A,TEMP1  ;將南北要顯示的數(shù)存放到A


  259. ……………………

  260. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
交通燈.rar (50.94 KB, 下載次數(shù): 57)


評分

參與人數(shù) 2黑幣 +60 收起 理由
本來a + 10 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:146782 發(fā)表于 2021-6-18 17:16 | 只看該作者
這個值得擁有,謝謝
回復

使用道具 舉報

板凳
ID:939347 發(fā)表于 2021-6-21 10:35 | 只看該作者
這個就夠用了
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

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