找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助,基于51的数字时钟汇编程序

[复制链接]
跳转到指定楼层
楼主
ID:272432 发表于 2018-1-6 17:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dvga 于 2018-1-6 18:58 编辑

P1口段选,P2口位选                 ORG  00H                    JMP MAIN          
                   ORG  0BH
                JMP TIM0
MAIN:
       MOV IE,#82H                ;使能定时器中断
           MOV TMOD,#01H           ;设置计数初始值,设置为4ms中断一次
           MOV TH0,#0F0H
           MOV TL0,#60H
           MOV R0,#00H                   ;1秒钟计数器,250次后为1s
           MOV 30H,#00H                   ;秒分时初始值00
           MOV 31H,#00H
           MOV 32H,#00H
           MOV R1,#00H                   ;位选累计器
           SETB TR0
LOOP:                                           ;按键设置时分秒,循环扫描按键,否则执行中断程序
           JB P3.0,NOPRESS2         
           CALL FILTER
           MOV A,30H
           ADD A,#01H
           DA A
           MOV 30H,A
           CJNE A,#60H,NOPRESS1;等于60则清零
           MOV 30H,#00H
NOPRESS1:
           JNB P3.0,$
           CALL FILTER
NOPRESS2:
           JB P3.1,NOPRESS4
           CALL FILTER
           MOV A,31H
           ADD A,#01H
           DA A
           MOV 31H,A
           CJNE A,#60H,NOPRESS3;等于60则清零
           MOV 31H,#00H
NOPRESS3:
           JNB P3.1,$
           CALL FILTER
NOPRESS4:
           JB P3.2,LOOP
           CALL        FILTER
           MOV A,32H
           ADD A,#01H
           DA A
           MOV 32H,A
           CJNE A,#24H,NOPRESS5;等于24则清零
           MOV 32H,#00H
NOPRESS5:
           JNB P3.2,$
           CALL FILTER
           JMP LOOP
TIM0:
           PUSH ACC
           CJNE R0,#250,SCAN   ;等于250时说明到1秒,未满则继续扫描显示
           MOV A,#30H
           ADD A,#01H
           DA A
           MOV 30H,A
           CJNE A,#60H,INCSEC ;等于60时说明到一分
           MOV A,31H
           ADD A,#01H
           DA A
           MOV 31H,A
           CJNE A,#60H,INCMIN ;等于60时说明到一小时
           MOV A,32H
           ADD A,#01H
           DA A
           MOV 32H,A
           CJNE A,#24H,INCHR ;等于24说明到一天,清零时分秒寄存器
           MOV 30H,#00H
           MOV 31H,#00H
           MOV 32H,#00H
INCSEC:
           JMP INCTIM
INCMIN:
           MOV 30H,#00H        ;满60秒,清零秒存储器
           JMP INCTIM
INCHR:
           MOV 30H,#00H ;满60分,清零分寄存器,秒存储器
           MOV 31H,#00H         
INCTIM:
           MOV R0,#00H  ;秒存储器清零
SCAN:
           CJNE R1,#6,DISPLAY ;6位数码管扫描值为6,则完成一次扫描
           MOV R1,#00H                  ;清零扫描计数器,继续扫描
           JMP SCAN
DISPLAY:
           CJNE R1,#0,CHK1          ;秒低位显示
           MOV A,30H
           ANL A,#0FH
           MOV P2,#0DFH
           JMP RELOAD
CHK1:
           CJNE R1,#1,CHK2          ;秒高位显示
           MOV A,30H
           SWAP A
           ANL A,#0FH
           MOV P2,#0EFH
           JMP RELOAD
CHK2:
          CJNE R1,#2,CHK3    ;分低位显示
           MOV A,31H
           ANL A,#0FH
           MOV P2,#0F7H
           JMP RELOAD
CHK3:
           CJNE R1,#3,CHK4          ;分高位显示
           MOV A,31H
           SWAP A
           ANL A,#0FH
           MOV P2,#0FBH
           JMP RELOAD
CHK4:
           CJNE R1,#4,CHK5           ;时低位显示
           MOV A,32H
           ANL A,#0FH
           MOV P2,#0FDH
           JMP RELOAD
CHK5:
           CJNE R1,#5,RELOAD ;时高位显示
           MOV A,32H
           SWAP A
           ANL A,#0FH
           MOV P2,#0FEH
RELOAD:
           MOV P1,A                         ;扫描显示
           INC R0
           INC R1
           MOV TH0,#0F0H
           MOV TL0,#60H
           POP ACC
           RETI
FILTER:
       MOV R6,#60H
D1:           MOV R7,#248
           DJNZ R7,$
           DJNZ R6,D1
           RET
           END,P3.0-3.3调秒分时。供电后,程序似乎卡住,求解

数字表.PDF

52.32 KB, 下载次数: 5, 下载积分: 黑币 -5

仿真图

运行时的图片.pdf

165.3 KB, 下载次数: 3, 下载积分: 黑币 -5

运行失败图

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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