预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

微机实验报告书 学号:姓名:班级: 同组名单:实验日期: 实验题目:七段数码管的静态显示 实验目标:掌握数码管显示数字的原理 (功能:键盘输入一位十进制数字(0~9),用七段数码管显示。) 解题思路: 静态显示:按图10(a)连接好电路,将8255的A口PA0-PA6分别与七段数码管的断码驱动输入端a-g项链,位码驱动输入端S1接+5V,S0、dp接地。编程从键盘输入一位十进制数字,在七段数码管上显示出来。 动态显示:按图10(b)连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255C口的PC1,PC0。编程在两个数码管上显示“56”。 程序框图:静态显示见图11(a),动态显示见图11(b)。 关键问题分析(静态显示): 按键判断和程序结束判断 按键来说,由于程序中必须输入数字,所以没有必要对是否按键进行判断,只需要判断按键是否在0-9之间即可。用以下程序即可: cmpal,'0' jlexit;jl,条件转移指令,即在小于时转移 cmpal,'9' jgexit;jg,条件转移指令,即在大于时转移 程序中还要用到“cmp”即比较指令,用来比较输入数与0、9的大小关系。 程序结束:如若输入的数字小于0或者大于9,必须直接跳出程序,即结束指令必须单独占用一个程序段,这样,程序顺序执行完毕也可以顺利返回DOS。 七段码显示。 实验指导书中给出了七段码的字型代码。这样一来,七段码的显示只需要用换码指令“XLAT”便可以轻松实现。前提是必须将七段码字型编成数码表以字符串的形式写进程序中。 数字键ASCII码与数值间的转换。 因为0的ASCII码为30H,所以数字键ASCII码与数值间的转换时只需减去30H即可,可用下列语句实现: subal,30h 程序清单: 静态显示: datasegment ioport equ0c800h-0280h io8255a equioport+288h io8255b equioport+28bh leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh mesg1db0dh,0ah,'Inputanum(0--9h):',0dh,0ah,'$' dataends codesegment assumecs:code,ds:data start:movax,data movds,ax movdx,io8255b;使8255的A口为输出方式 moval,80h;10000000B,控制字PA以方式0输出 outdx,al zby:movdx,offsetmesg1;显示提示信息 movah,09h int21h movah,01;从键盘接收字符 int21h cmpal,'0';是否小于0 jlexit;如若小于0,则跳转到exit退出程序 cmpal,'9';是否大于9 jgexit;如若大于9,则跳转到exit退出程序 subal,30h;将所得字符的ASCII码减30H,数字键ascii码同数值转换 movbx,offsetled;bx为数码表的起始地址 xlat;求出相应的段码 movdx,io8255a;从8255的A口输出 outdx,al jmpzby;转zby exit:movah,4ch;返回DOS int21h codeends endstart 动态显示: datasegment ioport equ0c800h-0280h io8255a equioport+28ah io8255b equioport+28bh io8255c equioport+288h leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码 buffer1db5,6;存放要显示的个位和十位 bzdw?;位码 dataends codesegment assumecs:code,ds:data start: movax,data movds,ax movdx,io8255b;将8255设为A口输出 moval,80h;10000000B,控制字PA以方式0输出 outdx,al movdi,offsetbuffer1;设di为显示缓冲区 loop2: movbh,02 zby:movbyteptrbz,bh pushdi decdi adddi,bz movbl,[di];bl为要显示的数 popdi moval,0 movdx,io8255a outdx,al movbh,0 movsi,offsetled;置led数码表偏移地址为SI addsi,bx;求出对应的led数码 moval,byteptr[si] mov