#include 
unsigned int zimo,xx=0;    //zimo是字模計數(shù)器,xx為分屏顯示的時候的字?jǐn)?shù)。
unsigned char yid,h;        //yid為移動計數(shù)器,h為行段計數(shù)器
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);                //調(diào)整數(shù)據(jù)
void rxd_data(void);                //左移發(fā)送數(shù)據(jù)
void out_rxd(unsigned char *d);        //分屏、上移發(fā)送數(shù)據(jù)
char code sw[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x00}; /*8行段碼*/
/***********主程序******************/
void main(void)
{    unsigned char ee;
    SCON=01=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);    //調(diào)用單屏顯示
    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++)    //每次要發(fā)送8個漢字的2個字節(jié),發(fā)送8次
            {    aa=(xx*8+jj)*32+ii;
                out_rxd(&hanzi[aa]);    //從串口輸出第1個字的第1字節(jié)。
                out_rxd(&hanzi[aa-1]);    //從串口輸出第1個字的第1字節(jié)。
            }
            for (jj=0;jj<8;jj++)    //每次要發(fā)送8個漢字的2個字節(jié),發(fā)送8次
            {    aa=(xx*8+jj)*32+ii;
                out_rxd(&hanzi[aa+16]);    //從串口輸出第1個字的第17字節(jié)。
                out_rxd(&hanzi[aa+15]);    //從串口輸出第1個字的第18字節(jié)
            }
            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為移動的時候一個漢字的掃描顯示次數(shù)
    xianshi();                //調(diào)用單屏顯示
    while(zimo<=1450)
        {while(yid<16)                    //數(shù)據(jù)移位。
            {for(i=0;i
                    {    in_data();            //調(diào)整數(shù)據(jù)
                        rxd_data();        //串口發(fā)送數(shù)據(jù)
                        P2=sw[h];            //送段碼
                        P1=0xff;            //鎖存為高,595鎖存信號
                        P1=0;
                    }
                }
                yid++;                        //移動一步
            }
          yid=0;zimo=zimo+32;              //后移一個字,
        }
    zimo=0;
}
/*************分屏顯示的數(shù)據(jù)發(fā)送************/
void out_rxd(unsigned char *d)      /*從串口發(fā)送數(shù)據(jù)*/
{    SBUF=*d; while(!TI);          //等待發(fā)送完畢
    TI=0;
} 
/*******左移顯示讀取數(shù)據(jù) 并調(diào)整**************/
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];
    }
}
/**********左移顯示的數(shù)據(jù)調(diào)整發(fā)送***************/
void rxd_data(void)                    //串行發(fā)送數(shù)據(jù)
{unsigned char inc,s,tempyid,temp;
if(yid<8)    inc=0;
else        inc=1;
for(s=0+inc;s<16+inc;s++)              //發(fā)送數(shù)據(jù)
    { if(yid<8)    tempyid=yid;
      else            tempyid=yid-8;
    temp=(BUFF[s]>>tempyid)|(BUFF[s+1]<<(8-tempyid));    
    SBUF=temp;            //把BUFF中的字節(jié)從大到小移位相或后發(fā)送輸出。
    while(!TI);TI=0;    //等待發(fā)送中斷
    }
for(s=0+inc;s<16+inc;s++)              //發(fā)送8字節(jié)數(shù)據(jù)
    {  if(yid<8)    tempyid=yid;
      else        tempyid=yid-8;
    temp=(BUFF2[s]>>tempyid)|(BUFF2[s+1]<<(8-tempyid));    
    SBUF=temp;            //把BUFF中的字節(jié)從大到小移位相或后發(fā)送輸出。
    while(!TI);TI=0;    //等待發(fā)送中斷
    }
} 
更多相關(guān): AV集成
©版權(quán)所有。未經(jīng)許可,不得轉(zhuǎn)載。

 手機(jī)訪問
 手機(jī)訪問













