欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1777|回復: 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 單片機教程網

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