iT邦幫忙

0

C語言的小問題QQ

	當旋鈕順時針轉時會依序亮燈
    以下是亮燈的順序
    int x=input;
    for(;i<input;i++)
	{
			LED1 	= x % 2;         
            LED2 	= (x % 4)/2;  
			LED3	= (((x % 8)/2) >1.5 ? 1:0);     
            LED4 	= (((x % 16)/2) >3 ? 1:0);       
            LED5	= (((x % 32)/2) >7 ? 1:0); 
            LED6	= (((x % 64)/2) >15 ? 1:0);     
            LED7	= (((x % 128)/2) >31 ? 1:0);        
            LED8	= (((x % 256)/2) >63 ? 1:0);  						
	}
    問題:我想要把 旋鈕逆時針旋轉時 來滅燈
         滅燈的順序 是亮燈的相反
         EX:(旋鈕順時針原本依序是1,2,3亮 旋鈕逆時針後 依序3,2,1滅)
    請問我該怎麼改  (明天要交作業了 我真的想不出來QQ)
    麻煩大神解惑 小弟會非常感恩的~~~QQ

2 個回答

1
小魚
iT邦大師 1 級 ‧ 2019-01-09 18:17:00
最佳解答

話說,
i跑哪去了?
而且你迴圈裏面的x永遠不會變啊 XD

我猜你要的是不是

//int x=input; //這行可以省略了
for(int x=0;x<input;x++)
看更多先前的回應...收起先前的回應...

嗯@@ 謝謝解答~~我繼續摸索感恩

小魚 iT邦大師 1 級 ‧ 2019-01-09 19:41:32 檢舉

如果是要順時針改成逆時針,
那把 1 ~ 8 反過來寫呢?

感謝大大回覆~
1~8反過來寫 只是變成燈的順序顛倒亮QQ
不過剛剛把你說的那兩行刪除了 真的可以了耶(害我在那邊糾結@@)
不過現在又一個問題來了
雖然減了但他會先加再減 看起來怪怪的
EX:順1,2,3,4,5 逆6,5,4,3,2,1 正在找尋問題中QQ
還是大大們有更好的方式呢@@?

小魚 iT邦大師 1 級 ‧ 2019-01-09 20:58:52 檢舉

我只是覺得,
順時針顛倒亮不就是反時針嗎?
這只是我的猜測,
沒在做LED這部分.

唔....沒關係 還是感恩您~~~^^

0
fysh711426
iT邦研究生 3 級 ‧ 2019-01-09 21:49:26

給你試試看,不過想問 >15>63 是為了增加燈泡循環的延遲嗎?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int LED1, LED2, LED3, LED4, LED5, LED6, LED7, LED8;
    LED1 = LED2= LED3= LED4= LED5= LED6= LED7= LED8 = 0;

    int btn = 1;
    
    int x = 0;
    while (1)
    {
        LED1 = ((x + 9) % 9 > 0 ? 1 : 0);
        LED2 = ((x + 9) % 9 > 1 ? 1 : 0);
        LED3 = ((x + 9) % 9 > 2 ? 1 : 0);
        LED4 = ((x + 9) % 9 > 3 ? 1 : 0);
        LED5 = ((x + 9) % 9 > 4 ? 1 : 0);
        LED6 = ((x + 9) % 9 > 5 ? 1 : 0);
        LED7 = ((x + 9) % 9 > 6 ? 1 : 0);
        LED8 = ((x + 9) % 9 > 7 ? 1 : 0);

        if (btn == 1)
        {
            //順時針
            x++;
        }
        if (btn == 2)
        {
            //逆時針
            x--;
        }

        printf("%d", LED1);
        printf("%d", LED2);
        printf("%d", LED3);
        printf("%d", LED4);
        printf("%d", LED5);
        printf("%d", LED6);
        printf("%d", LED7);
        printf("%d", LED8);
        printf("\n");

        //延遲
        int delay = 300000000;
        while(delay--);
    }

    return 0;
}

結果

00000000
10000000
11000000
11100000
11110000
11111000
11111100
11111110
11111111
00000000
10000000
11000000
11100000
<- 這時候切換按鈕
11000000
10000000
00000000
11111111
11111110
11111100
11111000
11110000
11100000
11000000
10000000
00000000

15跟>63 是讓他先不要這麼快亮 等條件有了再亮@@
哇 厲害耶 大神 我試試看 非常感恩~~~~^^

fysh711426 iT邦研究生 3 級 ‧ 2019-01-10 20:52:03 檢舉

了解~ /images/emoticon/emoticon41.gif

我要發表回答

立即登入回答