jackygwaaa 發表於 2016-5-13 13:55:35

ascii to bin LED output

各位前輩好!小弟之前有寫個程式是用每個 BIT 去判斷要讓 LED 亮或滅!是否可以改成一次就檢查每個bit不需要一個一個檢查!以下是我原始碼
int i;
int led[]={2,3,4,5,6,7,8,9};
void setup()
{
   Serial.begin(9600);
      for(i=0;i<8;i++)
         pinMode(led,OUTPUT);
            for(i=0;i<8;i++)
               digitalWrite(led,HIGH);
}

void loop()
{
   if(Serial.available()>0)
      {
       unsigned char data = Serial.read();
      
      if(data&0x01)
      digitalWrite(2,LOW);
      else            
      digitalWrite(2,HIGH);
      if(data&0x02)
      digitalWrite(3,LOW);
      else            
      digitalWrite(3,HIGH);
      if(data&0x04)
      digitalWrite(4,LOW);
      else            
      digitalWrite(4,HIGH);
      if(data&0x08)
      digitalWrite(5,LOW);
      else            
      digitalWrite(5,HIGH);
      if(data&0x10)
      digitalWrite(6,LOW);
      else            
      digitalWrite(6,HIGH);
      if(data&0x20)
      digitalWrite(7,LOW);
      else            
      digitalWrite(7,HIGH);
      if(data&0x40)
      digitalWrite(8,LOW);
      else            
      digitalWrite(8,HIGH);
      if(data&0x80)
      digitalWrite(9,LOW);
      else            
      digitalWrite(9,HIGH);
      }
}

alpha 發表於 2016-5-14 13:37:35

可以改成 for (i=2 to 9), digitalWrite(i,data&(1>>(i-2))); , 但前提是 HIGH 的定義需要為 ''非0" ,LOW 為 0

若是以使用 ATM328 + AVR Studio C 的寫法

PORTB (PB0-PB7)當作輸出腳 , PORTB=UART_Receive() ; 直接將接收到的字元值給 PORTB 就可以了

jackygwaaa 發表於 2016-5-14 20:02:42

回復 2# alpha
請問前輩這句話我還是不懂(PORTB (PB0-PB7)當作輸出腳 , PORTB=UART_Receive() ; 直接將接收到的字元值給 PORTB 就可以了)
可以請前輩寫個完整的讓我參考嗎?不好意思小弟剛學微處理機還沒有很熟.....

jackygwaaa 發表於 2016-5-14 23:47:25

回復 2# alpha


    我是8顆LED 5V接LED陽極 陰極接Arduino的digitalP2~P9

alpha 發表於 2016-5-15 08:03:49

回復 4# jackygwaaa


   data=~data 就可以了

alpha 發表於 2016-5-15 08:07:22

回復 3# jackygwaaa
這是 C 語言的寫法 , 不是 ARDUINO 的寫法 , 也許 ARDUINO 有這種寫法 , 只是我不熟 ARDUINO

jackygwaaa 發表於 2016-5-15 10:13:19

回復 5# alpha

data=~data ???

jackygwaaa 發表於 2016-5-16 15:50:42

前輩我寫出來後顯示的燈號不正確......
int i;
int led[]={2,3,4,5,6,7,8,9};
void setup()
{
    Serial.begin(9600);
       for(i=0;i<8;i++)
          pinMode(led,OUTPUT);
             for(i=0;i<8;i++)
                digitalWrite(led,HIGH);
}

void loop()
{
    if(Serial.available()>0)
       {
      unsigned char data = Serial.read();
      PORTD = data;
       }   
}

alpha 發表於 2016-5-18 16:21:47

回復 7# jackygwaaa

因為你的LED 陽極是接 V+,陰極接輸出腳 , 所以當你寫入 '1' 時 ,該輸出腳是高電位, LED 不會亮 , 要寫入'0'才會亮
頁: [1]
查看完整版本: ascii to bin LED output