共有回帖数 0 个
-
register unsigned char i,j,k,l;
SCON=0x00; //串口工作模式0,移位寄存器方式
TMOD=0x01; //定时器T0工作方式1;16位方式
TR0=1; //启动定时器T0
P1=0x3f; //P1端口初值,允许接收,缓存,显示
IE=0x87; //允许定时器T0中断
IT0=1;
IT1=1;
PT0=1;
while(1)
{
delay(1000);
for(i=0;i32;i++) //显示效果:卷帘出
{
dispram=Bmp[5];
huancun=Cmp[5];
if(i%2)delay(70);
}
delay(100);
for(i=0;i6;i++) //显示效果:上滚屏
{
for(j=0;j16;j++)
{
for(k=0;k15;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[j*BLKN];
huancun[31]=Bmp[j*BLKN+1];
dispram[30]=Bmp[j*BLKN];
dispram[31]=Bmp[j*BLKN+1];
delay(70);
}
}
delay(1000);
for(i=0;i32;i++) //显示效果 半屏卷帘
{
dispram=Bmp[5];
huancun=Cmp[5];
if(i%2)delay(70);
}
for(i=0;i6;i++) //显示效果,左跑马
{
for(j=0;j2;j++)
for(k=1;k9;k++)
{
for(l=0;l16;l++)
{ huancun[l*BLKN]=huancun[l*BLKN]1|huancun[l*BLKN+1]7;
huancun[l*BLKN+1]=huancun[l*BLKN+1]1|Cmp[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[l*BLKN+j](8-k);
}
delay(70);
}
}
delay(1000);
for(i=0;i32;i++) //显示效果:半屏卷帘
{
dispram=Bmp[5];
huancun=Cmp[0];
if(i%2)delay(70);
}
for(i=1;i7;i++) //显示效果:向下滚屏
{
for(j=16;j0;j--)
{
for(k=15;k0;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(70);
}
}
delay(1000);
for(i=0;i6;i++) //显示效果,右跑马
{
for(j=2;j0;j--)
for(k=1;k9;k++)
{
for(l=0;l16;l++)
{
/*for(m=0;m32;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[l*BLKN+j-1](8-k);
dispram[l*BLKN+1]=dispram[l*BLKN+1]1|dispram[l*BLKN]7;
dispram[l*BLKN]=dispram[l*BLKN]1|Bmp[l*BLKN+j-1](8-k);
}
delay(70);
}
}
delay(1000);
for(i=0;i32;i++) //显示效果:卷帘入
{
huancun=0x00;
dispram=0x00;
if(i%2)delay(70);
}
}
}
//延时函数
void delay(unsigned int dt)
{
register unsigned char bt;
for(;dt;dt--)
for(bt=0;bt255;bt++);
}
//显示屏扫描(定时器T0中断)函数
void leddisplay(void)interrupt 1 using 1
{
register unsigned char i,j=BLKN;
TH0=0Xf8; //设定显示屏刷新率每秒62.5
TL0=0X30;
i=P1; //读取当前显示的行号
i=++i&0x0f; //行号加一,屏蔽高四位
do {
j--;
SBUF=huancun[i*BLKN+j]; //送显示数据
while(!TI);TI=0;
}while(j);j=2;
do {
j--;
SBUF=dispram[i*BLKN+j]; //送显示数据
while(!TI);TI=0;
}while(j);
//完成一行数据的发送
G=1; //消隐(关闭显示)
P1&=0xf0; //行号端口清零
RRCLK=1; //显示数据打入输出锁存器
P1|=i;
//写入行号
RRCLK=0; //所存显示数据
G=0;
//打开显示
}
void exter0(void) interrupt 0
{//unsigned char data dispram[32];
unsigned char code Dmp[][32]={
{0x40,0x00,0x20,0x00,0xFC,0x3F,0x04,0x20,0x04,0x20,0xE4,0x27,0x24,0x24,0x24,0x24,
0x24,0x24,0x24,0x24,0xE4,0x27,0x24,0x24,0x04,0x20,0x04,0x28,0x04,0x10,0x00,0x00},/*"向",0*/
{0x40,0x00,0x40,0x10,0xFE,0x3F,0x40,0x10,0x40,0x08,0x40,0x04,0xFF,0x7F,0x80,0x01,
0x40,0x00,0x30,0x0C,0x2C,0x03,0xE3,0x00,0x20,0x20,0x20,0x20,0xC0,0x3F,0x00,0x00},/*"老",1*/
{0x10,0x00,0xD0,0x7F,0x12,0x04,0x12,0x04,0xD2,0x7F,0x52,0x44,0x52,0x44,0x52,0x44,
0x52,0x44,0x4A,0x44,0x4A,0x54,0x48,0x24,0x04,0x04,0x02,0x04,0x01,0x04,0x00,0x04},/*"师",2*/
{0x50,0x00,0x90,0x00,0x88,0x3D,0x88,0x20,0x2C,0x20,0x24,0x20,0x26,0x20,0x25,0x20,
0x24,0x20,0x24,0x20,0x24,0x20,0x24,0x20,0x24,0x20,0x24,0x28,0x24,0x10,0x00,0x00},/*"们",3*/
{0x00,0x02,0xFE,0x06,0x08,0x02,0x28,0x02,0x44,0x7F,0xFE,0x11,0x50,0x12,0x10,0x12,
0xFE,0x12,0x10,0x0A,0x10,0x04,0x10,0x04,0xF0,0x0A,0x1E,0x11,0x80,0x60,0x40,0x20},/*"致",4*/
{0x48,0x04,0x48,0x04,0xFF,0x05,0x48,0x04,0x04,0x7E,0xFC,0x22,0x82,0x23,0x81,0x12,
0xBC,0x14,0xA4,0x14,0xA4,0x08,0xBC,0x08,0x80,0x14,0x80,0x72,0xA0,0x21,0x40,0x00},/*"敬",5*/
};
register unsigned char i,j,k;
delay(1000);
for(i=0;i32;i++) //显示效果:卷帘出
{
dispram=Dmp[0];
if(i%2)delay(70);
}
delay(100);
for(i=1;i6;i++) //显示效果:上滚屏
{
for(j=0;j16;j++)
{
for(k=0;k15;k++)
{
dispram[k*BLKN]=dispram[(k+1)*BLKN];
dispram[k*BLKN+1]=dispram[(k+1)*BLKN+1];
}
dispram[30]=Dmp[j*BLKN];
dispram[31]=Dmp[j*BLKN+1];
delay(70);
}
}
delay(1000);
for(i=0;i32;i++) //显示效果:卷帘入
{
dispram=0x00;
if(i%2)delay(70);
}
}
void exter1(void) interrupt 2
{
unsigned char code Emp[][32]={
{0x40,0x00,0x40,0x10,0xFE,0x3F,0x40,0x10,0x40,0x08,0x40,0x04,0xFF,0x7F,0x80,0x01,
0x40,0x00,0x30,0x0C,0x2C,0x03,0xE3,0x00,0x20,0x20,0x20,0x20,0xC0,0x3F,0x00,0x00},/*"老",0*/
{0x10,0x00,0xD0,0x7F,0x12,0x04,0x12,0x04,0xD2,0x7F,0x52,0x44,0x52,0x44,0x52,0x44,
0x52,0x44,0x4A,0x44,0x4A,0x54,0x48,0x24,0x04,0x04,0x02,0x04,0x01,0x04,0x00,0x04},/*"师",1*/
{0x50,0x00,0x90,0x00,0x88,0x3D,0x88,0x20,0x2C,0x20,0x24,0x20,0x26,0x20,0x25,0x20,
0x24,0x20,0x24,0x20,0x24,0x20,0x24,0x20,0x24,0x20,0x24,0x28,0x24,0x10,0x00,0x00},/*"们",2*/
{0x40,0x00,0x80,0x00,0xFE,0x3F,0x00,0x00,0x08,0x08,0x10,0x04,0x20,0x02,0xFF,0x7F,
0x80,0x00,0x80,0x00,0xFE,0x1F,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00},/*"辛",3*/
{0x20,0x04,0x20,0x04,0xFE,0x7F,0x20,0x04,0xA0,0x04,0x80,0x00,0xFF,0x7F,0x80,0x00,
0x80,0x00,0xF8,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0xF8,0x0F,0x08,0x08,0x00,0x00},/*"苦",4*/
{0x00,0x00,0xFE,0x3F,0x00,0x18,0x00,0x06,0x80,0x01,0x80,0x00,0x80,0x00,0x80,0x00,
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00},/*"了",5*/
};
register unsigned char i,j,k;
delay(1000);
for(i=0;i32;i++) //显示效果:卷帘出
{
huancun=Emp[0];
if(i%2)delay(70);
}
delay(100);
for(i=1;i6;i++) //显示效果:上滚屏
{
for(j=0;j16;j++)
{
for(k=0;k15;k++)
{
huancun[k*BLKN]=huancun[(k+1)*BLKN];
huancun[k*BLKN+1]=huancun[(k+1)*BLKN+1];
}
huancun[30]=Emp[j*BLKN];
huancun[31]=Emp[j*BLKN+1];
delay(70);
}
}
delay(1000);
for(i=0;i32;i++) //显示效果:卷帘入
{
huancun=0x00;
if(i%2)delay(70);
}
}
3L是两个中断子程序,分别是外部中断0和外部中断1。扫描是由定时器中断来实现的,当然,还要注意中断优先级的设置问题。
楼主 2015-12-24 21:47 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知