找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 777|回复: 8
打印 上一主题 下一主题
收起左侧

C51单片机LED流水灯显示程序问题分析

[复制链接]
跳转到指定楼层
楼主
ID:1077493 发表于 2023-5-14 22:38 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人初学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循环点亮。按本人粗浅的认识,两个程序运行的效果应该不足以造成肉眼能分辨的差异,其中原因请大家多多指教。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 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;
                }
        }
}
回复

使用道具 举报

板凳
ID:1077493 发表于 2023-5-15 09:55 来自手机 | 只看该作者
非常感谢前辈指导。我把二进制1000 0000错算成256了。请问第2个while循环里的条件改为i<=128是否也可以呢?>
回复

使用道具 举报

地板
ID:1077493 发表于 2023-5-15 10:01 来自手机 | 只看该作者
wulin 发表于 2023-5-15 06:28
第一段程序中while (i

非常感谢前辈指导。我把二进制1000 0000错算成256了。请问第2个while循环里的条件改为i<=128是否也可以呢?
回复

使用道具 举报

5#
ID:77589 发表于 2023-5-15 11:10 | 只看该作者
pipi-lcy 发表于 2023-5-15 10:01
非常感谢前辈指导。我把二进制1000 0000错算成256了。请问第2个while循环里的条件改为i

试试一试就不知道了!学习需要不断地去尝试,验证自己的想法!
回复

使用道具 举报

6#
ID:213173 发表于 2023-5-15 15:13 | 只看该作者
pipi-lcy 发表于 2023-5-15 10:01
非常感谢前辈指导。我把二进制1000 0000错算成256了。请问第2个while循环里的条件改为i

i<=128当然可以,建议下载一个仿真软件,这种简单问题很容易验证。
回复

使用道具 举报

7#
ID:1077493 发表于 2023-5-15 15:22 来自手机 | 只看该作者
wulin 发表于 2023-5-15 15:13
i

感谢帮助
回复

使用道具 举报

8#
ID:1077493 发表于 2023-5-15 15:22 来自手机 | 只看该作者
Longan.Wang 发表于 2023-5-15 11:10
试试一试就不知道了!学习需要不断地去尝试,验证自己的想法!

感谢帮助
回复

使用道具 举报

9#
ID:1074206 发表于 2023-5-16 10:16 | 只看该作者
流水灯可以用左移 右移 库函数,很方便
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表