#include "main.h" #include "c.h" #include "mpu6050.h" uint8_t LD_true_1[10]={63, 6, 91, 79, 102, 109, 125, 7, 127, 111}; uint8_t LD_true_2[10]={63, 6, 155, 143, 166, 173, 189, 7, 191, 175}; uint8_t LD_1[10]={63,48, 155, 185, 180, 173, 175, 56, 191}; uint8_t LD_2[10]={63,48, 91, 121, 116, 109, 111, 56, 127, 125}; uint8_t sbuffer[6]={0,0,0,0,0,0}; struct ui { uint8_t DT[2]; uint8_t lattice[2][8][8]; }; struct ui dis= { 0,0, { { {1,1,1,1,1,1,1,1,}, {1,1,1,1,1,1,1,1,}, {1,1,1,1,1,1,1,1,}, {1,1,1,1,1,1,1,1,}, {1,1,1,1,1,1,1,1,}, {1,1,1,1,1,1,1,1,}, {1,1,1,1,1,1,1,1,}, {1,1,1,1,1,1,1,1,}, }, { {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,0,}, } } }; void send_buffer() { uint8_t a,b,c; D(0); CLK(0); RCLK(0); for(b=0;b<6;b++) { c=sbuffer[b]; for(a=0;a<8;a++) { if(c&0x80) { D(1); }else { D(0); } CLK(1); CLK(0); c<<=1; } } RCLK(1); RCLK(0); } const uint16_t DEN[8]=//len { 0x1000, 0x0020, 0x0010, 0x0200, 0x0004, 0x0400, 0x4000, 0x8000, }; const uint16_t DEP[8]= { 0x0008, 0x0040, 0x0002, 0x0080, 0x0800, 0x0001, 0x2000, 0x0100, }; void dis_ui() { uint16_t temp=0,temp2=0; for(uint8_t y=0;y<8;y++) { temp=0; temp|=DEN[0]|DEN[1]|DEN[2]|DEN[3]|DEN[4]|DEN[5]|DEN[6]|DEN[7]; temp&=~DEN[y]; temp2=0; temp2|=DEN[0]|DEN[1]|DEN[2]|DEN[3]|DEN[4]|DEN[5]|DEN[6]|DEN[7]; temp2&=~DEN[y]; for(uint8_t x=0;x<8;x++) { if(dis.lattice[1][y][x]==1) { temp|=DEP[x]; } if(dis.lattice[0][y][x]==1) { temp2|=DEP[x]; } } if(y<1)//控制数字亮度 0-7 { sbuffer[0]=dis.DT[1]; sbuffer[1]=dis.DT[0]; }else { sbuffer[0]=0; sbuffer[1]=0; } sbuffer[4]=temp; sbuffer[5]=temp>>8; sbuffer[3]=temp2; sbuffer[2]=temp2>>8; send_buffer(); temp=0; temp|=DEN[0]|DEN[1]|DEN[2]|DEN[3]|DEN[4]|DEN[5]|DEN[6]|DEN[7]; temp2=0; temp2|=DEN[0]|DEN[1]|DEN[2]|DEN[3]|DEN[4]|DEN[5]|DEN[6]|DEN[7]; sbuffer[4]=temp; sbuffer[5]=temp>>8; sbuffer[3]=temp2; sbuffer[2]=temp2>>8; send_buffer(); } } uint8_t dir=0; int rend_int(int MIN_VALUE, int MAX_VALUE) //可控范围的随机数生成 { return rand() % (MAX_VALUE - MIN_VALUE + 1) + MIN_VALUE; //算法,最大值取余加上最小值就是范围内的数 } uint8_t move(uint8_t map,int y,int x,uint8_t move_dir) { if(dis.lattice[map][y][x]) { switch(move_dir) { case 1: y+=1; x+=1; if((y>7)|(x>7)|(dis.lattice[map][y][x])) { return 1; }else { dis.lattice[map][y][x]=1; dis.lattice[map][y-1][x-1]=0; return 0; } break; case 2: y+=1; if((y>7)|(dis.lattice[map][y][x])) { return 1; }else { dis.lattice[map][y][x]=1; dis.lattice[map][y-1][x]=0; return 0; } break; case 3: y+=1; x-=1; if((y>7)|(x<0)|(dis.lattice[map][y][x])) { return 1; }else { dis.lattice[map][y][x]=1; dis.lattice[map][y-1][x+1]=0; return 0; } break; case 4: x-=1; if((x<0)|(dis.lattice[map][y][x])) { return 1; }else { dis.lattice[map][y][x]=1; dis.lattice[map][y][x+1]=0; return 0; } break; case 5: x-=1; y-=1; if((x<0)|(y<0)|(dis.lattice[map][y][x])) { return 1; }else { dis.lattice[map][y][x]=1; dis.lattice[map][y+1][x+1]=0; return 0; } break; case 6: y-=1; if((y<0)|(dis.lattice[map][y][x])) { return 1; }else { dis.lattice[map][y][x]=1; dis.lattice[map][y+1][x]=0; return 0; } break; case 7: y-=1; x+=1; if((y<0)|(x>7)|(dis.lattice[map][y][x])) { return 1; }else { dis.lattice[map][y][x]=1; dis.lattice[map][y+1][x-1]=0; return 0; } break; case 8: x+=1; if((x>7)|(dis.lattice[map][y][x])) { return 1; }else { dis.lattice[map][y][x]=1; dis.lattice[map][y][x-1]=0; return 0; } break; } } return 1; } void scan() { int temp_x,temp_y; uint8_t temp_dir; switch(dir) { case 0: //平躺状态 随机扩散 dis.DT[0]=0; dis.DT[1]=0; break; case 1: for(temp_y=7;temp_y>=0;temp_y--) { for(temp_x=7;temp_x>=0;temp_x--) { if(move(0,temp_y,temp_x,dir)) { if(move(0,temp_y,temp_x,2)) { move(0,temp_y,temp_x,8); } } if(move(1,temp_y,temp_x,dir)) { if(move(1,temp_y,temp_x,2)) { move(1,temp_y,temp_x,8); } } } } break; case 2: for(temp_y=7;temp_y>=0;temp_y--) { for(temp_x=7;temp_x>=0;temp_x--) { if(move(0,temp_y,temp_x,dir)) { if(move(0,temp_y,temp_x,3)) { move(0,temp_y,temp_x,1); } } if(move(1,temp_y,temp_x,dir)) { if(move(1,temp_y,temp_x,3)) { move(1,temp_y,temp_x,1); } } } } break; case 3: for(temp_y=7;temp_y>=0;temp_y--) { for(temp_x=0;temp_x<8;temp_x++) { if(move(0,temp_y,temp_x,dir)) { if(move(0,temp_y,temp_x,4)) { move(0,temp_y,temp_x,2); } } if(move(1,temp_y,temp_x,dir)) { if(move(1,temp_y,temp_x,4)) { move(1,temp_y,temp_x,2); } } } } break; case 4: for(temp_x=0;temp_x<8;temp_x++) { for(temp_y=0;temp_y<8;temp_y++) { if(move(0,temp_y,temp_x,dir)) { if(move(0,temp_y,temp_x,5)) { move(0,temp_y,temp_x,3); } } if(move(1,temp_y,temp_x,dir)) { if(move(1,temp_y,temp_x,5)) { move(1,temp_y,temp_x,3); } } } } break; case 5: for(temp_x=0;temp_x<8;temp_x++) { for(temp_y=0;temp_y<8;temp_y++) { if(move(0,temp_y,temp_x,dir)) { if(move(0,temp_y,temp_x,6)) { move(0,temp_y,temp_x,4); } } if(move(1,temp_y,temp_x,dir)) { if(move(1,temp_y,temp_x,6)) { move(1,temp_y,temp_x,4); } } } } break; case 6: for(temp_y=0;temp_y<8;temp_y++) { for(temp_x=0;temp_x<8;temp_x++) { if(move(0,temp_y,temp_x,dir)) { if(move(0,temp_y,temp_x,7)) { move(0,temp_y,temp_x,5); } } if(move(1,temp_y,temp_x,dir)) { if(move(1,temp_y,temp_x,7)) { move(1,temp_y,temp_x,5); } } } } break; case 7: for(temp_y=0;temp_y<8;temp_y++) { for(temp_x=7;temp_x>=0;temp_x--) { if(move(0,temp_y,temp_x,dir)) { if(move(0,temp_y,temp_x,8)) { move(0,temp_y,temp_x,6); } } if(move(1,temp_y,temp_x,dir)) { if(move(1,temp_y,temp_x,8)) { move(1,temp_y,temp_x,6); } } } } break; case 8: for(temp_x=7;temp_x>=0;temp_x--) { for(temp_y=0;temp_y<8;temp_y++) { if(move(0,temp_y,temp_x,dir)) { if(move(0,temp_y,temp_x,1)) { move(0,temp_y,temp_x,7); } } if(move(1,temp_y,temp_x,dir)) { if(move(1,temp_y,temp_x,1)) { move(1,temp_y,temp_x,7); } } } } break; } } uint8_t read_map(uint8_t map) { uint8_t a=0; for(uint8_t y=0;y<8;y++) { for(uint8_t x=0;x<8;x++) { if(dis.lattice[map][y][x]) { a++; } } } return a; } void fuck() { uint8_t a=0; uint32_t tike=1000,tike2=0; uint16_t mup6050_flag=0; int ax,ay,az,gx,gy,gz,ax_of=0,ay_of=0,az_of=0,gx_of=0,gy_of=0,gz_of=0; int fax,fay,faz; HAL_Delay(150); mup6050_flag=MPU_Init(); if(mup6050_flag!=0) { //kill while(1) { } } while(1) { MPU_Get_Accelerometer(&ax,&ay,&az); //off set ax=ax+ax_of; ay=ay+ay_of; az=az+az_of; gx=gx+gx_of; gy=gy+gy_of; gz=gz+gz_of; //to g fax=((ax/16384.0)* 57.29577)/0.637; fay=((ay/16384.0)* 57.29577)/0.637; faz=((az/16384.0)* 57.29577)/0.637; #define det 20 uint8_t temp1=0,temp2=0; if((((fax>=(360-det))&(fax<=360))|((fax>=0)&(fax<=det)))&(((fay>=(360-det))&(fay<=360))|((fay>=0)&(fay<=det))))//平躺姿态 { dir=0; }else { /* 一个诡异的BUG 判断条件过多的时候会改变判断对象的值 所以分两步判断 */ temp1=0; temp2=0; if((fax>0)&(fax<90)) { temp1=1; } if((fax>275)&(fax<360)) { temp2=1; } if((((fay>(360-det))&(fay<=0))|((fay>=0)&(fay<=det)))&temp1) { dir=1; } if(((fay>(45-det))&(fay<(45+det)))&temp1) { dir=8; } if((fay>(90-det))&(fay<(90+det))) { dir=7; } if(((fay>(45-det))&(fay<(45+det)))&temp2) { dir=6; } if((((fay>(360-det))&(fay<=0))|((fay>=0)&(fay<=det)))&temp2) { dir=5; } if(((fay>(315-det))&(fay<(315+det)))&temp2) { dir=4; } if((fay>(270-det))&(fay<(270+det))) { dir=3; } if(((fay>(315-det))&(fay<(315+det)))&temp1) { dir=2; } } if(HAL_GetTick()>tike) { tike=HAL_GetTick()+1000; if(dir==1||dir==2||dir==8) { if((dis.lattice[0][7][7]==1)&&dis.lattice[1][0][0]==0) { dis.lattice[0][7][7]=0; dis.lattice[1][0][0]=1; } a=read_map(0); dis.DT[0]=LD_true_1[a/10]; dis.DT[1]=LD_true_2[a%10]; } if(dir==5||dir==4||dir==6) { if((dis.lattice[1][0][0]==1)&&dis.lattice[0][7][7]==0) { dis.lattice[1][0][0]=0; dis.lattice[0][7][7]=1; } a=read_map(1); dis.DT[1]=LD_1[a/10]; dis.DT[0]=LD_2[a%10]; } } if(HAL_GetTick()>tike2) { tike2=HAL_GetTick()+10; scan(); } dis_ui(); } }