为什么写入内部FLASH的数据和读出的数据怎么不一样啊
MAG_1[73][0至24] MAG_1[74][0至24] MAG_1[75][0至24] MAG_1[76][0至24]
这些都不要对请大神看下程序有什么问题啊
u8 key_mag; //矩阵键盘
int x1,y1,x2,y2,x10,y10,x20,y20;
int h=0;
int v=0;
int hh=0;
int vv=0;
int xx,yy;
int num_mag1=1;
int num_mag2=1;
int i_magd,j_magd,i_magr,j_magr;
#define FLASH_SAVE_ADDR 0X08070000
///////////////////////////////////////////////////////////////////////////////
u16 MAG_1[100][25]; //
///////////////////////////////////////////////////////////////////////////////
void mag1(void)
{
LCD_Clear(WHITE);
POINT_COLOR=BLACK;
LCD_DrawRectangle(2,2,318,238);
LCD_DrawLine(78,22,318,22); //横线
LCD_DrawLine(2,46,318,46); //横线
LCD_DrawLine(47,62,318,62); //横线
LCD_DrawLine(2,78,318,78); //横线
LCD_DrawLine(47,94,318,94); //横线
LCD_DrawLine(2,110,318,110); //横线
LCD_DrawLine(47,126,318,126); //横线
LCD_DrawLine(2,142,318,142); //横线
LCD_DrawLine(47,158,318,158); //横线
LCD_DrawLine(2,174,318,174); //横线
LCD_DrawLine(47,190,318,190); //横线
LCD_DrawLine(2,206,318,206); //横线
LCD_DrawLine(47,222,318,222); //横线
LCD_DrawLine(47,2,47,238); //竖线
LCD_DrawLine(78,2,78,238); //竖线
LCD_DrawLine(118,22,118,238); //竖线
LCD_DrawLine(158,22,158,238); //竖线
LCD_DrawLine(198,22,198,238); //竖线
LCD_DrawLine(238,22,238,238); //竖线
LCD_DrawLine(278,22,278,238); //竖线
  OINT_COLOR=BLUE;
Show_Str(4,6,200,14,"目的地",14,1);
Show_Str(11,26,200,14,"编号",14,1);
Show_Str(50,6,200,14,"行进",14,1);
Show_Str(50,26,200,14,"方向",14,1);
Show_Str(50,47,200,14,"前进",14,1);
Show_Str(50,63,200,14,"后退",14,1);
Show_Str(50,79,200,14,"前进",14,1);
Show_Str(50,95,200,14,"后退",14,1);
Show_Str(50,111,200,14,"前进",14,1);
Show_Str(50,127,200,14,"后退",14,1);
Show_Str(50,143,200,14,"前进",14,1);
Show_Str(50,159,200,14,"后退",14,1);
Show_Str(50,175,200,14,"前进",14,1);
Show_Str(50,191,200,14,"后退",14,1);
Show_Str(50,207,200,14,"前进",14,1);
Show_Str(50,223,200,14,"后退",14,1);
Show_Str(145,4,200,14,"分岔点编号",14,1);
}
/////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
void mag(int display_mag)
{
u16 datatemp[100][25]; //数据读取
STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,2500);
for(i_magd=0;i_magd<100;i_magd++)
{
for(j_magd=0;j_magd<25;j_magd++)
{
MAG_1[i_magd][j_magd]=datatemp[i_magd][j_magd];
}
}
////////////////////////////////////////////////////////////////////////
mag1();
while(display_mag==5)
{
key_mag=keyboard_Scan(); //矩阵键盘键值
if(key_mag==4|key_mag==6|key_mag==10|key_mag==11|key_mag==12)
{
display_mag=key_mag;
goto end;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
if(key_mag==32) //向下
{
num_mag1++;
if(num_mag1<=12)hh++;
else
{hh=hh+2;}
if(num_mag1>12)
{h++;num_mag1=12;}
if(h>44)
{h=44;}
if(hh>99)hh=99;
}
if(key_mag==26) //向上
{
num_mag1--;
if(num_mag1>=1)hh--;
else
{hh=hh-2;}
if(num_mag1<1)
{h--;num_mag1=1;}
if(h<0)
{h=0;}
if(hh<0)hh=0;
}
if(key_mag==33) //向右
{
num_mag2++;
vv++;
if(num_mag2>6)
{v++;num_mag2=6;}
if(v>19)
{v=19;}
if(vv>24) vv=24;
}
if(key_mag==31) //向左
{
num_mag2--;
vv--;
if(num_mag2<1)
{v--;num_mag2=1;}
if(v<0)
{v=0;}
if(vv<0) vv=0;
}
if(key_mag==27) //下翻页
{
num_mag1=num_mag1+11;
if(num_mag1>12)
{h=h+6;num_mag1=12;}
if(h>44)
{h=44;}
hh=2*h+11;
if(hh>99)hh=99;
}
if(key_mag==21) //上翻页
{
num_mag1=num_mag1-11;
if(num_mag1<1)
{h=h-6;num_mag1=1;}
if(h<0)
{h=0;}
hh=(2*h+11)-11;
if(hh<0)hh=0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
for(i_magr=2*h;i_magr<(2*h+12);i_magr++)
{
for(j_magr=v;j_magr<(v+6);j_magr++)
{
if(MAG_1[i_magr][j_magr]==0|MAG_1[i_magr][j_magr]!=1|MAG_1[i_magr][j_magr]!=2|MAG_1[i_magr][j_magr]!=3) LCD_Fill(39+4+40*(j_magr-v+1),31+1+16*(i_magr-2*h+1),77-4+40*(j_magr-v+1),45-1+16*(i_magr-2*h+1),WHITE);
if(MAG_1[i_magr][j_magr]==1) Show_Str(95+40*(j_magr-v),47+16*(i_magr-2*h),200,14,"左",14,1);
if(MAG_1[i_magr][j_magr]==2) Show_Str(95+40*(j_magr-v),47+16*(i_magr-2*h),200,14,"中",14,1);
if(MAG_1[i_magr][j_magr]==3) Show_Str(95+40*(j_magr-v),47+16*(i_magr-2*h),200,14,"右",14,1);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
//if(39+40*num_mag2<79) goto end;
//if(31+16*num_mag1<47) goto end;
x1=(39+40*num_mag2);
y1=(31+16*num_mag1);
x2=(77+40*num_mag2);
y2=(45+16*num_mag1);
LCD_ShowxNum(12,54,1+h,3,16,0);
LCD_ShowxNum(12,86,2+h,3,16,0);
LCD_ShowxNum(12,118,3+h,3,16,0);
LCD_ShowxNum(12,150,4+h,3,16,0);
LCD_ShowxNum(12,182,5+h,3,16,0);
LCD_ShowxNum(12,214,6+h,3,16,0);
LCD_ShowxNum(85,27,1+v,3,16,0);
LCD_ShowxNum(125,27,2+v,3,16,0);
LCD_ShowxNum(165,27,3+v,3,16,0);
LCD_ShowxNum(205,27,4+v,3,16,0);
LCD_ShowxNum(245,27,5+v,3,16,0);
LCD_ShowxNum(285,27,6+v,3,16,0);
if(x1!=x10|x2!=x20|y1!=y10|y2!=y20) LCD_Fill(x10,y10,x20,y20,WHITE);
LCD_Fill(x1,y1,x2,y2,GRAY);
if(key_mag==23|key_mag==24) MAG_1[hh][vv]=0;//删除
else if(key_mag==13) MAG_1[hh][vv]=1;//左
else if(key_mag==14) MAG_1[hh][vv]=2;//中
else if(key_mag==15) MAG_1[hh][vv]=3;//右
LCD_ShowxNum(220,4,hh,3,16,0);
LCD_ShowxNum(260,4,vv,3,16,0);
LCD_ShowxNum(300,4,MAG_1[hh][vv],2,16,0);
x10=x1;
y10=y1;
x20=x2;
y20=y2;
/////////////////////////////////////////////////////////////////////////////////////////////////////
if(key_mag==25) //数据存储
{
LCD_Fill(79,79,237,157,WHITE);//清除局部屏
Show_Str(96,112,200,14,"开始写入数据....",14,1);
STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)MAG_1,2500);
delay_ms(10000);
Show_Str(96,112,200,14," 数据写入完成 ",14,1);//提示传送完成
delay_ms(10000);
mag1();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
end:{}
}
}
|