利用实验平台上的锁进插座扩展一片74LS273作为输出口,控制八个LED灯。改为从右往左两个两个亮
OUTBIT equ 0e101h ; 位控制口
CLK164 equ 0e102h ; 段控制口(接164时钟位)
DAT164 equ 0e102h ; 段控制口(接164数据位)
IN_KEY equ 0e103h ; 键盘读入口
CS245 equ 0A000h
data segment
LEDBuf db 6 dup(?) ; 显示缓冲
Num db 1 dup(2) ; 显示的数据
DelayT db 1 dup(2)
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 ch, 8 ; 送164
DLP:
push ax
mov ah, 0
test al, 80h
jz GN1
mov ah, 1
GN1:
mov dx, DAT164 ; 输出数据位
mov al, ah
and al,0fdh
out dx, al
mov dx, CLK164 ; 送出时钟脉冲
mov al, 1
or al,02h
out dx, al
mov al, 0
and al,0fdh
out dx, al
pop ax
shl al, 1
dec ch
jnz DLP
mov dx, OUTBIT
mov al, ah
out dx, al ; 显示一位八段管
push ax
mov ah, 1
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 dx,0e100h
mov al,03h
out dx,al
mov LEDBuf, 0ffh ; 显示 8.8.8.8.
mov LEDBuf+1, 0ffh
mov LEDBuf+2, 0ffh
mov LEDBuf+3, 0ffh
mov LEDBuf+4, 0
mov LEDBuf+5, 0
MLoop:
call DisplayLED ; 显示
mov dx, CS245 ; 读入开关值
in al, dx
mov cl ,al
and al, 0fh
mov ah, 0
mov bx, offset LEDMAP
add bx, ax
mov al, [bx]
mov LEDBuf+5, al
mov al,cl
shr al,2
and al, 0fh
mov ah, 0
mov bx, offset LEDMAP
add bx, ax
mov al, [bx]
mov LEDBuf+4, al
jmp MLoop
Start endp
code ends
end start