disp.asm

来自「Small RTOS51是为51系列单片机而编写的。它是完全免费的、源代码公开的」· 汇编 代码 · 共 73 行

ASM
73
字号
;**************************************************
;    平凡单片机工作室
;  http://www.mcustudio.com
;   (c) Copyright 2003 Pingfan's McuStudio
;    All rights Reserved
;disp.asm
;作者:周坚   
;功能描述:2位数码管的第1位显示0,第2位显示1
;本例可用dpj.dll实验仿真板演示
;如果采用DSB-1A型单片机实验板,将提供相应的数码管显示程序
;**************************************************
FIRST       EQU P2.7    ;第一位数码管的位控制
SECOND      EQU P2.6    ;第二位数码管的位控制
DISPBUFF    EQU 5AH     ;显示缓冲区为5AH和5BH
    ORG     0000H
    AJMP    START
    ORG     30H
START:  
    MOV     SP,#5FH         ;设置堆栈
    MOV     P1,#0FFH
    MOV     P0,#0FFH
    MOV     P2,#0FFH        ;初始化,所显示器,LED灭
    MOV     DISPBUFF,#0     ;第一位显示0
    MOV     DISPBUFF+1,#1   ;第二位显示1
LOOP:   
    LCALL   DISP            ;调用显示程序
    ;ACALL  D60MS           ;用于验证两次调用显示程序时间过长会出现的现象。
    AJMP    LOOP
;主程序到此结束
DISP:   
    PUSH    ACC             ;ACC入栈
    PUSH    PSW             ;PSW入栈
    MOV     A,DISPBUFF      ;取第一个待显示数
    MOV     DPTR,#DISPTAB   ;字形表首地址
    MOVC    A,@A+DPTR       ;取字形码
    MOV     P0,A            ;将字形码送P0位(段口)
    CLR     FIRST           ;开第一位显示器位口
    LCALL   DELAY           ;延时5毫秒
    SETB    FIRST           ;关闭第一位显示器(开始准备第二位的数据)
    MOV     A,DISPBUFF+1    ;取显示缓冲区的第二位
    MOV     DPTR,#DISPTAB
    MOVC    A,@A+DPTR
    MOV     P0,A            ;将第二个字形码送P0口
    CLR     SECOND          ;开第二位显示器
    LCALL   DELAY           ;延时
    SETB    SECOND          ;关第二位显示
    POP     PSW
    POP     ACC
    RET

DELAY:  
    PUSH    PSW
    SETB    RS0
    MOV     R7,#50
D1: MOV     R6,#50
D2: DJNZ    R6,$
    DJNZ    R7,D1
    POP     PSW
    RET
DISPTAB:    DB 28H,7EH,0a4H,64H,72H,61H,21H,7CH,20H,60H 
D60MS:  
    PUSH    PSW
    SETB    RS0
    MOV     R7,#150
D61:    
    MOV     R6,#200
    DJNZ    R6,$
    DJNZ    R7,D61
    POP     PSW
    RET
END

⌨️ 快捷键说明

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