51单片机定时器延时

发布网友 发布时间:2024-10-24 07:56

我来回答

5个回答

热心网友 时间:2024-10-25 03:44

P2=0;P0=table[i]; /*数码管0246位按显示花样 */
P2=2;P0=table[i]; /*数码管0246位按显示花样 */
P2=4;P0=table[i]; /*数码管0246位按显示花样 */
P2=6;P0=table[i]; /*数码管0246位按显示花样 */

这4个中间没有延时,就相当于只执行了最后一个

热心网友 时间:2024-10-25 03:48

我在开发板里运行了下,发现了几个问题。现象就是发光二极管正常工作,数码管只是显示P2=6的花样。这样问题就很明显了,程序本身没有问题啊,只是P2=0到P2=6,时间太短了,以12M晶振为例,每条指令4us,只是执行了32us,停留的时间太短导致肉眼是看不见的。至于P2=6为什么会显示,那是因为你主程序里延时了1S左右。
既然你能想到num==40,那为什么想不到num==20呢?在if前面再加个if(num==20),就是1S,然后把流水灯放到if里面就行了。这样延时函数都不需要了。
至于你要显示的是第0246位的数码管,你可以再定义一个num2=0,再num2++;
switch(num2)
{
case 1: P2=1;.....;break;
case 2: P2=2...
case 3: P2=4...
case 4: P2=6...num2=0;break
}

就是不知道50ms显示一次会不会闪烁。

热心网友 时间:2024-10-25 03:49

你的灯在主程序while里只能执行一次啊,挪到头了就不会在亮了,你加个判断程序吧。数码管好像没什么问题。

热心网友 时间:2024-10-25 03:49

你的编程很不合理,看得我费尽。你首先判断是不是1秒定时和2s的延时准确不,数码显示不能放在定时里显示,直接到wile循环里,要有一个循环扫描而且还得准确延时。

热心网友 时间:2024-10-25 03:45

8个数码管的0246位每隔2秒取变化一个数...
-------------
这8个数码管,应该是动态显示吧?
是不是,同时显示出来8位?
还是仅仅显示一位,隔2秒钟,换下一位?

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