在我的DS1307日历模块中包含了一块AT24C32EEPROM芯片,这块芯片正好准备以后存放蓝牙设备的相关数据,因此首先测试对AT24C32的读写操作。本次测试仍然是使用模拟I2C进行,这块EEPROM有32K(4096*8)容量,由于地址大于256,因此需要双字节内部地址,与一般的I2C操作的区别是内部地址要先发送高8位,再发送低8位,除此之外操作是相同的。
我的测试是以秒为周期,先读出存储在AT24C32芯片中的日期字符串(即年月日时分秒),然后再将当前的日期字符串写入到AT24C32k中,以便下次读取,即当前屏幕上显示的字符串是上一秒保存进去的。测试过程的照片如下:
屏幕显示如下:
这是测试效果的动画,因屏幕的亮度偏低,观看效果差:
下面是测试的代码:
void AT24C32_Test(void)
{
uint8_t Txt[16];
SI2C_16bitBuffRead( 0xA0, 0, 16, Txt);
LCD_write_ASCII(0, 5, 1, Txt);
Txt[0] = 'D';
Txt[1] = year / 1000 + 0x30;
Txt[2] = year % 1000 / 100 + 0x30;
Txt[3] = year % 100 / 10 + 0x30;
Txt[4] = year % 10 + 0x30;
Txt[5] = month / 10 + 0x30;
Txt[6] = month % 10 + 0x30;
Txt[7] = day / 10 + 0x30;
Txt[8] = day % 10 + 0x30;
Txt[9] = hour / 10 + 0x30;
Txt[10] = hour % 10 + 0x30;
Txt[11] = minute / 10 + 0x30;
Txt[12] = minute % 10 + 0x30;
Txt[13] = second / 10 + 0x30;
Txt[14] = second % 10 + 0x30;
Txt[15] = 0;
SI2C_16bitBuffWrite( 0xA0, 0, 16, Txt);
}