微机接口实验-数码管显示程序详解

本次讲解的针对的是共阴极数码管,先把原理图和代码放上来
用到的原理图,其中左下方后面应该是印刷错误,X5X6印成了X3X4
在这里插入图片描述

代码段二
数码管里共8个LED,由于说明了给定的是共阴极数码管,即阴极是接在一起的,通过原理图下方的7407驱动器接在了X1-X6,阳极分别通过1K电阻上拉。所以当X1-X6接8255的IO口时,可以通过IO口输出低电平,将阴极拉低。同时8个段选A-Dp也引出了外部接口可以接到8255IO上,通过8255IO选择具体是哪一个LED亮,所以点亮数码管的原理已经很清楚了,X1-X6可以选择哪一个数码管亮,A-Dp可以选择数码管上具体的哪一段LED亮。
本代码对应的8255 A0-A5连X1-X6,B口连A-Dp。

接下来看显示程序,PUSH AX就不多说了,防止影响调用前后的程序,MOV DL,0DFH 和MOV AL, DL 这两句,实际上就是将11011111给了AL。

接下来看AGAIN,PUSH DX就是将你现在的选中某个数码管的位码保存起来,对应上文的11011111,一会要用的时候POP就可以了。接着通过8255的A口输出了AL现在的值,本文没给出来,连线图中,8255的A口A0-A5接的是X1-X6,当然根据自己的连线可以更改这里的数字和使用的IO口,所以其实就是向X1-X6口输出了011111,通过7407缓冲,将数码管1的阴极拉低了,其他都为高,也就是选中了第一个数码管,然后就到了MOV AL,[SI] 刚才将SI里的值赋为了3000,其实前文的代码里是将3000作为了显示缓冲区的,也就是此时的偏移地址3000对应的地址中存放着要显示的数的十进制形式,那么此时AL的值就应该是想显示的值的,然后通过MOV BX,OFFSET DTALBE,将DTALE表的偏移地址放到了BX,接着将AX的高8位清0,然后通过ADD指令,将AX与BX相加,也就是将要显示的数加到了BX存放的值上,此时,通过MOV AL,[BX] 将BX中的值对应的偏移地址 加上 段基址 所合成的地址中 对应的值放到了AL去,也就是将DTABLE对应你要显示的数的段选码放到了AL去,这里其实就是对应了汇编里的XLAT指令。通过表的首地址和你给予的表中的偏移地址,找到了你想要的数的地址,此处BX存放的就是表的首地址,AL原来存放的就是对应到表中的偏移地址,比如你想要表里5对应的显示码,那么AL就是5,此时通过上述操作,运行结果就是AL中存放着5对应的显示码。然后通过接着8255B口的A-Dp,输入显示码,就可以在这个数码管显示你想显示的数字。然后延时,SI自增去找你的下一个想显示的数字,此时POP DX,将位码放到AL,TEST AL,01H就是想测试一下你的位码最后一位是不是0,因为下文的ROR是循环右移,想显示6个数码管的6个数字,就要循环位移6次,最后就到了11111110,此时的位码最后一位是0,代表每个管子都显示了对应的数字了,此时TEST就会使标志位变0,然后JZ就可以跳转到结束去了,否则代表还没有把每个数码管都设置显示的数字,就要循环右移位码,然后跳转回AGAIN选择下一个数码管,根据SI对应的地址中存放的数,继续显示。

以上就是本次的讲解,纯属个人理解,如有不对,请指正
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值