微机原理实验报告-实验三-七段数码管

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验三七段数码管一、实验目的:进一步熟悉8255,掌握数码管显示数字的原理二、实验原理:1、实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。2、七段数码管的字形码:3、在实验2中加入键盘是否有输入判断,如有则去读取键盘输入数据,并加入提示信息,比如“输入十位数”,“输入个位数”,从键盘读入的数据放入十位和个位数据定义区,取代要显示的数据。4、只需要添加两位变量作为缓存,一个记录键盘输入的值,一个记录循环减1的结果,将其通过数码管显示出来,减至0时重载键盘输入的值。三、实验步骤:静态显示:将8255的A口PA0~PA6分别与气短数码管的段码驱动输入端A~G相连,位码驱动输入端S1接+5V(选中),S0、DP接地(关闭)。动态显示:七段数码管段码不变,位码驱动输入端S1,S0接8255C口的PC1,PC0。8253的接法参考第二次实验的接法,CLK0接入1MHz,CLK1接8255的PC7。1、在两个数码管上显示两位数字,要求延时应用8253硬件延时2、可以改变数码管显示数字,从键盘读入两位数字,并在数码管显示出来。3、对输入数据进行倒计时计数,时间显示在数码管上,计到0重新开始。四、流程图:YNNYY开始对8255进行初始化编程设置8255C口输出A口输入从键盘读入数据根据十位获得段码,高位输出至数码管延时根据个位获得段码,低位输出至数码管延时循环显示这个数n?按键?要输出的数字等于0?要输出的数据减1重新载入输入的数据五、实验结果:实验结果如预期一致,可以键盘输入倒计时的值,时间显示在数码管上,计数到0重新计数。六、程序代码:;******************************************;*数码管显示对键盘输入数据进行倒计时计数*;******************************************datasegmentio8255aequ288hio8255cequ28ahio8255_modeequ28bhio8253aequ280hio8253bequ281hio8253cequ282hmesg1db0dh,0ah,'Inputanum(00--99)forhighposition,otherkeyisexit:',0dh,0ah,'$'mesg2db0dh,0ah,'Inputanum(00--99)forlowposition,otherkeyisexit:',0dh,0ah,'$'leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码bufferdb?,?;存放要显示的个位和十位buffer1db?,?;存放临时的个位和十位用于减一bzdw?;位码dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,io8255_mode;将8255的A口为输出movax,88houtdx,almovdx,offsetmesg1;显示提示信息movah,09hint21hmovah,01;从键盘接收十位字符int21hcmpal,'0';是否小于0jlexit;若是则退出cmpal,'9';是否大于9jgexit;若是则退出subal,30hmovbuffer,al;将输入的十位数存入指定地址movdx,offsetmesg2;显示提示信息movah,09hint21hmovah,01hint21hcmpal,'0';判断方法同十位jlexitcmpal,'9'jgexitsubal,30hmovbuffer+1,al;将输入的个位数存入指定地址jmpresetexit:movah,4ch;返回int21hreset:moval,buffermovbuffer1,almoval,buffer+1movbuffer1+1,almovdi,offsetbuffer1;取得显示缓冲区的地址loop1:calltimeloop2:movbh,02h;数码管循环显示部分lll:movbyteptrbz,bhpushdidecdiadddi,bzmovbl,[di];bl为要显示的数popdimoval,0movdx,io8255coutdx,almovbh,0movsi,offsetled;置led数码表偏移地址为SIaddsi,bx;求出对应的led数码moval,byteptr[si]movdx,io8255a;自8255A的口输出outdx,almoval,byteptrbz;使相应的数码管亮movdx,io8255coutdx,almovcx,3000delay:loopdelay;延时movbh,byteptrbzshrbh,1jnzlllmovdx,io8255cinal,dxtestal,80hjnzsetjmploop2set:testbuffer1+1,0fhjzset1decbuffer1+1jmploop1set1:testbuffer1,0fhjzresetdecbuffer1movbuffer1+1,09hjmploop1timeprocnear;定时一秒的子程序movdx,io8253c;向8253写控制字moval,37h;使0通道为工作方式3outdx,almovax,1000h;循环计数初值1000movdx,io8253aoutdx,al;先写低字节moval,ahoutdx,al;后写高字节movdx,io8253cmoval,71h;设8253通道1工作方式0outdx,almovax,1000h;循环计数初值1000movdx,io8253boutdx,al;先写低字节moval,ahoutdx,al;后写高字节rettimeendpcodeendsendstart七、实验总结:本次实验需要结合上次实验的知识,应用8253硬件延时,因此增加了些许难度,代码的修改也不少。实验中,接线比较简单,但是程序的Debug花了不少的时间。这跟微机原理的理论知识忘记了许多有关,现在抓紧复习微机原理的知识,做实验前预习好实验,争取在实验前把代码打好。

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功