#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)
lifei666 (2008-8-22 22:59:46)
月落翼风 (2008-8-23 10:31:11)
chenby_1992 (2008-8-30 15:49:57)
chenby_1992 (2008-8-30 19:25:37)