原因

  1. 闪烁的原因是因为EEPROM读取的数据是错误的不在数码管的显示范围内。
  2. EEPROM读取的数据错误的原因是IIC在传输数据的过程中定时器中断函数打断了时序,导致收到的数据有问题。

解决方法

在EEPROM读取函数的头加入TR0 / TR1 = 0;尾加入TR0 / TR1 = 1;即:

void EEPROM_Read(unsigned char String, unsigned char Addr, unsigned char Nun)
{
	TR1 = 0;
	
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	
	I2CSendByte(Addr);
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0xa1);
	I2CWaitAck();
	
	while (Num--)
	{
		*String++ = I2CReceiveByte();
		if (Num) I2CSendAck(0);
		else I2CSendAck(1);
	}
	
	I2CStop();
	
	TR1 = 1;
}

注:不过这个方法会导致数码管显示的时候忽明忽暗。