📄 led1.asm
字号:
;========================================
;实验名: 八个数码管显示
;功 能:让实验板上八个数码管循环显示0-9十个数
;硬件环境: 自制单片机实验板,
;软件环境: 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 41H ;预定义数码管
ORG 0000H ;主程序入口
AJMP MAIN ;跳转到主程序
ORG 0100H ;主程序在ROM中存放的位置
;==============主程序=====================
MAIN:
MOV LED0,#00H ;赋初值
ACALL DISPLAY ;调用显示子程序
ACALL DELAY_1S ;调用延时子程序
LP2:
INC LED0
ACALL DISPLAY
ACALL DELAY_1S
MOV A,LED0
CJNE A,#9, LP2
AJMP MAIN
;===================================
DISPLAY:
MOV DPTR,#TAB ; 赋显示代码首地址
LP1:
MOV A,LED0 ;将LED0中的值送入A
MOVC A,@A+DPTR ;将A与DPTR相加的值作为代码地址,并将该代码赋给A
ACALL SHIFT ;调用移位子程序
ACALL SHIFT
ACALL SHIFT
ACALL SHIFT
ACALL SHIFT
ACALL SHIFT
ACALL SHIFT
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,#0FFH;将数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 + -