找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2517|回復: 7
打印 上一主題 下一主題
收起左側(cè)

51單片機控制32盞燈,只有一半亮?程序問題在哪?求大師指點。

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:736565 發(fā)表于 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 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:477474 發(fā)表于 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 發(fā)表于 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 發(fā)表于 2021-4-2 17:21 來自手機 | 只看該作者
lsqtzj 發(fā)表于 2021-4-2 16:42
if((8

大師,我想要的效果是32盞LED燈,逐一被點亮。您的這種寫法,實現(xiàn)不了呀。
回復

使用道具 舉報

5#
ID:97838 發(fā)表于 2021-4-2 19:05 | 只看該作者
不亮燈的端口有沒有設(shè)置為輸出?
回復

使用道具 舉報

6#
ID:736565 發(fā)表于 2021-4-2 20:47 來自手機 | 只看該作者
lsqtzj 發(fā)表于 2021-4-2 16:42
if((8

感謝大師,已解決。
回復

使用道具 舉報

7#
ID:213173 發(fā)表于 2021-4-2 21:43 | 只看該作者
yqq123456 發(fā)表于 2021-4-2 17:21
大師,我想要的效果是32盞LED燈,逐一被點亮。您的這種寫法,實現(xiàn)不了呀。

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 發(fā)表于 2021-4-3 18:49 | 只看該作者
yqq123456 發(fā)表于 2021-4-2 20:47
感謝大師,已解決。

我不是什么大師,是個老菜鳥,只能給個語句正確寫法的結(jié)構(gòu),你就明白改對。wulin才是大師,他給出的寫法,簡練、明了,一樣能實現(xiàn)你的想法且不用做多次條件判斷。下面我用仿真,驗證了的,端口順序有點不同,是選P0,P2,P3,再是P1。

仿真.JPG (318.03 KB, 下載次數(shù): 27)

仿真.JPG
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表