微机原理用74LS273扩展I/O口实验代码修改

利用实验平台上的锁进插座扩展一片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

1个回答

一般这种和硬件打交道的问题自己充分调试下是不难解决的。再不行问问厂家。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