帶紅外 51單片機 源程序 功能很多.
0.png (53.16 KB, 下載次數: 52)
下載附件
2017-7-23 18:13 上傳
單片機源程序如下:
- /*---------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------
- * 上升沿電子科技
- * 時間2015.8.1
- *Build target 'Target 1'
- *compiling stc8x8x8.c...
- *linking...
- *Program Size: data=17.1 xdata=355 code=53475
- *creating hex file from "stc8x8x8"...
- *"stc8x8x8" - 0 Error(s), 0 Warning(s).
- *沒有關閉本店字樣的顯示函數 FLASH_12 FLASH_14 FLASH_18 如果需要自己關閉函數即可
- ------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------*/
- #include "STC12C5A.H" //包含單片機的頭文件使用KEIL必須添加進來否則編譯不了
- #include "intrins.h" //包含NOP延時頭文件
- #include"main.h" //主程序頭文件
- #include "shuju.h" //包含字模數據數組
- #include "flash.h" //動畫部分程序
- #include "hongwai.h" //紅外部分程序
- #include "key.h" //按鍵部分程序
- /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@定義變量@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
- uchar xdata display[8][8];
- uchar xdata msd=4;
- uint ld=500;
- uchar test=0,key1=0,key2=0,key3=0,key4=0;
- bit pu;
- uchar xsdsq=0;
- uchar cd=0,cnt=0,errd_flag=0,read_flag=0,layerr=0,saom=0;
- unsigned int CYCLE=100,PWM_LOW=1110,shan=0,shuzi1=0,shuzi2=0,shuzi3=0,shuzi4=0,m=0;//定義周期并賦值
- unsigned short T_PCA0; // unsigned short 范圍是0至65535
- unsigned short T_PCA1;
- /*##########################################################################################*/
- //************************************上升沿電子科技************************************
- //函數名稱:void init();
- //功 能:定義IO口功能
- //出口參數:無
- //編 寫 人:上升沿電子科技
- //編寫日期:2015-08-1
- //修改歷史:V1.0
- //************************************上升沿電子科技************************************
- void init()
- {
- P4SW=0xff; //定義P4口為I/O口
- P0M1=0x00;
- P0M0=0xff; //定義P0為強上拉輸出.
- P1M1=0x01;
- P1M0=0xfe; //定義P1為強上拉輸出. P1.0作為AD此時不能作為強上蠟
- P2M1=0x00;
- P2M0=0xff; //定義P2為強上拉輸出.
- P3M1=0x00;
- P3M0=0xf8; //定義P2為強上拉輸出.
- P4M1=0x00;
- P4M0=0xff; //定義P4為強上拉輸出.
- }
- /********************* AD初始化************************/
- void ADC0_Init (void)
- {
- P1ASF = 0x01; //Open 8 channels ADC function
- ADC_RES = 0; //Clear previous result 清零ADC的8位數據
- AUXR1 &=0xFB; //1111,1011, 令 ADRJ=0 (10位A/D轉換結果的高8位放在ADC_RES寄存器, 低2位放在ADC_RESL寄存器)
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//配置ADC寄存器
- _nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
- _nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
- }
- /********************* 使用PCA定時初始化************************/
- void PCA_init()
- {
- CCON = 0; //Initial PCA control register
- //PCA timer stop running
- //Clear CF flag
- //Clear all module interrupt flag
- CL = 0; //Reset PCA base timer
- CH = 0;
- CMOD = 0x00;
- T_PCA0 = 1024;//46080; //定時50ms,11.0592MHZ晶振,T_Value=46080.要2秒需循環40次
- CCAP0L = T_PCA0;
- CCAP0H = T_PCA0 >> 8; //Initial PCA module-0
- T_PCA0 += 1024; //PCA module-0 work in 16-bit timer mode
- CCAPM0 = 0x49; //and enable PCA interrupt //Set PCA timer clock source as Fosc/12
- CR = 0; //PCA timer start run
- PPCA = 1; //高優先級
- EA=1;
- }
- /********************* 串口初始化************************/
- void init_uart(void)
- {
- PCON |= 0x80;
- SCON = 0x50;
- AUXR |= 0x40;
- AUXR &= 0xFE;
- TMOD &= 0x0F;
- TMOD |= 0x20;
- TL1 = 0xE8;
- TH1 = 0xE8;
- ET1 = 0;
- TR1 = 1;
- ES=1;
- EA=1;
- }
- /*##########################################################################################*/
- //************************************上升沿電子科技************************************
- //函數名稱:void sinter()
- //功 能:中斷初始化
- //出口參數:無
- //編 寫 人:上升沿電子科技
- //編寫日期:2015-08-1
- //修改歷史:V1.0
- //************************************上升沿電子科技************************************
- void sinter()
- {
- IE=0x82;
- TCON=0x01;
- TH0=0x10;
- TL0=0x00;
- EX0 = 1;
- init();
- PWM_POW=1;
- ADC0_Init();
- PCA_init();
- init_uart();
- EA=1;
- }
- /*##########################################################################################*/
- //************************************上升沿電子科技************************************
- //函數名稱:void delayus(unsigned int yanshi);
- //功 能:根據yanshi值的大小進行延時等待操作,1默認為2uS
- //入口參數:yanshi的值,范圍0-65535
- //出口參數:無
- //編 寫 人:上升沿電子科技
- //編寫日期:2015-08-1
- //修改歷史:V1.0
- //************************************上升沿電子科技************************************
- void delayus(unsigned int yanshi)
- {
- unsigned int wmys; //定義延時循環控制變量
- for(wmys=0;wmys<=yanshi;wmys++); //根據延時參數進行空循環操作,達到延時功能
- }
- void delay10us(void) //誤差 -0.026765046296us STC 1T 22.1184Mhz
- {
- unsigned char a,b;
- for(b=1;b>0;b--)
- for(a=2;a>0;a--); //默認的速度為5,變速1-5-25-125
- }
- void delay5us(void) //誤差 -0.026765046296us STC 1T 22.1184Mhz
- {
- unsigned char a,b;
- for(b=1;b>0;b--)
- for(a=5;a>0;a--); //默認的速度為5,變速1-5-25-125
- }
- void delay(uint ihk)
- {
- if(key3==2){return;}
- else
- {
- while(ihk--)
- {
- delay5us(); //12t的mcu 注釋這個延時即可
- }
- }
- }
- void delays(int t)
- {
- int i;
- while(t--)
- for(i=0;i<700;i++);
- }
- /*##########################################################################################*/
- //************************************上升沿電子科技************************************
- //函數名稱:void hansao(unsigned char hs); 138驅動程序
- //功 能:根據入口參數hs的值,進行判斷選擇哪一行,選通1-8行的選通
- //入口參數:hs的值,范圍0-7
- //出口參數:無
- //編 寫 人:上升沿電子科技
- //************************************上升沿電子科技************************************
- void hansao(unsigned char hs)
- {
- if(hs<8) //判斷hs的值是否在行掃描的值范圍內,不在范圍內不執行任何操作
- {
- if(hs==7) //選通第1行
- {
- M_A=0;M_B=0;M_C=0;M_D=0; return;
- }
- if(hs==6) //選通第2行
- {
- M_A=1;M_B=0;M_C=0;M_D=0; return;
- }
- if(hs==5) //選通第3行
- {
- M_A=0;M_B=1;M_C=0;M_D=0; return;
- }
- if(hs==4) //選通第4行
- {
- M_A=1;M_B=1;M_C=0;M_D=0; return;
- }
- if(hs==3) //選通第5行
- {
- M_A=0;M_B=0;M_C=1;M_D=0; return;
- }
- if(hs==2) //選通第6行
- {
- M_A=1;M_B=0;M_C=1;M_D=0; return;
- }
- if(hs==1) //選通第7行
- {
- M_A=0;M_B=1;M_C=1;M_D=0; return;
- }
- if(hs==0) //選通第8行
- {
- M_A=1;M_B=1;M_C=1;M_D=0; return;
- }
- }
- }
- //************************************595芯片驅動程序1************************************
- void sendbyte(unsigned int num1,unsigned int num2,unsigned int num3,unsigned int num4)
- {
- unsigned char c;
- for(c=0;c<8;c++)
- {
- CLK=0;
- M_LR_DS0=num1&0x80;
- M_LG_DS0=num2&0x80;
- M_HR_DS0=num3&0x80;
- M_HG_DS0=num4&0x80;
- CLK=1;
- num1<<=1;
- num2<<=1;
- num3<<=1;
- num4<<=1;
- }
- }
- //************************************595芯片驅動程序2************************************
- void sendbyte1(unsigned int num1,unsigned int num2,unsigned int num3,unsigned int num4)
- {
- unsigned char c;
- for(c=0;c<8;c++)
- {
- CLK=0; //模擬時鐘控制端口
- M_LR_DS0=num1&0x01; //模擬數據發送端口
- M_LG_DS0=num2&0x01;
- M_HR_DS0=num3&0x01;
- M_HG_DS0=num4&0x01;
- CLK=1;
- num1>>=1;
- num2>>=1;
- num3>>=1;
- num4>>=1;
- }
- }
- //************************************595芯片驅動程序3 上位機控制部分***********************************
- void sendbyteck(unsigned int num1,unsigned int num2,unsigned int num3,unsigned int num4)
- {
- unsigned char c;
- for(c=0;c<8;c++)
- {
- CLK=0;
- M_LR_DS0=num1&0x01;
- M_LG_DS0=num2&0x01;
- M_HR_DS0=num3&0x01;
- M_HG_DS0=num4&0x01;
- CLK=1;
- num1>>=1;
- num2>>=1;
- num3>>=1;
- num4>>=1;
- }
- }
- /************************************呼吸燈************************************/
- void Delaypwm(unsigned int tpwm)
- {
- while(--tpwm);
- }
- /************************************呼吸燈************************************/
- void PWM_LED()
- {
- unsigned int CYCLE=100,PWM_LOW=1110,xhs=60000;
- PWM_POW=0;
- if (xhs>1)
- {
- CYCLE=1950,PWM_LOW=201;
- PWM_POW=1;
- Delaypwm(60000);
- for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
- {
- PWM_POW=0;
- Delaypwm(PWM_LOW);
- PWM_POW=1;
- Delaypwm(CYCLE-PWM_LOW);
- }
- for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
- {
- PWM_POW=0;
- Delaypwm(PWM_LOW);
- PWM_POW=1;
- Delaypwm(CYCLE-PWM_LOW);
- }
- xhs--;
- }
- }
- /************************************掃描一面************************************/
- void turn_on(uchar v)
- {
- uchar a[64]={0};
- char i,j;
- a[7]=0x80;
- if(key3==1){return;}
- else{zhen(a,v);}
- delay(50);
- for(i=1;i<8;i++)
- {
- a[i*8+7]=0x80;
- if(key3==1){break;}
- else{zhen(a,v);}
- delay(50);
- }
- for(i=6;i>=0;i--)
- {
- for(j=0;j<8;j++)
- a[j*8+i]=0x80;
- if(key3==1){break;}
- else{zhen(a,v);}
- delay(50);
- }
- for(i=0;i<64;i++)
- a[i]=0;
- }
- /************************************左向右掃描檢測************************************/
- void H_scan(uchar v)
- {
- uchar b[64]={0};
- char i,j;
-
- for(i=0;i<64;i++)
- b[i]=0x80;
- for(i=0;i<8;i++)
- {
- if(key1==4)
- {
- return;
- }
- for(j=0;j<8;j++)
- b[j*8+i]=0x80;
- if(key3==1){break;}
- else{zhen(b,1);}
- }
- for(i=0;i<8;i++)
- {
- if(key1==4)
- {
- return;
- }
- for(j=0;j<64;j++)
- b[j]>>=1;
- if(key3==1){break;}
- else{zhen(b,v);}
- delay(50);
- }
- }
- /************************************下向上掃描檢測************************************/
- void V_scan(uchar v)
- {
- uchar a[64]={0};
- char i,j;
- for(i=0;i<8;i++)
- a[i]=0xff;
- if(key1==4)
- {
- return;
- }
- if(key3==1){return;}
- else{zhen(a,v);}
- delay(50);
- for(i=1;i<8;i++)
- {
- if(key1==4)
- {
- return;
- }
- for(j=0;j<8;j++)
- {
- a[i*8+j]=0xff;
- a[(i-1)*8+j]=0;
- }
- if(key3==1){break;}
- else{zhen(a,v);}
- delay(50);
- }
- }
- /************************************前向后掃描檢測************************************/
- void W_scan(uchar v)
- {
- uchar a[64]={0};
- char i,j;
- for(i=0;i<8;i++)
- a[i*8+7]=0xff;
- if(key1==4)
- {
- return;
- }
- if(key3==1){return;}
- else{zhen(a,v);}
- delay(50);
- for(i=6;i>=0;i--)
- {
- if(key1==4)
- {
- return;
- }
- for(j=0;j<8;j++)
- {
- a[j*8+i]=0xff;
- a[j*8+i+1]=0;
- }
- if(key3==1){break;}
- else{zhen(a,v);}
- delay(50);
- }
- M_EN=0;
- }
- void W_side(uchar *tab,char num,char v)
- {
- uchar a[64]={0};
- int i,j;
- for(j=0;j<num;j++)
- {
- for(i=0;i<8;i++)
- a[i*8+7]=tab[j*8+i];
- if(key3==1){break;}
- else{zhen(a,v);}
- delay(50);
- }
- }
- void delayyp(unsigned int n1)
- {
- unsigned int xdata i;
- while(n1--)
- for (i=0;i<200;i++);
- }
- unsigned int Read_ADC0()
- {
- ADC_CONTR|=0x08;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- while(!(ADC_CONTR&0x10));
- ADC_CONTR&=~0x10;
- return ((ADC_RES<<2)|(ADC_RESL));
- }
- unsigned int voivol(unsigned int n)
- {
- unsigned int xdata val,result,rel=0;
- while(n)
- {
- val=Read_ADC0();
- delayyp(2);
- result=val;
- rel=rel+result;
- n--;
- }
- return rel;
- }
- void Vol_watch_0(unsigned char kxg)
- {
- unsigned int xdata result=0,l=1,n=500;
- while(n)
- {
- if ((result>>5)>l)
- l=result>>5;
- else
- if (l>1)
- l--;
- if (l>7)
- l=7;
-
- if(kxg==1)
- {
- box(0,0,0,l,l,l,0,1);
- result=voivol(16);
- box(0,0,0,7,7,7,1,0);
- }
- if(kxg==2)
- {
- box(7,7,7,7-l,7-l,7-l,0,1);
- result=voivol(16);
- box(7,7,7,7-l,7-l,7-l,1,0);
- }
- if(kxg==3)
- {
- box(7,0,7,0,l,0,0,1);
- result=voivol(16);
- box(l,0,l,0,7,0,1,0);
- }
- if(kxg==4)
- {
- box(l,l,l,7-l,7-l,7-l,0,1);
- result=voivol(16);
- box(7-l,7-l,7-l,l,l,l,1,0);
- }
- if(kxg==5)
- {
- box(0,7,7,l,7-l,0,0,1);
- result=voivol(16);
- box(0,7,7,l,7-l,0,1,0);
- }
- if(kxg==6)
- {
- box(l,l,l,7-l,7-l,7-l,0,1);
- result=voivol(16);
- box(7-l,7-l,7-l,7,7,7,1,0);
- }
- if(kxg==7)
- {
- box(l,0,7,0,7,0,0,1);
- result=voivol(16);
- box(7,0,l,0,l,0,1,0);
- }
- n--;
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}
- }
- }
- void Vol_watch_2()
- {
- unsigned int xdata result=0,l=0,n=500;
- while(n)
- {
- if ((result>>5)>l)
- l=result>>5;
- else
- if (l>0)
- l--;
- if (l>7)
- l=7;
- clear(0);
- switch(l)
- {
- case 0:point(4,4,4,1);break;
- case 1:box(3,3,3,4,4,4,1,1);break;
- case 2:box(2,2,2,4,4,4,1,1);break;
- case 3:box(2,2,2,5,5,5,1,1);break;
- case 4:box(1,1,1,5,5,5,1,1);break;
- case 5:box(1,1,1,6,6,6,1,1);break;
- case 6:box(0,0,0,6,6,6,1,1);break;
- default:box(0,0,0,7,7,7,1,1);
- }
- result=voivol(16);
- n--;
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}
- }
- }
- void Vol_watch_3()
- {
- unsigned int result,l,n=500;
- while(n)
- {
- result=voivol(3);
- l=result>>3;
- if (l>7)
- l=7;
- transss();
- box_apeak_xy(0,0,0,0,7,l,1,1);
- delayyp(60);
- n--;
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}
- }
- }
- void Vol_watch_1(unsigned char kxg1)
- {
- unsigned int xdata result=0,l=0,n=500,saa,sad;
- unsigned char code disxin[8][8]={
- 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x99,
- 0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xA5,
- 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0xC3,
- 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x81,
- 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x99,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xE7,
- 0xFF, 0xC3, 0xA5, 0x81, 0x81, 0xA5, 0xC3, 0xFF,
- };
- while(n)
- {
- if ((result>>5)>l)
- l=result>>5;
- else
- if (l>0)
- l--;
- if (l>7)
- l=7;
- if(kxg1==1)
- {
- box(3,3,0,4,4,l,1,1);
- if (l<7)
- box(3,3,7,4,4,l+1,1,0);
- result=voivol(16);
- }
- if(kxg1==2)
- {
- box(2,2,0,5,5,l,1,1);
- if (l<7)
- box(2,2,7,5,5,l+1,1,0);
- result=voivol(16);
- }
- if(kxg1==3)
- {
- box(1,1,0,6,6,l,1,1);
- if (l<7)
- box(1,1,7,6,6,l+1,1,0);
- result=voivol(16);
- }
- if(kxg1==4)
- {
- box(0,0,0,7,7,l,1,1);
- if (l<7)
- box(0,0,7,7,7,l+1,1,0);
- result=voivol(16);
- }
- if(kxg1==5)
- {
- for(saa=0;saa<8;saa++)
- {
- for(sad=0;sad<8;sad++)
- {
- display[saa][sad]= disxin[saa][sad];
- }
- }
- box(3,3,0,4,4,l,1,1);
- if (l<7)
- box(3,3,7,4,4,l+1,1,0);
- result=voivol(16);
- }
- n--;
- if(key2==3||key2==2)
- {
- if(key2==3)
- {
- msd=3;
- break;
- }
- else
- {
- if(key2==2)
- {
- msd=2;break;
- }
- }
- }
- }
- }
- void fvb() //上位機
- {
- if(read_flag)
- {
- read_flag=0;
- for(saom=0;saom<8;saom++)
- {
- displayck[saom+0]=((shuzu8X8[saom*8]>>7)&0x01)+(((shuzu8X8[saom*8+1]>>7)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>7)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>7)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>7)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>7)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>7)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>7)&0x01)<<7);
- displayck[saom+8]=((shuzu8X8[saom*8]>>6)&0x01)+(((shuzu8X8[saom*8+1]>>6)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>6)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>6)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>6)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>6)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>6)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>6)&0x01)<<7);
- displayck[saom+16]=((shuzu8X8[saom*8]>>5)&0x01)+(((shuzu8X8[saom*8+1]>>5)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>5)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>5)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>5)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>5)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>5)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>5)&0x01)<<7);
- displayck[saom+24]=((shuzu8X8[saom*8]>>4)&0x01)+(((shuzu8X8[saom*8+1]>>4)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>4)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>4)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>4)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>4)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>4)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>4)&0x01)<<7);
- displayck[saom+32]=((shuzu8X8[saom*8]>>3)&0x01)+(((shuzu8X8[saom*8+1]>>3)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>3)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>3)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>3)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>3)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>3)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>3)&0x01)<<7);
- displayck[saom+40]=((shuzu8X8[saom*8]>>2)&0x01)+(((shuzu8X8[saom*8+1]>>2)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>2)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>2)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>2)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>2)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>2)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>2)&0x01)<<7);
- displayck[saom+48]=((shuzu8X8[saom*8]>>1)&0x01)+(((shuzu8X8[saom*8+1]>>1)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>1)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>1)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>1)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>1)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>1)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>1)&0x01)<<7);
- displayck[saom+56]=((shuzu8X8[saom*8]>>0)&0x01)+(((shuzu8X8[saom*8+1]>>0)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>0)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>0)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>0)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>0)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>0)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>0)&0x01)<<7);
- }
- }
- for(layerr=0;layerr<8;layerr++)
- {
- key_baihei_scan(); key_shangwiej_scan(); key_donghua_scan(); key_yinyue_scan();
- hansao(layerr);
- sendbyteck(~displayck[layerr*8+0],~displayck[layerr*8+2],~displayck[layerr*8+4],~displayck[layerr*8+7]);
- sendbyteck(~displayck[layerr*8+3],~displayck[layerr*8+1],~displayck[layerr*8+6],~displayck[layerr*8+5]);
- SUO=0; //模擬鎖存信號端口
- _nop_();
- SUO=1;
- M_EN=0;
- delayus(ld);
- M_EN=1;
-
- if(key2==1||key2==2)
- {
- break;
- }
- }
- }
- /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@主函數@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
- void main()
- {
- unsigned char p=0,k=0,l=0; //定義
- sinter();
- IDelay(100);
- IRInit(); //初始化紅外中斷
- clear(0);
- PWM_LED();//開啟PWM呼吸燈功能
- turn_on(10);
- H_scan(10);
- V_scan(10);
- W_scan(10);
- PWM_POW=0;//打開電源指示燈
- test=1;
- while(1)
- {
- ld=500;
- H_scan(40); //左向右掃描檢測
- if(key1==1||key1==2||key1==3||key1==4)
- {
- break;
- }
- V_scan(40); //下向上掃描檢測
- if(key1==1||key1==2||key1==3||key1==4)
- {
- break;
- }
- W_scan(40); //前向后掃描檢測
- if(key1==1||key1==2||key1==3||key1==4)
- {
- break;
- }
- }
- while(1)
- {
- if(key1==3)
- {
- H_scan(40);
- }
- if(key1==2)
- {
- V_scan(40);
- }
- if(key1==1)
- {
- W_scan(40);
- }
- if(key1==4) //k1按下退出檢測功能
- {
- test=2;
- msd=2;
- ld=500;
- break; //退出測試功能
- }
- }
- delay(10); TR0=0;
- while(1) /*play list*/
- {
- if(msd==1)
- {
- key3=3;
- TR0=0;
- ET0=0;
- IRInit();
- xsdsq=1;
- hy(number+(36+1)*8,10);
- W_side(number+(36+1)*8,1,200); //顯示音樂的標識
- xsdsq=0;
- PWM_POW=0;
- TR0=1; //開啟定時器顯示掃描
- ET0=1;
- test=2;
- while(1)
- {
- if(key2==3||key2==2)
- {
- if(key2==3)
- {
- msd=3;
- break;
- }
- else
- {
- if(key2==2)
- {
- msd=2;
- break;
- }
- }
- }
- else
- {
- clear(0);
- Vol_watch_0(1);
- }
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_0(2);}
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_0(3); }
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_0(4); }
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_0(5);}
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_0(6);}
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_0(7);}
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_1(1);}
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_1(2);}
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_1(3); }
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_1(4);}
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_1(5);}
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_2();}
- if(key2==3||key2==2){if(key2==3){msd=3;break;}
- else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_3();}
- }
- }
- if(msd==2)
- {
- key3=3;
- xsdsq=1;
- hy(number+(36+2)*8,10);
- W_side(number+(36+2)*8,1,200);
- xsdsq=0;
- while(1)
- {
- msd=6;
- TR0=0; //關閉定時器顯示掃描
- TR1=0;
- ET0=0;
- IRInit();
- flash_20(); //第一個面屏幕上下拉開
- flash_21(); //從后面往前面顯示數組的數字9-0
- flash_22(); //圍繞著最外面的LED循環滾動顯示數組中內容
- flash_23(); //分層升降左右上下前后以此打開升降測試
- flash_24(); //從最上面的一個面往下面的一層移動完
- flash_25(); //光立方全亮并且閃爍5次
- flash_26(); //從下面往上面依次顯示出數組中的內容IXU
- flash_27(); //狼七八咋的顯示出LED的每一個燈展示燈火效果
- flash_28(); //顯示從上面往下面滴水的效果
- flash_29(); //將4個面圍城圈圈然后旋轉幾次
- flash_30(); //空心顯示將數組內容打印出來可以打印4個數組內容
- flash_31(); //將左右的四個面圍繞成圈圈轉起來4次之后從左邊往右邊顯示數組中一幅圖像64個的數據
- flash_32(); //從左邊顯示一個面然后旋轉出一個面的空心效果實心效果
- flash_33(); //旋轉單個面依次交換到買一個面
- flash_34(); //以中點位軸進行選擇左右旋轉切換實現波紋的效果
- flash_35(); //旋轉左右為中心加快速度實現每個面的抖動效果
- flash_36(); //將數組中的內容顯示出現進行旋轉是一個正方形的
- flash_37(); //將方形變形縮小然后變成一個全亮的效果
- flash_38(); //前后左右上下伸縮全亮
- flash_39(); //實心和空心縮放和放大正方形全亮顯示
- flash_40(); //動畫顯示一個數組里面的心形數據 會動的心形
- flash_41(); //顯示一個電梯的圖形
- flash_42(); //顯示數字往上移動出來
- flash_15(); //顯示下雨的效果
- msd=2;
- TR0=1;
- TR1=1;
- ET0=1;
-
- //顯示中有些動畫包含本店的數據如果不需要請自己將動畫函數屏蔽
- //flash_14();flash_18();flash_12();
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_1();}//包含第一個面顯示4321倒計時的文字
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_17();}//顯示出一個VI的版本標志然后從最里面往外面滾動出來
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_16();}//從邊邊的左右中滾動顯示默認的英文字母ideasoft
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_14();}//一個一個的字變出來顯示上升沿電子光立方可以修改顯示數據
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_18();}//顯示出上升沿電子8X8X8光立方下雨效果飄出字移動出去
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_2();}//圖形圈圈顯示出來
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_3();}//從前一排顯示到后面一排兩次
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_4();}//從前一排斜桿到最后一排兩次
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_5();}//框框伸縮從中間到前面到后面
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_6();}//滾四邊的圈圈然后下雨效果飄出字移動出去
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_7();}//滾四邊包括前后左右滾然后出來半邊三角形
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_8();}//從左移動一排到右邊中間顯示文字圖形
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_9();}//從左到右邊滾出斜桿然后螺旋轉軸旋轉框框顯示方框伸縮孔空心和實心
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_10();}//從最左小腳伸縮出框框然后變輪子前后左右上下滾動然后收縮還原
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_11();}//象紅旗一樣被風飄動象蛇一樣飄動走動
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_12();}//滾動上升沿電子的字模數據文字移動顯示出來
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_13();}//漸變出來文字VI1234IXU的圖案
- if(key2==1||key2==3){if(key2==1){msd=1;break;}
- else{if(key2==3){msd=3;break;}}}else{flash_19();}//平行滑動顯示出3D CULE FFT的字?
- TR0=0;
- TR1=0;
- ET0=0;
- IRInit();
- PWM_POW=0;
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
最新光立方源程序(2016.7更新).rar
(255.01 KB, 下載次數: 32)
2017-7-23 16:26 上傳
點擊文件名下載附件
8x8x8光立方源程序 帶紅外 下載積分: 黑幣 -5
|