找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2105|回复: 2
收起左侧

基于51单片机的数码管时钟汇编语言代码与Proteus仿真图

[复制链接]
ID:1043929 发表于 2022-9-5 19:04 | 显示全部楼层 |阅读模式
51hei.gif
1 - Proteus 8 Professional - 原理图绘制 2022_9_4 23_04_43.png

单片机汇编语言源程序如下:
  1.         //R1 秒 R2 分 R3 时
  2.         SETUP BIT P3.0
  3.         UP    BIT P3.3
  4.         OK    BIT P3.5
  5.         FLAG  EQU 30H   //0不设置 1设置时 2设置分 3设置秒
  6. ORG 0000H
  7. AJMP AA
  8. ORG 001BH
  9. LJMP DINGSHI
  10. ORG 0045H
  11. AA:
  12.         MOV SP,#60H
  13.         MOV TMOD,#10H
  14.         MOV TH1,#3CH
  15.         MOV TL1,#0B0H   ;定时器1定时50毫秒
  16.         MOV IE,#88H
  17.         SETB TR1
  18.         SETB F0
  19. LOOP:
  20.         LCALL XIANSHI
  21.         ACALL SHEZHI;设置时间
  22.         SJMP LOOP
  23. DINGSHI:
  24.         PUSH ACC
  25.         PUSH PSW
  26.         MOV TH1,#3CH
  27.         MOV TL1,#0B0H
  28.         INC R7
  29.         CJNE R7,#14H,FH   ;20次为1秒
  30.         MOV R7,#00H
  31.         
  32.         INC R1
  33.         CJNE R1,#3CH,FH    ;60
  34.         MOV R1,#00H
  35.         INC R2
  36.         CJNE R2,#3CH,FH    ;60
  37.         MOV R2,#00H
  38.         INC R3
  39.         CJNE R3,#18H,FH  ;24
  40.         MOV R3,#00H
  41. FH:
  42. POP PSW
  43. POP ACC
  44. RETI
  45. XIANSHI:
  46.         MOV DPTR,#TABLE;共阳段码表
  47.         INC R4
  48.         MOV A,FLAG
  49.         CJNE A,#1,XS    //设置时的时候闪烁
  50.         CLR C
  51.         CJNE R4,#128,XS1 //相比较 看标志位
  52.         XS1:
  53.         JC XS2   //R4小于128的时候不显示时 大于等于128的时候显示
  54.         XS:
  55.         MOV A,R3                //将时拆分为个位和十位 分别用一位数码管显示
  56.         MOV B,#0AH
  57.         DIV AB
  58.         MOVC A,@A+DPTR  //按数值取相应的段码
  59.         MOV P0,A        
  60.         MOV P2,#0FEH
  61.         DJNZ R5,[        DISCUZ_CODE_1        ]nbsp;      
  62.         MOV P2,#0FFH
  63.         
  64.         MOV A,B
  65.         MOVC A,@A+DPTR        
  66.         MOV P0,A        
  67.         MOV P2,#0FDH
  68.         DJNZ R5,[        DISCUZ_CODE_1        ]nbsp;      
  69.         MOV P2,#0FFH
  70.         
  71.         XS2:
  72.         MOV P0,#40H              //显示横杠‘-’
  73.         MOV P2,#0FBH
  74.         DJNZ R5,[        DISCUZ_CODE_1        ]nbsp;      
  75.         MOV P2,#0FFH
  76.         
  77.         
  78.         MOV A,FLAG
  79.         CJNE A,#2,XF    //设置分的时候闪烁
  80.         CLR C
  81.         CJNE R4,#128,XF1 //相比较 看标志位
  82.         XF1:
  83.         JC XF2   //R4小于128的时候不显示分 大于等于128的时候显示
  84.         XF:
  85.         MOV A,R2                //将分拆分为个位和十位 分别用一位数码管显示
  86.         MOV B,#0AH
  87.         DIV AB
  88.         MOVC A,@A+DPTR  //按数值取相应的段码
  89.         MOV P0,A        
  90.         MOV P2,#0F7H
  91.         DJNZ R5,[        DISCUZ_CODE_1        ]nbsp;      
  92.         MOV P2,#0FFH
  93.         
  94.         MOV A,B
  95.         MOVC A,@A+DPTR        
  96.         MOV P0,A        
  97.         MOV P2,#0EFH
  98.         DJNZ R5,[        DISCUZ_CODE_1        ]nbsp;      
  99.         MOV P2,#0FFH
  100.         
  101.         XF2:
  102.         MOV P0,#40H              //显示横杠‘-’
  103.         MOV P2,#0DFH
  104.         DJNZ R5,[        DISCUZ_CODE_1        ]nbsp;      
  105.         MOV P2,#0FFH
  106.         
  107.         
  108.         MOV A,FLAG
  109.         CJNE A,#3,XM    //设置秒的时候闪烁
  110.         CLR C
  111.         CJNE R4,#128,XM1 //相比较 看标志位
  112.         XM1:
  113.         JC XM2   //R4小于128的时候不显示秒 大于等于128的时候显示
  114.         XM:
  115.         MOV A,R1               //将秒拆分为个位和十位 分别用一位数码管显示
  116.         MOV B,#0AH
  117.         DIV AB
  118.         MOVC A,@A+DPTR  //按数值取相应的段码
  119.         MOV P0,A        
  120.         MOV P2,#0BFH
  121.         DJNZ R5,[        DISCUZ_CODE_1        ]nbsp;      
  122.         MOV P2,#0FFH
  123.         
  124.         MOV A,B
  125.         MOVC A,@A+DPTR        
  126.         MOV P0,A        
  127.         MOV P2,#7FH
  128.         DJNZ R5,[        DISCUZ_CODE_1        ]nbsp;      
  129.         MOV P2,#0FFH
  130.         XM2:
  131.         RET

  132. SHEZHI:
  133.         JB SETUP,K0
  134.         JNB SETUP,$
  135.         CLR TR1      //设置的时候停止定时器
  136.         INC FLAG
  137.         MOV A,FLAG
  138.         CJNE A,#4,SR
  139.         MOV FLAG,#1
  140.         SJMP SR
  141. K0:
  142.         JB OK,K1
  143.         JNB OK,$
  144.         MOV FLAG,#0  //退出设置模式
  145.         SETB TR1      //设置完之后启动定时器
  146.         SJMP SR
  147. K1:        
  148.         MOV A,FLAG
  149.         JZ SR              //A为0则跳转到SR
  150.         JB UP,SR
  151.         JNB UP,$
  152.         CJNE A,#1,K2
  153.         INC R3
  154.         CJNE R3,#24,SR
  155.         MOV R3,#0
  156.         SJMP SR
  157. K2:
  158.         CJNE A,#2,K3
  159.         INC R2
  160.         CJNE R2,#60,SR
  161.         MOV R2,#0
  162.         SJMP SR
  163. K3:
  164.         CJNE A,#3,SR
  165.         INC R1
  166.         CJNE R1,#60,SR
  167.         MOV R1,#0
  168.         SJMP SR        
  169. SR:
  170. RET
  171.         
  172. TABLE:
  173.         DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH    ;0-9
  174.         END
复制代码

汇编Keil代码与Proteus8.8仿真下载: 仿真代码.7z (49.45 KB, 下载次数: 69)

评分

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

查看全部评分

回复

使用道具 举报

ID:1053345 发表于 2022-11-23 21:49 | 显示全部楼层
有没有c语言文件
回复

使用道具 举报

ID:1077534 发表于 2023-6-16 22:54 | 显示全部楼层
你好,你这里的keil使用的是什么版本
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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