📄 4-2.asm
字号:
;A口工作在方式0,输入,接8个开关,B口工作在方式0,输出,接八段显示器;由8253产生1S的脉冲,PC7接该脉冲,来个脉冲将读取A口,显示在屏幕上,同时;显示在八段显示器上,PC0,PC1作为位码信号
;A口接8个开关,B口接八段显示器,pc7接8253out1,cs55接288,cs53接280,pc0,pc1接位码控制
data segment
t0 equ 280h
t1 equ 281h
t2 equ 282h
ctl53 equ 283h
pa equ 288h
pb equ 289h
pc equ 28ah
ctl55 equ 28bh
table db 3fh,06h,5bh,4fh,66h,6dh,7dh,27h,7fh,6fh,77h,7ch,39h,5eh,79h,71h ;共阴极
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov cl,4 ;移位循环次数
L5:
;产生1s脉冲
mov dx,ctl53
mov al,00100101B
out dx,al ;写控制字,选择模式2,产生连续负脉冲
mov dx,t0
mov al,10h
out dx,al ;写计数值,计数1000次
mov dx,ctl53
mov al,01100111B
out dx,al ;写控制字,选择模式3,产生连续方波
mov dx,t1
mov al,10h
out dx,al ;写计数值,计数1000次
mov dx,ctl55 ;写控制字
mov al,10011000B
out dx,al
mov dx,pc
L0: call print
in al,dx
test al,80h ;pc7为高电平,继续读
jnz L0
mov dx,pa ;读A口,低4位接开关
in al,dx
mov ch,al ;将读到的数据保存到ch
call crt
L1: in al,dx ;使负脉冲结束
test al,80h
jz L1
jmp L5
mov ah,4ch
int 21h
;**********CRT显示***********
crt proc near ;要显示的数保存在ch中
mov al,ch
shr al,cl
and al,0fh
cmp al,0ah
jc L2
add al,07h
L2: add al,30h
mov dl,al
mov ah,02h
int 21h
mov al,ch
and al,0fh
cmp al,0ah
jc L3
add al,07h
L3: add al,30h
mov dl,al
mov ah,02h
int 21h
ret
crt endp
;**********LED显示***********
print proc near
mov al,ch
and al,0f0h ;取高4位
rol al,cl ;右移4位
lea bx,table
xlat ;八段显示器译码
mov dx,pb
out dx,al ;送数据至B口
mov dx,pc ;高位显示
mov al,02h ;送高位位码00000010
out dx,al
mov al,0 ;送间隔
out dx,al
mov al,ch
and al,0fh ;取低4位
lea bx,table
xlat ;八段显示器译码
mov dx,pb
out dx,al ;送数据至B口
mov dx,pc
mov al,01h ;送低位位码0000001
out dx,al
mov al,0 ;送间隔
out dx,al
ret
print endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -