找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2515|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机设计一个四按键控制的数字时钟Proteus仿真汇编程序

[复制链接]
跳转到指定楼层
楼主
编写了一个控制程序,实现数码管上显示时-分-秒,通过按键可以设置时钟初始值。
1.proteus中电路图
2.代码
见附件
3.仿真
按键功能说明:
数码管初始状态为全零,当按下开关0,数字时钟开始计时,当按下开关1,数字时钟清零,当按下开关2,数字时钟的分加一,当按下开关3,数字时钟的分减一。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)完整文档下载(word格式 可编辑):


单片机源程序如下:
  1. ;//数码管显示01234569
  2.                 ;ORG 0000H
  3.                 ;AJMP START
  4.                 ;ORG 0030H
  5. ;START:  MOV SP,#40H
  6. ;S1:                MOV P2,#01H
  7.                 ;MOV P0,#0C0H        
  8.                 ;LCALL DELAY
  9.                 ;MOV P2,#02H
  10.                 ;MOV P0,#0F9H
  11.                 ;LCALL DELAY
  12.                 ;MOV P2,#04H
  13.                 ;MOV P0,#0A4H
  14.                 ;LCALL DELAY
  15.                 ;MOV P2,#08H
  16.                 ;MOV P0,#0B0H        
  17.                 ;LCALL DELAY
  18.                 ;MOV P2,#10H
  19.                 ;MOV P0,#099H
  20.                 ;LCALL DELAY
  21.                 ;MOV P2,#20H
  22.                 ;MOV P0,#092H
  23.                 ;LCALL DELAY
  24.                 ;MOV P2,#40H
  25.                 ;MOV P0,#82H
  26.                 ;LCALL DELAY
  27.                 ;MOV P2,#80H
  28.                 ;MOV P0,#90H
  29.                 ;LCALL DELAY
  30.                 ;SJMP S1
  31. ;DELAY:  MOV R7,#20H
  32. ;DA1:        MOV R6,#10
  33. ;DA2:        DJNZ R6,DA2
  34.                 ;DJNZ R7,DA1
  35.                 ;RET
  36.                
  37.                

  38. ;//数码管显示00-00-00
  39.                 ;ORG 0000H
  40.                 ;AJMP START
  41.                 ;ORG 0030H
  42. ;START:  MOV SP,#40H
  43. ;S1:                MOV P2,#01H
  44.                 ;MOV P0,#0C0H        
  45.                 ;LCALL DELAY
  46.                 ;MOV P2,#02H
  47.                 ;MOV P0,#0C0H
  48.                 ;LCALL DELAY
  49.                 ;MOV P2,#04H
  50.                 ;MOV P0,#0BFH
  51.                 ;LCALL DELAY
  52.                 ;MOV P2,#08H
  53.                 ;MOV P0,#0C0H        
  54.                 ;LCALL DELAY
  55.                 ;MOV P2,#10H
  56.                 ;MOV P0,#0C0H
  57.                 ;LCALL DELAY
  58.                 ;MOV P2,#20H
  59.                 ;MOV P0,#0BFH
  60.                 ;LCALL DELAY
  61.                 ;MOV P2,#40H
  62.                 ;MOV P0,#0C0H
  63.                 ;LCALL DELAY
  64.                 ;MOV P2,#80H
  65.                 ;MOV P0,#0C0H
  66.                 ;LCALL DELAY
  67.                 ;SJMP S1
  68. ;DELAY:  MOV R7,#20H
  69. ;DA1:        MOV R6,#10
  70. ;DA2:        DJNZ R6,DA2
  71.                 ;DJNZ R7,DA1
  72.                 ;RET
  73.                                 

  74.                 ;ORG 0000H
  75.                 ;MOV A,#0
  76.                 ;MOV R0,A
  77.                 ;MOV R1,A
  78.                 ;MOV R2,A
  79.                 ;AJMP MAIN
  80.                 ;ORG 000BH                //定时器0入口
  81.                 ;AJMP INT_T0               
  82.                 ;ORG 0100H
  83. ;MAIN:        MOV SP,#40H
  84.                 ;MOV TMOD,#01H        //定时器0工作方式1
  85.                 ;MOV TL0,#78H        //写入初值
  86.                 ;MOV TH0,#0ECH
  87.                 ;SETB EA                        //允许
  88.                 ;SETB ET0               
  89.                 ;SETB TR0                //启动定时器0        
  90. ;HERE:        LJMP HERE        
  91.                 ;ORG 0200H
  92. ;INT_T0:        MOV A,#0
  93.                 ;INC R0
  94.                 ;CJNE R0,#100,MOVEON        //不等跳转
  95.                 ;MOV R0,A
  96.                 ;INC R1
  97.                 ;CJNE R1,#60,MOVEON
  98.                 ;MOV R1,A
  99.                 ;INC R2        
  100. ;MOVEON:        MOV TL0,#78H
  101.                 ;MOV TH0,#0ECH
  102.                 ;RETI        
  103. ;DELAY:  MOV R7,#10H
  104. ;DA1:        MOV R6,#10
  105. ;DA2:        DJNZ R6,DA2
  106.                 ;DJNZ R7,DA1
  107.                 ;RET
  108. ;TABLE:        DB 0C0H,0F9H,0A4H,0B0H,99H
  109.                 ;DB 92H,82H,0F8H,80H,90H        
  110.                 ;END











  111. ;//定时器设计时钟10MS
  112.                 ;ORG 0000H
  113.                 ;MOV A,#0
  114.                 ;MOV R0,A
  115.                 ;MOV R1,A
  116.                 ;MOV R2,A
  117.                 ;AJMP MAIN
  118.                 ;ORG 000BH                //定时器0入口
  119.                 ;AJMP INT_T0               
  120.                 ;ORG 0100H

  121. ;MAIN:        MOV SP,#40H
  122.                 ;MOV TMOD,#01H        //定时器0工作方式1
  123.                 ;MOV TL0,#78H        //写入初值
  124.                 ;MOV TH0,#0ECH
  125.                 ;SETB EA                        //允许
  126.                 ;SETB ET0               
  127.                 ;SETB TR0                //启动定时器0
  128.         
  129. ;HERE:        MOV A,R0
  130.                 ;MOV B,#10
  131.                 ;DIV AB                        //A中为商,B为余数
  132.                         
  133.                 ;;MOV R3,A                //显示查表
  134.                 ;MOV DPTR,#TABLE        //秒的十位查表
  135.                 ;MOVC A,@A+DPTR
  136.                 ;MOV P2,#40H                //位选
  137.                 ;MOV P0,A                //段选
  138.                 ;LCALL DELAY
  139.                
  140.                 ;MOV A,B                        //秒的个位查表
  141.                 ;MOVC A,@A+DPTR
  142.                 ;MOV P2,#80H
  143.                 ;MOV P0,A
  144.                 ;LCALL DELAY
  145.                
  146.                 ;MOV P2,#20H
  147.                 ;MOV P0,#0BFH
  148.                 ;LCALL DELAY
  149.                
  150.                 ;MOV A,R1
  151.                 ;MOV B,#10
  152.                 ;DIV AB                        //A中为商,B为余数
  153.                 ;MOV DPTR,#TABLE
  154.                 ;MOVC A,@A+DPTR        //秒
  155.                 ;MOV P2,#08H
  156.                 ;MOV P0,A
  157.                 ;LCALL DELAY
  158.                 ;MOV A,B                        //
  159.                 ;MOVC A,@A+DPTR
  160.                 ;MOV P2,#10H
  161.                 ;MOV P0,A
  162.                 ;LCALL DELAY
  163.                
  164.                 ;MOV P2,#04H
  165.                 ;MOV P0,#0BFH
  166.                 ;LCALL DELAY
  167.                
  168.                 ;MOV A,R2
  169.                 ;MOV B,#10
  170.                 ;DIV AB                        //A中为商,B为余数
  171.                 ;MOV DPTR,#TABLE
  172.                 ;MOVC A,@A+DPTR        //分
  173.                 ;MOV P2,#01H
  174.                 ;MOV P0,A
  175.                 ;LCALL DELAY
  176.                
  177.                 ;MOV A,B                        //
  178.                 ;MOVC A,@A+DPTR
  179.                 ;MOV P2,#02H
  180.                 ;MOV P0,A
  181.                 ;LCALL DELAY
  182.         
  183.                 ;LJMP HERE
  184.                
  185.                 ;ORG 0200H
  186. ;INT_T0:        PUSH ACC
  187.                 ;MOV A,#0
  188.                 ;INC R0
  189.                 ;CJNE R0,#100,MOVEON        //不等跳转
  190.                 ;MOV R0,A
  191.                 ;INC R1
  192.                 ;CJNE R1,#60,MOVEON
  193.                 ;MOV R1,A
  194.                 ;INC R2
  195.                
  196. ;MOVEON:        MOV TL0,#78H
  197.                 ;MOV TH0,#0ECH
  198.                 ;POP ACC
  199.                 ;RETI
  200.                
  201. ;DELAY:  MOV R7,#10H
  202. ;DA1:        MOV R6,#10
  203. ;DA2:        DJNZ R6,DA2
  204.                 ;DJNZ R7,DA1
  205.                 ;RET
  206. ;TABLE:        DB 0C0H,0F9H,0A4H,0B0H,99H
  207.                 ;DB 92H,82H,0F8H,80H,90H        
  208.                 ;END
  209.                         
  210.                
  211. //按键控制的时钟
  212.                 K0 EQU P3.0
  213.                 K1 EQU P3.1
  214.                 K2 EQU P3.2
  215.                 K3 EQU P3.3
  216.                 ORG 0000H
  217.                 MOV A,#0
  218.                 MOV R0,A
  219.                 MOV R1,A
  220.                 MOV R2,A
  221.                 MOV R4,A
  222.                 AJMP MAIN
  223.                 ORG 000BH                //定时器0入口
  224.                 AJMP INT_T0               
  225.                 ORG 0100H
  226. MAIN:        MOV SP,#40H
  227.                 MOV TMOD,#01H        //定时器0工作方式1
  228.                 MOV TL0,#78H        //写入初值
  229.                 MOV TH0,#0ECH
  230.                 SETB EA                        //允许
  231.                 SETB ET0               
  232. START:        PUSH ACC
  233.                 MOV A,#0FFH
  234.                 MOV P3,A
  235.                 POP ACC
  236. HERE:        
  237.                
  238.                 MOV A,R0
  239.                 MOV B,#10
  240.                 DIV AB                        //A中为商,B为余数
  241.                 MOV DPTR,#TABLE        //秒的十位查表
  242.                 MOVC A,@A+DPTR
  243.                 MOV P2,#40H                //位选
  244.                 MOV P0,A                //段选
  245.                 LCALL DELAY
  246.                 MOV A,B                        //秒的个位查表
  247.                 MOVC A,@A+DPTR
  248.                 MOV P2,#80H
  249.                 MOV P0,A
  250.                 LCALL DELAY
  251.                 MOV P2,#20H
  252.                 MOV P0,#0BFH
  253.                 LCALL DELAY
  254.                 MOV A,R1
  255.                 MOV B,#10
  256.                 DIV AB                        //A中为商,B为余数
  257.                 MOV DPTR,#TABLE
  258.                 MOVC A,@A+DPTR        //秒
  259.                 MOV P2,#08H
  260.                 MOV P0,A
  261.                 LCALL DELAY
  262.                 MOV A,B                        //
  263.                 MOVC A,@A+DPTR
  264.                 MOV P2,#10H
  265.                 MOV P0,A
  266.                 LCALL DELAY
  267.                 MOV P2,#04H
  268.                 MOV P0,#0BFH
  269.                 LCALL DELAY
  270.                 MOV A,R2
  271.                 MOV B,#10
  272.                 DIV AB                        //A中为商,B为余数
  273.                 MOV DPTR,#TABLE
  274.                 MOVC A,@A+DPTR        //分
  275.                 MOV P2,#01H
  276.                 MOV P0,A
  277.                 LCALL DELAY
  278.                 MOV A,B               
  279.                 MOVC A,@A+DPTR
  280.                 MOV P2,#02H
  281.                 MOV P0,A
  282.                 LCALL DELAY
  283.                 JNB K0,KEY0
  284.                 JNB K1,KEY1
  285.                 JNB K2,KEY2
  286.                 JNB K3,KEY3
  287.                 LJMP HERE

  288. KEY0:        LCALL DELAY10
  289.         JNB        K0,$
  290.                 MOV R0,#0
  291.                 MOV R1,#0
  292.                 MOV R2,#0
  293.                 CLR TR0
  294.                 MOV TL0,#78H
  295.                 MOV TH0,#0ECH
  296.                 AJMP START
  297. KEY1:        LCALL DELAY10        
  298.                 JNB        K1,$
  299.                 SETB TR0
  300.                 AJMP START
  301. KEY2:        LCALL DELAY10        
  302.                 JNB        K2,$
  303.                 INC R2        
  304.                 AJMP START
  305. ……………………

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

所有资料51hei提供下载:
数字时钟.rar (86.82 KB, 下载次数: 58)

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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