【006】多位数码管动态显示 [51]
点击数:2102 发布日期:2006-4-16 16:04:00
【收藏】 【评论】 【打印】 【编程爱好者论坛】 【关闭】
实验目的:数码管动态显示多位数字。
实验参考:笨笨工作室实验五、多位数码动态显示。(查看原文)
实验板: FB51A(查看)。
该实验用到实验板的资源电路图如下:
其中P0口是段码,低电平有效。P2口是位码,高电平有效。,。该板的段码表如下:
各个数码管的段码都是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转载请标明出处.