16*32点阵电子显示屏


#include<reg51.h>
#define BLKN 2
sbit G=P1^7;
sbit RCLK=P1^6;
sbit SCLR=0x95;
void delay(unsigned int);
void leddisplay(void) ;
unsigned char data dispram[32];
unsigned char data dispram0[32];
unsigned char code Bmp[][32];
unsigned char code Bmp[][32]={
  {
  0x01,0x08,0x7F,0xFC,0x01,0x00,0x3F,0xF8,0x02,0x00,0xFF,0xFE,0x04,0x40,0x08,0xE0,
0x37,0x1E,0xC1,0x24,0x1F,0xF0,0x01,0x00,0x05,0x60,0x09,0x18,0x31,0x08,0x01,0x00
  
  },
  {
  0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x03,0x80,0x05,0x40,0x09,0x20,0x11,0x10,
0x21,0x0E,0xC1,0x04,0x01,0x00,0x00,0x00,0x24,0x90,0x22,0x48,0x22,0x44,0x40,0x04
  
  },
  {
  0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x40,0x05,0x20,0x09,0x10,
0x09,0x08,0x11,0x04,0x21,0x04,0x41,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00
  
  },
  {
  0x00,0x08,0x3F,0xFC,0x20,0x08,0x20,0x08,0x3F,0xF8,0x20,0x48,0x28,0x40,0x28,0x40,
0x2A,0x4C,0x2F,0x70,0x28,0x40,0x28,0x40,0x29,0x42,0x4E,0x42,0x48,0x3E,0x80,0x00
  },
  {
0x00,0x80,0xFC,0x40,0x04,0x04,0x0B,0xFE,0x10,0x40,0x10,0x80,0x15,0x08,0x1B,0xF8,
0x31,0x10,0xD0,0x24,0x10,0x4C,0x11,0x90,0x16,0x20,0x10,0x50,0x51,0x8C,0x26,0x04
  },
  {
  0x00,0x00,0x01,0x80,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x01,0x80,
0x01,0x80,0x01,0x80,0x00,0x00,0x01,0x80,0x03,0xC0,0x01,0x80,0x00,0x00,0x00,0x00
  }
};


void main(void)
{
register unsigned char i,j,k,l;
SCON =0x00;
TMOD=0x01;
TR0=1;
P1=0x3f;
IE=0x82;
while(1)
  {
   delay(1000);
   for(i=0;i<32;i++)
    {
     dispram=Bmp[0];
     if(i%2)delay(200);
     }
            
   delay(1000);
   for(i=0;i<6;i++)
    {
    for(j=0;j<16;j++)
     {
   for(k=0;k<15;k++)
    {
     dispram[k*BLKN]=dispram[(k+1)*BLKN];
     dispram[k*BLKN+1]=dispram[(k+1)*BLKN+1];
     }
     dispram[30]=Bmp[j*BLKN];
     dispram[31]=Bmp[j*BLKN+1];
     delay(200);
     }
    }   
    delay(1000);
    for(i=0;i<6;i++)
     {
      for(j=0;j<2;j++)
    for(k=1;k<9;k++)
       {
       for(l=0;l<16;l++)
          {
       dispram[l*BLKN]=dispram[l*BLKN]<<1|dispram[l*BLKN+1]>>7;
                       dispram[l*BLKN+1]=dispram[l*BLKN+1]<<1|dispram0[l*BLKN]>>7;
                         dispram0[l*BLKN]=dispram0[l*BLKN]<<1|dispram0[l*BLKN+1]>>7;
                         dispram0[l*BLKN+1]=dispram0[l*BLKN+1]<<1|Bmp[l*BLKN+j]>>(8-k);
      }
      delay(200);
      }
    }
delay(1000);
for(i=0;i<32;i++)
   {
   dispram=0x00;
   if(i%2)delay(200);
   }
}

}

void delay(unsigned int dt)
    {
    register unsigned char bt;
    for(;dt;dt--)
     for(bt=0;bt<255;bt++);
     }
   /*-------显示屏扫描(定时器T0中断)函数-------------*/
void leddisplay(void) interrupt 1 using 1
{
register unsigned char i,j=BLKN;
TH0=0xf0;                      //设定显示屏刷新率每秒62.5帧
TL0=0x30;
i=P1;                          //读出当前显示的行号
i=++i&0x0f;                    //行号加1屏蔽高四位
do
{
j--;
SBUF=dispram0[i*BLKN+j];        //送显示数据
while (!TI);TI=0;
}
while(j);                       //完成一行数据传输
j=BLKN;
do
{j--;
SBUF=dispram[i*BLKN+j];
while(!TI);TI=0;
}
while(j);
G=1;                            //消隐(关闭显示)
P1&=0xf0;                       //行号端清0
RCLK=1;                         //显示数据输出到锁存寄存器
P1 |=i;                         //写入行号
RCLK=0;                         //锁存器显示数据
G=0;                            //打开显示
}

PROTEUS中文教程.pdf
(2008-08-08 14:34:32, Size: 822 KB, Downloads: 1)


我也来说两句 查看全部回复

最新回复

  • leonardvs (2008-8-13 10:08:37)

    ddddddddddddddddddddddddddddddddddddd
  • lifei666 (2008-8-22 22:59:46)

    好东西好东西好东西好东西好东西好东西好东西好东西好东西好东西好东西好东西v
  • 月落翼风 (2008-8-23 10:31:11)

    大虾,我把程序编译了。有一个错误啊。
  • chenby_1992 (2008-8-30 15:49:57)

    天啊,电子要学的东东太多了
  • chenby_1992 (2008-8-30 19:25:37)