找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3414|回復: 1
打印 上一主題 下一主題
收起左側(cè)

51單片機匯編語言:數(shù)碼管時分秒倒計時,(代碼+proteus截圖)

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:786805 發(fā)表于 2020-6-25 16:35 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
問題描述:程序可以運行,倒計時也可以實現(xiàn),但是在倒計時的時候數(shù)碼管上的數(shù)會隔一秒閃爍一次,因為我把定時器中斷計時1s的程序放在了數(shù)碼管顯示程序里面,但是如果放在定時器中斷里面就達不到1s倒計時一次的效果了。
我想解決的問題:希望倒計時的時候數(shù)碼管不要閃爍,而是一直顯示,希望大神們指點指點,或者可以幫忙改一下,或者如果有更好的實現(xiàn)方法也希望大神們不吝賜教。
代碼如下:
                ORG   0000H
                LJMP  MAIN
                ORG 0003H
                LJMP WBZD ;轉(zhuǎn)向外部中斷子程序(暫停功能)
                ORG  000BH
                LJMP INT0;轉(zhuǎn)向定時中斷0服務(wù)程序
                ORG   0030H
                ;P0口接數(shù)碼管的段選(高電平有效)
                ;P2.0-P2.3接數(shù)碼管的位選(低電平有效?
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, 下載次數(shù): 97)

proteus電路圖.PNG
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:786805 發(fā)表于 2020-6-25 16:57 | 只看該作者
剛發(fā)完不久然后又繼續(xù)想了一下,好像搞定了,就是把這里面的“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
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表