- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit SHCP=P3^6;//595的移位信號
- sbit STCP=P3^5;//是595的鎖存信號
- sbit SDA=P3^4;//紅數(shù)據(jù)
- sbit IA=P1^0;//行控制線A
- sbit IB=P1^1;//行控制線B
- sbit IC=P1^2;//行控制線C
- /********************************************************************/
- #define scan0 {IA=0;IB=0;IC=0;}
- #define scan1 {IA=1;IB=0;IC=0;}
- #define scan2 {IA=0;IB=1;IC=0;}
- #define scan3 {IA=1;IB=1;IC=0;}
- #define scan4 {IA=0;IB=0;IC=1;}
- #define scan5 {IA=1;IB=0;IC=1;}
- #define scan6 {IA=0;IB=1;IC=1;}
- #define scan7 {IA=1;IB=1;IC=1;}
- #define light 3
- extern uint uiAllData; //定義亮度
- uchar code hanzi[]; //漢字字模
- uchar Move,Speed,line,tome_count; //(移位 速度 行 ) 定義
- uint zimuo; //字模計(jì)數(shù)器
- uint uiAllData;
- uchar BUFF[10]; //緩存
- void DelayMs(void); // 延時(shí)
- void in_data(); // 調(diào)整移動(dòng)數(shù)據(jù)
- void rxd_data(); // 發(fā)送移動(dòng)數(shù)據(jù)
- uchar time_count=0; //計(jì)數(shù)
- void rxd_data1(); // 發(fā)送移動(dòng)數(shù)據(jù)
- /******************************************************/
- /*****不影響其他端口的掃描*************************/
- void scan(unsigned char Value)
- {switch(Value)
- { case 0: scan0;break;
- case 1: scan1;break;
- case 2: scan2;break;
- case 3: scan3;break;
- case 4: scan4;break;
- case 5: scan5;break;
- case 6: scan6;break;
- case 7: scan7;break;
- default:break;
- }
- }
- /**************************延時(shí)***********************/
- void DelayMs(void)
- {
- uchar TempCyc;
- for(TempCyc=250;TempCyc>1;TempCyc--)
- {;}
- }
- /********************************************/
- /*主函數(shù)*/
- void main()
- {
- Move=0;
- zimuo=0;
- while(1)
- {
- //利用sizeof()語句 運(yùn)算字幕有效數(shù)據(jù)的總數(shù);
- while(zimuo<1024)//2048)//定義顯示字幕數(shù)據(jù)的長度 2048/32=64 即顯示完64個(gè)16*16大小的字符后 重新循環(huán)
- {
- while(Move<16) //數(shù)據(jù)移位。
- {
- for(Speed=0;Speed<3;Speed++) //移動(dòng)速度控制
- {
- for(line=0;line<8;line++)
- {
- in_data(); //調(diào)整移動(dòng)數(shù)據(jù)
- rxd_data(); //裝載移動(dòng)數(shù)據(jù)
- scan(line); //輸出行掃描
-
- STCP=1;//鎖存
- STCP=0;
-
- DelayMs(); //延時(shí),等待一段時(shí)間,讓這列顯示的內(nèi)容在人眼內(nèi)產(chǎn)生“視覺暫留”現(xiàn)象。
- DelayMs();
-
- }
- }
- Move++; //移動(dòng)一步
- }
- Move=0;
- zimuo=zimuo+64; //換下一個(gè)字 這里不在移動(dòng)地址 就實(shí)現(xiàn)了靜態(tài)顯示
- }
-
- TMOD=0x01; //定時(shí)器0 16位定時(shí)定時(shí)器1方式2
- TH0=0x4c; //50ms
- TL0=0x00;
- TR0=1; //開定時(shí)器計(jì)數(shù)
- ET0=1; //開定時(shí)器中斷
- EA=1; //開中斷
- while(tome_count<9) //怎么樣跳出這個(gè)循環(huán)????????
- {
- }
-
- zimuo=0;
- }
- }
-
- /**********************************************************/
- void in_data(void) //調(diào)整數(shù)據(jù)一個(gè)屏2個(gè)字的數(shù)據(jù)
- {
- char s;
- for(s=2;s>=0;s--) //一個(gè)屏能顯示4個(gè)字 取最前面的字發(fā)送給595的最前面
- { //zimuo 是個(gè)計(jì)算顯示到哪個(gè)字的計(jì)數(shù)器 s是取4個(gè)字的循環(huán) line是顯示到哪一行 根據(jù)這幾個(gè)參數(shù)計(jì)算出一個(gè)屏中現(xiàn)在需要顯示的數(shù)據(jù) 放入BUFF 內(nèi)存中 等待發(fā)送給595
- BUFF[2*s]=hanzi[zimuo+32*s+2*line]; //要知道為什么這么算就需要知道取模的方向和原理 一行有8個(gè)字節(jié) (一個(gè)中文16*16的字 一行有2個(gè)字節(jié))
- BUFF[2*s+1]=hanzi[zimuo+1+32*s+2*line];//把一個(gè)字的首字節(jié)放入BUFF[0]中 后面一個(gè)字節(jié)放入BUFF[1] 以此類推剩下的3個(gè)字
- }
- }
- /***********************發(fā)送移動(dòng)的數(shù)據(jù)****************************/
- void rxd_data(void) //串行發(fā)送數(shù)據(jù)
- {
- uchar s;
- uchar temp,k;
- for(s=0;s<4;s++) //發(fā)送4字節(jié)數(shù)據(jù)
- {
- temp=BUFF[s];
- temp=255-temp;
- SDA=0;
- for(k=0;k<8;k++)//一個(gè)字節(jié)8位 發(fā)送給595
- {
- SHCP=0; //上升沿移位595
- SDA=(bit)(temp&0x01);//通過IO口送一個(gè)位給 595 0x01
- temp=temp>>1; //字節(jié)移位 準(zhǔn)備送下一位
- SHCP=1;
- }
- }
- }
- void Timer0Interrupt(void) interrupt 1 //定時(shí)器中斷
- {
- TH0 = 0x04C;//定時(shí)50MS 這里的晶振是18.432M 測試無需理會晶振大小
- TL0 = 0x000;
-
- time_count++;
- if(time_count>8)//發(fā)送一次數(shù)據(jù)
- {
- time_count=0;
- line++; //下一行
- if(line>8) //共16行
- {
- line=0; //重新移動(dòng)
- }
- rxd_data1();//發(fā)送數(shù)據(jù)
- scan(line); //打開行掃描
- STCP=1;//鎖存
- STCP=0;
- }
-
- }
- void rxd_data1(void) //串行發(fā)送數(shù)據(jù)
- {
- uchar s;
- uchar k;
- for(s=0;s<4;s++)//發(fā)送4字節(jié)數(shù)據(jù) 一行4個(gè)字節(jié)
- {
- for(k=0;k<8;k++) //一個(gè)字節(jié)8位
- {
- SHCP=0; //上降沿移位595
- SDA=1;
- SHCP=1;
- }
- }
- }
- const uchar code hanzi[]={
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"未命名文件",0*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"未命名文件",0*/
- 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
- 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,/*"未命名文件",0*/
- 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
- 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,/*"未命名文件",0*/
- 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
- 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,/*"未命名文件",0*/
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,/*"未命名文件",0*/
- 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
- 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,/*"未命名文件",0*/
- 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
- 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,/*"未命名文件",0*/
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*"未命名文件",0*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"未命名文件",0*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"未命名文件",0*/
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,/*"未命名文件",0*/
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,/*"未命名文件",0*/
- 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"未命名文件",0*/
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"未命名文件",0*/
- };
復(fù)制代碼 |