查看完全版本 : 请教一个简单的数码管显示问题
下面是一个简单的让数码管显示“1、2、3”符号的程序,想请教各位为什么每输入一个数字前,都要用到MOV P2,#0FFH,不然显示的字符就会不正确,我使用的是4个数字合并在一起的那种数码管,共有12个管脚,8个是段控制位(P1),4个是位控制位(P2):
MAIN:
MOV P2,#0FFH
MOV P1,#0F9H(输入1)
CLR P2.0(选第一位)
MOV P2,#0FFH
MOV P1,#0A4H(输入2)
CLR P2.1(选第二位)
MOV P2,#0FFH
MOV P1,#0B0H(输入3)
CLR P2.2(选第三位)
LJMP MAIN
END
因为你是采用的共段码的接法,而且你现在的程序是动态扫描的方式执行的,假如你不先在换位前进行mov p2,#0ffh的操作,那么你上一位的选择是有效的,也就是你就会让2个以上的数码管都显示了你现在送出的这个段码,也就是同一时刻有2个或者以上(循环一次后就是全部4位了)的数码管在显示同一个数字,再加上你这里显示是很快扫描的,所以人看起来就是1234全部叠加在一起显示了,因此看不出到底显示的是什么.
当你先把P2口置位后,在选择要显示的那一位,那么任意时刻你的数码管就只有一个在显示,所以是清晰的.
OK?
如果你不用这条指命mov p2,#0ffh,那么,三只数码管都会同时显是同一个数,因为CLR P2.0 CLR P2.1 CLR P2.2 这三条指命是命数码管发亮,一位点亮了,要显视下一位时,应该先将前一位点亮的那个息灭,可以用 SETB 这位指令令P2口对应该的位置高,也可以用 mov p2,#0ffh 将P2口全置高
谢谢楼上的2位,我已经知道mov p2,#0FFH是关断前面显示的那一位,但是如果我把程序改成这样,按我的想象应该是在第二位上出现重叠的1和2,而实际上是在第一位出现重叠的1和2,请问这是为什么?
main:
mov p2,#0FFH
mov p1,#0f9h(输入1)
clr p2.0(选第一位)
mov p1,#0a4h(输入2)
clr p2.1(选第二位)
mov p2,#0FFH
mov p1,#0b0h(输入3)
clr p2.2(选第三位)
ljmp main
end
错了,当然应该是第一位看起来出现重叠才对!
因为当你选择第一位的时候,此时显示正确的第一位数据,当选第二位 的时候,而你在位选前已经把显示数据送到P1口了,那么此时第一位就马上显示的是“2”了,至少你在点亮第二位前(clr p2.1)第一位上面就已经是先显示了‘1’,再显示了‘2’,已经是叠加了显示(人眼看起来),而你第二位永远都不可能有显示‘1’的时候,因为在第二位有效前已经是数据‘2’送到P1口了。所以。。。
OK?
谢谢1a2b3c这次总算彻底搞清楚了 ,我发现HAM中高手真不少 ,以后有了问题 ,我还来这里
main:
mov p2,#0FFH
mov p1,#0f9h(输入1)
clr p2.0(选第一位)
CALL DELAY
SETB P2.0 ;关断第一位
mov p1,#0a4h(输入2)
clr p2.1(选第二位)
CALL DELAY
SETB P2.1 ;关断第二位
mov p2,#0FFH
mov p1,#0b0h(输入3)
clr p2.2(选第三位)
CALL DELAY
SETB P2.2 ;关断第三位
ljmp main
DELAY:
.
.
.
.
end
实际上运行时需要加入一点延时吧?
实际上运行时需要加入一点延时吧?
他这里的使用无须加入延迟的,因为全部程序就是在动态扫描这几个数码管了,你所说的要加入延迟是受了平时我们做动态扫描时的影响,因为平时除了扫描外还要主要工作是做其他处理,因此扫描显示的时间很短,大概重复频率在几十Hz,每位显示时间在几个mS,那样做主要方便更多的时间用于其他处理.
而这个程序这里全部的工作就是扫描显示管子,虽然每次管子显示的时间只有几个机器周期,但是他重复频率很高,比传统的几十Hz的扫描速度已经是高出几百甚至是上千倍了,因此平均下来的显示时间每个管子也比几十Hz时高出很多很多倍,也就是相当于数码管的电流更大些,以至于显示的亮度应该还比传统的动态扫描亮度高些,如果不信可以搭个板子试试.
不好不好。实际上在延时里做别的事最好了,,,要不用定时中断。这样多好啊。。。功能强大。。
见识到51的干扰了,,用动态扫描时,旁边收音机中波段根本没法用。
不好不好。实际上在延时里做别的事最好了,,,要不用定时中断。这样多好啊。。。功能强大。。
见识到51的干扰了,,用动态扫描时,旁边收音机中波段根本没法用。
这里在针对楼主的这个代码在说事情,实际应用的时候谁会这样做啊,
另外对于干扰问题,这里实际上主要的恐怕是由于动态扫描的时候,IO口的变化引起的低频脉冲偕波落在了中波范围,你用任意一个单片机如果进行同样的操作,一样会有干扰,因为类似这个干扰是基本和使用什么样的单片机无关,只要是驱动数码管的电流\频率是一样的,那么就有同样的干扰存在.
实际上运行时需要加入一点延时吧?
他这里的使用无须加入延迟的,因为全部程序就是在动态扫描这几个数码管了,你所说的要加入延迟是受了平时我们做动态扫描时的影响,因为平时除了扫描外还要主要工作是做其他处理,因此扫描显示的时间很短,大概重复频率在几十Hz,每位显示时间在几个mS,那样做主要方便更多的时间用于其他处理.
而这个程序这里全部的工作就是扫描显示管子,虽然每次管子显示的时间只有几个机器周期,但是他重复频率很高,比传统的几十Hz的扫描速度已经是高出几百甚至是上千倍了,因此平均下来的显示时间每个管子也比几十Hz时高出很多很多倍,也就是相当于数码管的电流更大些,以至于显示的亮度应该还比传统的动态扫描亮度高些,如果不信可以搭个板子试试.
................................................
vBulletin Version 3.0.7 Translated by
NewVBB.com™ 2009.
Translated and Hacked by:
Ztbbs