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
}
} 你好,如果分别给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: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); 如果你的LED不是数码管或者固定接线的,那可以更换接线顺序。
比如PB0连接LED0,PB1连接LED1,PD2连接LED2,以此类推。
因为按照我的理解,你的LED并没有像我说的那样进行连接才会出现你前面说的效果。
页:
[1]