目录
1.用i2c 读写EEPROM
void WriteE2prom(unsigned char add,unsigned char date)
{
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(add);
I2CWaitAck();
I2CSendByte(date);
I2CWaitAck();
I2CStop();
}
unsigned char ReadE2prom(unsigned char add)
{
unsigned char ReadDate;
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(add);
I2CWaitAck();
I2CStart();
I2CSendByte(0xa1);
I2CWaitAck();
ReadDate=I2CReceiveByte();
I2CWaitAck();
I2CStop();
return ReadDate;
}
2.利用联合体存取浮点数与十六位有符号数以及字符串
union s16_eeprom
{
s16 a;
u8 b[2];
}s16_write,s16_read;
union float_eeprom
{
float a;
u8 b[4];
}float_write,float_read;
int i=0
//存取字符串
if(eeprom_count>=100) //100ms存取一次,尽量延长EEPROM的使用寿命
{
eeprom_count=0;
for(i=0;i<sizeof(string);i++)
{
WriteE2prom(0x10+i,string[i]);
Delay_Ms(5);
}
for(i=0;i<sizeof(string);i++)
{
string1[i]=ReadE2prom(0x10+i);
}
sprintf((char*)DisBuff,"DisBuff:%s",string1);
LCD_DisplayStringLine(Line7,DisBuff);
}
//存取有符号十六位数
// s16_write.a=9999;
// if(eeprom_count>=100)
// {
// eeprom_count=0;
// for(i=0;i<sizeof(s16);i++)
// {
// WriteE2prom(0x10+i,s16_write.b[i]);
// Delay_Ms(5);
// }
// for(i=0;i<sizeof(s16);i++)
// {
// s16_read.b[i]=ReadE2prom(0x10+i);
// }
// key_value=s16_read.a;
// }
// //存取浮点数
// float_write.a=999.999;
// if(eeprom_count>=100)
// {
// eeprom_count=0;
// for(i=0;i<sizeof(float);i++)
// {
// WriteE2prom(0x10+i,float_write.b[i]);
// Delay_Ms(5);
// }
// for(i=0;i<sizeof(float);i++)
// {
// float_read.b[i]=ReadE2prom(0x10+i);
// }
// key_value=float_read.a;
// }