资源描述:
《多位数码管动态显示的实验》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、【006】多位数码管动态显示 [51] 实验目的:数码管动态显示多位数字。实验参考:笨笨工作室实验五、多位数码动态显示。(查看原文)实验板:FB51A(查看)。该实验用到实验板的资源电路图如下:其中P0口是段码,低电平有效。P2口是位码,高电平有效。P2.0口控制第1个数码管,一直到P2.7口控制第8个。该板的段码表如下: 各个数码管的段码都是p0口的输出,即各个数码管输入的段码都是一样的,为了使其分别显示不同的数字,可采用动态显示的方式,即先只让最低位显示0(含点),经过一段延时,再只让次低位显示1,如此类推。由视觉暂留,只要我们的延时时间足够短,就能够使得数码的显示看起来非常的
2、稳定清楚。过程如下图。 采用上述方法思路编写如下: org 0000hstart:mov a,#08h ;0 ;段码 mov p0,a mov p2,#01h ;位码 lcalldelay_1ms mov a,#0abh ;1 mov p0,a mov p2,#02h lcalldelay_1ms mov a,#12h ;2 mov p0,a mov p2,#04h l
3、calldelay_1ms mov a,#22h ;3 mov p0,a mov p2,#08h lcalldelay_1ms mov a,#0a1h ;4 mov p0,a mov p2,#10h lcalldelay_1ms mov a,#24h ;5 mov p0,a mov p2,#20h lcalldelay_1ms mov a,#04h ;6 mov p0,a mov
4、 p2,#40h lcalldelay_1ms; mov a,#0aah ;7; mov p0,a mov p0,#0aah ;感觉用这句和上面两句实现一样,可能这种习惯以后会有用吧 mov p2,#80h lcalldelay_1ms ljmp startdelay_1ms:mov r6,#2temp: mov r5,#0ffh djnzr5,$ djnzr6,temp retend下载到板上得到测结果为从低到高八位分别显示0到7(含点)
5、。★上述方法逐次给P0或者P2赋值,一方面程序的复杂程度增加,另外一方面会使得程序的灵活性降低。如果要改变显示的数字,程序改动起来很麻烦。 所以要用51单片机中常用的一种方法:查表法。例如P0口输出段码时,我们可以把要显示的段码放在一个表格中,然后每次从这个表格里面取数,送到P0口即可。P2口输出位码时,可以把要用的位码放在另一个表格里,每次从此表中取数,送入P2口。这样,如果要改变显示的数字,只需要改变表格里面的数。 org 0000hstart:mov r7,#0ffh ;r7,r6查表时送入变址寄存器a(因自加1后为0,所以预置ffh) mov r6
6、,#0ffhloop: lcallplay1 ;调用显示段码子程序 lcallplay2 ;调用显示位码子程序 lcalldelay_1ms cjne a,#80h,loop ;判断是否到了最左边的数,即第8个位码 ajmp startplay1: ;查表求段码子程序 ; mov a,r7 ; inc a; mov r7,a inc r7 ;这2句和上面三条语句实现功能相同 mo
7、v a,r7 ;a在这里做变址寄存器 mov dptr,#table1;表首址送dptr,dptr做基址寄存器 movc a,@a+dptr ;基址寄存器加变址寄存器寻址 mov p0,a retplay2: ;查表求位码子程序(原理同play1) mov a,r6 inc a