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

上传人:灯火****19 文档编号:138058919 上传时间:2020-07-13 格式:DOC 页数:6 大小:279KB
返回 下载 相关 举报
实验2:8255七段数码管静动态显示.doc_第1页
第1页 / 共6页
实验2:8255七段数码管静动态显示.doc_第2页
第2页 / 共6页
实验2:8255七段数码管静动态显示.doc_第3页
第3页 / 共6页
实验2:8255七段数码管静动态显示.doc_第4页
第4页 / 共6页
实验2:8255七段数码管静动态显示.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《实验2:8255七段数码管静动态显示.doc》由会员分享,可在线阅读,更多相关《实验2:8255七段数码管静动态显示.doc(6页珍藏版)》请在金锄头文库上搜索。

1、微机实验报告书学号: 姓名: 班级: 同组名单: 实验日期: 2012.12.21 实验题目: 七段数码管的静态显示 实验目标: 掌握数码管显示数字的原理 (功能:键盘输入一位十进制数字(09),用七段数码管显示。) 解题思路:1. 静态显示:按图 10(a)连接好电路,将8255的A口PA0-PA6分别与七段数码管的断码驱动输入端a-g项链,位码驱动输入端S1接+5V,S0、dp接地。编程从键盘输入一位十进制数字,在七段数码管上显示出来。2. 动态显示:按图10(b)连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255C口的PC1,PC0。编程在两个数码管上显示“56”。程

2、序框图:静态显示见图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、 七段码显示。实

3、验指导书中给出了七段码的字型代码。这样一来,七段码的显示只需要用换码指令“XLAT”便可以轻松实现。前提是必须将七段码字型编成数码表以字符串的形式写进程序中。3、 数字键ASCII码与数值间的转换。因为0的ASCII码为30H,所以数字键ASCII码与数值间的转换时只需减去30H即可,可用下列语句实现:sub al,30h程序清单: 静态显示:data segmentioportequ 0c800h-0280hio8255aequ ioport+288hio8255bequ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmes

4、g1 db 0dh,0ah,Input a num (0-9h):,0dh,0ah,$data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255b ;使8255的A口为输出方式mov al,80h ;10000000B,控制字PA以方式0输出out dx,alzby: mov dx,offset mesg1 ;显示提示信息mov ah,09hint 21hmov ah,01 ;从键盘接收字符int 21hcmp al,0 ;是否小于0jl exit ;如若小于0,则跳转到exit退出程序

5、cmp al,9 ;是否大于9jg exit ; 如若大于9,则跳转到exit退出程序sub al,30h ;将所得字符的ASCII码减30H,数字键ascii码同数值转换mov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码mov dx,io8255a ;从8255的A口输出out dx,aljmp zby ;转zbyexit: mov ah,4ch ;返回DOSint 21hcode endsend start动态显示:data segmentioportequ 0c800h-0280hio8255aequ ioport+28ahio8255bequ iop

6、ort+28bhio8255cequ ioport+288hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 5,6 ;存放要显示的个位和十位bz dw ? ;位码data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,io8255b ;将8255设为A口输出mov al,80h ;10000000B,控制字PA以方式0输出out dx,almov di,offset buffer1 ;设di为显示缓冲区loop2:mov bh

7、,02zby: mov byte ptr bz,bhpush didec diadd di, bzmov bl,di ;bl为要显示的数pop di mov al,0 mov dx,io8255a out dx,almov bh,0mov si,offset led ;置led数码表偏移地址为SIadd si,bx ;求出对应的led数码mov al,byte ptr simov dx,io8255c ;自8255A的口输出out dx,almov al,byte ptr bz ;使相应的数码管亮mov dx,io8255aout dx,almov cx,3000delay:loop dela

8、y ;延时mov bh,byte ptr bzshr bh,1jnz zbymov dx,0ffhmov ah,06int 21hje loop2 ;有键按下则退出mov dx,io8255amov al,0 ;关掉数码管显示out dx,almov ah,4ch ;返回int 21hcode endsend start运行结果:静态显示:在键盘上输入一个0-9的任意数字,会显示在数码管上。动态显示:在程序中写入6,5,读取顺序是第一位是个位,第二位是十位,数码管上显示56.问题与讨论:1、键盘输入不符合要求如何处理?如若键盘输入不符合要求,则立即跳到结束程序段,返回到DOS。2、用8255的

9、其他端口输出怎么处理?由于其他端口输出并没有用到,控制字中写成0或者1都行,一般习惯上不用到填0即可。3、在两位七段数码管间切换显示怎么处理?通过硬件连线即可实现。七段数码管连接和S1连接不变。将S0不接地,接到+5V,并同时将S1和S0接到两个不同的逻辑开关。程序LINK运行完毕。当S1逻辑开关为高电平时(S0逻辑开关为低电平),在第一个数码管显示;当S0逻辑开关为高电平时(S1逻辑开关为低电平),在第二个数码管显示,这样便实现了在两位数码管间的切换。小结(体会和收获)静态显示是从键盘获取一个数值,然后通过程序比较得出键盘输入的数字量,由PA端口输出到数码管上。而动态显示是将两个数字写入程序中,由程序读取数字然后按位输出到数码管上显示。原理说得简单,但是程序本身个人感觉还是相当复杂的,尤其动态显示,程序如何读取已输入的数字,以及读取数字的顺序都会影响到数码管的显示。 静态显示过程中,我们碰到数码管一直显示8的状态,这并不是预期的效果。后来发现,由于在程序中用符号定义伪指令EQU将所要用到的算口地址用“io8255*”定义,但在写程序的过程中又写进去了十六进制实际地址,导致出现问题,经过很长时间的调试方才解决。 由于我们小组做了全部两个选做实验,所以这次将动态显示的报告和静态显示写在一起,由于将大部分精力放在静态显示,所以动态显示并未做充分的问题思考和讨论。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号