找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3642|回复: 0
收起左侧

基于51单片机汇编语言的时钟仿真及程序,实现校时功能

[复制链接]
ID:296768 发表于 2018-3-25 15:47 | 显示全部楼层 |阅读模式
基于51单片机的时钟仿真及程序,实现校时功能
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

单片机汇编语言源程序如下:
  1. ORG  0000H
  2. LJMP  START
  3. ORG  000BH     ;定时器/计数器T0中断程序入口
  4. LJMP  INTT0
  5. ////////////////////////////////////////////////////////
  6. START:  MOV  R0,#70H
  7.                 MOV  R7,#0CH
  8. INIT:   MOV  @R0,#00H
  9.                 INC  R0
  10.                 DJNZ  R7,INIT        ;清空70H-7CH中的内容,用于存储时间的各位数
  11.                 MOV  72H,#10
  12.                 MOV  75H,#10          ;数码管显示中间的横杠,取TAB中的第11个代码
  13.                 MOV  TMOD,#01H                 ;定时器方式
  14.                 MOV  TL0,#0B0H                  ;初值设定
  15.                 MOV  TH0,#03CH
  16.                 SETB  EA                                ;开中断,启动
  17.                 SETB  ET0
  18.                 SETB  TR0
  19. START1:        LCALL  SCAN
  20.                 LCALL  KEYSCAN
  21.                 SJMP  START1

  22. DL1MS:        MOV  R6,#14H            ;延时1MS子程序
  23. DL1:        MOV  R7,#19H
  24. DL2:        DJNZ  R7,DL2
  25.                 DJNZ  R6,DL1
  26.                 RET

  27. DL20MS:        MOV R1,#20
  28. DL3:    LCALL DL1MS                    ;延时20MS子程序
  29. DL4:    DJNZ R1,DL2
  30.                 RET
  31. //////////////////////////////////////////////////////               
  32.        ;数码管显示程序
  33. SCAN:        MOV  A,78H       ;取秒的个位给70H,十位给71H
  34.                 MOV  B,#0AH
  35.                 DIV  AB
  36.                 MOV  71H,A
  37.                 MOV  70H,B
  38.                 MOV  A,79H                 ;取分的个位给73H,十位给74H
  39.                 MOV  B,#0AH
  40.                 DIV  AB
  41.                 MOV  74H,A
  42.                 MOV  73H,B
  43.                 MOV  A,7AH                 ;取时的个位给76H,十位给77H
  44.                 MOV  B,#0AH
  45.                 DIV  AB
  46.                 MOV  77H,A
  47.                 MOV  76H,B
  48.                 MOV  R1,#70H     ;从70H-77H循环扫描显示
  49.                 MOV  R5,#80H
  50.                 MOV  R3,#08H

  51. SCAN1:        MOV  A,R5
  52.                 MOV  P2,A                  ;位码赋给P2
  53.                 MOV  A,@R1                  ;从70H储存的秒的个位开始扫描,通过查表将段码赋给P0
  54.                 MOV  DPTR,#TAB
  55.                 MOVC  A,@A+DPTR
  56.                 MOV  P0,A

  57.                 MOV  A,R5
  58.                 LCALL  DL1MS
  59.                 INC  R1
  60.                 MOV  A,R5
  61.                 RR  A                           ;位码右移一位
  62.                 MOV  R5,A
  63.                 DJNZ  R3,SCAN1           ;8次一个循环
  64.                 MOV  P2,#00H
  65.                 MOV  P0,#0FFH
  66.                 RET
  67. TAB:DB  0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH
  68.                 ;“0~9”,“-”的共阳极字段码


  69. INTT0:        PUSH  ACC                 ;定时器/计数器T0中断服务程序
  70.                 PUSH  PSW
  71.                 CLR  ET0
  72.                 CLR  TR0
  73.                 MOV  TL0,#0B0H             ;重装初值
  74.                 MOV  TH0,#03CH
  75.                 SETB  TR0
  76.                 INC  7BH             ;50ms缓冲单元
  77.                 MOV  A,7BH
  78.                 CJNE  A,#14H,OUTT0         ;计满20次50ms单元清零,秒单元加一
  79.                 MOV  7BH,#00       
  80.                 INC  78H ;
  81.                 MOV  A,78H                         ;78H存秒单元
  82.                 CJNE  A,#3CH,OUTT0         ;秒计满60次,分单元加一,秒单元清零
  83.                 MOV  78H,#00
  84.                 INC  79H        ;
  85.                 MOV  A,79H                         ;79H存分单元
  86.                 CJNE  A,#3CH,OUTT0   ;分计满60次,时单元加一,分单元清零
  87.                 MOV  79H,#00
  88.                 INC  7AH                 ;7AH存时单元
  89.                 MOV  A,7AH
  90.                 CJNE  A,#18H,OUTT0         ;时单元满24清零
  91.                 MOV  7AH,#00
  92. OUTT0:
  93.                 SETB  ET0
  94.                 pop  psw
  95.                 pop  acc
  96.                 RETI
  97. //////////////////////////////////////////////////////////
  98.         ;按键处理程序
  99. KEYSCAN:JNB  P1.0,KEYSCAN0
  100.                 JNB  P1.1,KEYSCAN1
  101.                 JNB  P1.2,KEYSCAN2
  102. KEYOUT:        RET
  103. KEYSCAN0:     LCALL  DL20MS            ;防按键抖动程序
  104.              JB  P1.0,KEYOUT
  105. WAIT0:        JNB  P1.0,WAIT0                ;k1是高电平则顺序执行,每按一次循环一下7CH计数加一
  106.                  INC  7CH
  107.                     MOV  A,7CH
  108.                  CLR  TR0
  109.                   CLR  ET0
  110.                  CJNE  A,#03H,KEYOUT        ;按三次则继续计时,按不到三次则跳转
  111.                  MOV  7CH,#00
  112.                  SETB  TR0
  113.                  SETB  ET0
  114.                  SJMP  KEYOUT
  115. KEYSCAN1:     LCALL  DL20MS
  116.              JB  P1.1,KEYOUT
  117. WAIT1:              JNB  P1.1,WAIT1           ;按k2值加一
  118.                  MOV  A,7CH
  119.                  CJNE  A,#02H,KSCAN11        ;判断k1,按一次则跳转到时值调整,按两次则顺序执行分值调整
  120.                  INC  79H                        ;分值加一
  121.                  MOV  A,79H
  122.                  CJNE  A,#3CH,KEYOUT   ;若分值到60,则清零
  123.                  MOV  79H,#00
  124.                  SJMP  KEYOUT
  125. KSCAN11:    INC  7AH                 ;小时加一
  126.                  MOV  A,7AH
  127.                  CJNE  A,#18H,KEYOUT   ;若小时满24,则清零
  128. ……………………

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

所有资料51hei提供下载:
时钟程序.zip (50.17 KB, 下载次数: 41)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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