找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机的流水灯 仿真模型和汇编源码

[复制链接]
跳转到指定楼层
楼主
基于51单片机的流水灯模型。具体的代码和仿真模型在文件里面。


  1.   ;P1口流水灯,间隔1秒,定时器T0方式1实现定时20ms,重复50次,B1E0H

  2. ORG   0000H
  3. LJMP  MAIN

  4. ORG   000BH
  5. LJMP  INTT0

  6. ORG   0100H
  7. MAIN:
  8.        MOV A,#0FEH
  9.        MOV P0,A
  10.        MOV TMOD,#01H
  11.            MOV TH0,#0B1H
  12.            MOV TL0,#0E0H
  13.            MOV R2,#00H
  14.            SETB EA
  15.            SETB ET0
  16.            SETB TR0
  17.            SJMP $
  18. INTT0:
  19.        MOV TH0,#0B1H
  20.            MOV TL0,#0E0H
  21.            INC R2
  22.            CJNE R2,#32H,NEXT
  23.            RL A
  24.            MOV P0,A
  25.            MOV R2,#00H
  26. NEXT:
  27.        RETI
  28.            END
复制代码


下载:
示例-流水灯.rar (66.23 KB, 下载次数: 14)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2017-3-16 20:04 | 只看该作者
  1. ORG 0000H
  2. AJMP MAIN
  3. ORG 000BH
  4. LJMP INTT0

  5. ORG 0030H
  6. MAIN:
  7. MOV SP,#60H ;确立堆栈区
  8. MOV PSW,#00H
  9. MOV R0,#20H   ;RAM区首地址
  10. MOV R7,#5FH ;RAM区单元个数

  11. QL:
  12. MOV @R0,#00H ;RAM清零      
  13. INC R0
  14. DJNZ R7,QL

  15. MOV IP,#02H ;IP初始化,优先定时器0
  16. MOV IE,#82H ;IE初始化
  17. MOV TMOD,#01H ;定时器0方式1工作
  18. LCALL PP ;调P.子程序

  19. NEXT:
  20. LCALL KEY ;按键检测子程序
  21. JB ACC.0,RUNF ;A键按下运行
  22. LCALL DISP ;调用显示子程序
  23. SJMP NEXT

  24. RUNF:
  25. LCALL OUTT ;调传送子程序
  26. LCALL TIME ;开电子钟
  27. JK:
  28. LCALL DISP
  29. LCALL KEY
  30. JZ JK
  31. LCALL ANKEY        ;调用键功能子程序
  32. LCALL DISP
  33. SJMP JK

  34. ;P点显示子程序
  35. PP:
  36. MOV 37H,#12 ;P点编码送寄存器
  37. MOV R0,#30H ;P点编码送寄存器
  38. MOV R7,#07H
  39. PPP:
  40. MOV @R0,#10  ;???
  41. INC R0
  42. DJNZ R7,PPP
  43. RET

  44. ;键扫描子程序
  45. KEY:
  46. LCALL KEYS ;调用键值处理子程序
  47. JZ EXIT ;没有键按下转到返回
  48. LCALL DISP
  49. LCALL DISP ;调用显示去抖动
  50. LCALL KEYS
  51. JZ EXIT
  52. MOV B,20H ;保存键值
  53. KEYSF:
  54. LCALL KEYS
  55. JZ KEYY ;键释放,转到恢复键值
  56. LCALL DISP ;调显示子程序延时
  57. AJMP KEYSF ;等到键释放

  58. KEYY:
  59. MOV A,B ;键值送20H单元保存??
  60. EXIT:RET

  61. KEYS:
  62. MOV P1,#0FFH ;先向P1口写1
  63. MOV A,P1 ;P1口值送A
  64. CPL A
  65. ANL A,#0FH ;保存P1口的低4位
  66. MOV 20H,A ;A值送20H保存
  67. RET

  68. ;键功能子程序
  69. ANKEY:
  70. CLR EA ;关中断
  71. CHECK:
  72. JB TR0,YXZ ;判断是否运行
  73. K0:
  74. CJNE A,#01H,K1
  75. AJMP RUN ;转运行
  76. K1:
  77. CJNE A,#02H,K2
  78. AJMP KEY1 ;转时调整
  79. K2:
  80. CJNE A,#04H,K3
  81. AJMP KEY2 ;转分调整
  82. K3:
  83. CJNE A,#08H,OUT          ;转
  84. AJMP KEY3 ;转秒调整

  85. YXZ:
  86. JB ACC.0,STOP
  87. AJMP OUT

  88. KEY1:
  89. MOV R0,#45H ;时调整
  90. LCALL ADD1 ;调加一子程序
  91. CLR C
  92. CJNE A,#24H,OUTT ;转传送显示数据子程序
  93. ACALL CLR0 ;调时间清理子程序
  94. AJMP OUTT
  95. KEY2:
  96. MOV R0,#43H ;分调整
  97. LCALL ADD1
  98. CLR C
  99. CJNE A,#60H,OUTT
  100. ACALL CLR0
  101. AJMP OUTT
  102. KEY3:
  103. MOV R0,#41H ;秒调整
  104. ACALL ADD1
  105. CLR C
  106. CJNE A,#60H,OUTT
  107. ACALL CLR0

  108. ;传送显示数据子程序
  109. OUTT:
  110. MOV 30H,40H ;秒显示单元40H-41H
  111. MOV 31H,41H
  112. MOV 32H,#11 ;"-"
  113. MOV 33H,42H ;分显示单元42H-43H
  114. MOV 34H,43H
  115. MOV 35H,#11 ;"-"
  116. MOV 36H,44H ;时显示单元44H-45H               
  117. MOV 37H,45H
  118. RET
  119. STOP:
  120. CLR TR0
  121. RET
  122. RUN:
  123. LCALL TIME ;调运行电子钟子程序
  124. OUT:
  125. SETB EA ;无键按下或完成功能跳出
  126. RET

  127. ;运行电子钟子程序                                                                       
  128. TIME:
  129. SETB EA
  130. MOV TL0,#0B0H  ;3CB0H
  131. MOV TH0,#3CH
  132. MOV R4,#20  ;50ms,20次循环
  133. SETB TR0 ;启动定时器0
  134. RET

  135. ;定时器0中断处理子程序
  136. INTT0:
  137. PUSH ACC
  138. PUSH PSW
  139. CLR ET0
  140. CLR TR0                                                                        
  141. MOV TL0,#0B0H  ;重新设置定时初值
  142. MOV TH0,#3CH
  143. SETB TR0
  144. DJNZ R4,OUTT0  ;1秒到
  145. ADDSS:
  146. MOV R4,#14H  ;20次计数
  147. MOV R0,#41H  ;秒十位
  148. ACALL ADD1
  149. CLR C
  150. CJNE A,#60H,ADDMM ;1分到
  151. ADDMM:
  152. JC OUTT0
  153. ACALL CLR0
  154. MOV R0,#43H
  155. ACALL ADD1
  156. CLR C
  157. CJNE A,#60H,ADDHH ;1小时到
  158. ADDHH:
  159. JC OUTT0
  160. ACALL CLR0
  161. MOV R0,#45H
  162. ACALL ADD1
  163. CLR C
  164. CJNE A,#24H,HOUR ;1天到
  165. HOUR:
  166. JC OUTT0
  167. ACALL CLR0

  168. OUTT0:
  169. MOV 30H,40H ;秒显示单元40H-41H
  170. MOV 31H,41H
  171. MOV 32H,#11 ;"-"
  172. MOV 33H,42H ;分显示单元42H-43H
  173. MOV 34H,43H
  174. MOV 35H,#11 ;"-"
  175. MOV 36H,44H ;时显示单元44H-45H               
  176. MOV 37H,45H
  177. POP PSW
  178. POP ACC
  179. SETB ET0
  180. RETI

  181. ;时间清理子程序
  182. CLR0:
  183. CLR A
  184. MOV @R0,A
  185. DEC R0
  186. MOV @R0,A
  187. RET

  188. ;加一子程序
  189. ADD1:
  190. MOV A ,@R0  ;取十位
  191. DEC R0
  192. SWAP A
  193. ORL A,@R0  ;组合十位与个位         
  194. ADD A,#01H  ;加1
  195. DA A ;十进制调整
  196. MOV R3,A  ;暂存
  197. ANL A,#0FH  ;屏蔽十位
  198. MOV @R0,A  ;放入个位单元
  199. MOV A,R3  ;取值
  200. INC R0
  201. SWAP A
  202. ANL A,#0FH  ;屏蔽个位
  203. MOV @R0,A  ;放入十位单元
  204. MOV A,R3  ;数值放入A中等待判断
  205. RET

  206. ;显示子程序
  207. DISP:
  208. MOV R1,#30H  ;显示缓冲存储单元首地址
  209. MOV R2,#80H  ;从右至左显示
  210. DISP1:
  211. MOV P2,R2  ;送位控
  212. MOV A,@R1
  213. MOV DPTR,#TAB
  214. MOVC A,@A+DPTR
  215. MOV P0,A  ;送段控
  216. ACALL DL  ;延时
  217. MOV A,R2  ;???
  218. JB ACC.0,DISP2          ;从右至左8位LED显示一遍
  219. RR A
  220. INC R1
  221. MOV R2,A
  222. AJMP DISP1
  223. DISP2:RET
  224. TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH,0CH

  225. ;显示延时子程序
  226. DL:
  227. MOV R6,#14H  
  228. DL1:
  229. MOV R7,#19H
  230. DL2:
  231. DJNZ R7,DL2
  232. DJNZ R6,DL1
  233. RET
  234. END

复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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