找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1586|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

C51單片機(jī)LED流水燈顯示程序問題分析

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1077493 發(fā)表于 2023-5-14 22:38 來自觸屏版 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本人初學(xué)C51單片機(jī),在實(shí)現(xiàn)流水燈效果時(shí),首先使用如下程序進(jìn)行控制:
```
#include <reg52.h>
unsigned int a;
void main()
{
        while(1)
        {
                int i=1;
                while (i<=256)
                {
                        P1=~i;
                        a=50000;
                        while (a--);
                        i*=2;
                }
        }
}
```
發(fā)現(xiàn)當(dāng)最下方第8個(gè)LED燈亮后,經(jīng)短暫延遲后最上方第1個(gè)LED才點(diǎn)亮。而若使用以下程序:
```
#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++;
                }
        }
}

```
則無此現(xiàn)象,能正常實(shí)現(xiàn)LED循環(huán)點(diǎn)亮。按本人粗淺的認(rèn)識(shí),兩個(gè)程序運(yùn)行的效果應(yīng)該不足以造成肉眼能分辨的差異,其中原因請(qǐng)大家多多指教。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2023-5-15 06:28 | 只看該作者
第一段程序中while (i<=256),只有當(dāng)  i*=2; 增值到512才能跳出循環(huán),所以循環(huán)要延遲一個(gè)移動(dòng)時(shí)間。
#include <reg52.h>
unsigned int a;
void main()
{
        while(1)
        {
                int i=1;
                while (i<=256)//此處多循環(huán)了一次
                {
                        P1=~i;
                        a=50000;
                        while (a--);
                        i*=2;
                }
        }
}

//以上程序?qū)懛ú灰?guī)范,改如下寫法
#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;
                }
        }
}
回復(fù)

使用道具 舉報(bào)

板凳
ID:1077493 發(fā)表于 2023-5-15 09:55 來自觸屏版 | 只看該作者
非常感謝前輩指導(dǎo)。我把二進(jìn)制1000 0000錯(cuò)算成256了。請(qǐng)問第2個(gè)while循環(huán)里的條件改為i<=128是否也可以呢?>
回復(fù)

使用道具 舉報(bào)

地板
ID:1077493 發(fā)表于 2023-5-15 10:01 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2023-5-15 06:28
第一段程序中while (i

非常感謝前輩指導(dǎo)。我把二進(jìn)制1000 0000錯(cuò)算成256了。請(qǐng)問第2個(gè)while循環(huán)里的條件改為i<=128是否也可以呢?
回復(fù)

使用道具 舉報(bào)

5#
ID:77589 發(fā)表于 2023-5-15 11:10 | 只看該作者
pipi-lcy 發(fā)表于 2023-5-15 10:01
非常感謝前輩指導(dǎo)。我把二進(jìn)制1000 0000錯(cuò)算成256了。請(qǐng)問第2個(gè)while循環(huán)里的條件改為i

試試一試就不知道了!學(xué)習(xí)需要不斷地去嘗試,驗(yàn)證自己的想法!
回復(fù)

使用道具 舉報(bào)

6#
ID:213173 發(fā)表于 2023-5-15 15:13 | 只看該作者
pipi-lcy 發(fā)表于 2023-5-15 10:01
非常感謝前輩指導(dǎo)。我把二進(jìn)制1000 0000錯(cuò)算成256了。請(qǐng)問第2個(gè)while循環(huán)里的條件改為i

i<=128當(dāng)然可以,建議下載一個(gè)仿真軟件,這種簡(jiǎn)單問題很容易驗(yàn)證。
回復(fù)

使用道具 舉報(bào)

7#
ID:1077493 發(fā)表于 2023-5-15 15:22 來自觸屏版 | 只看該作者
wulin 發(fā)表于 2023-5-15 15:13
i

感謝幫助
回復(fù)

使用道具 舉報(bào)

8#
ID:1077493 發(fā)表于 2023-5-15 15:22 來自觸屏版 | 只看該作者
Longan.Wang 發(fā)表于 2023-5-15 11:10
試試一試就不知道了!學(xué)習(xí)需要不斷地去嘗試,驗(yàn)證自己的想法!

感謝幫助
回復(fù)

使用道具 舉報(bào)

9#
ID:1074206 發(fā)表于 2023-5-16 10:16 | 只看該作者
流水燈可以用左移 右移 庫函數(shù),很方便
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表