segme
tassumecscodedsdatamovaxdata将8255设为A口输出10000000B,控制字PA以方式0输出设di为显示缓冲区movdsaxmovdxio8255bmoval80houtdxalmovdioffsetbuffer1loop2zbymovbh02movbyteptrbzbhpushdidecdiadddibzmovbldipopdimoval0movdxio8255aoutdxalmovbh0movsioffsetledaddsibxmovalbyteptrsimovdxio8255coutdxalmovalbyteptrbzmovdxio8255aoutdxalmovcx3000delayloopdelay延时使相应的数码管亮自8255A的口输出置led数码表偏移地址为SI求出对应的led数码bl为要显示的数dbdbdwsegme
tequ0c800h0280hequioport28ahequioport28bhequioport288h3fh06h5bh4fh66h6dh7dh07h7fh6fh段码56存放要显示的个位和十位位码
fmovbhbyteptrbzshrbh1j
zzbymovdx0ffhmovi
tjeah0621hloop2有键按下则退出关掉数码管显示返回
movdxio8255amoval0outdxalmovah4chi
t21hcodee
dse
dstart
运行结果:
静态显示:在键盘上输入一个09的任意数字,会显示在数码管上。。动态显示:在程序中写入6,5,读取顺序是第一位是个位,第二位是十位,数码管上显示56
问题与讨论:
1、键盘输入不符合要求如何处理?如若键盘输入不符合要求,则立即跳到结束程序段,返回到DOS。2、用8255的其他端口输出怎么处理?由于其他端口输出并没有用到,控制字中写成0或者1都行,一般习惯上不用到填0即可。3、在两位七段数码管间切换显示怎么处理?通过硬件连线即可实现。七段数码管连接和S1连接不变。将S0不接地,接到5V,并同时将S1和S0接到两个不同的逻辑开关。程序LINK运行完毕。当S1逻辑开关为高电平时(S0逻辑开关为低电平),在第一个数码管显示;当S0逻辑开关为高电平时(S1逻辑开关为低电平),在第二个数码管显示,这样便实现了在两位数码管间的切换。
小结(体会和收获)
静态显示是从键盘获取一个数值,然后通过程序比较得出键盘输入的数字量,由PA端口输出到数码管上。而动态显示是将两个数字写入程序中,由程序读取数字然后按位输出到数码管上显示。原理说得简单,但是程序本身个人感觉
f还是相当复杂的,尤其动态显示,程序如何读取已输入的数字,以及读取数字的顺序都会影响到数码管的显示。静态显示过程中,我们碰到数码管一直显示8的状态,这并不是预期的效果。后来发现,由于在程序中用符号定义伪指令EQU将所要用到的算口地址用“io8255”定义,但在写程序的过程中又写进去了十六进制实际地址,导致出现问题,经过很长时间的调试方才解决。由于我们小组做了全部两个选做实验,所以这次将动态显示的报告和静态显示写在一起r