最近抄了一個LED點陣屏左移的程序16*32,用的138和595,可是在定義字模數組的時候只能定義5個字,多于5個字就沒有顯示,五個字以內就正常,請
大神們給予指點,
以下是源程序
- #include<STC12C5A60S2.h>
- #include <intrins.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- sbit SDA_G =P4^1; //
- sbit SDA_R =P4^5;//串行數據輸入
- sbit SHCP =P0^6; //移位時鐘脈沖
- sbit STCP =P4^6; //輸出鎖存器控制脈沖
- sbit IA=P2^0;//
- sbit IB=P2^1; //
- sbit IC=P2^2; //
- sbit ID=P2^3;//
- sbit OE=P4^4; //
- //uint uiAllData;
- uchar Move,line,Speed;
- uint zimuo;
- uchar BUFF[20]; //緩存
- void DelayMs(void); // 延時
- void in_data(); // 調整移動數據
- void rxd_data(); // 發送移動數據
- uchar code hanzi[]={
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
- 0x00,0x01,0x00,0x01,0x3F,0x01,0x20,0x3F,0xA0,0x20,0x92,0x10,0x54,0x02,0x28,0x02,
- 0x08,0x02,0x14,0x05,0x24,0x05,0xA2,0x08,0x81,0x08,0x40,0x10,0x20,0x20,0x10,0x40,/*"歡",0*/
- 0x00,0x00,0x04,0x01,0xC8,0x3C,0x48,0x24,0x40,0x24,0x40,0x24,0x4F,0x24,0x48,0x24,
- 0x48,0x24,0x48,0x2D,0xC8,0x14,0x48,0x04,0x08,0x04,0x14,0x04,0xE2,0x7F,0x00,0x00,/*"迎",1*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
- };
- /******************************************************/
- /*****不影響其他端口的掃描*************************/
- void scan(uchar Value)
- {
- switch(Value)
- {case 0: {IA=0;IB=0;IC=0;ID=0;};break;
- case 1:{IA=1;IB=0;IC=0;ID=0;};break;
- case 2:{IA=0;IB=1;IC=0;ID=0;};break;
- case 3: {IA=1;IB=1;IC=0;ID=0;};break;
- case 4: {IA=0;IB=0;IC=1;ID=0;};break;
- case 5: {IA=1;IB=0;IC=1;ID=0;};break;
- case 6: {IA=0;IB=1;IC=1;ID=0;};break;
- case 7:{IA=1;IB=1;IC=1;ID=0;};break;
- case 8: {IA=0;IB=0;IC=0;ID=1;};break;
- case 9: {IA=1;IB=0;IC=0;ID=1;};break;
- case 10:{IA=0;IB=1;IC=0;ID=1;};break;
- case 11: {IA=1;IB=1;IC=0;ID=1;};break;
- case 12: {IA=0;IB=0;IC=1;ID=1;};break;
- case 13:{IA=1;IB=0;IC=1;ID=1;};break;
- case 14:{IA=0;IB=1;IC=1;ID=1;};break;
- case 15:{IA=1;IB=1;IC=1;ID=1;};break;
- default:break;
- }
- }
- /**************************延時***********************/
- void DelayMs(void)
- {
- unsigned char i, j;
- _nop_();
- i = 11;
- j = 190;
- do
- {
- while (--j);
- } while (--i);
- }
- void Timer0Init(void) //1毫秒@22.1184MHz
- {
- AUXR &= 0x7F; //定時器時鐘12T模式
- TMOD &= 0xF0; //設置定時器模式
- TMOD |= 0x01; //設置定時器模式
- TL0 = 0xCD; //設置定時初值
- TH0 = 0xF8; //設置定時初值
- TR0 = 1; //定時器0開始計時
- EA=1;
- ET0=1;
- }
- /********************************************/
- /*主函數*/
- void main()
- { P4SW=0x70;
- P2M1=0x00;P2M0=0x0f;
- P4M1=0x00;P4M0=0xff;
- P3M1=0x00;P3M0=0x80;
- zimuo=0;
- Move=0;
- SHCP=0;
- STCP=0;
- Timer0Init();
- line=0;
- while(1)
- {
- while(zimuo<128)
- {
- while(Move<16)
- {
- for(Speed=0;Speed<15;Speed++)
- {
-
- for(line=0;line<16;line++)
- {
- in_data(); //
- rxd_data(); //
- scan(line); //
- OE=1;//
- DelayMs();
- OE=0;
-
- }
- }
- Move++;
- }
- Move=0;
- zimuo=zimuo+32;
- }
- zimuo=0;
- }
- }
-
- /******************************************************** */
- void in_data(void)
- {
- uchar s;
- for(s=0;s<8;s++)
- {
- BUFF[2*s]=hanzi[zimuo+32*s+2*line];
- BUFF[2*s+1]=hanzi[zimuo+1+32*s+2*line];
- }
- }
- /***********************發送移動的數據************************ */
- void rxd_data(void)
- {
- uchar h;
- uchar inc,tempyid,temp,k;
- if(Move<8)
- inc=0;
- else
- inc=1;
- for(h=0+inc;h<4+inc;h++)
- {
- if(Move<8)
- tempyid=Move;
- else
- tempyid=Move-8;
- temp=(BUFF[h]>>tempyid)|(BUFF[h+1]<<(8-tempyid));
- temp=~temp;
- for(k=0;k<8;k++)
- {
- SHCP=0;
- if(temp&0x01==0x01)
- {
- SDA_G=1;
- }
- else
- {
- SDA_G=0;
- }
-
- // SDA_G=(bit)(temp&0x01);
- temp=temp>>1;
- SHCP=1;
- _nop_();
- _nop_();
-
-
- }
- STCP=1;
- STCP=0;
- }
- }
復制代碼
|