找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机控制32盏灯,只有一半亮?程序问题在哪?求大师指点。

[复制链接]
跳转到指定楼层
楼主
ID:736565 发表于 2021-4-2 14:52 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#include<intrins.h>
void delay(unsigned int k)
{
while(k--);
}
void main()
{
unsigned char i;
for (i=0;i<32;i++)
{
unsigned char w=0xfe;
         w=_crol_(w,i);
if(i<8)
{
P0=w;
        delay(5000);
P0=0xff;
}
else if(8<=i<16)
{
P1=w;
          delay(5000);
P1=0xff;
  }
else if(16<=i<24)
{
P2=w;
        delay(5000);
P2=0xff;
}                    
else
{
P3=w;
          delay(5000);
P3=0xff;
}
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:477474 发表于 2021-4-2 16:42 | 只看该作者
本帖最后由 lsqtzj 于 2021-4-2 16:51 编辑

if((8<=i<16)这样写有错;
可以这样:
if(i<8)
{};
else if(i<16)
{};
else if(i<24)
{};
else if(i<32)
{};
回复

使用道具 举报

板凳
ID:213173 发表于 2021-4-2 17:12 | 只看该作者
#include<reg51.h>
#include<intrins.h>

void delay(unsigned int k)
{
        while(k--);
}

void main()
{
        unsigned long w;
        w=0xfffffffe;
        P0=w;
        delay(30000);
        while(1)
        {
                w=_lrol_(w,1);       
                P0=w;
                P1=w>>8;
                P2=w>>16;
                P3=w>>24;
                delay(30000);
        }
}
回复

使用道具 举报

地板
ID:736565 发表于 2021-4-2 17:21 来自手机 | 只看该作者
lsqtzj 发表于 2021-4-2 16:42
if((8

大师,我想要的效果是32盏LED灯,逐一被点亮。您的这种写法,实现不了呀。
回复

使用道具 举报

5#
ID:97838 发表于 2021-4-2 19:05 | 只看该作者
不亮灯的端口有没有设置为输出?
回复

使用道具 举报

6#
ID:736565 发表于 2021-4-2 20:47 来自手机 | 只看该作者
lsqtzj 发表于 2021-4-2 16:42
if((8

感谢大师,已解决。
回复

使用道具 举报

7#
ID:213173 发表于 2021-4-2 21:43 | 只看该作者
yqq123456 发表于 2021-4-2 17:21
大师,我想要的效果是32盏LED灯,逐一被点亮。您的这种写法,实现不了呀。

32盏LED灯逐一被点亮。
#include<reg51.h>

void delay(unsigned int k)
{
        while(k--);
}

void main()
{
        unsigned long w=0xffffffff;
        P0=w;
        delay(30000);
        while(1)
        {
                w<<=1;       
                P0=w;
                P1=w>>8;
                P2=w>>16;
                P3=w>>24;
                delay(30000);
                if(w==0x00000000)
                {
                        w=0xffffffff;
                        P0=w;
                        P1=w>>8;
                        P2=w>>16;
                        P3=w>>24;
                        delay(30000);
                }
        }
}
回复

使用道具 举报

8#
ID:477474 发表于 2021-4-3 18:49 | 只看该作者
yqq123456 发表于 2021-4-2 20:47
感谢大师,已解决。

我不是什么大师,是个老菜鸟,只能给个语句正确写法的结构,你就明白改对。wulin才是大师,他给出的写法,简练、明了,一样能实现你的想法且不用做多次条件判断。下面我用仿真,验证了的,端口顺序有点不同,是选P0,P2,P3,再是P1。

仿真.JPG (318.03 KB, 下载次数: 27)

仿真.JPG
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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