找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8282|回复: 3
收起左侧

4位7段数码管秒表,一位小数,用at89c51单片机,汇编语言

[复制链接]
ID:205040 发表于 2017-5-26 11:28 | 显示全部楼层 |阅读模式
51单片机汇编语言写的4位7段数码管秒表 带仿真 自己下载查看。
proteus仿真原理图(仿真工程文件可到附件下载):
0.png 0.png

单片机源程序如下:
  1. ;要求:至少包括4个功能:时间清零;启动计时;暂定计时;继续计时;
  2. ;      计时最小单位0.1 秒,最大计时时间999.9秒,
  3. ;      用数码管显示时间,同时要求按下任何一个功能键必须有声音提示。
  4. ;
  5. ;使用方法: 设有启动键K1和暂停/清零键K2。按k1启动计时,按k2则暂停计时,再按k2则清零。
  6. ;常数设置
  7. TLOW    EQU  78H
  8. THIGH   EQU  0ECH
  9. LED_WEI_Pro        EQU 0f0H;数码管位选        保护位


  10. ;寄存器设置
  11. COUN_INT                   EQU 21H     ;5ms * 20 = 100ms = 0.1S
  12. COUN_PASSNUM         EQU        22H                ;
  13. COUN_TIME_L                EQU 23H        ;时间累加 低位 100MS加1
  14. COUN_TIME_H                EQU 24H        ;时间累加 高位

  15. COUN_WEI                  EQU 3CH         ;显示位
  16. DISP_BUF                EQU        50H

  17. ;端口配置
  18. LED_WEI        EQU P2        ;数码管位选
  19. LED_DAT        EQU P0        ;数码管数据
  20. BEEP_PIN        EQU P3.7        ;蜂鸣器
  21. KEY_START          EQU P3.0        ;启动
  22. KEY_STOP        EQU P3.1 ;停止/归零键
  23. ;标志位配置
  24. FLAG_TIMING EQU 20H.1        ;20H.1 为计时状态标记
  25. FLAG_GO EQU 20H.2        ;20H.2 为使能标记
  26. BEEP_EN        EQU 20H.3        ;蜂鸣器响使能

  27. ;--------------------------------------------------
  28.         ORG  0000H
  29.         JMP  MAIN
  30.         ORG  0BH
  31.         JMP  T0_INT
  32. ;--------------------------------------------------
  33. MAIN:
  34.         MOV  SP,#60H
  35.         MOV  A,#00H

  36.         MOV  COUN_WEI,A
  37.         MOV  COUN_PASSNUM,A;
  38.         MOV  COUN_TIME_L,A
  39.         MOV  COUN_TIME_H,A
  40.         
  41.         CLR C
  42.         CLR FLAG_GO
  43.         CLR FLAG_TIMING;刚开机为非计时状态
  44.         SETB BEEP_EN;开机响一声
  45.         CALL  INIT_TIMER
  46.         SETB  TR0
  47. LOOP:
  48.         CALL BEEP
  49. K1:        
  50.         JB        KEY_START,K2;启动
  51.         NOP
  52.         JNB KEY_START,[        DISCUZ_CODE_1        ]nbsp;      
  53.         SETB BEEP_EN;蜂鸣器响
  54.         JB  FLAG_GO,LOOP
  55.         SETB FLAG_GO
  56.         SETB FLAG_TIMING
  57.         
  58.         JMP LOOP
  59. K2:
  60.         JB KEY_STOP,LOOP;暂停、归零键
  61.         NOP
  62.         JNB KEY_STOP,$
  63.         SETB BEEP_EN;蜂鸣器响
  64.         JB FLAG_TIMING,STOP;计时中按此键则暂停计时,暂停时按此键则归零
  65. RESET_TIME:;归零
  66.         CLR FLAG_GO
  67.         CLR FLAG_TIMING
  68.         MOV COUN_TIME_L,#00H
  69.         MOV COUN_TIME_H,#00H
  70.         CALL DISP_TRANSDAT
  71.         
  72.         JMP LOOP
  73. STOP:;暂停
  74.         CLR FLAG_GO
  75.         CLR FLAG_TIMING;暂停计时
  76.         JMP LOOP

  77.         
  78. ;;;-------------------------           

  79. ;;-------------------------           
  80. ;;显示子程序
  81. ;;使用寄存器组:第2组寄存器
  82. ;;出口:
  83. ;;入口:
  84. ;;--------------------------
  85. DISPLAY:
  86.         PUSH ACC
  87.         PUSH  PSW                                
  88.         CLR  PSW.3                                        ;RS1、RS0(PSW.4、PSW.3):        1 0
  89.         SETB  PSW.4
  90.         
  91.         ; MOV DISP_BUF,#1H ;test
  92.         ; MOV DISP_BUF+1,#2H
  93.         ; MOV DISP_BUF+2,#3H
  94.         ; MOV DISP_BUF+3,#4H
  95.         MOV A,COUN_WEI
  96.         CJNE A,#0,CJMP1
  97.         JMP DISP_WEI1
  98. CJMP1:        
  99.         CJNE A,#1,CJMP2
  100.         JMP DISP_WEI2
  101. CJMP2:
  102.         CJNE A,#2,CJMP3
  103.         JMP DISP_WEI3
  104. CJMP3:
  105.         CJNE A,#3,CJMP4
  106.         JMP DISP_WEI4
  107. CJMP4:
  108.         MOV COUN_WEI,#0
  109. DISP_WEI1:
  110.         MOV A,LED_WEI;P3
  111.         ANL A,#LED_WEI_Pro
  112.         ORL A,#01H
  113. ;        CPL A
  114.         MOV LED_WEI,A
  115.         
  116.         JMP DISP_WEI_END
  117. DISP_WEI2:        
  118.         MOV A,LED_WEI
  119.         ANL A,#LED_WEI_Pro
  120.         ORL A,#02H
  121. ;        CPL A
  122.         MOV LED_WEI,A
  123.         
  124.         JMP DISP_WEI_END
  125. DISP_WEI3:
  126.         MOV A,LED_WEI
  127.         ANL A,#LED_WEI_Pro
  128.         ORL A,#04H
  129. ;        CPL A
  130.         MOV LED_WEI,A
  131.         JMP DISP_WEI_END        
  132. DISP_WEI4:
  133.         MOV A,LED_WEI
  134.         ANL A,#LED_WEI_Pro
  135.         ORL A,#08H
  136. ;        CPL A
  137.         MOV LED_WEI,A
  138. DISP_WEI_END:
  139.         MOV R0,#DISP_BUF
  140.         MOV A,COUN_WEI
  141.         ADD A,R0
  142.         MOV R0,A
  143.         MOV        A,@R0
  144.         MOV DPTR,#LED_TAB
  145.         MOVC A,@A+DPTR
  146.         MOV B,A
  147.         MOV A,COUN_WEI
  148.         CJNE A,#2,DISP_WEI_NODOT;增加小数点
  149.         MOV A,B
  150.         ANL A,#7FH
  151.         MOV B,A
  152. DISP_WEI_NODOT:
  153.         MOV A,B
  154.         MOV LED_DAT,A
  155.         INC COUN_WEI
  156.         POP PSW
  157.         POP ACC        
  158.         
  159.         RET
  160. LED_TAB:;共阳数码管表
  161.    DB  0C0H        ;"0"
  162.    DB  0F9H        ;"1"
  163.    DB  0A4H        ;"2"
  164.    DB  0B0H        ;"3"
  165.    DB   99H        ;"4"
  166.    DB   92H        ;"5"
  167.    DB   82H        ;"6"
  168.    DB  0F8H        ;"7"
  169.    DB   80H        ;"8"
  170.    DB   90H        ;"9"
  171.    DB   88H        ;"A"
  172.    DB   83H        ;"B"
  173.    DB  0C6H        ;"C"
  174.    DB  0A1H        ;"D"
  175.    DB   86H        ;"E"
  176.    DB   8EH        ;"F";15
  177. ;;-------------------------           

  178. ;;-------------------------   
  179. DELAY2:
  180.   MOV  R5,#2H
  181. DELAY:                    ;延时R5×10MS
  182.         MOV  R6,#50
  183. D1:
  184.     MOV  R7,#100
  185.         DJNZ  R7,$
  186.         DJNZ  R6,D1
  187.         DJNZ  R5,DELAY
  188.         RET
  189. ;;-------------------------        
  190. DELAY1:                    ;延时5MS
  191.         MOV  R6,#25
  192. D2:
  193.     MOV  R7,#100
  194.         DJNZ  R7,$
  195.         DJNZ  R6,D2
  196.         RET
  197. BEEP:
  198.         JNB         BEEP_EN,NOT_BEEP
  199.         CLR BEEP_EN
  200.         CLR BEEP_PIN                        ;低电平有效
  201.         CALL DELAY1                                ;延时
  202. ;NOT_BEEP:        
  203.         SETB BEEP_PIN
  204. NOT_BEEP:
  205.         RET
  206. ;;-------------------------
  207. INIT_TIMER:                ;初始化定时器
  208.         MOV  TMOD,#01H    ;设置定时器0 工作模式为模式1
  209.         MOV  IE,  #82H    ;启用定时器0 中断产生
  210.         MOV  TL0,#TLOW
  211.         MOV  TH0,#THIGH
  212.         RET
  213. ;;-------------------------        
  214. T0_INT:
  215.         PUSH  ACC
  216.         PUSH  PSW
  217.         MOV  TL0,#TLOW
  218.         MOV  TH0,#THIGH

  219.         CALL DISPLAY
  220.         
  221.         JNB FLAG_TIMING,T0_EXIT
  222.         CLR C
  223.         INC COUN_INT
  224.         MOV A,COUN_INT
  225.         CJNE A,#20,T0_EXIT
  226.         MOV COUN_INT,#0
  227.         MOV A,COUN_TIME_L
  228.         ADDC A,#1
  229.         DA A
  230.         MOV COUN_TIME_L,A
  231.         
  232.         JNC TIME_ADD_END
  233.         MOV A,COUN_TIME_H
  234.         ADDC A,#0
  235.         DA A
  236.         MOV COUN_TIME_H,A
  237. TIME_ADD_END:        
  238.         MOV A,COUN_TIME_H
  239.         CJNE A,#99H,TIME_ADD_T
  240.         MOV A,COUN_TIME_L
  241.         CJNE A,#99H,TIME_ADD_T
  242.         CLR FLAG_TIMING;达到最大值999,则停止
  243. ……………………

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

所有资料51hei提供下载:
LED数码管_4位秒表.zip (128.91 KB, 下载次数: 94)

评分

参与人数 2黑币 +10 收起 理由
zjx-xjz + 5 赞一个!
断肠草 + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:248166 发表于 2017-11-11 14:11 | 显示全部楼层
你好,请问一下,AT89C51的晶振频率是12MHz,那么
MOV  TL0,#TLOW(78H)
MOV  TH0,#THIGH(0ECH)
是怎样求得的呢?初学者感到十分迷茫,麻烦解释一下,谢谢
回复

使用道具 举报

ID:277362 发表于 2018-1-18 13:59 | 显示全部楼层
不错不错不错
回复

使用道具 举报

ID:422967 发表于 2018-11-8 17:36 | 显示全部楼层
楼主优秀
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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