签到

05月06日
尚未签到

共有回帖数 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 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知