是在原子哥的程序的基础上改的 要求储存多位数据 每个数据都是0-9的数字 一共是5个数据 我的想法是每一位存入一个地址占用一个字节
但是写完我从24c02读值发现读出的是乱七八糟的数字
求大佬帮忙看看哪有问题
int main(void)
{
u8 i,j,a;
u8 s[4];
u8 key;
u8 sum,num,hum;
u8 datatemp1,datatemp2,datatemp3,datatemp4,datatemp5;
u8 p=0,t=0;
//Stm32_Clock_Init(); //系统时钟设置
NVIC_Configuration();
uart_init(72,115200);
delay_init(); //延时初始化
OLED_Init();
KEY_Init();
AT24CXX_Init();
while(AT24CXX_Check())//检测不到24c02
{
OLED_ShowString(0,0,"Check Failed!");
delay_ms(500);
OLED_ShowString(0,2," lease Check!");
}
OLED_ShowString(0,0,"Ready!");
while(1)
{
key=KEY_Scan(0);
if(key==KEY1_PRES)//①输入数字
{
i++;
if(i==9)
{
i=0;
}
s[j]='0'+i;
OLED_ShowString(0,6,s);
}
if(key==KEY0_PRES)//②换位 输入数字
{
j++;
if(j>4)
{
j=0;
}
i=0;
}
if(key==KEY3_PRES)//③写入
{
OLED_ShowString(0,2,"Start");
for(j=0;j<=4;j++)//每位地移入写和读
{
s[j]=s[j]-'0';
AT24CXX_Write(j,(u8*)&s[j],8);//EEFPROM 写
AT24CXX_Read(j,(u8*)&s[j],8);//EEPROM 读
delay_ms(10);
break;
}
}
if(key==KEY2_PRES)//③ 显示屏显示
{
// for(j=0;j<=4;j++)
// {
//// s[j]=s[j]-'0';
// AT24CXX_Read(j,(u8*)&s[j],8);//EEPROM 读
// delay_ms(10);
// break;
// }
delay_ms(20);
datatemp1=AT24CXX_ReadOneByte(0); //从读地址读存储值
datatemp2=AT24CXX_ReadOneByte(1);
datatemp3=AT24CXX_ReadOneByte(2);
datatemp4=AT24CXX_ReadOneByte(3);
datatemp5=AT24CXX_ReadOneByte(4);
delay_ms(20);
OLED_ShowNum(0,4,datatemp1,3,16);//显示存储值
OLED_ShowNum(8,4,datatemp2,3,16);
OLED_ShowNum(16,4,datatemp3,3,16);
OLED_ShowNum(24,4,datatemp4,3,16);
OLED_ShowNum(32,4,datatemp5,3,16);
}
}
}
|