📄 b.asm
字号:
OUTBIT equ 8002h ;位码输出地址
OUTSEG equ 8004h ;段码输出口地址
data segment
LEDBuf db 6 dup(?) ; 显示缓冲区
Num db 1 dup(?) ; 显示的起始数字
DelayT db 1 dup(?) ;显示LEDBuf区数字的重复次数
LEDMAP: ; 八段管显示段码表
db 3fh,06h,5bh,4fh,66h,6dh,7dh,,07h
db 7fh,6fh,77h,7ch,39h,5eh, 79h,71h
data ends
code segment
assume cs:code, ds:data
Delay proc near ; 延时过程
push ax
push cx
mov al, 0
mov cx,ax
loop $
pop cx
pop ax
ret
Delay endp
DisplayLED proc near;显示过程
mov bx, offset LEDBuf
mov cl, 6 ; 共6个八段管
mov ah, 00100000b ; 从左边开始显示
DLoop: mov dx, OUTBIT
mov al, 0 ; 关闭所有八段管
out dx,al
mov al, [bx] ;开始逐位显示
mov dx, OUTSEG
out dx,al
mov dx, OUTBIT
mov al, ah
out dx, al ; 显示一位八段管
push ax
mov ah, 0fh
call Delay
pop ax
shr ah, 1
inc bx
dec cl
jnz DLoop
mov dx, OUTBIT
mov al, 0
out dx,al ; 关所有八段管
ret
DisplayLED endp
Start proc near ;主过程
mov ax, data
mov ds, ax
mov Num, 0
MLoop: inc Num ;从数字1开始显示
mov ch,Num
mov ah,0
mov cl,6
mov bx,offset LEDBuf
FillBuf: mov si, offset LEDMap
mov al,ch
and al,0fh ;只显示一位数字
add ax,si
mov si,ax
mov al,[si] ; 数据转换成显示段码
mov [bx], al ; 显示码存入显示缓冲
inc bx
inc ch
dec cl
jnz FillBuf
mov DelayT,8 ;LEDBuf区的6个数字显示8次
DispAgain:
call DisplayLED ; 显示
dec DelayT
jnz DispAgain
jmp MLoop
Start endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -