8255和led数码管显示-微机原理(精)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

data segment

ioport equ 2400h

io8255a equ ioport+008h

io8255b equ ioport+00bh

led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh mesg1 db 0dh,0ah,'Input a num (0--9h:',0dh,0ah, '$' data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov dx,io8255b ; 使 8255的 A 口为输出方式mov al,80h ;10000000B ,控制字 PA 以方式 0输出out dx,al

zby: mov dx,offset mesg1 ; 显示提示信息

mov ah,09h

int 21h

mov ah,01 ; 从键盘接收字符

int 21h

cmp al,'0' ; 是否小于 0

jl exit ; 如若小于 0,则跳转到 exit 退出程序

cmp al,'9' ; 是否大于 9

jg exit ; 如若大于 9,则跳转到 exit 退出程序

sub al,30h ; 将所得字符的 ASCII 码减 30H ,数字键 ascii 码同数值转换 mov bx,offset led ;bx 为数码表的起始地址

xlat ; 求出相应的段码

mov dx,io8255a ; 从 8255的 A 口输出

out dx,al

jmp zby ; 转 zby

exit: mov ah,4ch ; 返回 DOS

int 21h

code ends

end start

动态显示 :

data segment

ioport equ 0c800h-0280h

io8255a equ ioport+28ah

io8255b equ ioport+28bh

io8255c equ ioport+288h

led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ; 段码buffer1 db 5,6 ; 存放要显示的个位和十位

bz dw ? ; 位码

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov dx,io8255b ; 将 8255设为 A 口输出

mov al,80h ;10000000B ,控制字 PA 以方式 0输出 out dx,al mov di,offset buffer1 ; 设 di 为显示缓冲区

loop2: mov bh,02

zby: mov byte ptr bz,bh

push di

dec di

add di, bz

mov bl,[di] ;bl 为要显示的数

pop di

mov al,0

mov dx,io8255a

out dx,al

mov bh,0

mov si,offset led ; 置 led 数码表偏移地址为 SI add si,bx ; 求出对应的 led 数码mov al,byte ptr [si]

mov dx,io8255c ; 自 8255A 的口输出

out dx,al

mov al,byte ptr bz ; 使相应的数码管亮

mov dx,io8255a

out dx,al

mov cx,3000

delay: loop delay ; 延时

mov bh,byte ptr bz

shr bh,1

jnz zby

mov dx,0ffh

mov ah,06

int 21h

je loop2 ; 有键按下则退出mov dx,io8255a

mov al,0 ; 关掉数码管显示out dx,al

mov ah,4ch ; 返回

int 21h

code ends

end start

相关文档
最新文档