久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3142|回復: 13
打印 上一主題 下一主題
收起左側

這個帖有趣"關于單片機LED燈循環點亮程序調試問題"

[復制鏈接]
跳轉到指定樓層
樓主
ID:917199 發表于 2021-5-21 21:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
ttp://www.zg4o1577.cn/bbs/dpj-207328-1.html
注意樓主的問題是為什么沒有停下來,嚇面是原程序:
#include <REGX52.H>
void delay(int t);
void main()
{
        char i;
        while(i<=5)
        {
                for(i=0;i<5;i++)
                {
                P2=0x00;
                delay(60000);
                P2=0xff;
                delay(60000);
                i=i+1;
                }
        }               
}
void delay(int t)
{
        while(--t);
}
我將它修改如下再仿真仍然沒停,事情是不是變得有趣了?
char i=0;
        while(i<5)
        {
                for(i;i<5;i++)
                {
無論實物還是仿真,很期待大家的測試結果
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:342822 發表于 2021-5-21 22:10 | 只看該作者
#include <REGX52.H>
void delay(int t);
void main()
{
        char i;
        while(i<5)
        {
                for(i=0;i<5;i++)
                {
                P2=0x00;
                delay(60000);
                P2=0xff;
                delay(60000);
               // i=i+1;
                }
        }
   while(1);            
}

void delay(int t)
{
        while(--t);
}
回復

使用道具 舉報

板凳
ID:342822 發表于 2021-5-21 22:16 | 只看該作者
對比上面的“i”有什么不同
#include <REGX52.H>
void delay(int t);
void main()
{
        char i;
        while(i<=5)
        {
                for(i=0;i<5;i++)
                {
                P2=0x00;
                delay(60000);
                P2=0xff;
                delay(60000);
               // i=i+1;
                }
i=i+1;
        }
   while(1);            
}

void delay(int t)
{
        while(--t);
}
回復

使用道具 舉報

地板
ID:917199 發表于 2021-5-22 08:32 | 只看該作者
taotie 發表于 2021-5-21 22:10
#include
void delay(int t);
void main()

請注意問題是FOR循環中I>5以后為什么沒有跳出,而不是點個破燈!             !!!!!!!!!!!!!!!
回復

使用道具 舉報

5#
ID:342822 發表于 2021-5-22 09:07 | 只看該作者
你沒有搞懂循環嵌套--內外循環體
下面程序正常運行

#include <REGX52.H>
void delay(int t);
void main()
{
        char i;
        while(i<5)
        {
                for(i=0;i<5;i++)
                {
               
                }
        }
   while(1)
       {
                P2=0x00;
                delay(60000);
                P2=0xff;
                delay(60000);

       }


            
}

void delay(int t)
{
        while(--t);
}
回復

使用道具 舉報

6#
ID:917199 發表于 2021-5-22 09:30 | 只看該作者
taotie 發表于 2021-5-21 22:16
對比上面的“i”有什么不同
#include
void delay(int t);

謝謝您的回復,能具體解釋下或者給個關鍵詞我去搜索?   用 您的代碼完美的閃爍5次,但結束循環的關鍵是WHILE,I=i+1的位置只改變了閃爍次數

                                                         
回復

使用道具 舉報

7#
ID:917199 發表于 2021-5-22 09:38 | 只看該作者
taotie 發表于 2021-5-22 09:07
你沒有搞懂循環嵌套--內外循環體
下面程序正常運行

您這個是一直在閃?
回復

使用道具 舉報

8#
ID:917199 發表于 2021-5-22 10:01 | 只看該作者
我不理解之處在于將原代碼改成下面這樣
#include <REGX52.H>
void delay(int t);
void main()
{
        char i;
        while(i<5)
        {
                for(i=0;i<5;i++)
                {
                P2=0x00;
                delay(60000);
                P2=0xff;
                delay(60000);
                i=i+1;
                }
        }               
}
void delay(int t)
{
        while(--t);
}
若干次FOR循環后i=5跳出,while循環似乎也跳出了,這時候P2不是應該保持最后的狀態么,為什么還在閃?  
順便說下之前認為還閃說明沒跳出while所以迷惑
回復

使用道具 舉報

9#
ID:824490 發表于 2021-5-22 10:14 | 只看該作者
簡單地說,就是原代碼是雙重嵌套,while()嵌入for(),for()能跳出,而while()跳不出,所以就一直在while()內運行。更改的方法也簡單,單獨用while()或單獨用for()就可以了。
i=5
while(i)
{
P2=0x00;
  delay(60000);
  P2=0xff;
   delay(60000);
i--;
}


for(i=0;i<5;i++)
{
P2=0x00;
  delay(60000);
  P2=0xff;
   delay(60000);
}
回復

使用道具 舉報

10#
ID:342822 發表于 2021-5-22 10:28 | 只看該作者
timerzero 發表于 2021-5-22 09:38
您這個是一直在閃?

跳出嵌套循環進入最后的死循環當然是
回復

使用道具 舉報

11#
ID:342822 發表于 2021-5-22 10:34 | 只看該作者
用Proteus 8 調試模式,觀察變量“i”的變化你就明白了~~
回復

使用道具 舉報

12#
ID:342822 發表于 2021-5-22 12:00 | 只看該作者
用Proteus 8 調試模式,觀察變量“i”的變化。源程序還是跳出FOR循環,只是程序末尾沒有 while(1);語句他又重新返回執行 while(i<5)。



#include <REGX52.H>
void delay(int t);
void main()
{
        char i;
        while(i<5)
        {
                for(i=0;i<5;i++)
                {
                P2=0x00;
                delay(60000);
                P2=0xff;
                delay(60000);
                i=i+1;
                }
        }
while(1);            
}
void delay(int t)
{
        while(--t);
}
回復

使用道具 舉報

13#
ID:917199 發表于 2021-5-22 16:36 | 只看該作者
taotie 發表于 2021-5-22 12:00
用Proteus 8 調試模式,觀察變量“i”的變化。源程序還是跳出FOR循環,只是程序末尾沒有 while(1);語句他 ...

那個還不會,用的土辦法   代碼里加P1={i];不僅跳出了for循環還跳出了while循環,
以前一直以為這種情況下cpu是處在空載狀態,什么都不干掛在那里,真沒想到語句他又重新返回執行 while(i<5)
謝謝您的指點
回復

使用道具 舉報

14#
ID:917199 發表于 2021-5-22 16:41 | 只看該作者
名字不是重點 發表于 2021-5-22 10:14
簡單地說,就是原代碼是雙重嵌套,while()嵌入for(),for()能跳出,而while()跳不出,所以就一直在while()內 ...

感謝回復,原鐵確實跳不出while,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费黄色的网站 | 九色porny自拍视频 | 紧缚调教一区二区三区视频 | 国产精品成人品 | av日韩一区 | 一区二区三区在线观看视频 | 欧美日韩专区 | 国家一级黄色片 | 日韩免费网| 91中文字幕在线观看 | 国产精品不卡视频 | 国产高清在线 | 国产精品久久久久一区二区三区 | 国产91丝袜在线熟 | 日韩一区二区在线视频 | 9191在线观看 | 日韩亚洲一区二区 | 五月婷婷丁香 | 高清国产午夜精品久久久久久 | 日本精品一区二区三区在线观看视频 | 亚洲高清视频在线 | 美女一区| 欧美片网站免费 | 一区二区三区四区免费视频 | 亚洲国产精品99久久久久久久久 | 亚洲精品一 | 2022精品国偷自产免费观看 | 免费国产视频 | 欧美精品一区二区免费视频 | 久久成人18免费网站 | 亚洲在线中文字幕 | 国产ts人妖一区二区三区 | 国产精品综合视频 | 久久久久黑人 | 色姑娘av| 伊人网一区 | 午夜免费网站 | 国产精品亚洲一区 | 久久丝袜| 伊人国产精品 | 欧美专区在线 |