iT邦幫忙

0

C語言的小問題~

目前狀況:
PA為按鈕1
PB為按鈕2
先按住按鈕1 再按按鈕2 LightBar_Mode++
先按住按鈕2 再按按鈕1 也是LightBar_Mode++
LightBar_Mode會一次增加2
想變成:
先按住按鈕1 再按按鈕2 LightBar_Mode++
先按住按鈕2 再按按鈕1 LightBar_Mode--
LightBar_Mode++時增加1
LightBar_Mode--時減少1
請問各位大神 下列程式該如何改寫呢?
(小弟剛入行 還需要各位大神幫幫忙 感恩^^)
void GPAB_IRQHandler(void)
{
if( (GPIO_GET_IN_DATA(PA)&0x08) || (GPIO_GET_IN_DATA(PB)&0x02) )
return;

		temp = (GPIO_GET_IN_DATA(PA) && 0x08 >0 ? 0x01 : 0x00) |  (GPIO_GET_IN_DATA(PB) && 0x02 > 0 ? 0x01 : 0x00);
	
		switch(temp)
		{
		case 0x03:
		case 0x01:
		case 0x00:
		case 0x02:
		LightBar_Mode++;
		break;  
		}

		
		switch(LightBar_Mode)
			{		
					case 0:
							PA11 = 0;
							PA9  = 0;
							PD8  = 0;
							PD10 = 0;
					
							PA10 = 0;
							PA8  = 0;
							PD9  = 0;
							PD11 = 0;

							break;
					case 1:
							PA11 = 1;
							PA9  = 0;
							PD8  = 0;
							PD10 = 0;
					
							PA10 = 0;
							PA8  = 0;
							PD9  = 0;
							PD11 = 0;

							break;
              }
看更多先前的討論...收起先前的討論...
ant1017 iT邦新手 5 級 ‧ 2018-12-28 08:20:13 檢舉
買一本書去讀熟吧,你只是語法不熟而已
手邊有很多資料 但小弟駑鈍....只能一直問...望請大大勞煩解惑
小魚 iT邦高手 1 級 ‧ 2018-12-28 13:30:03 檢舉
寫程式需要自己研究, 那幾個case中哪個是1->2, 哪個是2->1,搞清楚就知道怎麼寫了.
嗯 了解 感謝大神們的幫忙
a30309598 iT邦新手 5 級 ‧ 2018-12-28 14:46:42 檢舉
用幾個flag和if去互相判斷就好了吧,你現在的寫法沒辦法判斷input先後順序
youarefat iT邦新手 5 級 ‧ 2018-12-28 15:01:09 檢舉
GPIO_GET_IN_DATA(PA) && 0x08 這東西會是一個boolean
所以你後面判斷>0沒有需要
好的 我試試看 感謝眾大神幫忙~~感謝^^

2 個回答

0
a30309598
iT邦新手 5 級 ‧ 2018-12-28 15:01:29

這樣不知是不是你要的

while(1)
{
    if(PA8 && !PB3)
    {
        while(PA8)
        {
            if(PB3)
            {
                LightBar_Mode++;
                break;
            }
        }
    }
    else if(!PA8 && PB2)
    {
        while(PB2)
        {
            if(PA8)
            {
                LightBar_Mode--;
                break;
            }
        }
    }
}

謝謝你~我試試看 感恩

0
youarefat
iT邦新手 5 級 ‧ 2018-12-28 15:13:40
GPIO_GET_IN_DATA(PA) && 0x08 >0

我覺得不太行

a = 1 || 1 > 1;
//a = 1

參考https://ideone.com/DpnoVQ

會是>0先判斷
沒有括號 是不行的

謝謝你 我都試試看 感恩

a30309598 iT邦新手 5 級 ‧ 2018-12-28 16:06:45 檢舉

要抓pin的值
GPIO_GET_IN_DATA(PA) && 0x08 >0
要改成
(GPIO_GET_IN_DATA(PA) & 0x08) >0

youarefat iT邦新手 5 級 ‧ 2018-12-28 16:09:19 檢舉

一樣的 就算是bit的and/or
也要用括號包起來

我要發表回答

立即登入回答