找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6516|回复: 1
收起左侧

我的51单片机汇编语言秒表,可暂停和复位,含源码、Proteus仿真文件和keiil文件

[复制链接]
ID:446990 发表于 2018-12-15 22:04 | 显示全部楼层 |阅读模式
本设计为一秒表,可显示小时、分钟、秒的功能。程序开始运行时,数码管不显示任何内容。按下启停键时 ,开始从0时0分0秒以每秒为单位开始计时,可以从00时00分00秒计时到23时59分59秒,到达时间后开始重新从00时00分00秒开始计时。每按一下启停键,将在启动暂停之间切换。清零按键,无论是在运行还是暂停情况下,按下清零键,将时分秒都清零。
1.png
  1. DAT                EQU 30H                ;显示缓存首地址
  2. SCANLED        EQU 38H                ;动态扫描位
  3. SEC                EQU 39H                ;秒
  4. MIN                EQU 3AH                ;分
  5. HOUR        EQU 3BH                ;时
  6. CLK                EQU 3CH                ;中断次数
  7. DUAN        EQU P2.0        ;段码锁存
  8. WEI                EQU P2.1        ;位码锁存
  9. KEYS        EQU P3.2        ;启停键
  10. KEYC        EQU P3.3        ;清零键
  11. ORG 0000H
  12. LJMP MAIN
  13. ORG 000BH
  14. LJMP T0ISR        ;50ms定时
  15. ORG 001BH
  16. LJMP T1ISR        ;扫描显示
  17. ORG 0030H
  18. MAIN:
  19.                 MOV SP,#5FH                ;栈顶
  20.                 MOV TMOD,#11H        ;定时器模式为1
  21.                 MOV TH0,#03CH        ;50毫秒定时
  22.                 MOV TL0,#0B0H        
  23.                 MOV TH1,#0ECH        ;5毫秒定时
  24.                 MOV TL1,#078H
  25.                 SETB ET0
  26.                 SETB ET1
  27.                 SETB TR1
  28.                 SETB EA
  29.                 MOV SCANLED,#0        ;初始化变量
  30.                 MOV 30H,#10H
  31.                 MOV 31H,#10H
  32.                 MOV 32H,#10H
  33.                 MOV 33H,#10H
  34.                 MOV 34H,#10H
  35.                 MOV 35H,#10H
  36.                 MOV 36H,#10H
  37.                 MOV 37H,#10H
  38.                 MOV SEC,#0
  39.                 MOV MIN,#0
  40.                 MOV HOUR,#0
  41. LOOP:        
  42.                 JB P3.2,LOOP1        ;启停
  43.                 LCALL DELAY                ;延时去抖
  44.                 JB P3.2,LOOP1        ;再次检测
  45.                 JNB P3.2,[        DISCUZ_CODE_1        ]nbsp;               ;等待键抬起
  46.                 CPL TR0                        ;启停计时
  47.                 SJMP LOOP
  48. LOOP1:
  49.                 JB P3.3,LOOP        ;清零
  50.                 LCALL DELAY
  51.                 JB P3.3,LOOP
  52.                 JNB P3.3,$
  53.                 MOV SEC,#0                ;清零时间变量
  54.                 MOV MIN,#0
  55.                 MOV HOUR,#0
  56.                 LCALL DISCHG
  57.                 SJMP LOOP
  58. ;------------------
  59. ;十六进制转换为BCD
  60. HBCD:
  61.                 MOV B,#10
  62.                 DIV AB
  63.                 SWAP A
  64.                 ORL A,B
  65.                 RET
  66. ;--------------------
  67. ;延时约10毫秒
  68. DELAY:
  69.                 MOV R3,#50
  70. DELAY1:
  71.                 MOV R4,#100
  72.                 DJNZ R4,$
  73.                 DJNZ R3,DELAY1
  74.                 RET
  75. ;--------------------
  76. ;定时器0中断服务程序,计时功能
  77. T0ISR:
  78.                 PUSH ACC
  79.                 CLR TR0
  80.                 MOV TH0,#3CH        ;重赋初值
  81.                 MOV TL0,#0B0H
  82.                 SETB TR0
  83.                 INC CLK                        ;中断次数加1
  84.                 MOV A,CLK
  85.                 CJNE A,#20,T0ISRE        ;20次中断到?
  86.                 MOV CLK,#0                ;中断次数变量清零
  87.                 INC SEC                        ;秒加1
  88.                 MOV A,SEC
  89.                 CJNE A,#60,T0ISRE        ;60秒到?
  90.                 MOV SEC,#0                        ;秒变量清零
  91.                 INC MIN                                ;分加1
  92.                 MOV A,MIN
  93.                 CJNE A,#60,T0ISRE        ;60分到?
  94.                 MOV MIN,#0                        ;分变量清零
  95.                 INC HOUR                        ;小时加1
  96.                 MOV A,HOUR        
  97.                 CJNE A,#24,T0ISRE        ;24小时到?
  98.                 MOV SEC,#0                        ;时分秒均清零
  99.                 MOV MIN,#0
  100.                 MOV HOUR,#0
  101. T0ISRE:
  102.                 LCALL DISCHG                ;将时分秒转换为BCD码供显示
  103.                 POP ACC
  104.                 RETI
  105. ;--------------------
  106. DISCHG:
  107.                 MOV A,HOUR        ;小时转换为BCD码,存入30H31H
  108.                 LCALL HBCD
  109.                 PUSH ACC
  110.                 ANL A,#0FH
  111.                 MOV 31H,A
  112.                 POP ACC
  113.                 ANL A,#0F0H
  114.                 SWAP A
  115.                 MOV 30H,A
  116.                 MOV A,MIN        ;分转换位BCD码,存入33H34H
  117.                 LCALL HBCD
  118.                 PUSH ACC
  119.                 ANL A,#0FH
  120.                 MOV 34H,A
  121.                 POP ACC
  122.                 ANL A,#0F0H
  123.                 SWAP A
  124.                 MOV 33H,A
  125.                 MOV A,SEC        ;秒转换为BCD码存入36H37H
  126.                 LCALL HBCD
  127.                 PUSH ACC
  128.                 ANL A,#0FH
  129.                 MOV 37H,A
  130.                 POP ACC
  131.                 ANL A,#0F0H
  132.                 SWAP A
  133.                 MOV 36H,A
  134.                 MOV 32H,#11H
  135.                 MOV 35H,#11H
  136.                 RET
  137. ;--------------------
  138. ;定时器1中断服务程序,用于动态扫描数码管显示
  139. T1ISR:
  140.                 PUSH ACC
  141.                 CLR TR1
  142.                 MOV TH1,#0ECH        ;重装初值
  143.                 MOV TL1,#78H
  144.                 SETB TR1
  145.                 MOV DPTR,#LEDTAB        ;段码表首地址
  146. T100:
  147.                 MOV R0,#DAT                        ;取显示缓存数据
  148.                 MOV A,SCANLED                ;取显示当前位置
  149.                 ADD A,R0                        ;求具体显示地址
  150.                 MOV R0,A
  151.                 MOV P0,#00H                        ;消隐
  152.                 SETB WEI                        ;置高位锁存
  153.                 MOV A,SCANLED                ;取当前显示位置
  154.                 JNZ T101
  155.                 MOV P0,#01H                        ;等于0为第一位
  156.                 SJMP T1DIS
  157. T101:
  158.                 DEC A
  159.                 JNZ T102
  160.                 MOV P0,#02H                        ;等于1为第二位
  161.                 SJMP T1DIS
  162. T102:
  163.                 DEC A
  164.                 JNZ T103
  165.                 MOV P0,#04H                        ;等于2为第三位
  166.                 SJMP T1DIS
  167. T103:
  168.                 DEC A
  169.                 JNZ T104
  170.                 MOV P0,#08H                        ;等于3为第四位
  171.                 SJMP T1DIS
  172. T104:
  173.                 DEC A
  174.                 JNZ T105
  175.                 MOV P0,#10H                        ;等于4为第五位
  176.                 SJMP T1DIS
  177. T105:
  178.                 DEC A
  179.                 JNZ T106
  180.                 MOV P0,#20H                        ;等于5为第六位
  181.                 SJMP T1DIS
  182. T106:
  183.                 DEC A
  184.                 JNZ T107
  185.                 MOV P0,#40H                        ;等于6为第七位
  186.                 SJMP T1DIS
  187. T107:
  188.                 MOV P0,#80H                        ;等于7为第八位
  189. T1DIS:
  190.                 CLR WEI                                ;位锁存拉低
  191.                 MOV A,@R0
  192.                 MOVC A,@A+DPTR                ;取段码
  193.                 SETB DUAN                        ;段锁存拉高
  194.                 MOV P0,A                        ;送段码
  195.                 CLR DUAN                        ;段锁存拉低
  196.                 INC SCANLED                        ;显示位地址加1
  197.                 MOV A,SCANLED
  198.                 CJNE A,#8,T1END                ;共8位
  199.                 MOV SCANLED,#0
  200. T1END:
  201.                 POP ACC
  202.                 RETI
  203. ;--------------------
  204. LEDTAB:
  205.                 DB 0C0H        ;"0"        00H
  206.                 DB 0F9H        ;"1"        01H
  207.                 DB 0A4H        ;"2"        02H
  208.                 DB 0B0H        ;"3"        03H
  209.                 DB 99H        ;"4"        04H
  210.                 DB 92H        ;"5"        05H
  211.                 DB 82H        ;"6"        06H
  212.                 DB 0F8H        ;"7"        07H
  213.                 DB 80H        ;"8"        08H
  214.                 DB 90H        ;"9"        09H
  215.                 DB 88H        ;"A"        0AH
  216.                 DB 83H        ;"B"        0BH
  217.                 DB 0C6H        ;"C"        0CH
  218.                 DB 0A1H        ;"D"        0DH
  219.                 DB 86H        ;"E"        0EH
  220.                 DB 8EH        ;"F"        0FH
  221.                 DB 0FFH        ;" "        10H
  222.                 DB 0BFH        ;'-'        11H
  223. ;--------------------
  224. END
复制代码

全部资料51hei下载地址:
数码管显示秒表(有清零按键).zip (67.96 KB, 下载次数: 87)

评分

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

查看全部评分

回复

使用道具 举报

ID:564923 发表于 2019-6-25 19:45 | 显示全部楼层
没看懂这个动态扫描
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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