@@ -0,0 +1,615 @@
|
||||
#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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user