实验2:8255七段数码管静动态显示

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

微机实验报告书

学号:姓名:班级:

同组名单:实验日期: 2012.12.21

实验题目:七段数码管的静态显示

实验目标:掌握数码管显示数字的原理

(功能:键盘输入一位十进制数字(0~9),用七段数码管显示。)

解题思路:

1.静态显示:按图 10(a)连接好电路,将8255的A口PA0-PA6分别与七段

数码管的断码驱动输入端a-g项链,位码驱动输入端S1接+5V,S0、dp

接地。编程从键盘输入一位十进制数字,在七段数码管上显示出来。

2.动态显示:按图10(b)连接好电路,七段数码管段码连接不变,位码驱

动输入端S1,S0接8255C口的PC1,PC0。编程在两个数码管上显示“56”。程序框图:静态显示见图11(a),动态显示见图11(b)。

关键问题分析(静态显示):

1、按键判断和程序结束判断

按键来说,由于程序中必须输入数字,所以没有必要对是否按键进行判断,只需要判断按键是否在0-9之间即可。用以下程序即可:

cmp al,'0'

jl exit ; jl,条件转移指令,即在小于时转移

cmp al,'9'

jg exit ;jg, 条件转移指令,即在大于时转移程序中还要用到“cmp”即比较指令,用来比较输入数与0、9的大小关系。程序结束:如若输入的数字小于0或者大于9,必须直接跳出程序,即结束指令必须单独占用一个程序段,这样,程序顺序执行完毕也可以顺利返回DOS。

2、七段码显示。

实验指导书中给出了七段码的字型代码。这样一来,七段码的显示只需要用换码指令“XLAT”便可以轻松实现。前提是必须将七段码字型编成数码表以字符串的形式写进程序中。

3、数字键ASCII码与数值间的转换。

因为0的ASCII码为30H,所以数字键ASCII码与数值间的转换时只需减去30H即可,可用下列语句实现:

sub al,30h

程序清单:

静态显示:

data segment

ioport equ 0c800h-0280h

io8255a equ ioport+288h

io8255b equ ioport+28bh

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 ;延时

相关文档
最新文档