⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4led.asm

📁 将数0000-9999用数码管依次循序显示 实验步骤: 1.打开伟福V3.20,创建一新文件 2.编写源代码 3.保存文件,文件名后缀为.asm 4.编译程序 5.打开Easy 51Pro
💻 ASM
字号:
;========================================
;实验名:显示0000-9999
;功    能: 将数0000-9999用数码管依次循序显示
;硬件环境: 自制单片机实验板
;软件环境: Windows操作系统
;使用软件:伟福 V3.20,
;          Easy 51Pro v2.0
;
;实验步骤:
;         1.打开伟福V3.20,创建一新文件
;         2.编写源代码
;         3.保存文件,文件名后缀为.asm
;         4.编译程序
;         5.打开Easy 51Pro v2.0将程序写进实验板
;程序范例:
;===========预定义===================
SDA        BIT   P0.2;定义数据线引脚
SCL        BIT   P0.3;定义时钟线引脚
LED0       EQU   40H ;预定义数码管
LED1       EQU   41H
LED2       EQU   42H
LED3       EQU   43H
LED4       EQU   44H
LED5       EQU   45H
LED6       EQU   46H
LED7       EQU   47H


ORG  0000H          ;主程序入口
AJMP MAIN           ;跳转到主程序
ORG  0100H          ;主程序在ROM中存放的位置
;==============主程序=====================
MAIN:
     MOV   LED0,#00H;赋初值
     MOV   LED1,#00H
     MOV   LED2,#00H
     MOV   LED3,#00H
     MOV   LED4,#00H
     MOV   LED5,#00H
     MOV   LED6,#00H
     MOV   LED7,#00H
     ACALL DISPLAY  ;调用显示子程序
     ACALL DELAY_1S ;调用延时子程序

LP2:
      INC   LED0      ;LED0中的值加一
      MOV   A,LED0    ;将LED0中的值赋给A
      CJNE  A,#10, LP ;比较转移指令,A中的值与树10比较,不等转移至行lp
      MOV   LED0, #00H;赋LED0初值

      INC   LED1
      MOV   A,LED1
      CJNE  A,#10, LP
      MOV   LED1, #00H

      INC   LED2
      MOV   A,LED2
      CJNE  A,#10, LP
      MOV   LED2, #00H

      INC   LED3
      MOV   A,LED3
      CJNE  A,#10, LP
      MOV   LED3, #00H

LP:   ACALL DISPLAY
      ACALL DELAY_1S
      AJMP  LP2
;===================================
DISPLAY:
      MOV   DPTR,#TAB   ;赋显示代码首地址
LP1:
      MOV     A,LED0    ;将LED0中的数据送A
      MOVC    A,@A+DPTR ;将A与DPTR相加的值作为代码地址,并将该代码赋给A
      ACALL   SHIFT     ;调用移位子程序

      MOV     A,LED1
      MOVC    A,@A+DPTR
      ACALL   SHIFT

      MOV     A,LED2
      MOVC    A,@A+DPTR
      ACALL   SHIFT

      MOV     A,LED3
      MOVC    A,@A+DPTR
      ACALL   SHIFT
      
      MOV     A,LED4
      MOVC    A,@A+DPTR
      ACALL   SHIFT

      MOV     A,LED5
      MOVC    A,@A+DPTR
      ACALL   SHIFT

      MOV     A,LED6
      MOVC    A,@A+DPTR
      ACALL   SHIFT

      MOV     A,LED7
      MOVC    A,@A+DPTR
      ACALL   SHIFT

    
      RET
;--------------显示代码表-------------------------------------------------------------------------- ----
TAB: DB    11H,0D7H,32H,92H,0D4H,98H,18H,0D3H
     DB    10H,90H,50H,1CH,39H,16H,38H,78H,0FFH
;------------------------------------------------------------------------
;================移位子程序============================
SHIFT:      push    A         ;将A中的值入栈保护
            MOV     R2,#8     ;循环8次
            CLR     C         ;清进位标志
            CLR     SCL       ;将时钟线拉底,准备发送数据
DL:
            RLC     A         ;将要发送的数据左移,发送入位C

            MOV     SDA,C     ;将C上的数据送上数据线

            SETB    SCL       ;将时钟线置高使数据线上的数据有效

            CLR     SCL       ;将时钟线拉底,准备下一次发送数据

            DJNZ    R2,DL
            POP     A         ;出栈恢复A值
            RET               ;子程序返回

;===================================================
; 子程序名: Delay_1s
; 功能描述: 延时约一秒钟
;===================================================
Delay_1s:
        MOV     R7,#0FH;将数0FFH送给寄存器R7,确定外循环次数
LOOP7:  MOV     R6,#0FFH;将数0FFH送给寄存器R6,确定内循环次数
LOOP6:  NOP             ;空操作指令,指令执行时间为一个机械周期
        NOP
        NOP
        NOP
        NOP
        NOP
        DJNZ    R6,LOOP6;循环转移指令,次数减一,不为零转移
        DJNZ    R7,LOOP7;循环转移指令,次数减一,不为零转移
        RET             ;子程序返回指令
;===================================================
END                     ;汇编结束伪指令


⌨️ 快捷键说明

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