全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2109
推到 Plurk!
推到 Facebook!

while迴圈用法問題....已拿掉while可是還是一樣

答題得分者是:daniel__lee
iestlpeggy
一般會員


發表:17
回覆:18
積分:7
註冊:2007-12-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-07-08 20:48:04 IP:59.105.xxx.xxx 訂閱
請問,我想把這一個程式變成只執行一次
然後我去改了while()裡面的值,可是迴圈還是一樣一直執行
因為我是讓他抓DATA_7SEG的值,
所以有改過(i=0xFF)可是沒反應
可以教教我嗎
[code c#]
#include
sbit wled =P0^7;
sbit K1 =P1^1;
char DATA_7SEG[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
/*--------------------------------*/
delay(int d)
{
int i,j;
for(i=0;i for(j=0;j<100;j );
}
/*--------------------------------*/
main()
{
int i;
while(1)
{

for(i=0;i<9;i )
{
P0=DATA_7SEG[i];
delay(100);
while(1)
if(K1==1)break;
delay(100);
}
}
}
[/code]
感恩~Q

當我把16&17程式拿掉,還是有無窮回圈
可是這時我已經沒有while 這一個指令了,那怎麼還有無窮回圈
編輯記錄
iestlpeggy 重新編輯於 2008-07-09 10:24:56, 註解 無‧
iestlpeggy 重新編輯於 2008-07-09 10:26:25, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-08 21:08:21 IP:118.169.xxx.xxx 訂閱
假如程式可以compiler & link的話,單步trace就知道問題在哪邊了
iestlpeggy
一般會員


發表:17
回覆:18
積分:7
註冊:2007-12-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-08 21:13:31 IP:59.105.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================
假如程式可以compiler & link的話,單步trace就知道問題在哪邊了

你好,我這一個程式 其實就是跑馬燈的程式
燒錄進51也OK能動作,
就只差在我不知道需要改while
改成怎樣,他才可以 DATA_7SEG[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}

從0x00~0xFF ,就不會再跳回去0xFF

必須要按RESET之後重置

taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-07-08 21:18:17 IP:118.169.xxx.xxx 訂閱
所以我才說單步trace看看就會知道問題在哪 ^_^
iestlpeggy
一般會員


發表:17
回覆:18
積分:7
註冊:2007-12-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-07-08 21:26:24 IP:59.105.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================
所以我才說單步trace看看就會知道問題在哪 ^_^

恩,這是我電路跑出來的結果●=亮,○=暗
●●●●●●●●
○●●●●●●●
○○●●●●●●
○○○●●●●●
○○○○●●●●
○○○○○●●●
○○○○○○●●
○○○○○○○●
○○○○○○○○
●●●●●●●●
...
...
...
就這樣一直接續下去了
希望能幫我解決CC
sansam
高階會員


發表:4
回覆:141
積分:164
註冊:2007-08-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-07-08 21:29:00 IP:125.230.xxx.xxx 訂閱
while(1) 
永遠都在此執行
會跳不出去
可以用條件式,如while(in1)
當in1為1時才在此執行
iestlpeggy
一般會員


發表:17
回覆:18
積分:7
註冊:2007-12-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-07-08 21:36:10 IP:59.105.xxx.xxx 訂閱

===================引 用 sansam 文 章===================
while(1)
永遠都在此執行
會跳不出去
可以用條件式,如while(in1)
當in1為1時才在此執行

可是我沒有定義(in1)
我之前有試過while(i!=0xFF)
想說讓它直接判斷上面我要取的數值,可是好像沒有差別說
iestlpeggy
一般會員


發表:17
回覆:18
積分:7
註冊:2007-12-26

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-07-09 10:21:37 IP:59.105.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================
所以我才說單步trace看看就會知道問題在哪 ^_^


測的結果是
先跳到這一行 for(i=0;i<9;i )然後到DELAY(100)這行就跳上去
for(i=0;i for(j=0;j<100;j );
↑ 這行 跑很久然後就跳到 if(K1==1)break;
delay(100);

在跳回去
for(i=0;i for(j=0;j<100;j );
就這樣一直循環下去了

daniel__lee
高階會員


發表:18
回覆:124
積分:113
註冊:2002-11-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-07-09 19:44:23 IP:118.166.xxx.xxx 訂閱
 你所要的功能可以用很簡單的方式完成 範例如下你參考看看

[code cpp]
#include
sbit wled =P0^7;
sbit K1 =P1^1;
//char DATA_7SEG[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
/*--------------------------------*/
delay(int d)
{
int i,j;
for(i=0;i for(j=0;j<100;j );
}
/*--------------------------------*/
unsigned char SEG=0;
void main()
{
P0=0x00;
while(1)
{
if(SEG>=0xff)SEG=0;
SEG<<=1;
SEG|=0x01;
delay(100);
P0=SEG;
}
}

[/code]
------
~ 勿在浮沙上面築高塔 ~
編輯記錄
daniel__lee 重新編輯於 2008-07-09 19:52:40, 註解 無‧
daniel__lee
高階會員


發表:18
回覆:124
積分:113
註冊:2002-11-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-07-09 19:55:17 IP:118.166.xxx.xxx 訂閱
沒看清楚你的意思,如果你只要跑一次 把if 註解掉就行了


[code cpp]
#include
sbit wled =P0^7;
sbit K1 =P1^1;
//char DATA_7SEG[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
/*--------------------------------*/
delay(int d)
{
int i,j;
for(i=0;i for(j=0;j<100;j );
}
/*--------------------------------*/
unsigned char SEG=0;

void main()
{
P0=0x00;
while(1)
{
// if(SEG>=0xff)SEG=0;
SEG<<=1;
SEG|=0x01;
delay(100);
P0=SEG;
}
}

[/code]
------
~ 勿在浮沙上面築高塔 ~
iestlpeggy
一般會員


發表:17
回覆:18
積分:7
註冊:2007-12-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-07-09 19:59:20 IP:59.105.xxx.xxx 訂閱
恩 這樣可以動作一次
但是我發現這樣會變成我們一開始設定的K1沒有動作的機會說

因為變成自動 會移動
iestlpeggy
一般會員


發表:17
回覆:18
積分:7
註冊:2007-12-26

發送簡訊給我
#12 引用回覆 回覆 發表時間:2008-07-09 20:05:43 IP:59.105.xxx.xxx 訂閱
我發現再你的程式上我在加上判斷K1的那一段
就可以達到我要的功能了
謝謝你耐心的回答
[code cpp]
#include
sbit wled =P0^7;
sbit K1 =P1^1;
//char DATA_7SEG[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
/*--------------------------------*/
delay(int d)
{
int i,j;
for(i=0;i for(j=0;j<100;j );
}
/*--------------------------------*/
unsigned char SEG=0;
void main()
{
P0=0x00;
while(1)
{
while(1)
if(K1==1)break;
delay(100);
// if(SEG>=0xff)SEG=0;
SEG<<=1;
SEG|=0x01;
delay(100);
P0=SEG;
}
}

[/code]
daniel__lee
高階會員


發表:18
回覆:124
積分:113
註冊:2002-11-10

發送簡訊給我
#13 引用回覆 回覆 發表時間:2008-07-09 20:09:48 IP:118.166.xxx.xxx 訂閱
還好你有發現!! ,我剛看到你的回覆時有點OOXX 正要回覆你說自己都不動腦........ 呵呵
------
~ 勿在浮沙上面築高塔 ~
iestlpeggy
一般會員


發表:17
回覆:18
積分:7
註冊:2007-12-26

發送簡訊給我
#14 引用回覆 回覆 發表時間:2008-07-09 20:26:05 IP:59.105.xxx.xxx 訂閱

===================引 用 daniel__lee 文 章===================
還好你有發現!! ,我剛看到你的回覆時有點OOXX 正要回覆你說自己都不動腦........ 呵呵


哈哈,一定要的嘛....

問問題也是要自己去思考問題
這樣我覺得比較好
感恩捏
系統時間:2024-04-21 0:36:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!