正在学习51的数码管以及中止,计划运用六位数码管完成一个时钟的功用。
但运用数码管输出时,假如不增加延时查办,那么一向有显现紊乱的现象,有时彻底无法分辩清楚数字。
假如在传送完数据今后延时1ms,显现紊乱状况会好转。
一起发现延时的时刻越长,显现作用越好。可是当然,相应的显现安稳程度也会下降,即数码管业绩。
程序中在送完段选数据今后现已运用了参阅书中的“消影”查办:
1 dula=1;2 P0=table[k];3 dula=0;4 P0=0xff;//“消影”
可是这个查办仅仅在有延时的状况下才有作用,假如我不写延时查办,那么显现仍旧紊乱。
虽然在显现进程延时不会影响中止的计时,可是我总不想依靠for查办写出来的延时。= =
所以自己就尝试了许多办法,想要处理这个问题,我的方针便是不写延时查办让数码管正常显现。
我有试过先向P0传送数据,然后翻开锁存器,立刻封闭。
如:
1 P0=table[k];2 dula=1;3 dula=0;
可是问题仍旧
也尝试过在翻开任一锁存器之前,再锁一次另一锁存器(即送一次低电平),依然无效。
最终发现需要在输出数据之前加这么一段代码:
1 P0=0xff;2 wela=1;3 wela=0;4 P0=0x00;5 dula=1;6 dula=0;//初始化消除搅扰
加了这段代码,数码管显现不再紊乱。查办的功用就类似于初始化一下锁存器的内容。
通过两天的研讨,总算理解了期中的猫腻。现在发出来跟我们共享一下:(转载请阐明出处)
数码管之所以有“影”,底子原因是段选,位选数据无法一起送达。
详细解说一下:当我改动了位选的值后(改动了要显现的数码管),接下来才改动段选的值(改动要显现的数字)。而在这中心有细小的时刻距离,位选的值改动了,可是段选的值没变。也便是说,我改动了要显现的数码管,可是这个数码管显现的是上一个数码管的数字!想到这儿,我有如醍醐灌顶,恍然大悟!当然,反之亦然,假如你是先段选再位选,相同有问题。请我们自己考虑。
所以不难解说上面那段代码的作用了,便是在输出之前将之前那个数码管显现空(或许不挑选任何数码管)。
所以明显这个初始化代码还能够简化,可是要取决于你是先段选仍是先位选。假如先位选,那么就要清空段选数据。
1 P0=0x00;2 dula=1;3 dula=0;
反过来也相同。假如先段选,那么清空位选数据即可。
百度百科有人问了一个差不多的问题,这儿引证过来供我们参阅:
经验总结:数码管的显现,段选数据和位选数据要紧贴,中心不要搀杂其他查办。换句话说,核算在先,最终一次性传送数据。