找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8418|回复: 10
收起左侧

基于51单片机的汇编语言时钟课程设计(适合于急于交作业的萌新)

[复制链接]
ID:326239 发表于 2018-5-9 20:11 | 显示全部楼层 |阅读模式
这里上传了基于89c51单片机的时钟的课程设计包括原理图和代码
51单片机时钟仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

原理图

原理图

部分代码截图

部分代码截图


单片机源程序如下:
  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点显示的8LED段码初始化子程序
  35. PP:
  36. MOV 37H,#12 ;P点编码送寄存器,对应最左LED  (共阳极,0CH )
  37. MOV R0,#30H ;第8个LED,最右LED,段码存储的地址
  38. MOV R7,#07H         ;第8到第2个LED,共7个,初始化段码显示空白
  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 ;键值送A
  60. EXIT:RET

  61. KEYS:
  62. MOV P1,#0FFH ;先向P1口写1
  63. MOV A,P1 ;P1口值送A         (有按键按下,对应0,取反后1)
  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 ;A键按下,恢复运行,转运行
  76. K1:
  77. CJNE A,#02H,K2
  78. AJMP KEY1 ;转时调整
  79. K2:
  80. CJNE A,#40H,K3
  81. AJMP KEY2 ;转分调整
  82. K3:
  83. CJNE A,#08H,OUT          ;转
  84. AJMP KEY3 ;转秒调整

  85. YXZ:
  86. JB ACC.0,STOP        ;A键按下,暂停
  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  ;r4-1 != 0 1秒未到,转OUTTO
  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         ;1分,60秒未到
  153. ACALL CLR0         ;1分到,清零
  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  ;显示缓冲存储单元首地址,30H-37H
  209. ……………………

  210. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.jpg
所有资料51hei提供下载:
时钟.zip (62.13 KB, 下载次数: 95)
回复

使用道具 举报

ID:314717 发表于 2018-5-12 12:05 来自手机 | 显示全部楼层
分钟调不了啊
回复

使用道具 举报

ID:438136 发表于 2018-12-3 09:22 | 显示全部楼层
试试看,最近要用。
回复

使用道具 举报

ID:444013 发表于 2018-12-11 13:36 | 显示全部楼层
哇,强啊        
回复

使用道具 举报

ID:445579 发表于 2018-12-13 13:30 | 显示全部楼层
这个要用什么软件运行啊
回复

使用道具 举报

ID:295874 发表于 2018-12-30 14:12 | 显示全部楼层
其中汇编语言程序中关于分钟调整的按键的识别程序有问题,导致分钟数据无法实现调整。
回复

使用道具 举报

ID:4867 发表于 2019-12-1 21:58 | 显示全部楼层
liyongan_1985 发表于 2018-12-30 14:12
其中汇编语言程序中关于分钟调整的按键的识别程序有问题,导致分钟数据无法实现调整。

我的也是
回复

使用道具 举报

ID:659838 发表于 2019-12-9 18:46 来自手机 | 显示全部楼层
问一下这个有程序图吗
回复

使用道具 举报

ID:681492 发表于 2020-1-8 11:03 | 显示全部楼层
想请问一下大家,打开proteus文件出现“请在这页面上使用‘输入历史设计’命令”这样的框框是怎么回事呀
回复

使用道具 举报

ID:686934 发表于 2020-6-17 12:25 | 显示全部楼层
楼主,我想问一下这个1秒是怎么设定出来的啊,急
回复

使用道具 举报

ID:686934 发表于 2020-6-17 12:26 | 显示全部楼层
月古月 发表于 2020-1-8 11:03
想请问一下大家,打开proteus文件出现“请在这页面上使用‘输入历史设计’命令”这样的框框是怎么回事呀

好兄弟,我想问一下这个1秒是怎么设定出来的,为什么电路没有外接石英晶振
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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