📄 led1hong.asm
字号:
org 0000h
jmp 40h
org 40h
start:
acall shu1liu
acall shu1Fliu
acall shu18liu
sjmp start
;*************************************************************************************
;子程序:shu18liu
;功能:LED0显示1,之后LED1显示2,按数码管序依次增大到LED7显示8,再按此规律重复2次
;*************************************************************************************
shu18liu:
mov p2,#0ffh ;清显示p2为位控制
mov r2,#3 ;数码管显示的循环次数
mov dptr,#table ;dptr存放字形表的首地址
rot2:mov r0,#0 ;R0存放字形表的偏移量
mov r1,#0feh ;R1存放LED位选择代码
acall disp
djnz r2,rot2
ret
;*****************************************************************************************
;子程序:shu1Fliu
;功能:LED0显示1,之后分别有LED1显示2,...LED7显示8,然后下次LED0显示2,依数码管序依次增大
; 如此下去,直到下次LED0显示8,...LED7显示F为止
;*****************************************************************************************
shu1Fliu:
mov p2,#0ffh ;清显示p2为位控制
mov dptr,#table ;dptr存放字形表的首地址
mov r2,#0 ;R2存放字形表的偏移量
rot1:mov 20h,r2
mov r0,20h ;R0存放当前字形表的偏移量
mov r1,#0feh ;R1存放LED位选择代码
acall disp
inc r2
cjne r2,#08h,rot1 ;为使第1个显示器只显示到8
ret
;**************************************************************************************
;子程序:shu1liu
;功能:数码1在数码管上的流动,先在LED0显示,再在LED1显示,依次循环下去,显示到LED7,如此
; 循环2次
;**************************************************************************************
shu1liu: ;数码1的在显示器流动
mov p2,#0ffh ;清显示p2为位控制
mov r2,#3 ;数码管显示的循环次数
rot:mov r0,#0f9h ;R0存放"1"的字形码
mov r1,#0feh ;R1存放LED位选择代码
disp1:
mov p0,r0 ;将字形码由p0口输出
mov a,r1
mov p2,a ;选择哪个LED有显示,即输出位选码
acall delay1s ;延时1s
rl a ;移位,指向下一个该显示的LED
mov r1,a
cjne r1,#0feh,disp1
djnz r2,rot
ret
;***********************************************************
;子程序:delay1s
;功能:延时1s
;***********************************************************
delay1s:mov r7,#100 ;R7存放计数循环值
delay10ms: ;延时10ms
mov tmod,#10h ;T1工作在定时方式1
mov th1,#0d8h
mov tl1,#0f0h
setb tr1 ;启动T1工作
again:jbc tf1,next
sjmp again
next: djnz r7,delay10ms
ret
;*******************************************************************
;子程序:disp(需要使用数码转换对应字形表)
;功能:用来显示数码,并进行移位,为下个数码的显示准备
;*******************************************************************
disp:
extrance:
mov a,r0
movc a,@a+dptr ;查字形码表table
mov p0,a ;将字形码由p0口输出
mov a,r1
mov p2,a ;选择哪个LED有显示,即输出位选码
acall delay1s ;延时1s
inc r0 ;增1为了指向下一个字形码
rl a ;移位,指向下一个该显示的LED
mov r1,a
cjne r1,#0feh,extrance
ret
table:db 0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,84h;1~F字形码
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -