打印

LED点阵显示

[复制链接]
1753|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
优动的LED|  楼主 | 2008-7-23 22:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <AT89x51.H>
unsigned int zimo,xx=0;    //zimo是字模计数器,xx为分屏显示的时候的字数。
unsigned char yid,h;        //yid为移动计数器,h为行段计数器
unsigned char code hanzi[];            //汉字字模
unsigned char BUFF[18],BUFF2[18];    //左移显示的缓存
void qing(void);        void xianshi(void);
void fen(void);        void zuo(void);
void in_data(void);                //调整数据
void rxd_data(void);                //左移发送数据
void out_rxd(unsigned char *d);        //分屏、上移发送数据
char code sw[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x00}; /*8行段码*/
/* 龙图开发网: http://www.longtoo.com  */
/***********主程序******************/
void main(void)
{    unsigned char ee;
    SCON=0;P1=0;yid=0;zimo=0;
    while(1)
    {    fen();                //分屏显示
        for(ee=30;ee>0;ee--)//清屏幕3秒
        {qing();}
        zuo();                //左移显示
        for(ee=30;ee>0;ee--)
        {qing();}
    }
}
/**********清屏幕*******************/
void qing (void)
{  unsigned char zz,xx=0x0ff;
    for (zz=33;zz>0;zz--)
    {out_rxd(&xx);}
    P1=0xff; P1=0;    //锁存为高,74HC595锁存信号    
    P2=0;                //清74LS138的使能端

/**********分屏显示***********/
void fen(void)
{    do{    xianshi();    }while(xx++<=5);    //调用单屏显示
    xx=0;
}
/************单屏显示*************/
void xianshi(void)
{    unsigned char ii,jj;    unsigned int kk,aa;
    for (kk=500;kk>0;kk--)        //每屏显示500次
    {for(ii=1;ii<16;ii+=2)        //每个汉字分8行扫描
        {for (jj=0;jj<8;jj++)    //每次要发送8个汉字的2个字节,发送8次
            {    aa=(xx*8+jj)*32+ii;
                out_rxd(&hanzi[aa]);    //从串口输出第1个字的第1字节。
                out_rxd(&hanzi[aa-1]);    //从串口输出第1个字的第1字节。
            }
            for (jj=0;jj<8;jj++)    //每次要发送8个汉字的2个字节,发送8次
            {    aa=(xx*8+jj)*32+ii;
                out_rxd(&hanzi[aa+16]);    //从串口输出第1个字的第17字节。
                out_rxd(&hanzi[aa+15]);    //从串口输出第1个字的第18字节
            }
            P2=0x0ff;
            P1=0xff; P1=0;            //锁存为高,74HC595锁存信号    
            P2=sw[h];                  //输出行信号
            h++;                          //行加一
            if(h==8)h=0;
        }
    }
}
/***************左移显示************/
void zuo(void)
{    unsigned char i,d=5;    //d为移动的时候一个汉字的扫描显示次数
    xianshi();                //调用单屏显示
    while(zimo<=1450)
        {while(yid<16)                    //数据移位。
            {for(i=0;i<d;i++)                //移动速度
                {for(h=0;h<8;h++)              //8行扫描
                    {    in_data();            //调整数据
                        rxd_data();        //串口发送数据
                        P2=sw[h];            //送段码
                        P1=0xff;            //锁存为高,595锁存信号
                        P1=0;
                    }
                }
                yid++;                        //移动一步
            }
          yid=0;zimo=zimo+32;              //后移一个字,
        }
    zimo=0;
}
/*************分屏显示的数据发送************/
void out_rxd(unsigned char *d)      /*从串口发送数据*/
{    SBUF=*d; while(!TI);          //等待发送完毕
    TI=0;

/*******左移显示读取数据 并调整**************/
void in_data(void)
{    char s,w; unsigned int qqq;
    for(s=8;s>=0;s--)
    {    w=s+s;
        qqq=zimo+h+h+s*32;
        BUFF[w+1]=hanzi[qqq];
        BUFF[w]=hanzi[qqq+1];
        BUFF2[w+1]=hanzi[qqq+16];
        BUFF2[w]=hanzi[qqq+17];
    }
}
/**********左移显示的数据调整发送***************/
void rxd_data(void)                    //串行发送数据
{unsigned char inc,s,tempyid,temp;
if(yid<8)    inc=0;
else        inc=1;
for(s=0+inc;s<16+inc;s++)              //发送数据
    { if(yid<8)    tempyid=yid;
      else            tempyid=yid-8;
    temp=(BUFF>>tempyid)|(BUFF[s+1]<<(8-tempyid));    
    SBUF=temp;            //把BUFF中的字节从大到小移位相或后发送输出。
    while(!TI);TI=0;    //等待发送中断
    }
for(s=0+inc;s<16+inc;s++)              //发送8字节数据
    {  if(yid<8)    tempyid=yid;
      else        tempyid=yid-8;
    temp=(BUFF2>>tempyid)|(BUFF2[s+1]<<(8-tempyid));    
    SBUF=temp;            //把BUFF中的字节从大到小移位相或后发送输出。
    while(!TI);TI=0;    //等待发送中断
    }
}
unsigned char code hanzi[]={/*自己的汉字编码请放在这里*/};

相关帖子

沙发
太阳之母| | 2008-7-24 00:19 | 只看该作者

呵呵

啥意思?

使用特权

评论回复
板凳
winloop| | 2008-7-24 11:34 | 只看该作者

用串口送数据太慢了

使用特权

评论回复
地板
hotpower| | 2008-7-24 13:37 | 只看该作者

用51串口的方式0很绝配~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

11

帖子

0

粉丝