求助谁帮我用单片机控制的16x16点阵LED循环显示“08自动化毕业设计张少鹏”,这个程序怎么写嘛?

谁能帮我用单片机控制的16x16点阵LED循环显示“08自动化毕业设计张少鹏”,这个程序怎么写嘛?我只要程序放在论文里是静止的一个字一个字的循环显示~... 谁能帮我用单片机控制的16x16点阵LED循环显示“08自动化毕业设计张少鹏”,这个程序怎么写嘛?我只要程序放在论文里 是静止的一个字一个字的循环显示~ 展开
 我来答
修傅7267
2011-03-09
知道答主
回答量:3
采纳率:0%
帮助的人:0
展开全部

#include<reg52.h>

#define BLKN 2

#define NUM 6                //等待显示字数   此时为 6

sbit G=P1^7;              //P1.7为显示允许控制信号端口  P1.7为高电平时输出无效

sbit RRCLK=P1^6;          //P1.6为输出锁存器时钟信号端

sbit SCLR=P1^5;           //P1.5为移位寄存器清零端

sbit P32=P3^2;

void delay(unsigned int);  //延时函数

unsigned char idata huancun[32];   //显示缓存2

unsigned char code Cmp[][32];      //定义字模

void toup();                       //定义向上移动函数

void todown();                     //定义向下移动函数

void toleft();                     //定义向左移动函数

void toright();                    //定义向右移动函数

void jing();                       //定义静态显示函数

void main(void)

{

SCON=0x00;           //串口工作模式0,移位寄存器方式   书P140-141

TMOD=0x01;           //定时器T0工作方式1;16位方式     书P117-119

TR0=1;               //启动定时器T0 (TCON=0x10?)      书P107

P1=0x3f;             //P1端口初值,允许接收,缓存,显示

IE=0x83;             //允许定时器T0中断和外部中断INT0               书P106-107

IT0=1;

P2=0x3f;

while(1)

   {

         delay(1000);       //显示效果:刷屏

           jing();

           toup();

           todown();

           toleft();

           toright();

   }

}

//延时函数

void delay(unsigned int dt)

{

 register unsigned char bt;

 for(;dt;dt--)

 for(bt=0;bt<255;bt++);

}

/*************************外部中断INT0服务函数***************************/

void xuanze() interrupt 0  using 2

{

   register unsigned char mm;

    mm++;

    if (mm==1)

      {P2=0x06;

 //     jing();

      }

   else if (mm==2)

     {P2=0x5b;

  //   toup();

     }

   else if (mm==3)

     {P2=0x4f;

  //   todown();

     }

   else if (mm==4)

     {P2=0x66;

  //   toleft();

     }

   else if (mm==5)

         {

           mm=0;

           P2=0x3f;

    //       toright();

         }

}

//显示屏扫描(定时器T0中断)函数服务程序 (中断后,执行此程序)                    书P112(C51中断程序设计)

void leddisplay(void)interrupt 1 using 1         //using 1可以默认省略  interrupt 1 (定时/计数器0溢出中断)

{

 register unsigned char i,j=BLKN;

        TH0=(65536-2000)/256;

        TL0=(65536-2000)%256;   //2000个脉冲以内刷新一次,才能稳定显示

// TH0=0Xf8;         //设定显示屏刷新率每秒62.5 (记了2000个脉冲)    书P248

// TL0=0X30;    //1000个脉冲差不多1毫秒

 //定时  t=12/f*(65536-X)  X为记的脉冲个数,  f为晶振

 //T0=1111 1000 0011 0000=63536

 //T0最高为全1,           65536

 //记 X 个脉冲时, TH0=(65536-X)/256;TL0=(65536-X)%256;

 //即:TH0=(65536-X)的高八位,TL0为(65536-X)的低八位.

 //如:X=50000时,65536-50000=1536= 3CB0 H,此时TH0=3C,TL0=B0;

 i=P1;             //读取当前显示的行号

 i=++i&0x0f;       //行号加 1 ,屏蔽高四位

 do {

  j--;

  SBUF=huancun[i*BLKN+j];  //送显示数据   SBUF接收、发送缓冲寄存器?

  while(!TI);TI=0;        //TI为发送中断标志位,发送完后TI=0;

    }while(j);                //完成一行数据的发送

 G=1;                          //消隐(关闭显示)

 P1&=0xf0;                     //行号端口清零

 RRCLK=1;                      //显示数据打入输出锁存器

 P1|=i;                        //写入行号    ???

 RRCLK=0;                      //锁存显示数据

 G=0;                           //打开显示

}

