淘豆网
下载此文档放大查看缩小查看   1/17
0/100
您的浏览器不支持进度条
更多>>该用户其他文档
下载所得到的文件列表
多位数码管动态显示.doc
文档介绍:
【006】多位数码管动态显示 [51]
点击数:2102    发布日期:2006-4-16 16:04:00  
【收藏】 【评论】 【打印】 【编程爱好者论坛】 【关闭】
 
实验目的:数码管动态显示多位数字。
实验参考:笨笨工作室实验五、多位数码动态显示。(查看原文)
实验板: FB51A(查看)。
该实验用到实验板的资源电路图如下:
其中P0口是段码,低电平有效。P2口是位码,高电平有效。P2.0口控制第1个数码管,一直到P2.7口控制第8个。该板的段码表如下:
    
各个数码管的段码都是p0口的输出,即各个数码管输入的段码都是一样的, 为了使其分别显示不同的数字, 可采用动态显示的方式,即先只让最低位显示0(含点),经过一段延时,再只让次低位显示1,如此类推。由视觉暂留,只要我们的延时时间足够短,就能够使得数码的显示看起来非常的稳定清楚。过程如下图。
           
 
采用上述方法思路编写如下:
       org   0000h
start: mov   a,#08h       ;0    ;段码
       mov   p0,a
       mov   p2,#01h            ;位码
       lcall delay_1ms
       mov   a,#0abh      ;1    
       mov   p0,a
       mov   p2,#02h
       lcall delay_1ms
       mov   a,#12h       ;2
       mov   p0,a
       mov   p2,#04h
       lcall delay_1ms
       mov   a,#22h       ;3
       mov   p0,a
       mov   p2,#08h
       lcall delay_1ms
       mov   a,#0a1h      ;4
       mov   p0,a
       mov   p2,#10h
       lcall delay_1ms
       mov   a,#24h       ;5
       mov   p0,a
       mov   p2,#20h
       lcall delay_1ms
       mov   a,#04h       ;6
       mov   p0,a
       mov   p2,#40h
       lcall delay_1ms
;      mov   a,#0aah      ;7
;      mov   p0,a
       mov   p0,#0aah     ;感觉用这句和上面两句实现一样,可能这种习惯以后会有用吧
       mov   p2,#80h
       lcall delay_1ms
       ljmp  start
delay_1ms: mov  r6,#2
temp:      mov  r5,#0ffh
           djnz r5,$
           djnz r6,temp
           ret
end
下载到板上得到测结果为从低到高八位分别显示0到7(含点)。
★上述方法逐次给P0或者P2赋值,一方面程序的复杂程度增加,另外一方面会使得程序的灵活性降低。如果要改变显示的数字,程序改动起来很麻烦。 所以要用51单片机中常用的一种方法:查表法。例如P0口输出段码时,我们可以把要显示的段码放在一个表格中,然后每次从这个表格里面取数,送到P0口即可。P2口输出位码时,可以把要用的位码放在另一个表格里,每次从此表中取数,送入P2口。这样,如果要改变显示的数字,只需要改变表格里面的数。
       org   0000h
start: mov   r7,#0ffh     ;r7,r6查表时送入变址寄存器a (因自加1后为0,所以预置ffh)
       mov   r6,#0ffh
loop:  lcall play1        ;调用显示段码子程序
       lcall play2        ;调用显示位码子程序
       lcall delay_1ms
       cjne  a,#80h,loop  ;判断是否到了最左边的数,即第8个位码
       ajmp  start
play1:                    ;查表求段码子程序              内容来自淘豆网www.taodocs.com转载请标明出处.