(玩电子) 电子技术学习与研究
当前位置单片机教程网 >> MCU设计实例 >> 浏览文章

基于stc51单片机的光立方c语言源代码

作者:佚名   来源:本站原创   点击数:x  更新时间2013年08月16日   字体


电路图等制作资料请到这里下载>(7-i))&0x01) k|=0x01<<i; } return k; } void key_menu_scan() { if(!keymenu) { delay(30);//按键驱抖 if(!keymenu) { P3=0; menu++; if(menu==4) menu=1; } while(!keymenu);//头判断 } } void key_amenu_scan() { if(!keyamenu) { delay(30);//按键驱抖 if(!keyamenu) { P3=0; amenu++; if(amenu==7) amenu=1; } while(!keyamenu);//头判断 } } void key_out_scan() { if(!keyout) { delay(30);//按键驱抖 if(!keyout) { P3=0; if(!out) out=1; else out=0; } while(!keyout);//头判断 } } void fun(uchar *a)//层填充函数 { uchar i,p; p=1; for(i=0;i<8;i++) { P2=p; P0=a[i]; P2=0; p<<=1; } } /* void fun(uchar *a)//层填充函数 { uchar i,p; p=0x80; for(i=0;i<8;i++) { P2=p; P0=a[i]; P2=0; p>>=1; } } */ void fun1(uchar *a,uchar d,uchar b,uchar c,uchar e)//滚动字幕数据处理 { char i; for(i=0;i<8;i++) { a[i]=e&0x01; e>>=1; } a[7]|=(c<<1); a[6]|=(c&0x80); for(i=0;i<6;i++) { a[5-i]|=((b<<(7-i))&0x80); } d=daoxu(d); a[0]|=((d>>1)&0x7e); } void zhen(uchar *a,uchar v)//一帧,a是一帧编码起始地址 { uchar p; char i; while(v--) { p=1; for(i=0;i<8;i++) { key_out_scan(); key_amenu_scan(); key_menu_scan(); if(amenu) break; P3=0; fun(a+i*8); P3=p; delay(2); p<<=1; } } } void turn_on(uchar v) { uchar a[64]={0}; char i,j; a[7]=0x80; zhen(a,v); for(i=1;i<8;i++) { a[i*8+7]=0x80; zhen(a,v); } for(i=6;i>=0;i--) { for(j=0;j<8;j++) a[j*8+i]=0x80; zhen(a,v); } 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<7;i++) { for(j=0;j<64;j++) b[j]>>=1; zhen(b,v); } } void V_scan(uchar v) { uchar a[64]={0}; char i,j; for(i=0;i<8;i++) a[i]=0xff; zhen(a,v); for(i=1;i<8;i++) { for(j=0;j<8;j++) { a[i*8+j]=0xff; a[(i-1)*8+j]=0; } zhen(a,v); } } void jb0(char num,char v)/////////////////////////////// { char i,k; uchar c[64]={0}; for(i=0;i<64;i++) c[i]=0x80; zhen(c,v); while(num--) for(i=0;i<28;i++) { if(i<7) for(k=0;k<8;k++) { c[k*8]|=(0x80>>(i+1)); c[k*8+7-i]=0; } else if(i<14) for(k=0;k<8;k++) { c[k*8+i-6]=0x01; c[k*8]>>=0x01; } else if(i<21) for(k=0;k<8;k++) { c[k*8+i-14]=0; c[k*8+7]|=(0x01<<(i-13)); } else if(i<28) for(k=0;k<8;k++) { c[k*8+27-i]=0x80; c[k*8+7]<<=1; } zhen(c,v); } clc(); } void link_pingmian1(char v) { uchar a[64]={0}; char i,j; for(i=0;i<8;i++) for(j=0;j<8;j++) { a[7*8+j]|=(0x01<<i); zhen(a,v); } } void pingmian1(char num,char v) { char i,k; uchar a[64]={0}; for(i=0;i<8;i++) a[7*8+i]=0xff; zhen(a,v); while(num--) for(i=0;i<28;i++) { if(i<7) for(k=0;k<8;k++) { a[(6-i)*8+k]=0x01; a[7*8+k]>>=1; } else if(i<14) for(k=0;k<8;k++) { a[k]|=0x01<<(i-6); a[(14-i)*8+k]=0; } else if(i<21) for(k=0;k<8;k++) { a[(i-13)*8+k]=0x80; a[k]<<=1; } else for(k=0;k<8;k++) { a[7*8+k]|=0x80>>(i-20); a[(i-21)*8+k]=0; } zhen(a,v); } clc(); } void move(uchar *a,char kind,char direction,char length)//length不能为8 //kind=0 x轴,1 x轴,2 z轴direction=0,负向,1正向 { char i,j; if(kind==0) { if(direction==1) for(i=0;i<64;i++) a[i]<<=length; else for(i=0;i<64;i++) a[i]>>=length; } else if(kind==1) { if(direction==1) for(j=0;j<8;j++) { for(i=7;i>=length;i--) a[i+j*8]=a[i-length+j*8]; for(i=0;i<length;i++) a[i+j*8]=0; } else for(j=0;j<8;j++) { for(i=0;i<length;i++) a[i+j*8]=a[i+length+j*8]; for(i=(8-length);i<8;i++) a[i+j*8]=0; } } else { if(direction==1) for(j=0;j<8;j++) { for(i=7;i>=length;i--) a[j+i*8]=a[j+(i-length)*8]; for(i=0;i<length;i++) a[j+i*8]=0; } else for(j=0;j<8;j++) { for(i=0;i<(8-length);i++) a[j+i*8]=a[j+(i+length)*8]; for(i=(8-length);i<8;i++) a[j+i*8]=0; } } } void produce_cube(uchar *a,char n)//0<=n<=8 { char i,j; for(i=0;i<8;i++) for(j=0;j<8;j++) { if(j<n&&i<n) a[j+i*8]=0xff>>(8-n); else a[j+i*8]=0; } } void produce_empty(uchar *a,char n)//0<n<=8,注意n不能为0 { char j; uchar p; for(j=0;j<64;j++) a[j]=0; p=0xff>>(8-n); /************X4列*************/ a[(n-1)*8+n-1]=p; a[(n-1)*8]=p; a[0]=p; a[n-1]=p; for(j=0;j<n;j++) { p=(0x01|(0x01<<(n-1))); /************竖直4列*************/ a[j*8]|=p; a[j*8+n-1]|=p; /************Y4列*************/ a[j]|=p; a[(n-1)*8+j]|=p; } } void cube(char empty,char kind,char v) { uchar a[64]={0}; char i; for(i=1;i<=8;i++)//生成 { if(empty==0) produce_cube(a,i); else produce_empty(a,i); if(kind==0) {;} else if(kind==1) move(a,1,1,8-i); else if(kind==2) { move(a,1,1,8-i); move(a,0,1,8-i); } else move(a,0,1,8-i); zhen(a,v); } for(i=7;i>0;i--)//退出 { if(empty==0) produce_cube(a,i); else produce_empty(a,i); if(kind==0) { move(a,1,1,8-i); move(a,0,1,8-i); } else if(kind==1) move(a,0,1,8-i); else if(kind==2) {;} else move(a,1,1,8-i); zhen(a,v); } } /***************************************************************************/ void yinchu(uchar *table,char n,char v) { /**************************** n为帧数 ******************************/ char i,j,k; uchar a[64]={0},p; for(k=0;k<n;k++) { for(i=0;i<8;i++) { p=0xff; for(j=0;j<64;j++) { a[j]=(table[j+k*64]|(0x80>>i))&(p<<(7-i)); } zhen(a,v); } zhen(table+k*64,50); } } void rain(char menu,char num,char v) {//menu=0,up;menu=1,down uchar a[64]={0}; char i,j; if(menu==0) { for(i=0;i<8;i++) a[i]=tab_rain[i]; zhen(a,v); for(i=1;i<8;i++) { move(a,2,1,1); for(j=0;j<8;j++) a[j]=tab_rain[i*8+j]; zhen(a,v); } while(num--) { for(i=0;i<8;i++) { move(a,2,1,1); for(j=0;j<8;j++) a[j]=tab_rain[i*8+j]; zhen(a,v); } } } else { for(i=0;i<8;i++) a[7*8+i]=tab_rain[i]; zhen(a,v); for(i=1;i<8;i++) { move(a,2,0,1); for(j=0;j<8;j++) a[7*8+j]=tab_rain[i*8+j]; zhen(a,v); } while(num--) { for(i=0;i<8;i++) { move(a,2,0,1); for(j=0;j<8;j++) a[j+7*8]=tab_rain[i*8+j]; zhen(a,v); } } } } void LED() { char i; uchar p=0x01; for(i=0;i<8;i++) { P2=p; delay1(1); P0=0xff; delay1(1); p<<=1; } P2=0; while(!out) { key_out_scan(); key_amenu_scan(); P3=0xff; delay1(amenu*30); P3=0; delay1((6-amenu)*30); } P3=0; } void pc1(char num,char v) { uchar a[64]={0}; char i,j; while(num--) { for(i=1;i<8;i++) a[i]=0xff; zhen(a,v); for(i=1;i<8;i++) { move(a,2,1,1); for(j=0;j<8;j++) a[j]=0xff; zhen(a,v); } for(i=0;i<8;i++) { if(num==0&&i==7) continue; move(a,2,1,1); zhen(a,v); } } for(i=0;i<7;i++) { move(a,2,0,1); zhen(a,v+5); } } void link(char v) { /**************************** 旋转衔接 ******************************/ char i,j,k; uchar a[64]={0}; for(i=0;i<64;i++) a[i]=0x80; zhen(a,3); for(i=0;i<8;i++) { for(j=0;j<8;j++) { if(i<7) a[j*8+7-i]&=0x7f; a[j*8+i]|=(0x80>>i); } zhen(a,v); } for(i=0;i<6;i++) { for(j=0;j<8;j++) for(k=0;k<8;k++) a[j*8+k]=tab_xuanzhuantiao[(i+8)*8+k]; zhen(a,3); } } void leitu(uchar *b,char num,char v)//V>1 { uchar a[64]={0},p; char i,j,k,m; for(m=0;m<num;m++) { for(i=0;i<8;i++) for(k=0;k<8;k++) for(j=0;j<8;j++) { p=b[m*64+i*8+k]&(0x01<<j); if(p) { a[i*8+k]|=p; zhen(a,v); } } zhen(a,60); for(j=0;j<64;j++) { if(!a[j]) continue; a[j]=0; zhen(a,v-1); } delay(30); } } void fn(char v) { uchar a[64]={0}; int i; for(i=0;i<128;i++)//点 { a[tab00[i]]=(0x01<<tab01[i]); zhen(a,v); a[tab00[i]]=0; } for(i=0;i<128;i++)//8点 { a[tab10[i]]|=(0x01<<tab01[i]); if(i>=8) a[tab10[i-8]]^=(0x01<<tab01[i-8]); zhen(a,v); } a[tab00[0]]|=(0x01<<tab01[0]); a[0]=0x80; zhen(a,v); for(i=1;i<128;i++)//线 { if(i<8) a[i-1]=0; a[tab00[i]]|=(0x01<<tab01[i]); zhen(a,v); } zhen(a,120); for(i=0;i<128;i++)//线 { a[tab10[i]]^=(0x01<<tab01[i]); zhen(a,v); } } void xuanzhuantiao(char kind,char num,char v)//空心旋转,kind=1实心,否则空心 { uchar a[64]={0}; char i,j,k; while(num--) { for(i=0;i<14;i++) { for(j=0;j<8;j++) { for(k=0;k<8;k++) { if(k>1&&k<6&&j>1&&j<6&&kind!=1) a[k+j*8]=tab_xuanzhuantiao[i*8+k]&0xc3; else a[k+j*8]=tab_xuanzhuantiao[i*8+k]; } } zhen(a,v); } } } void qumianxuanzhuan(char kind,char num,char v)//曲面旋转 { uchar a[64]={0}; char i,j,k; for(j=0;j<8;j++) for(i=0;i<8;i++) a[i+j*8]=tab_xuanzhuantiao[i]; zhen(a,v); if(kind==1) { for(j=1;j<8;j++)//顺时针初形变换 { for(i=0;i<j;i++) for(k=0;k<8;k++) a[k+i*8]=tab_xuanzhuantiao[(j-i)*8+k]; zhen(a,v); } for(i=8;i<14;i++) { move(a,2,1,1); for(j=0;j<8;j++) a[j]=tab_xuanzhuantiao[i*8+j]; zhen(a,v); } } else { for(j=1;j<8;j++)//逆时针初形变换 { for(i=0;i<j;i++) for(k=0;k<8;k++) a[k+i*8]=tab_xuanzhuantiao[(14-j+i)*8+k]; zhen(a,v); } for(i=7;i>=0;i--) { move(a,2,1,1); for(j=0;j<8;j++) a[j]=tab_xuanzhuantiao[i*8+j]; zhen(a,v); } } while(num--)//主循环 { if(kind==1) for(i=0;i<14;i++) { move(a,2,1,1); for(j=0;j<8;j++) a[j]=tab_xuanzhuantiao[i*8+j]; zhen(a,v); } else for(i=13;i>=0;i--) { move(a,2,1,1); for(j=0;j<8;j++) a[j]=tab_xuanzhuantiao[i*8+j]; zhen(a,v); } } if(kind==1) for(j=0;j<7;j++) { for(i=7;i>=j;i--) { if(i>j) for(k=0;k<8;k++) a[k+i*8]=tab_xuanzhuantiao[(14-i+j)*8+k]; else for(k=0;k<8;k++) a[k+i*8]=tab_xuanzhuantiao[k]; } zhen(a,v); } else for(j=1;j<7;j++) { for(i=7;i>=j;i--) { if(i>j) for(k=0;k<8;k++) a[k+i*8]=tab_xuanzhuantiao[(i-j)*8+k]; else for(k=0;k<8;k++) a[k+i*8]=tab_xuanzhuantiao[k]; } zhen(a,v); } } void qumianxuanzhuan2(char num,char v)//曲面旋转 { uchar a[64]={0}; char i,j,k; for(j=0;j<8;j++) for(i=0;i<8;i++) a[i+j*8]=tab_xuanzhuantiao[i]; zhen(a,v); for(j=1;j<8;j++) { for(i=0;i<j;i++) for(k=0;k<8;k++) a[k+i*8]=tab_xuanzhuantiao[(14-j+i)*8+k]; zhen(a,v); } while(num--) { for(j=1;j<8;j++) { move(a,2,1,1); for(i=0;i<j;i++) { for(k=0;k<8;k++) { if(j!=7|i!=0) a[i*8+k]=tab_xuanzhuantiao[k+(j+7-i)*8]; else a[k]=tab_xuanzhuantiao[k]; } } zhen(a,v); } for(j=1;j<8;j++) { move(a,2,1,1); for(i=0;i<j;i++) { for(k=0;k<8;k++) a[i*8+k]=tab_xuanzhuantiao[k+(14-j+i)*8]; } zhen(a,v); } } } void W_scan(uchar v) { uchar a[64]={0}; char i,j; for(i=0;i<8;i++) a[i*8+7]=0xff; zhen(a,v); for(i=6;i>=0;i--) { for(j=0;j<8;j++) { a[j*8+i]=0xff; a[j*8+i+1]=0; } zhen(a,v); } clc(); } void zimu(uchar *x,char n,char v,int num)//滚动字幕,num表示循环次数,v表示滚动速度,n字符个数 { char i,j,k; uchar xdata a[64]={0},temp0[8],temp1[8],temp2[8],temp3[8],temp[8]; for(i=0;i<8;i++) { temp0[i]=0; temp1[i]=0; temp2[i]=0; temp3[i]=0; } while(num--) for(j=0;j<n;j++)//滚动 { for(k=7;k>=0;k--)//读取数据 temp[7-k]=x[j*8+k]; for(k=0;k<8;k++)//移动8位 { for(i=0;i<8;i++) { temp0[i]=(temp0[i]<<1)|(temp1[i]>>7); temp1[i]=(temp1[i]<<1)|(temp2[i]>>7); temp2[i]=(temp2[i]<<1)|(temp3[i]>>7); temp3[i]=(temp3[i]<<1)|(temp[i]>>7); temp[i]<<=1; fun1(a+i*8,temp0[i],temp1[i],temp2[i],temp3[i]); } zhen(a,v); } } } void hy(uchar *tab,char v) { uchar a[64]={0}; char i,j; for(i=0;i<8;i++) a[i*8]=tab[i]; zhen(a,v); for(i=1;i<8;i++) { for(j=0;j<8;j++) a[i+j*8]=a[i-1+j*8]; zhen(a,v); } for(i=0;i<7;i++) { for(j=0;j<8;j++) a[i+j*8]=0; zhen(a,v); } zhen(a,23); } void W_side(uchar *tab,char num,char v) { uchar a[64]={0}; int i,j; for(j=0;j<num;j++) { if(amenu) break; for(i=0;i<8;i++) a[i*8+7]=tab[j*8+i]; zhen(a,v); } } void print(uchar *a,char m)//m=0中空显示,m=1实心显示 { uchar p; char i,j,k; uchar b[64]={0}; for(i=0;i<8;i++) { b[7*8+i]=0xff; } for(i=0;i<8;i++)//星换 { for(j=0;j<8;j++)//点移动 { p=a[i]&(0x01<<j); if(p) { for(k=6;k>0;k--) { if(m==1&&k==6) {;} else b[(k+1)*8+7-i]&=(~p); b[k*8+7-i]|=(0x01<<j); zhen(b,1); } b[1*8+7-i]=0; b[7-i]|=p; zhen(b,1); } b[7-i]|=p; } } zhen(b,40); b[0]=0; for(j=7;j>0;j--) { for(i=7;i>0;i--) { b[i]=b[i-1]; } zhen(b,5); } clc(); } void water1(char x,char y,char v) { uchar a[64]={0}; char i,r; a[7*8+y]=0x01<<x; zhen(a,v); for(i=6;i>=0;i--) { a[i*8+y]=a[(i+1)*8+y]; a[(i+1)*8+y]=0; zhen(a,v); }//下落 for(r=0;r<7;r++) { for(i=0;i<8;i++) a[i]=tab_water[r*16+7-y+i]>>(7-x); zhen(a,v+1); }//扩散 } void water2(char x1,char y1,char x2,char y2,char v) { uchar a[64]={0}; char i,r; a[7*8+y1]=0x01<<x1; zhen(a,v); for(i=6;i>=0;i--) { move(a,2,0,1); if(i==5) { a[7*8+y2]=0x01<<x2; } zhen(a,v); } for(r=0;r<9;r++) { if(r<2) move(a,2,0,1); else for(i=0;i<8;i++) a[i]=tab_water[(r-2)*16+7-y2+i]>>(7-x2); if(r<7) for(i=0;i<8;i++) a[i]|=(tab_water[r*16+7-y1+i]>>(7-x1)); if(r==1) a[y2]|=0x01<<x2; zhen(a,v); } } void water3(char x1,char y1,char x2,char y2,char x3,char y3,char v) {//3水滴 uchar a[64]={0}; char i,r; a[7*8+y1]=0x01<<x1; zhen(a,v); for(i=6;i>=0;i--) { move(a,2,0,1); if(i==5)//第二点 a[7*8+y2]=0x01<<x2; if(i==3) a[7*8+y3]=0x01<<x3; //第三点 zhen(a,v); } for(r=0;r<11;r++) { if(r<4) move(a,2,0,1); if(r<11&&r>=4) for(i=0;i<8;i++) a[i]=tab_water[(r-4)*16+7-y3+i]>>(7-x3); if(r<9&&r>=2) for(i=0;i<8;i++) a[i]|=tab_water[(r-2)*16+7-y2+i]>>(7-x2); if(r<7) for(i=0;i<8;i++) a[i]|=(tab_water[r*16+7-y1+i]>>(7-x1)); if(r==1) a[y2]|=0x01<<x2; if(r==3) a[y3]|=0x01<<x3; zhen(a,v); } } void xuanzhuantiao2(char num,char v)//空心旋转,kind=1实心,否则空心 { uchar a[64]={0}; char i,j,k; while(num--) for(i=0;i<56;i++) { for(j=0;j<8;j++) for(k=0;k<8;k++) a[j*8+k]=tab_xuanzhuantiao2[i*8+k]; zhen(a,v); } } void flash0(char v)//条状升降 { char i,j,k; uchar a[64]={0}; for(i=7;i>=0;i--) { a[i]=0x01<<i; zhen(a,v+5); } for(i=0;i<7;i++) { for(j=0;j<8;j++) a[j]=flash0__tab[i*8+j]; zhen(a,v+5); } for(i=0;i<7;i++) { move(a,2,1,1); zhen(a,v+5); } /* for(i=0;i<64;i++) { if(i>55) a[i]=0xff; else a[i]=0; }*/ zhen(a,20); for(i=7;i>=0;i--)//1 for(j=6;j>=0;j--) { a[i+j*8]=0xff; a[i+(j+1)*8]=0; zhen(a,v); } zhen(a,27); for(i=7;i>=0;i--)//2 for(j=1;j<8;j++) { a[i+j*8]=0xff; a[i+(j-1)*8]=0; zhen(a,v); } zhen(a,27); for(i=7;i>=0;i--)//3 for(k=6;k>=0;k--) { for(j=0;j<8;j++) { if(k==0) a[j+k*8]|=(0x80>>(7-i)); else a[j+k*8]=(0x80>>(7-i)); a[j+(k+1)*8]^=(0x80>>(7-i)); } zhen(a,v); } zhen(a,27); for(i=7;i>=0;i--)//4 for(k=1;k<8;k++) { for(j=0;j<8;j++) { if(k==7) a[j+k*8]|=(0x80>>(7-i)); else a[j+k*8]=(0x80>>(7-i)); a[j+(k-1)*8]^=(0x80>>(7-i)); } zhen(a,v); } zhen(a,27); } void donghua(uchar *tab,uchar num,uchar n,char v) { char i; while(n--) { for(i=0;i<num;i++)//清空 { zhen(tab+i*64,v); } } } void denghuo(char v) { uchar a[64]; char i,j,k; for(k=0;k<8;k++) for(i=0;i<8;i++) for(j=0;j<8;j++) { a[tab_mian[i]*8+tab_xian[j]]|=(0x01<<tab_dian[(i+j)*8+k]); zhen(a,v); } zhen(a,90); for(k=0;k<8;k++) for(i=0;i<8;i++) for(j=0;j<8;j++) { a[tab_mian[i]*8+tab_xian[j]]^=(0x01<<tab_dian[(i+j)*8+k]); zhen(a,v); } } /***************************************/ void xzcube() { char i; donghua(y_table,6,8,8); for(i=0;i<26;i++) { if(i==12||i==13||i==14) zhen(yx_table+i*64,30); else zhen(yx_table+i*64,14); } donghua(x_table,6,8,8); for(i=0;i<26;i++) { if(i==12||i==13||i==14) zhen(xz_table+i*64,30); else zhen(xz_table+i*64,14); } donghua(z_table,6,8,8); } void szfc0(char v)//数字上浮 { char i,j; uchar a[64]; for(i=0;i<64;i++) { a[i]=0; } for(j=124;j>=0;j--) { for(i=7;i>=0;i--) { a[i*8+3]=szfc_table[j+i]; a[i*8+4]=szfc_table[j+i]; } zhen(a,v); } } void shandian(char v) { char i,j; uchar a[64]; for(i=0;i<64;i++) a[i]=tab_shandian[64*21+i]; for(i=0;i<22;i++) zhen(tab_shandian+64*i,v); for(i=0;i<22;i++) { for(j=0;j<64;j++) a[j]=a[j]&(~tab_shandian[64*i+j]); zhen(a,v); } } void cut() { uchar a[64]={0}; char i; for(i=0;i<4;i++) { a[i*8+7]=0xff; a[(7-i)*8+7]=0xff; zhen(a,8); } zhen(a,30); for(i=3;i>=0;i--) { a[i*8+7]=0; a[(7-i)*8+7]=0; zhen(a,8); } } void shensuo(uchar v) { char i,j; uchar a[64]={0}; for(i=0;i<64;i++) a[i]=0xff; for(i=0;i<7;i++) { move(a,0,0,1); zhen(a,v); } for(i=0;i<7;i++) { move(a,0,1,1); for(j=0;j<64;j++) a[j]|=0x01; zhen(a,v); } for(i=0;i<7;i++) { move(a,2,0,1); zhen(a,v); } for(i=0;i<7;i++) { move(a,2,1,1); for(j=0;j<8;j++) a[j]|=0xff; zhen(a,v); } for(i=7;i>0;i--) { for(j=0;j<8;j++) a[j*8+i]=0; zhen(a,v); } for(i=1;i<8;i++) { for(j=0;j<8;j++) a[j*8+i]|=0xff; zhen(a,v); } } void linkpc1(char v) { uchar i,a[64]={0}; for(i=0;i<7;i++) a[7*8+i]=0xff; for(i=0;i<8;i++) { move(a,2,0,1); zhen(a,v); } } void link00() { uchar a[64]={0}; char i; for(i=10;i>7;i--) { zhen(bianxing_table+i*64,70); } produce_cube(a,6); move(a,1,1,1); move(a,0,1,1); zhen(a,110); produce_cube(a,8); zhen(a,110); } void link_jb0(char v) { uchar a[64]={0}; char i; for(i=0;i<64;i++) { a[i]=0x80; zhen(a,v); } } int STC_ADC() { uchar i; ADC_RES=0; ADC_RESL=0; ADC_CONTR=0x88; i=3; while(i--); while(1) { if(ADC_CONTR&0x10) break; } ADC_CONTR=0x80; return(ADC_RESL+ADC_RES<<2); } short sqrt_16( unsigned long M) { unsigned int N,i; unsigned long tmp,ttp; if(M==0) return 0; N=0; tmp=(M>>30); M<<=2; if(tmp>1) { N++; tmp-=N; } for(i=15;i>0;i--) { N<<=1; tmp<<=2; tmp+=(M>>30); ttp=N; ttp=(ttp<<1)+1; M<<=2; if(tmp>=ttp) { tmp-=ttp; N++; } } return N; } void FFT() { int xdata i,bb,j,k,p; int max,a[6]; int xdata TR,TI,temp; for(i=0; i<64;i++) { Real[BRTable[i]]=STC_ADC(); Image[i]=0; } for(i=1;i<=6;i++) { bb=1; bb<<=(i-1); for(j=0;j<=bb-1;j++) { p=1; p<<=(6-i); p=p*j; for(k=j;k<64;k=k+2*bb) { key_amenu_scan(); key_out_scan(); TR = Real[k]; TI = Image[k]; temp=Real[k+bb]; Real[k]=Real[k]+((Real[k+bb]*cos_tabb[p])>>7)+((Image[k+bb]*sin_tabb[p])>>7); Image[k]=Image[k]-((Real[k+bb]*sin_tabb[p])>>7)+((Image[k+bb]*cos_tabb[p])>>7); Real[k+bb]=TR-((Real[k+bb]*cos_tabb[p])>>7)-((Image[k+bb]*sin_tabb[p])>>7); Image[k+bb]=TI+((temp*sin_tabb[p])>>7)-((Image[k+bb]*cos_tabb[p])>>7); Real[k]>>=1; Image[k]>>=1; Real[k+bb]>>=1; Image[k+bb]>>=1; } } } max=0; for(i=0;i<6;i++) { a[i]=sqrt_16((Real[i+1]*Real[i+1]+Image[i+1]*Image[i+1])>>1); if(a[i]<2 ) a[i]=0; else a[i]-=2; if(max<a[i]) max=a[i]; } if(max>7) { max/=7; for(i=0;i<6;i++) { a[i]/=max; } } for(i=0;i<6;i++) c[i]=a[i]; } void disp() interrupt 1 { TR0=0; TH0=(65536-2500)/256; TL0=(65536-2500)%256; if(num>=(amenu-1)) num=0; else num++; if(b[num]<c[num]) b[num]++; if(b[num]>c[num]) b[num]--; if(b[num]>8) b[num]=8; if(amenu==1) fun(table1+num*8); else if(amenu==2) fun(table2+num*8); else if(amenu==3) fun(table3+num*8); else if(amenu==4) fun(table4+num*8); else if(amenu==5) fun(table5+num*8); else fun(table6+num*8); P3=tuku1[b[num]]; TR0=1; } /**********初始化函数*****************/ void init() { /***********I/O口初始化*************/ P1M1=1; //p1.0口高阻输入 P1ASF=1; P3M0=0xff; //P3口推挽输出 P2M0=0xff; P0M0=0xff; P4SW = 0x31; TMOD=0x01; TH0=(65536-4000)/256; TL0=(65536-4000)%256; EA=1; ET0=1; TR0=0; menu=0; out=0; amenu=0; num=0; } /*************主函数******************/ void main() { int i,j; char go; delay(800); init(); //初始化函数 ////////////////////////呼吸灯 P2=0xff; P0=0; P2=0x80; P3=1; while(!menu) { for(i=0;i<400;i++) { key_menu_scan(); if(menu) break; P0=0x80; delay1(i); P0=0; delay1(400-i); if(i<200) { j=2; while(j--) { P0=0x80; delay1(i); P0=0; delay1(400-i); } } } for(i=0;i<401;i++) { if(menu) break; key_menu_scan(); P0=0x80; delay1(400-i); P0=0; delay1(i); if(i>200) { j=2; while(j--) { P0=0x80; delay1(400-i); P0=0; delay1(i); } } } } P3M0=0x00; ///////////////////////////开机扫描 turn_on(10); H_scan(20); V_scan(20); W_scan(20); /////////////////主菜单选项 while(1) { hy(number+37*8,2); while(!amenu) { W_side(number+(36+menu)*8,1,45); } switch(menu){ case 1://音谱显示 delay(400); while(!out) { TR0=1; FFT(); } TR0=0; break; case 2://动画显示 delay(400); amenu=0;//menu=1; go=1; cut(); while(go) { for(i=0;i<10;i++) hy(number+27*8+i*8,3); if(out) go=1; else go=0; } go=1; while(go) { zimu(number,19,12,1); if(out) go=1; else go=0; } go=1; while(go) { fn(4); if(out) go=1; else go=0; } go=1; while(go) { out=0; flash0(2); if(out) go=1; else go=0; } go=1; while(go) { linkpc1(10); pc1(4,3); if(out) go=1; else go=0; } go=1; while(go) { leitu(yc_table,5,2); if(out) go=1; else go=0; } go=1; while(go) { denghuo(3); if(out==1) go=1; else go=0; } go=1; while(go) { water1(1,2,10);water1(2,4,10); water1(4,3,10);water1(7,1,10); water1(5,6,10); water2(0,2,7,1,9); water2(2,4,7,7,9); water2(4,7,7,1,9); water2(3,6,7,7,9); water2(4,1,6,6,9); water2(7,3,1,2,9); water3(0,4,7,4,5,1,9); water3(7,7,0,0,0,7,9); water3(0,6,6,6,5,1,9); water3(6,7,0,0,2,2,9); water3(3,3,6,6,2,2,9); if(out) go=1; else go=0; } go=1; while(go) { clc(); link_pingmian1(1); pingmian1(8,3); if(out) go=1; else go=0; } go=1; while(go) { for(i=0;i<7;i++) print(tab_print+i*8,1); for(i=7;i<11;i++) print(tab_print+i*8,0); if(out) go=1; else go=0; } go=1; while(go) { clc(); link_jb0(1); jb0(10,3); if(out) go=1; else go=0; } go=1; while(go) { yinchu(yc_table,5,9); if(out) go=1; else go=0; } go=1; while(go) { clc(); link_jb0(1); jb0(10,3); if(out) go=1; else go=0; } go=1; while(go) { link(9); xuanzhuantiao(1,8,4); xuanzhuantiao(0,8,4); if(out) go=1; else go=0; } go=1; while(go) { xuanzhuantiao2(3,3); if(out) go=1; else go=0; } go=1; while(go) { qumianxuanzhuan(1,10,4); qumianxuanzhuan(0,10,4); if(out) go=1; else go=0; } go=1; while(go) { qumianxuanzhuan2(13,4); if(out) go=1; else go=0; } go=1; while(go) { xuanzhuantiao(1,4,4); xuanzhuantiao(1,3,5); xuanzhuantiao(1,2,6); xuanzhuantiao(1,1,7); if(out) go=1; else go=0; } go=1; while(go) { donghua(bianxing_table,11,1,24); xzcube(); donghua(y_table,6,5,5); donghua(x_table,6,5,5); donghua(z_table,6,5,5); link00(); if(out) go=1; else go=0; } go=1; while(go) { shensuo(5); if(out) go=1; else go=0; } go=1; while(go) { donghua(sin_cube_table,14,22,5); if(out) go=1; else go=0; } go=1; while(go) { for(i=0;i<3;i++) for(j=0;j<3;j++) cube(0,j,6); for(i=0;i<3;i++) for(j=0;j<3;j++) cube(1,j,6); if(out) go=1; else go=0; } go=1; while(go) { donghua(hart_table,2,10,32); if(out) go=1; else go=0; } go=1; while(go) { for(i=2;i>0;i--) shandian(i); if(out) go=1; else go=0; } go=1; while(go) { szfc0(10); if(out) go=1; else go=0; } go=1; while(go) { rain(1,10,9); rain(0,10,9); if(out) go=1; else go=0; } break; case 3://夜灯模式 delay(200); LED();break; } out=0; amenu=0; menu=1; } }

发表评论告诉好友收藏此文关闭窗口

文章评论

相关文章

Ƶ