数码管动态显示

发布网友 发布时间:2022-04-22 00:49

我来回答

4个回答

热心网友 时间:2023-06-23 20:33

我先来帮你分析一下这个程序:
(1)到(4)的功能是由P0口给出数码管的段码。我猜想在P0口和数码管的段码线之间是一个锁存器,这样能够保证当P0口的数据变化之后,数码管的数字不变化。这时,数码管不能显示相应数字,因为位码线还没有被选中。

(5)到(8)的功能是由P0口给出数码管的位码。这时位码线被选中,在段码和位码的同时作用下,数码管被激活,显示shi对应的数字。

然后延时delay(5);

执行到时(10),由于P0给出了ge的段码,而位码还没改变,这时候当然要在第一个数码管上显示第二个数码管的内容。

执行到(14),位码改变,第二个数码管被选中,这时段码和位码共同作用,第二个数码管显示ge所对应的数字。

然后延时。

由于第一个数码管显示ge的时间很短,只有不到十个机器周期,而正常显示的时间很长,这个时间是delay(5),所以看不出ge曾经在第一个数码管上经过,所以看上去显示效果是对的。

这也就是为什么要加延时程序(8)和(16)。如果不加的话,第一个数码管会快速的在ge和shi之间进行“切换”,最后的结果是数码管一显示8,而数码管二正常显示,你可以试一下。

因此回答如下:
问题一:延时程序的目的是为了掩盖数码管一上的“切换”,给你的眼睛“错觉”。
问题二:没有讲究,是锁存器的锁存特性造成的,延时程序很好解决了这一问题。

楼上的回答很不准确,我不赞同。即使把13.14.15和9.10.11换一下,如果不加延时程序,问题同样存在,只不过成了数字shi经过数码管二而已。

郭天祥讲的时候,程序不是现成的,是当时现场写的,出现错误也是正常的。

热心网友 时间:2023-06-23 20:34

位选之后再段选,肯定会在该显示1的地方突然显示2了,然后有瞬间正常显示,没法避免,郭天祥的程序里加了一个对P0清零,只加在了段选后,是因为段选只针对一个数码管,而位选是对好几个数码管,影响比较大,其实位选后P0口的数据对之后的段选也是有影响的,和你提的问题影响一样,只是这两个问题都能用延时的方法解决,或者看不出来,所以就忽略了,单步运行肯定会不合理,但高速下就没问题了,就像现在的电灯泡,其实都是一闪一闪的,50HZ,只是频率比较高,看不出来,其实没有完美,只有看起来很好

热心网友 时间:2023-06-23 20:34

1.数码管的编码有没有错误!数码管分为共阴极和共阳极。
2.你这个程序count1是秒钟,count2是分钟。
display(count1/10,count1%10,count2/10,count2%10);对于display(秒的十位,秒的个位,分的十位,分的个位)好像不是对应(分十位,分个位,秒十位,秒个位)。
3.unsigned char code bit_tab[]=;//片选中的0XFD是选中P3.1不是P3.5,所以有一位数码管不亮是正常的。
4.你所说的乱码是什么意思?数字不对还是不显示数字?

热心网友 时间:2023-06-23 20:35

郭天祥的书吧?
问题1:我觉得延时其实可以不加,你可以尝试一下不加延时,效果应该一样的,他加了延时主要是让你能明白动态显示的原理,之前延时是比较长的,所以感觉有闪烁,现在延时短了,就不闪烁了
问题2:执行到10的时候,1显示的是2的数据,是因为这个时候,位选选中的还是数码管1,而位选发出的已经是2的数据了,所以1显示的还是2的数据,后面位选选中了2,数据就到2上了,这个应该没什么讲究,你可以把13.14.15和9.10.11换一下,效果应该是一样的,这样单步运行的时候,数据也没有问题了。

以上,希望对你有帮助。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com