?? led.c.c
字號:
#include<reg51.h>
#define BLKN 2
sbit G=P1^7; //P1.7為顯示允許控制信號端口
sbit RRCLK=P1^6; //P1.6為輸出鎖存器時鐘信號端
sbit SCLR=P1^5; //P1.5為移位寄存器清零端
void delay(unsigned int); //延時函數(shù)
unsigned char data dispram[32]; //顯示緩存1
unsigned char data huancun[32]; //顯示緩存2
void main(void)
{ unsigned char code Cmp[][32]={
{0xff,0x07,0xc0,0x6f,0xed,0xef,0xf6,0xdf,
0xc0,0x01,0xdd,0xfd,0xbd,0xff,0xc0,0x03,
0xfb,0xff,0xf8,0x0f,0xf3,0xdf,0xf4,0xbf,
0xef,0x3f,0x9c,0xcf,0x73,0xf1,0xcf,0xfb},//愛
{0xf7,0xdf,0xf9,0xcf,0xfb,0xbf,0xc0,0x07,
0xde,0xf7,0xc0,0x07,0xde,0xf7,0xde,0xf7,
0xc0,0x07,0xde,0xf7,0xfe,0xff,0x00,0x01,
0xfe,0xff,0xfe,0xff,0xfe,0xff,0xfe,0xff},//單
{0xff,0xbf,0xef,0xbf,0xef,0xbf,0xef,0xbb,
0xe0,0x01,0xef,0xff,0xef,0xff,0xef,0xff,
0xe0,0x0f,0xef,0xef,0xef,0xef,0xef,0xef,
0xdf,0xef,0xdf,0xef,0xbf,0xef,0x7f,0xef},//片
{0xef,0xff,0xef,0x07,0xef,0x77,0x01,0x77,
0xef,0x77,0xef,0x77,0xc7,0x77,0xcb,0x77,
0xab,0x77,0xaf,0x77,0x6e,0xf7,0xee,0xf5,
0xed,0xf5,0xed,0xf5,0xeb,0xf9,0xef,0xff},//機(jī)
{0xf8,0x3f,0xe7,0xcf,0xdf,0xf7,0xbf,0xfb,
0xb3,0x9b,0x73,0x9d,0x7f,0xfd,0x7f,0xfd,
0x6f,0xed,0x67,0xcd,0xb3,0x9b,0xb8,0x3b,
0xdf,0xf7,0xe7,0xcf,0xf8,0x3f,0xff,0xff},//笑臉
{0xf9,0xbf,0xc7,0xaf,0xf7,0xb7,0xf7,0xb7,
0xf7,0xbf,0x00,0x01,0xf7,0xbf,0xf7,0xb7,
0xf1,0xd7,0xc7,0xcf,0x37,0xdf,0xf7,0xaf,
0xf6,0x6d,0xf7,0xf5,0xd7,0xf9,0xef,0xfd}};//我
unsigned char code Bmp[][32]={
{0xf9,0xbf,0xc7,0xaf,0xf7,0xb7,0xf7,0xb7,
0xf7,0xbf,0x00,0x01,0xf7,0xbf,0xf7,0xb7,
0xf1,0xd7,0xc7,0xcf,0x37,0xdf,0xf7,0xaf,
0xf6,0x6d,0xf7,0xf5,0xd7,0xf9,0xef,0xfd},//我
{0xff,0x07,0xc0,0x6f,0xed,0xef,0xf6,0xdf,
0xc0,0x01,0xdd,0xfd,0xbd,0xff,0xc0,0x03,
0xfb,0xff,0xf8,0x0f,0xf3,0xdf,0xf4,0xbf,
0xef,0x3f,0x9c,0xcf,0x73,0xf1,0xcf,0xfb},//愛
{0xf7,0xdf,0xf9,0xcf,0xfb,0xbf,0xc0,0x07,
0xde,0xf7,0xc0,0x07,0xde,0xf7,0xde,0xf7,
0xc0,0x07,0xde,0xf7,0xfe,0xff,0x00,0x01,
0xfe,0xff,0xfe,0xff,0xfe,0xff,0xfe,0xff},//單
{0xff,0xbf,0xef,0xbf,0xef,0xbf,0xef,0xbb,
0xe0,0x01,0xef,0xff,0xef,0xff,0xef,0xff,
0xe0,0x0f,0xef,0xef,0xef,0xef,0xef,0xef,
0xdf,0xef,0xdf,0xef,0xbf,0xef,0x7f,0xef},//片
{0xef,0xff,0xef,0x07,0xef,0x77,0x01,0x77,
0xef,0x77,0xef,0x77,0xc7,0x77,0xcb,0x77,
0xab,0x77,0xaf,0x77,0x6e,0xf7,0xee,0xf5,
0xed,0xf5,0xed,0xf5,0xeb,0xf9,0xef,0xff},//機(jī)
{0xf8,0x3f,0xe7,0xcf,0xdf,0xf7,0xbf,0xfb,
0xb3,0x9b,0x73,0x9d,0x7f,0xfd,0x7f,0xfd,
0x6f,0xed,0x67,0xcd,0xb3,0x9b,0xb8,0x3b,
0xdf,0xf7,0xe7,0xcf,0xf8,0x3f,0xff,0xff} //笑臉
};
register unsigned char i,j,k,m,l;
SCON=0x00; //串口工作模式0,移位寄存器方式
TMOD=0x01; //定時器T0工作方式1;16位方式
TR0=1; //啟動定時器T0
P1=0x3f; //P1端口初值,允許接收,緩存,顯示
IE=0x82; //允許定時器T0中斷
while(1)
{
delay(3000); //顯示效果:刷屏
for(i=0;i<32;i++) //顯示效果:卷簾出
{
dispram[i]=Bmp[5][i];
huancun[i]=Cmp[4][i];
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++)
{
huancun[k*BLKN]=huancun[(k+1)*BLKN];
huancun[k*BLKN+1]=huancun[(k+1)*BLKN+1];
dispram[k*BLKN]=dispram[(k+1)*BLKN];
dispram[k*BLKN+1]=dispram[(k+1)*BLKN+1];
}
huancun[30]=Bmp[i][j*BLKN];
huancun[31]=Bmp[i][j*BLKN+1];
dispram[30]=Bmp[i][j*BLKN];
dispram[31]=Bmp[i][j*BLKN+1];
delay(200);
}
}
delay(1000); //控制顯示的停留時間
for(i=0;i<32;i++) //顯示效果:半屏卷簾
{
dispram[i]=Bmp[5][i];
huancun[i]=Cmp[5][i];
if(i%2)delay(200);
}
for(i=0;i<6;i++) //顯示效果,左移動顯示
{
for(j=0;j<2;j++)
for(k=1;k<9;k++)
{
for(l=0;l<16;l++)
{ huancun[l*BLKN]=huancun[l*BLKN]<<1|huancun[l*BLKN+1]>>7;
huancun[l*BLKN+1]=huancun[l*BLKN+1]<<1|Cmp[i][l*BLKN+j]>>(8-k);
dispram[l*BLKN]=dispram[l*BLKN]<<1|dispram[l*BLKN+1]>>7;
dispram[l*BLKN+1]=dispram[l*BLKN+1]<<1|Bmp[i][l*BLKN+j]>>(8-k);
}
delay(200);
}
}
delay(1000); //控制顯示的停留時間
for(i=0;i<32;i++) //顯示效果:半屏卷簾
{
dispram[i]=Bmp[5][i];
huancun[i]=Cmp[4][i];
if(i%2)delay(200);
}
for(i=1;i<7;i++) //顯示效果:向下滾屏
{
for(j=16;j>0;j--)
{
for(k=15;k>0;k--)
{ huancun[k*BLKN]=huancun[(k-1)*BLKN];
huancun[k*BLKN+1]=huancun[(k-1)*BLKN+1];
dispram[k*BLKN]=dispram[(k-1)*BLKN];
dispram[k*BLKN+1]=dispram[(k-1)*BLKN+1];
}
huancun[0]=Bmp[i-1][(j-1)*BLKN];
huancun[1]=Bmp[i-1][(j-1)*BLKN+1];
dispram[0]=Bmp[i-1][(j-1)*BLKN];
dispram[1]=Bmp[i-1][(j-1)*BLKN+1];
delay(200);
}
}
delay(1000); //控制顯示的停留時間
for(i=0;i<6;i++) //顯示效果,向右移動顯示
{
for(j=2;j>0;j--)
for(k=1;k<9;k++)
{
for(l=0;l<16;l++)
{
for(m=0;m<32;m++)
{
dispram[m]=Bmp[5][m];
}
huancun[l*BLKN+1]=huancun[l*BLKN+1]>>1|huancun[l*BLKN]<<7;
huancun[l*BLKN]=huancun[l*BLKN]>>1|Bmp[i][l*BLKN+j-1]<<(8-k);
}
delay(200);
}
}
delay(1000); //控制顯示的停留時間
for(i=0;i<32;i++) //顯示效果:卷簾入
{
huancun[i]=0x00;
dispram[i]=0x00;
if(i%2)delay(200);
}
}
}
//延時函數(shù)
void delay(unsigned int dt)
{
register unsigned char bt;
for(;dt;dt--)
for(bt=0;bt<255;bt++);
}
//顯示屏掃描(定時器T0中斷)函數(shù)
void leddisplay(void)interrupt 1 using 1
{
register unsigned char i,j=BLKN;
TH0=0Xf8; //設(shè)定顯示屏刷新率每秒62.5
TL0=0X30;
i=P1; //讀取當(dāng)前顯示的行號
i=++i&0x0f; //行號加一,屏蔽高四位
do {
j--;
SBUF=huancun[i*BLKN+j]; //送顯示數(shù)據(jù)
while(!TI);TI=0;
}while(j); //完成一行數(shù)據(jù)的發(fā)送
j=2;
do {
j--;
SBUF=dispram[i*BLKN+j]; //送顯示數(shù)據(jù)
while(!TI);TI=0;
}while(j); //完成一行數(shù)據(jù)的發(fā)送
G=1; //消隱(關(guān)閉顯示)
P1&=0xf0; //行號端口清零
RRCLK=1; //顯示數(shù)據(jù)打入輸出鎖存器
P1|=i; //寫入行號
RRCLK=0; //鎖存顯示數(shù)據(jù)
G=0;
//打開顯示
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -