📄 4led.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 + -