标题: C51单片机LED流水灯显示程序问题分析 [打印本页]

作者: pipi-lcy    时间: 2023-5-14 22:38
标题: C51单片机LED流水灯显示程序问题分析
本人初学C51单片机,在实现流水灯效果时,首先使用如下程序进行控制:
```
#include <reg52.h>
unsigned int a;
void main()
{
        while(1)
        {
                int i=1;
                while (i<=256)
                {
                        P1=~i;
                        a=50000;
                        while (a--);
                        i*=2;
                }
        }
}
```
发现当最下方第8个LED灯亮后,经短暂延迟后最上方第1个LED才点亮。而若使用以下程序:
```
#include <reg52.h>
unsigned int a;
void main()
{
        while(1)
        {
                int i=1,n=1;
        while (n<=8)
                {
                        P1=~i;
                        a=50000;
                        while (a--);
                        i*=2;
                        n++;
                }
        }
}

```
则无此现象,能正常实现LED循环点亮。按本人粗浅的认识,两个程序运行的效果应该不足以造成肉眼能分辨的差异,其中原因请大家多多指教。
作者: wulin    时间: 2023-5-15 06:28
第一段程序中while (i<=256),只有当  i*=2; 增值到512才能跳出循环,所以循环要延迟一个移动时间。
#include <reg52.h>
unsigned int a;
void main()
{
        while(1)
        {
                int i=1;
                while (i<=256)//此处多循环了一次
                {
                        P1=~i;
                        a=50000;
                        while (a--);
                        i*=2;
                }
        }
}

//以上程序写法不规范,改如下写法
#include <reg52.h>
unsigned int a;
void main()
{
        int i;
        while(1)
        {
                i=1;
//                while (i<=255)//两种写法都行
                while (i!=256)
                {
                        P1=~i;
                        a=50000;
                        while (a--);
                        i*=2;
                }
        }
}

作者: pipi-lcy    时间: 2023-5-15 09:55
非常感谢前辈指导。我把二进制1000 0000错算成256了。请问第2个while循环里的条件改为i<=128是否也可以呢?>
作者: pipi-lcy    时间: 2023-5-15 10:01
wulin 发表于 2023-5-15 06:28
第一段程序中while (i

非常感谢前辈指导。我把二进制1000 0000错算成256了。请问第2个while循环里的条件改为i<=128是否也可以呢?
作者: Longan.Wang    时间: 2023-5-15 11:10
pipi-lcy 发表于 2023-5-15 10:01
非常感谢前辈指导。我把二进制1000 0000错算成256了。请问第2个while循环里的条件改为i

试试一试就不知道了!学习需要不断地去尝试,验证自己的想法!
作者: wulin    时间: 2023-5-15 15:13
pipi-lcy 发表于 2023-5-15 10:01
非常感谢前辈指导。我把二进制1000 0000错算成256了。请问第2个while循环里的条件改为i

i<=128当然可以,建议下载一个仿真软件,这种简单问题很容易验证。
作者: pipi-lcy    时间: 2023-5-15 15:22
wulin 发表于 2023-5-15 15:13
i

感谢帮助
作者: pipi-lcy    时间: 2023-5-15 15:22
Longan.Wang 发表于 2023-5-15 11:10
试试一试就不知道了!学习需要不断地去尝试,验证自己的想法!

感谢帮助
作者: kk17328    时间: 2023-5-16 10:16
流水灯可以用左移 右移 库函数,很方便




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1