找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3638|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机汇编语言交通灯的仿真制作

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
  1. ORG 0000H
  2. A_BIT EQU 20H ;用于存放南北十位数
  3. B_BIT EQU 21H ;用于存放南北十位数
  4. C_BIT EQU 22H ;用于存放东西十位数
  5. D_BIT EQU 23H ; 用于存放东西位数


  6. TEMP1 EQU 24H  ;用于存放第一二南北状态要显示的时间
  7. TEMP2 EQU 25H  ;用于存放第一二东西状态要显示的时间

  8. TEMP3 EQU 26H ;用于存放第三第四南北状态要显示的时间
  9. TEMP4 EQU 27H;用于存放第三第四南北状态要显示的时间
  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    ;清除先前状态
  20. MOV P2,#0FFH
  21. CLR P1.0
  22. CLR P1.4      ;南北通行,东西禁止通行
  23. CLR P1.6
  24. CLR P2.3
  25. JNB P3.2 ,$  ;判断是否还在中断状态
  26. POP ACC
  27. MOV P2,A     ;返回中断前状态
  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  ;清除先前状态
  36. MOV P2,#0FFH
  37. CLR P1.2
  38. CLR P2.1
  39. CLR P1.3    ;东西通行,南北禁止通行
  40. CLR P1.5
  41. JNB P3.3 ,$  ;判断是否还在中断状态
  42. POP ACC
  43. MOV P2,A    ;返回中断前状态
  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  ;计数方式方式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的计数器初始值
  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的计数器初始值
  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    ;开始计数
  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保持现在状态
  93. LJMP STAR2     ;若显示时间为 0跳到第二状态
  94. NEXT: LJMP STLOP


  95. STAR2:     ;状态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保持现在状态
  108. JB TF1 ,T40      ;判断南北是否多车
  109. JB TF0 ,T40       ;判断北南是否多车
  110. MOV TEMP1,#20    ;少车下次显示时间为20秒
  111. LJMP STAR3       ;跳到状态3
  112. T40:
  113. MOV TEMP1,#40    ; 多车下次显示时间为40秒
  114. LJMP STAR3        ;若显示时间为 0跳到第三状态
  115. NEXT2:LJMP STLOP2


  116. TEMP40:;TEM=40 程序
  117. SETB TR0  ; 开始计数
  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保持现在状态
  131. LJMP STAR22     ;若显示时间为 0跳到第二状态
  132. NEXT11: LJMP STLOP11


  133. STAR22:     ;状态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保持现在状态
  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跳到第三状态
  152. NEXT22:LJMP STLOP22


  153. STAR3:
  154. MOV A,26H
  155. CJNE A,#25,T40T1  ;判断时间,选初始值
  156. T20T1:       ;南北通行要显示的时间为20的计数器初始值
  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的计数器初始值
  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:;状态三
  173. SETB TR1      ;南北停止计数
  174. SETB TR0     ;东西开始计数
  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保持现在状态
  191. LJMP STAR34       ;若显示时间为 0跳到第四状态
  192. NEXT33:LJMP STLOP33


  193. STAR34:           ;状态四
  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保持现在状态
  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      ;南北停止计数
  216. SETB TR0     ;东西开始计数
  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保持现在状态
  233. LJMP STAR44       ;若显示时间为 0跳到第四状态
  234. NEXT43:LJMP STLOP43


  235. STAR44:           ;状态四
  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保持现在状态
  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  ;将南北要显示的数存放到A


  259. ……………………

  260. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
交通灯.rar (50.94 KB, 下载次数: 57)


评分

参与人数 2黑币 +60 收起 理由
本来a + 10 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:146782 发表于 2021-6-18 17:16 | 只看该作者
这个值得拥有,谢谢
回复

使用道具 举报

板凳
ID:939347 发表于 2021-6-21 10:35 | 只看该作者
这个就够用了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表