您当前的位置:五五电子网电子知识单片机-工控设备51单片机89c51控制的16*16LED点阵显示 正文
89c51控制的16*16LED点阵显示

89c51控制的16*16LED点阵显示

点击数:7651 次   录入时间:03-04 11:43:36   整理:http://www.55dianzi.com   51单片机
#include <AT89x51.H> tZqy \_G  
unsigned int zimo,xx=0;    //zimo是字模计数器,xx为分屏显示的时候的字数。 /.<2I  
unsigned char yid,h;        //yid为移动计数器,h为行段计数器 t182&gpd`  
unsigned char code hanzi[];            //汉字字模 Jrm 9,7/  
unsigned char BUFF[18],BUFF2[18];    //左移显示的缓存 jk-e/C  
void qing(void);        void xianshi(void); p`}'-A|@  
void fen(void);        void zuo(void); 6im!v<1Qx  
void in_data(void);                //调整数据 568qdD`PS  
void rxd_data(void);                //左移发送数据 [mJmT->  
void out_rxd(unsigned char *d);        //分屏、上移发送数据 ^;=L|{Xl  
char code sw[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x00}; /*8行段码*/ E3==gYCe*  
/***********主程序******************/ .,$<waGD  
void main(void) g&oAa;~o  
{    unsigned char ee; 1YxG<K]  
    SCON=0;P1=0;yid=0;zimo=0; BJ,9C.|  
    while(1) eG05}  
    {    fen();                //分屏显示 +dgHl_,i  
        for(ee=30;ee>0;ee--)//清屏幕3秒 swGp{wJ  
        {qing();} IqW4Q1>f  
        zuo();                //左移显示 ! O~:  
        for(ee=30;ee>0;ee--) {#o0vWS>  
        {qing();} pSC\[%K  
    } q<Sb>M/\,  
} Q 2mTu[tx  
/**********清屏幕*******************/ }8e_  
void qing (void) F).7%YfY  
{  unsigned char zz,xx=0x0ff; rY,zZR+@  
    for (zz=33;zz>0;zz--)  gmW-#.  
    {out_rxd(&xx);} hC D6  
    P1=0xff; P1=0;    //锁存为高,74HC595锁存信号    ZR8%h<  
    P2=0;                //清74LS138的使能端 Q*54!^l+_r  
} Xf%vfAf  
/**********分屏显示***********/ s/\<;g:u^  
void fen(void) UpSa7F:Uw  
{    do{    xianshi();    }while(xx++<=5);    //调用单屏显示 me YSW  
    xx=0; }Dx5W9Ri"  
} $[U:Dk}  
/************单屏显示*************/ Aj{G=AT  
void xianshi(void) sp7#e%R\  
{    unsigned char ii,jj;    unsigned int kk,aa; /}Ct2w&<k  
    for (kk=500;kk>0;kk--)        //每屏显示500次 Z5`U+ (  
    {for(ii=1;ii<16;ii+=2)        //每个汉字分8行扫描 ZK`x(h{p)  
        {for (jj=0;jj<8;jj++)    //每次要发送8个汉字的2个字节,发送8次 iUq{c+h  
            {    aa=(xx*8+jj)*32+ii; rU_FRk  
                out_rxd(&hanzi[aa]);    //从串口输出第1个字的第1字节。 M5`wfF,j  
                out_rxd(&hanzi[aa-1]);    //从串口输出第1个字的第1字节。 fO}Y$y\q  
            } 2$O6%0  
            for (jj=0;jj<8;jj++)    //每次要发送8个汉字的2个字节,发送8次 xz){RkVzP  
            {    aa=(xx*8+jj)*32+ii; gx=2]~O1(  
                out_rxd(&hanzi[aa+16]);    //从串口输出第1个字的第17字节。 "FXT8Qxg  
                out_rxd(&hanzi[aa+15]);    //从串口输出第1个字的第18字节 p2j=73$  
            } B'KZ >jO  
            P2=0x0ff; NplkhgSj  
            P1=0xff; P1=0;            //锁存为高,74HC595锁存信号    |^t8ct?x~  
            P2=sw[h];                  //输出行信号 T^.W'  
            h++;                          //行加一 WHv xBd  
            if(h==8)h=0; I~NQt^sg  
        } \7A6+[ `fa  
    } ~U_,z)<`)c  
} ee{8C~  
/***************左移显示************/ x@480r  
void zuo(void) m\?H < o0  
{    unsigned char i,d=5;    //d为移动的时候一个汉字的扫描显示次数 >s+*D=k  
    xianshi();                //调用单屏显示 -% Z?rn2  
    while(zimo<=1450) C"!k`i=Lj  
        {while(yid<16)                    //数据移位。 enJgk(  
            {for(i=0;i<d;i++)                //移动速度 27-GfC=7*  
                {for(h=0;h<8;h++)              //8行扫描 ~i y]X:U  
                    {    in_data();            //调整数据 Z&E!m   
                        rxd_data();        //串口发送数据 6@[7  
                        P2=sw[h];            //送段码 -*T<^G;rK  
                        P1=0xff;            //锁存为高,595锁存信号 mjtmN0^SR  
                        P1=0; yhpeP  
                    } !ENDQ?1  
                } QwSYjR:K  
                yid++;                        //移动一步 :|tWKA  
            } RU_wr<  
          yid=0;zimo=zimo+32;              //后移一个字, v?=y9lEH@%  
        } y9xvGr[l  
    zimo=0; cFP9b8JG  
} 'C2X9/!,  
/*************分屏显示的数据发送************/ QK`5KB(k'  
void out_rxd(unsigned char *d)      /*从串口发送数据*/ \QvoL  
{    SBUF=*d; while(!TI);          //等待发送完毕 ^kO+NH40  
    TI=0; w5+H9R6  
} NZoNsNu*C.  
/*******左移显示读取数据 并调整**************/ 0;Oe&Y  
void in_data(void) Oo0SDWI`(  

[1] [2]  下一页


本文关键字:暂无联系方式51单片机单片机-工控设备 - 51单片机

上一篇:电子日历设计