找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机汇编语言:数码管时分秒倒计时,(代码+proteus截图)

[复制链接]
跳转到指定楼层
楼主
问题描述:程序可以运行,倒计时也可以实现,但是在倒计时的时候数码管上的数会隔一秒闪烁一次,因为我把定时器中断计时1s的程序放在了数码管显示程序里面,但是如果放在定时器中断里面就达不到1s倒计时一次的效果了。
我想解决的问题:希望倒计时的时候数码管不要闪烁,而是一直显示,希望大神们指点指点,或者可以帮忙改一下,或者如果有更好的实现方法也希望大神们不吝赐教。
代码如下:
                ORG   0000H
                LJMP  MAIN
                ORG 0003H
                LJMP WBZD ;转向外部中断子程序(暂停功能)
                ORG  000BH
                LJMP INT0;转向定时中断0服务程序
                ORG   0030H
                ;P0口接数码管的段选(高电平有效)
                ;P2.0-P2.3接数码管的位选(低电平有效?
MAIN:
     MOV P2,#00H ;初始化P2口
     MOV P0,#3FH ;开始显示000000
     SETB EA;中断允许
     SETB ET0;定时器0中断允许
     SETB EX0;外部中断0允许
     MOV TMOD,#01H;置定时器0为工作方式1
     MOV TH0,#3CH  ;12MHz50ms初值
     MOV TL0,#0B0H
     MOV R4,#1  ;计时时间(小时)
     MOV R5,#00H
    ; MOV R6,#00H
    ; MOV R7,#10
     SETB TR0  ;计时开始  

;==========================================
;=========键盘扫描程序=====================
MOSHI:
    ;计时显示扫描
    ;R4为时,R5为分,R6为秒
    ;显示小时的十位
     MOV A,R4
     MOV B,#10
     DIV AB
     LCALL CHABIAO
     MOV P2,#0FEH
     MOV P0,A
     LCALL DELAY
     MOV P2,#0FFH
     ;显示小时的个位
     MOV A,B
     LCALL CHABIAO
     MOV P2,#0FDH
     MOV P0,A
     LCALL DELAY
     MOV P2,#0FFH
     ;显示分钟的十位
     MOV A,R5
     MOV B,#10
     DIV AB
     LCALL CHABIAO
     MOV P2,#0FBH
     MOV P0,A
     LCALL DELAY
     MOV P2,#0FFH
     ;显示分钟的个位
     MOV A,B
     LCALL CHABIAO
     MOV P2,#0F7H
     MOV P0,A
     LCALL DELAY
     MOV P2,#0FFH
     ;显示秒钟的十位
     MOV A,R6
     MOV B,#10
     DIV AB
     LCALL CHABIAO
     MOV P2,#0EFH
     MOV P0,A
     LCALL DELAY
     MOV P2,#0FFH
     ;显示秒钟的个位
     MOV A,B
     LCALL CHABIAO
     MOV P2,#0DFH
     MOV P0,A
     LCALL DELAY
     MOV P2,#0FFH
LOOP1:
         CJNE R0,#20,LOOP1
         MOV R0,#00H
         DEC R6
         CJNE R6,#0FFH,MOSHI
         MOV R6,#59
         DEC R5
         CJNE R5,#0FFH,MOSHI
         MOV R5,#59
         DEC R4
         CJNE R4,#0FFH,MOSHI
         MOV R4,#0
         CLR TR0
         LJMP MOSHI

;====================================
;延时20ms子程序
DELAY:
     MOV 30H,#10
LOOP:
     MOV 40H,#0FFH
     DJNZ 40H,$
     DJNZ 30H,LOOP
     RET
;==================================
;查表指令
CHABIAO:
     MOV DPTR,#TAB
     MOVC A,@A+DPTR
     RET
;============================
;定时中断子程序

INT0:
         INC R0
     MOV TH0,#3CH
     MOV TL0,#0B0H         
     RETI     
EXIT:
     RETI
;================================================
;外部中断0子程序
WBZD:
     JNB P3.2,$
     CPL P3.7     
     CPL TR0     
     RETI

TAB:        DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
                DB 7FH,6FH,77H,7CH,58H,5EH,79H,71H
                END

proteus电路图.PNG (129.85 KB, 下载次数: 97)

proteus电路图.PNG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:786805 发表于 2020-6-25 16:57 | 只看该作者
刚发完不久然后又继续想了一下,好像搞定了,就是把这里面的“LOOP1:”去掉,然后再把LOOP1改为MOSHI就行了,唉,想了这么久才想到,不过如果大家有什么更好的方法,欢迎指教。
LOOP1:
         CJNE R0,#20,LOOP1
         MOV R0,#00H
         DEC R6
         CJNE R6,#0FFH,MOSHI
         MOV R6,#59
         DEC R5
         CJNE R5,#0FFH,MOSHI
         MOV R5,#59
         DEC R4
         CJNE R4,#0FFH,MOSHI
         MOV R4,#0
         CLR TR0
         LJMP MOSHI
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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