display_xian.asm

来自「基于51单片机的频率计设计」· 汇编 代码 · 共 77 行

ASM
77
字号
DisplayBuffer EQU 40H
Disp1  EQU  35H         ;输出数据10进制(高位)
Disp2  EQU  36H
Disp3  EQU  37H     

        
       ORG 0000H
       LJMP MAIN
       ORG 0100H
MAIN:  MOV Disp1,#07H    ;10进制初值
       MOV Disp2,#45H
       MOV Disp3,#65H
       
       MOV R0,#DisplayBuffer       ;分别取出每一位,放到DisplayBuffer
       MOV A,Disp1
       ANL A,#0F0H
       SWAP A
       MOV @R0,A
       INC R0
       MOV A,Disp1
       ANL A,#0FH
       MOV @R0,A
       INC R0
       MOV A,Disp2
       ANL A,#0F0H
       SWAP A
       MOV @R0,A
       INC R0
       MOV A,Disp2
       ANL A,#0FH
       MOV @R0,A
       INC R0
       MOV A,Disp3
       ANL A,#0F0H
       SWAP A
       MOV @R0,A
       INC R0
       MOV A,Disp3
       ANL A,#0FH
       MOV @R0,A

        ;MOV 40H,#00
        ;MOV 41H,#07
        ;MOV 42H,#04
        ;MOV 43H,#05
        ;MOV 44H,#06
        ;MOV 45H,#05
DISPLAY:
       MOV   R1,#DisplayBuffer       ;指向显示数据首址
       MOV   R4,#11111110b      ;扫描控制字初值
PLAY:  MOV   A,R4          ;扫描字放入A
       MOV   P2,A          ;从P2口输出
       MOV   A,@R1         ;取显示数据到A
       MOV   DPTR,#TAB     ;取段码表地址
       MOVC  A,@A+DPTR     ;查显示数据对应段码
       MOV   P1,A          ;段码放入P1口
       LCALL  Delay
       INC   R1            ;指向下一地址
       MOV   A,R4            ;扫描控制字放入A
       JNB   ACC.5,DISPLAY    ;扫到第六位时结束
       RL   A               ;A中数据循环左移
       MOV   R4,A            ;放回R5内
       AJMP  PLAY            ;跳回PLAY循环

TAB: DB 3FH,06H,5BH,4FH,66H
     DB 6DH,7DH,07H,7FH,6FH            ;"0""1""2" "3""4""5""6""7" "8""9""
     
Delay:
       MOV R6,#2
Del:
       MOV R7,#249
       DJNZ R7,$
       DJNZ R6,Del
       RET

       END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?