jackygwaaa 发表于 2016-5-16 19:14:43

UART TO LED

前輩請問我用下面程式後鍵入A 因要顯示滅亮滅滅 滅滅滅亮 可是卻顯示亮亮亮亮 亮滅滅滅滅
我所用到的腳位是PD2~PD7跟PB0和PB1總共8顆
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 << 1
         }
}

164335413 发表于 2016-5-17 17:49:52

你好,如果分别给PD和PB点亮led,需要用到PORTB和PORTD两个寄存器,而且需要根据你所需要的亮灯方式:滅亮滅滅滅 滅滅滅亮,也就对应‘A’的ascii码。
PORTD=PORTD & (data | 0x03);
PORTD=PORTD | (data & 0xfc);
PORTB=PORTB & (data | 0xfc);
PORTB=PORTB | (data & 0x03);
上面是为了不改变其他的port状态而这样做的。另外也可以:
for(i=0;i<8;i++)
{
if(data&(0x01<<i))
digitalWrite(led,HIGH);
else
digitalWrite(led,HIGH);
}
当然上面两个都需要放到 if(Serial.available()>0) 中。

jackygwaaa 发表于 2016-5-18 15:03:51

本帖最后由 jackygwaaa 于 2016-5-18 15:04 编辑

164335413 发表于 2016-5-17 17:49 static/image/common/back.gif
你好,如果分别给PD和PB点亮led,需要用到PORTB和PORTD两个寄存器,而且需要根据你所需要的亮灯方式:滅亮滅 ...

前輩我用以下程式會顯示低位元到高位元是滅滅滅滅亮滅亮滅
PORTD=PORTD & (data | 0x03);
PORTD=PORTD | (data & 0xfc);
PORTB=PORTB & (data | 0xfc);
PORTB=PORTB | (data & 0x03);

164335413 发表于 2016-5-19 10:17:47

如果你的LED不是数码管或者固定接线的,那可以更换接线顺序。
比如PB0连接LED0,PB1连接LED1,PD2连接LED2,以此类推。
因为按照我的理解,你的LED并没有像我说的那样进行连接才会出现你前面说的效果。
页: [1]
查看完整版本: UART TO LED