A-A+

处理LED点阵显示镜像问题

2015年08月19日 解决方案 暂无评论 阅读 2,246 views 次

使用的开发板是:ATMEGA328P,一个16*16的点阵,用Arduino给开发板上烧代码。

代码如下:

#define RATE 30
#define WIDTH 16
void setup() {
  // put your setup code here, to run once:
 DDRD = 0XFF;//配置D端口管脚为输出方向
 DDRB = 0XFF;//配置B端口管脚为输出方向
}
void wr595(unsigned char val)
{
     unsigned char i;
    for(i = 0;i<8;i++)
     {
      if(val & (0x80>>i))//拆分出最高位
      {
         PORTD |= 1<<PIN7;//在PD7管脚上发出1
      }
     else
      {
           PORTD &= ~(1<<PIN7);//在PD7管脚上发出0
      }
      PORTD &= ~(1<<PIN6);//在PD6管脚上发出0
      PORTD |= 1<<PIN6;//在PD6管脚上发出1
     }
 
}
void out595(void)
{
    PORTD &= ~(1<<PIN5);//在PD5管脚上发出0
     PORTD |= 1<<PIN5;//在PD5管脚上发出1
}
 
unsigned char img[] = 
{
//上半屏
//0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
//下半屏
//0xff,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xff,
 
0x20,0x24,0x22,0x21,0x26,0x39,0x02,0x0C,0xF0,0x13,0x10,0x10,0x14,0x18,0x00,0x00,
0x00,0x00,0x07,0x39,0x21,0x21,0x21,0x2F,0x41,0x41,0xC1,0x41,0x01,0x01,0x00,0x00,
 
0x00,0x40,0x40,0x4F,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x4F,0x40,0x40,0x00,0x00,
 
0x08,0x10,0x60,0x80,0x41,0x32,0x04,0x18,0x60,0x80,0x60,0x18,0x04,0x02,0x01,0x00,
0x00,0x04,0x08,0x10,0x60,0x02,0x01,0xFE,0x00,0x00,0x40,0x20,0x10,0x0C,0x00,0x00,
0x02,0x02,0x02,0xD2,0x4A,0x46,0x42,0x42,0x42,0x46,0x4A,0xD2,0x02,0x02,0x02,0x00,
 
 
 
};
void loop() {
  // put your main code here, to run repeatedly:
 unsigned char i,index=0,count;
  unsigned int col = 0xfffe,img_count=0;
while(1)
    {
    for(count = 0;count < 50;count++)
    {
     for(i = 0,col = 0xfffe;i<16;i++)
     {
          wr595(img[i+index]);                     //上半屏
        wr595(img[i + 48+index]);        //下半屏
 
 
      wr595(col>>8);               //放置col的低8位(低字节)
      wr595(col);                   //放置col的高8位(高字节)
      out595();
      //col = col>>1;
          col = col<<1;
      //col |= 0x8000;
          col |= 1;
     }
    }
    index++;
    if(index>=32)
          index=0;
    }
 
}

一开始出现镜像问题(显示的字在镜子中显示的是正确的),这个问题就像卷铺盖一样,从不同的位置上卷就会出现不同的位置,修改方法:

1.改变for循环中的一个初始条件为col=0x7fff;

2.将col=col<<1改成col=col>>1;

3.将col |=1改成col |=0x8000;

只需要这三步就可以将镜像问题解决了,在显示的图像有问题或者混乱的话,可以使用一个“口”型的边框来确定修改进行了,确定了“口”这个边框,替换即可。


标签:

给我留言

Copyright © 加油247 保留所有权利.   Theme  Ality

用户登录

分享到: