iT邦幫忙

0

一個小小的C語言的問題 求解

https://ithelp.ithome.com.tw/upload/images/20181221/20113989VgRmU4yqKw.jpg

看更多先前的討論...收起先前的討論...
youarefat iT邦新手 5 級 ‧ 2018-12-21 18:06:24 檢舉
不如你先說說GPIO_GET跟GPIO_CLR在幹嘛
youarefat iT邦新手 5 級 ‧ 2018-12-21 18:26:26 檢舉
好吧 大概不重要
fysh711426 iT邦研究生 3 級 ‧ 2018-12-21 21:34:11 檢舉
原因如 youarefat 大大所說
不過不知道能不能把 switch 改成 > 程式可以少很多
但判斷大於好像會多幾個指令,不知道會不會影響效能

void Update(mode)
{
PA11 = mode > 0;
PA9 = mode > 1;
PD8 = mode > 2;
PD10 = mode > 3;
PA10 = mode > 4;
PA8 = mode > 5;
PD9 = mode > 6;
PD11 = mode > 7;
}
if (GPIO_GET_INT_FLAG(PA, BIT3))
{
GPIO_CLR_INT_FLAG(PA, BIT3);
if (LightBar_Mode < 8)
Update(++LightBar_Mode);
}
if (GPIO_GET_INT_FLAG(PA, BIT4))
{
GPIO_CLR_INT_FLAG(PA, BIT4);
if (LightBar_Mode > 0)
Update(--LightBar_Mode);
}
我試試看~謝謝

1 個回答

1
youarefat
iT邦新手 5 級 ‧ 2018-12-21 18:25:01

我知道了
問題很簡單
PA BIT3按下去之後
一切正常對吧
PA BIT4按下後LED輸出卻沒反應?正常到不行吧?
因為你那個switch就相當於一個狀態更新
但你只有在PA BIT3時會更新啊
我建議你把switch弄成一個函式
最後大概長這樣

void update(a){//或許用什麼struct把你的LED包起來
    switch(a){
        blablabla
    }
}
if(PA3){
    CLR(PA3);
    update(++lightbar_mode);
}
if(PA4){
    CLR(PA4);
    update(--lightbar_mode);
}

我試試看 感謝大大回覆~~~^^

我要發表回答

立即登入回答