单片机学习(十一)I2C总线和AT24C02的使用 (3)

前面已经提到,AT24C02可以存储256个字节的数据,因此我们的数据可以任意0~255号地址的空间进行存储:

image-20210908162104316

void AT24C02_WriteByte(unsigned char WordAddress, unsigned char Byte) { I2C_Start(); // 从机地址 I2C_SendByte(AT24C02_ADDRESS); I2C_ReceiveAck(); // 字地址 I2C_SendByte(WordAddress); I2C_ReceiveAck(); // 发送真正的数据 I2C_SendByte(Byte); I2C_ReceiveAck(); I2C_Stop(); } 2.2 随机读

读取WordAddress地址中存储的字节信息:

image-20210908162140492

unsigned char AT24C02_ReadByte(unsigned char WordAddress) { unsigned char Byte; I2C_Start(); // 从机地址 I2C_SendByte(AT24C02_ADDRESS); I2C_ReceiveAck(); // 字地址 I2C_SendByte(WordAddress); I2C_ReceiveAck(); I2C_Start(); // 从机地址,read模式 I2C_SendByte(AT24C02_ADDRESS|0x01); I2C_ReceiveAck(); // 读取信息 Byte = I2C_ReceiveByte(); I2C_SendAck(1); I2C_Stop(); return Byte; } 3. 使用AT24C02进行数据存储

我们使用LCD_1602进行显示,第二行显示num数字,当我们单击按钮时:

点击k1,num--

点击k2,num++

点击k3,将num的数据存储到AT24C02中地址为1的空间中

void main() { unsigned char key, num; unsigned char storageData; LCD_Init(); LCD_ShowString(1, 1, "Hello world"); LCD_ShowString(2, 1, "num:"); storageData = AT24C02_ReadByte(1); num = storageData; LCD_ShowNum(2, 5, storageData, 3); Timer0_Init(); while (1) { key = Key(); if (key) { switch (key) { case 1: num--; break; case 2: num++; break; case 3: AT24C02_WriteByte(1, num); break; } } LCD_ShowNum(2, 5, num, 3); } } void Timer0_Routine() interrupt 1 { static unsigned int T0Count..; TL0 = 0x18;//设置定时初值 TH0 = 0xFC;//设置定时初值 T0Count++; if (T0Count >= 20) { T0Count = 0; Key_Loop();//每20ms调用一次按键驱动函数 } }

这样我们每次重启时就可以看到上次存储的数字了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwfxps.html