专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

16*16LED点阵(广告屏的设计)

作者:佚名   来源:本站原创   点击数:  更新时间:2012年01月02日   【字体:
 
//此程序由Undertaker独立完成,QQ:120594698  不懂可以询问!此程序硬件为两片164控制行,两片595控制列。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit datat=P2^0 ;
sbit sh=P2^1 ;
sbit st=P2^2 ;
sbit ab=P2^4 ;
sbit sck=P2^5 ;
uchar xdw[32];
void display();
void displaysp(uint timer) ;
void zuoyi(uchar *lp,uchar c,uchar timer)    ;
//void shangxia(uchar din,uchar *lp,uchar timer)  ;
void delay(uint z) ;
code uchar yh[32]={0x00,0x00,0x00,0x00,0x78,0x00,0x78,0x00,0x78,0x20,0x78,0x30,0x78,0x38,0x7F,0xFC,
              0x7F,0xFE,0x7F,0xFF,0x7F,0xFE,0x7F,0xFC,0x00,0x38,0x00,0x30,0x00,0x20,0x00,0x00};
code uchar huan[32]={/*--  文字:  欢  --*/
                0x00,0x80,0x00,0x80,0xFC,0x80,0x05,0xFE,0x85,0x04,0x4A,0x48,0x28,0x40,0x10,0x40,
                0x18,0x40,0x18,0x60,0x24,0xA0,0x24,0x90,0x41,0x18,0x86,0x0E,0x38,0x04,0x00,0x00};
code uchar ying[32]={0x40,0x00,0x21,0x80,0x36,0x7C,0x24,0x44,0x04,0x44,0x04,0x44,0xE4,0x44,0x24,0x44,
                0x25,0x44,0x26,0x54,0x24,0x48,0x20,0x40,0x20,0x40,0x50,0x00,0x8F,0xFE,0x00,0x00};
code uchar lai[32]={0x01,0x00,0x01,0x00,0x3F,0xFC,0x01,0x00,0x09,0x30,0x05,0x20,0x03,0x40,0x7F,0xFE,
               0x01,0x80,0x03,0x40,0x05,0x20,0x09,0x18,0x31,0x0E,0xC1,0x04,0x01,0x00,0x01,0x00};
code uchar dao[32]={0x00,0x04,0x7F,0x84,0x08,0x04,0x12,0x24,0x21,0x24,0x7F,0xA4,0x25,0x24,0x04,0x24,
               0x04,0x24,0x7F,0xA4,0x04,0x24,0x04,0x24,0x05,0x84,0x0E,0x04,0x70,0x14,0x20,0x08};
code uchar Un[32]={0x00,0x00,0x00,0x00,0xE7,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x5C,
              0x42,0x62,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0xE7,0x00,0x00,0x00,0x00};
code uchar de[32]={0x00,0x00,0x02,0x00,0x06,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x1E,0x3C,
              0x22,0x42,0x42,0x7E,0x42,0x40,0x42,0x40,0x26,0x42,0x1B,0x3C,0x00,0x00,0x00,0x00};
code uchar rt[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x77,0x7C,
              0x19,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x0C,0x00,0x00,0x00,0x00};
code uchar ak[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x20,0x00,0x20,0x00,0x20,0x3C,0x27,
              0x42,0x24,0x1E,0x28,0x22,0x34,0x42,0x24,0x42,0x22,0x3F,0x77,0x00,0x00,0x00,0x00};
code uchar er[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0xEE,
             0x42,0x32,0x7E,0x20,0x40,0x20,0x40,0x20,0x42,0x20,0x3C,0xF8,0x00,0x00,0x00,0x00};
code uchar dan[]={0x08,0x20,0x06,0x30,0x04,0x40,0x3F,0xF8,0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,
             0x3F,0xF8,0x21,0x08,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00};
code uchar pian[]={0x00,0x40,0x10,0x40,0x10,0x40,0x10,0x44,0x1F,0xFE,0x10,0x00,0x10,0x00,0x10,0x00,
              0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x20,0x10,0x40,0x10,0x80,0x10};
code uchar ji[]={0x10,0x00,0x10,0xF8,0x10,0x88,0xFE,0x88,0x10,0x88,0x10,0x88,0x38,0x88,0x34,0x88,
            0x54,0x88,0x50,0x88,0x91,0x08,0x11,0x0A,0x12,0x0A,0x12,0x0A,0x14,0x06,0x10,0x00};
code uchar shi[]={0x00,0x00,0x12,0x10,0x12,0x10,0x12,0x10,0x12,0x10,0xFF,0xFE,0x12,0x10,0x12,0x10,
             0x12,0x10,0x13,0xF0,0x12,0x10,0x10,0x00,0x10,0x08,0x1F,0xFC,0x00,0x00,0x00,0x00};
code uchar jie[]={0x1F,0xF8,0x11,0x08,0x11,0x08,0x1F,0xF8,0x11,0x08,0x11,0x08,0x1F,0xF8,0x11,0x88,
             0x02,0x40,0x04,0x30,0x1A,0x4E,0x62,0x44,0x02,0x40,0x04,0x40,0x08,0x40,0x10,0x40};
void main()
{  uchar i;
   for(i=0;i<32;i++)
 xdw[i]=yh[i];
 displaysp(2);
 for(i=0;i<32;i++)
 xdw[i]=huan[i];
 displaysp(2);
 for(i=0;i<32;i++)
 xdw[i]=ying[i];
 displaysp(2);
   while(1)
   { 
  zuoyi(huan,14,15);
 }
}
 
void display()
{
  uchar i,ia,j,tmp3;
  ab=0;
  for(i=0;i<16;i++)
  {
    sck=0;
  st=0;
  for(ia=2;ia>0;)
  {
    ia--;
  tmp3=xdw[2*i+ia];
  for(j=0;j<8;j++)
  {
   sh=0;
   datat=~tmp3&0x01;
   sh=1;
   tmp3>>=1;
  }
  }
  P2|=0x24;
  ab=1;
  //delay(1);  
  }
  j=60;
  while(j--);
  ab=1;
  sck=0;
  sck=1;
 
}    
void displaysp(uint timer)
{
   uchar i;
  while(timer--)
  {
   i=100;
   while(i--)
    {
    display();
  }
  }
}
void delay(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
  for(y=125;y>0;y--) ;
}
void zuoyi(uchar *lp,uchar c,uchar timer)
{
  uchar tmp2[16];
  uchar j,i,ia,tmp,timerc;
  c*=2;
  for(i=0;i<16;i++)
  tmp2[i]=0;
  while(c)
      {
  if(lp!=0)
      {
     tmp=c%2;
     for(j=0;j<16;j++)
      {
     tmp2[j]=lp[2*j+tmp] ;
    }
    if(tmp==1)
     {lp+=32;}
    }
    tmp=8;
  while(tmp)
    {
     ia=0;
     for(i=0;i<16;i++)
    {
     xdw[ia]<<=1;
     if(xdw[ia+1]&0x80)
       {xdw[ia]++;}
     ia++;
     xdw[ia]<<=1;
     if(tmp2[i]&0x80)
      {xdw[ia]++; }
      ia++;
        tmp2[i]<<=1;
    }
      tmp--;
    timerc=timer;
      while(timerc--)
     {
      display();
     }
   
    }
        c--;
    }
}
关闭窗口

相关文章