极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16615|回复: 3

UART TO LED

[复制链接]
发表于 2016-5-16 19:14:43 | 显示全部楼层 |阅读模式
前輩請問我用下面程式後鍵入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
         }
}
回复

使用道具 举报

发表于 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[i],HIGH);
else
digitalWrite(led[i],HIGH);
}
当然上面两个都需要放到 if(Serial.available()>0) 中。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-18 15:03:51 | 显示全部楼层
本帖最后由 jackygwaaa 于 2016-5-18 15:04 编辑
164335413 发表于 2016-5-17 17:49
你好,如果分别给PD和PB点亮led,需要用到PORTB和PORTD两个寄存器,而且需要根据你所需要的亮灯方式:滅亮滅 ...


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2016-5-19 10:17:47 | 显示全部楼层
如果你的LED不是数码管或者固定接线的,那可以更换接线顺序。
比如PB0连接LED0,PB1连接LED1,PD2连接LED2,以此类推。
因为按照我的理解,你的LED并没有像我说的那样进行连接才会出现你前面说的效果。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 22:38 , Processed in 0.036560 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表