实验四.docx

上传人:b****5 文档编号:5181482 上传时间:2022-12-13 格式:DOCX 页数:11 大小:210.49KB
下载 相关 举报
实验四.docx_第1页
第1页 / 共11页
实验四.docx_第2页
第2页 / 共11页
实验四.docx_第3页
第3页 / 共11页
实验四.docx_第4页
第4页 / 共11页
实验四.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验四.docx

《实验四.docx》由会员分享,可在线阅读,更多相关《实验四.docx(11页珍藏版)》请在冰豆网上搜索。

实验四.docx

实验四

实验四七段数码管显示实验

一、实验目的

掌握数码管显示数字的原理。

二、实验内容

1.静态显示:

数码管为共阴极,通过BCD码译码驱动器CD4511驱动,其输入端A~D输入4位BCD码,位码输入低电平选中。

按图4-1连接好电路,将8255的A口PA0~PA3与七段数码管LED1的BCD码驱动输入端A1~D1相连,8255的A口PA4~PA7与七段数码管LED2的BCD码驱动输入端A2~D2相连,8255的B口PB0~PB3与七段数码管LED3的BCD码驱动输入端A3~D3相连,8255的B口PB4~PB7与七段数码管LED4的BCD码驱动输入端A4~D4相连,8255的C口PC0~PC3分别与七段数码管LED4~LED4的位驱动输入端DG1~DG4相连。

编程从键盘上每输入4个0~9数字,在七段数码管LED4~LED4上依次显示出来。

图4-1

2.动态显示:

数码管为共阴极,段码采用相同驱动,输入端加高电平,选中的数码管对应段点亮,位码采用同相驱动,位码输入端低电平选中,按图4-2连接好电路,图中只画了2个数码管,实际是8个数码管,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~g相连(32TCI0模块上的J1连32LED8模块J2),8255的C口的PC0~PC7接七段数码管的段码驱动输入(32TCI0模块上的J3连32LED8模块J1),跳线器K1连2和3。

编程在8个数码管上显示“12345678”。

按任意键推出运行。

图4-2

三、编程提示

1.由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不用,编程时需要了解当前的微机使用那段IO地址并进行处理。

2.对实验内容1,七段数码管字型代码与输入的关系如下表:

显示字型

g

e

f

d

c

b

a

输入DCBA

0

0

1

1

1

1

1

1

0000

1

0

0

0

0

1

1

0

0001

2

1

0

1

1

0

1

1

0010

3

1

0

0

1

1

1

1

0011

4

1

1

0

0

1

1

0

0100

5

1

1

0

1

1

0

1

0101

6

1

1

1

1

1

0

1

0110

7

0

0

0

0

1

1

1

0111

8

1

1

1

1

1

1

1

1000

9

1

1

0

1

1

1

1

1001

3.对实验内容1,七段数码管字型代码与输入的关系如下表:

四、参考流程图

1.实验内容一的参考流程图

图4-3

2.实验内容二的参考流程图

图4-4

五、参考程序

1.内容一的参考程序

源程序清单如下:

datasegment

ioportequ0c400h-0280h

io8255aequioport+288h

io8255bequioport+289h

io8255cequioport+28ah

io8255kequioport+28bh

leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh

mesg1db0dh,0ah,'Inputanum(0--9),otherkeyisexit:

',0dh,0ah,'$'

bzdb?

czdb04h

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,io8255k;使8255的A口为输出方式

movax,80h

outdx,al

sss0:

movsi,offsetbz

movcx,04h

sss1:

movdx,offsetmesg1;显示提示信息

movah,09h

int21h

movah,01;从键盘接收字符

int21h

cmpal,'0';是否小于0

jlexit;若是则退出

cmpal,'9';是否大于9

jgexit;若是则退出

subal,30h;将所得字符的ASCII码减30H

mov[si],al;存入显示缓冲区

incsi;显示缓冲区指针加1

deccx;判断输入满4个数字吗?

jnzsss1;不满继续

movsi,offsetbz;从显示缓冲区取第一个数字的BCD码

moval,[si]

andal,0fh;屏蔽高四位暂存AL

incsi;显示缓冲区指针加1

movah,[si];取第二个数字的BCD码到AH

salah,4h;右移4次到高四位

addal,ah;两个BCD码合并成一个字节

movbl,al;暂存入BL

incsi

moval,[si];取第三个数字的BCD码

andal,0fh

incsi

movah,[si];取第四个数字的BCD码到AH

salah,4h

addah,al

moval,ah

movdx,io8255a;从8255的A口输出(后两个数字)

outdx,al

moval,bl

movdx,io8255b;从8255的B口输出(前两个数字)

outdx,al

moval,0f0h

movdx,io8255c;从8255的C口输出位码

outdx,al

movdl,0ffh

movah,06

int21h

jesss0;有键按下则退出

exit:

movah,4ch;返回

int21h

codeends

endstart

2.内容二的参考程序

源程序清单如下:

datasegment

ioportequ0C400h-0280h

io8255cequioport+28ah

io8255kequioport+28bh

io8255aequioport+288h

leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码

buffer1db01h,02h,03h,04h,05h,06h,07h,08h;存放要显示的十位和个位

condb?

;位码

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,io8255k;将8255设为A口C口输出

moval,80h

outdx,al

loop2:

moval,08h;设置数码管位计数器初值到CON

movbyteptrcon,al

movsi,offsetbuffer1;置显示缓冲器指针SI

movah,7fh;置位码初值

disp0:

movcx,0ffffh

movbl,ds:

[si];取显示缓冲区显示值存BX

movbh,0h

pushsi

movdx,io8255c;位码从C口输出

moval,ah

outdx,al

movdx,io8255a

movsi,offsetled;置led数码表偏移地址为SI

addsi,bx;求出对应的led数码

moval,byteptr[si]

outdx,al;段码从A口输出

disp1:

loopdisp1;延时

movcx,0ffffh

disp2:

loopdisp2

rorah,01h;位码右移1位

popsi

incsi;显示缓冲区指针加1

moval,byteptrcon

decal

movbyteptrcon,al

jnzdisp0;数码管位计数器减1为0吗?

,不为0继续

movdx,io8255a;为0,关数码管显示

moval,0

outdx,al

movdl,0ffh

movah,06

int21h

jeloop2;有键按下则退出

movah,4ch;返回

int21h

codeends

endstart

4.实验总结:

在这次的试验中,我们主要做的是验证性试验,首先我们将编写好的程序执行了一遍,但是发现输出的结果不是预想的,出现这个问题的原因是什么的,经过一番的思考后,发现是高低位的问题,后来通过调整线序,经过一番的调整后,结果输出正确了。

后来在经过研究代码后,发现不用调整连线顺序也可以解决问题,于是我就仔细的看代码,后来修改了代码,问题也同样解决了。

在本次的实验中我学会了解决问题的途径是多种的,我们应该学会变通,当然也增加了我阅读汇编程序的能力,锻炼了我的动手能力。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1