/***************************向上移动函数********************************/

void toup()  //向上

{

register unsigned char i,j,k;

        for(i=0;i<32;i++)   //显示效果:半屏卷帘

  {

           huancun[i]=Cmp[0][i];

           if(i%2)delay(70);

  }

        delay(100);

        for(i=0;i<NUM;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];        //右列

    }

         huancun[30]=Cmp[(i+1)%NUM][j*BLKN];

       huancun[31]=Cmp[(i+1)%NUM][j*BLKN+1];

                            delay(70);

     }

  }

      delay(1000);           //控制显示的停留时间

}

/***********************向下移动函数**********************************/

void todown()

{

register unsigned char i,j,k;

     for(i=0;i<32;i++)   //显示效果:半屏卷帘

  {

        huancun[i]=Cmp[0][i];

        if(i%2)delay(70);

  }

   for(i=0;i<NUM;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];

    }

         huancun[0]=Cmp[(i+1)%NUM][(j-1)*BLKN];

      huancun[1]=Cmp[(i+1)%NUM][(j-1)*BLKN+1];

       delay(70);

    }

 }

      delay(1000);         //控制显示的停留时间

}

/****************************向左移动**************************************/

void toleft()

{

register unsigned char i,j,k,l;

        for(i=0;i<32;i++)   //显示效果:半屏卷帘

  {

       huancun[i]=Cmp[0][i];

       if(i%2)delay(70);

  }

   for(i=0;i<NUM;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+1)%NUM][l*BLKN+j]>>(8-k);

        }

      delay(70);

      }

     }

    delay(1000);            //控制显示的停留时间

}

/*******************************************************************/

void toright()

{

register unsigned char i,j,k,l;

       for(i=0;i<32;i++)   //显示效果:半屏卷帘

  {

        huancun[i]=Cmp[0][i];

        if(i%2)delay(70);

  }

   for(i=0;i<NUM;i++)     //显示效果,向右移动显示

  {

  for(j=2;j>0;j--)

   for(k=1;k<9;k++)

  {

   for(l=0;l<16;l++)

    {

        huancun[l*BLKN+1]=huancun[l*BLKN+1]>>1|huancun[l*BLKN]<<7;

        huancun[l*BLKN]=huancun[l*BLKN]>>1|Cmp[(i+1)%NUM][l*BLKN+j-1]<<(8-k);

    }

   delay(70);

  }

   }

     delay(1000);        //控制显示的停留时间

  }

/***************************静态卷帘显示函数****************************/

void jing()      //卷帘显示

{

        register unsigned char ii;

        register unsigned char i;

             for(ii=0;ii<NUM;ii++)

           {

  for(i=0;i<32;i++)   //显示效果:卷帘出

  {

      huancun[i]=Cmp[ii][i];

    if(i%2)delay(70);    //取两个数据(一行),延时一次

  }

                delay(100);         //控制显示的停留时间

           }

}

/******************************字模***************************/

unsigned char code Cmp[][32]={

/*---------------笑脸----------------*/

{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},

/*---------------学----------------*/

{0xFE,0xF7,0xEF,0x73,0xF3,0x37,0xF7,0x6F,0x80,0x01,0xBF,0xFB,0x70,0x17,0xFF,0xBF,

0xFF,0x7F,0x80,0x01,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFD,0x7F,0xFE,0xFF},

/*---------------习----------------*/

{0xFF,0xFF,0xC0,0x03,0xFF,0xFB,0xF7,0xFB,0xFB,0xFB,0xFC,0xFB,0xFE,0xEB,0xFF,0x9B,

0xFE,0x7B,0xF9,0xFB,0xC7,0xFB,0xEF,0xFB,0xFF,0xFB,0xFF,0xDB,0xFF,0xEB,0xFF,0xF7},

/*---------------单----------------*/

{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}};

e677j24
2011-02-25 · TA获得超过1774个赞
知道小有建树答主
回答量:788
采纳率:0%
帮助的人:159万
展开全部
给你个思路:
第一,写一段程序保证能依次点亮点阵上的每一个点。
第二,将“08自动化毕业设计张少鹏”几个字,用字模软件取出它的16X16编码。
第三,将字模编码,拷入到程序中,然后用写好的程序依次调用字模的每个编码。
最后,在程序中加个大循环,不断的重复这些字。一切OK。

参考资料: 百度一下

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
饮水言之B
2011-02-25 · 贡献了超过304个回答
知道答主
回答量:304
采纳率:0%
帮助的人:97.6万
展开全部
我能代做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式