#include <AT89x51.H> tZqy \_G unsigned int zimo,xx=0; //zimo是字模計(jì)數(shù)器,xx為分屏顯示的時(shí)候的字?jǐn)?shù)。 /.<2I unsigned char yid,h; //yid為移動計(jì)數(shù)器,h為行段計(jì)數(shù)器 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); //調(diào)整數(shù)據(jù) 568qdD`PS void rxd_data(void); //左移發(fā)送數(shù)據(jù) [mJmT-> void out_rxd(unsigned char *d); //分屏、上移發(fā)送數(shù)據(jù) ^;=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); //調(diào)用單屏顯示 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) //每個(gè)漢字分8行掃描 ZK`x(h{p) {for (jj=0;jj<8;jj++) //每次要發(fā)送8個(gè)漢字的2個(gè)字節(jié),發(fā)送8次 iUq{c+h { aa=(xx*8+jj)*32+ii; rU_FRk out_rxd(&hanzi[aa]); //從串口輸出第1個(gè)字的第1字節(jié)。 M5`wfF,j out_rxd(&hanzi[aa-1]); //從串口輸出第1個(gè)字的第1字節(jié)。 fO}Y$y\q } 2$O6%0 for (jj=0;jj<8;jj++) //每次要發(fā)送8個(gè)漢字的2個(gè)字節(jié),發(fā)送8次 xz){RkVzP { aa=(xx*8+jj)*32+ii; gx=2]~O1( out_rxd(&hanzi[aa+16]); //從串口輸出第1個(gè)字的第17字節(jié)。 "FXT8Qxg out_rxd(&hanzi[aa+15]); //從串口輸出第1個(gè)字的第18字節(jié) 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為移動的時(shí)候一個(gè)漢字的掃描顯示次數(shù) >s+*D=k xianshi(); //調(diào)用單屏顯示 -% Z?rn2 while(zimo<=1450) C"!k`i=Lj {while(yid<16) //數(shù)據(jù)移位。 enJgk( {for(i=0;i<d;i++) //移動速度 27-GfC=7* {for(h=0;h<8;h++) //8行掃描 ~i y]X:U { in_data(); //調(diào)整數(shù)據(jù) Z&E!m rxd_data(); //串口發(fā)送數(shù)據(jù) 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; //后移一個(gè)字, v?=y9lEH@% } y9xvGr[l zimo=0; cfP9b8JG } 'C2X9/!, /*************分屏顯示的數(shù)據(jù)發(fā)送************/ QK`5KB(k' void out_rxd(unsigned char *d) /*從串口發(fā)送數(shù)據(jù)*/ \QvoL { SBUF=*d; while(!TI); //等待發(fā)送完畢 ^kO+NH40 TI=0; w5+H9R6 } NZoNsNu*C. /*******左移顯示讀取數(shù)據(jù) 并調(diào)整**************/ 0;Oe&Y void in_data(void) Oo0SDWI`( { char s,w; unsigned int qqq; YT`,f*t for(s=8;s>=0;s--) qipV'T,S { w=s+s; n "bii7h qqq=zimo+h+h+s*32; 2Onp{,'} BUFF[w+1]=hanzi[qqq]; .0Kc|b=w BUFF[w]=hanzi[qqq+1]; @PT([1C BUFF2[w+1]=hanzi[qqq+16]; $<QrV,T BUFF2[w]=hanzi[qqq+17]; Obf RwZh?q } ]9N&I/- } RH.qbPjx /**********左移顯示的數(shù)據(jù)調(diào)整發(fā)送***************/ '451H3LC0 void rxd_data(void) //串行發(fā)送數(shù)據(jù) ]"&](e6* {unsigned char inc,s,tempyid,temp; YF)]B|I if(yid<8) inc=0; v\[+ else inc=1; Mf2F LrAh for(s=0+inc;s<16+inc;s++) //發(fā)送數(shù)據(jù) n)~*BpL3 { if(yid<8) tempyid=yid; ae2Q^yLA else tempyid=yid-8; ?=ffv]v| temp=(BUFF[s]>>tempyid)|(BUFF[s+1]<<(8-tempyid)); j*5IRzK1%0 SBUF=temp; //把BUFF中的字節(jié)從大到小移位相或后發(fā)送輸出。 sO` oapy while(!TI);TI=0; //等待發(fā)送中斷 hJ$9Hb } i84!x%|P for(s=0+inc;s<16+inc;s++) //發(fā)送8字節(jié)數(shù)據(jù) R0}1:1}$Sn { if(yid<8) tempyid=yid; VJ=>2'I else tempyid=yid-8; ]'`E temp=(BUFF2[s]>>tempyid)|(BUFF2[s+1]<<(8-tempyid)); c7jmzo SBUF=temp; //把BUFF中的字節(jié)從大到小移位相或后發(fā)送輸出。 "~5cz0 H3v while(!TI);TI=0; //等待發(fā)送中斷 ~x^y5[5{ } =nGFLH6) } >I|8yqbfm unsigned char code hanzi[]={/*自己的漢字編碼請放在這里*/}; |
|