蓝桥杯单片机——AT24C02存储器

本篇讲的单片机是第十一届蓝桥杯单片机实训的硬件设备。


蓝桥杯单片机硬件基础

蓝桥杯单片机AT24C02存储器电路图:
在这里插入图片描述
由上述电路硬件连接和AT24C02存储器地址初值,可知该AT24C02存储器的器件地址为:0xa0

AT24C02读写时序(IIC为基础)

AT24C02存储器容量为256*8(2Kb),即数据存放的地址空间为0x00 - 0xfe;通信接口采用双线串行接口(SCL时钟线、SDA串行数据线);双线数据传送协议为:ISO/IEC7816-3同步协议。

  • 写字节时序:
    在这里插入图片描述
    根据上述写字节时序,得到写字节函数代码:
//函数功能:写入AT24C02一字节
//入口参数:写入地址、写入数据
void EEPROM_W(u8 add,u8 dat)
{
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();            
	IIC_Stop();
	Delay5ms();               //延时一段时间
}
  • 读字节时序:
    在这里插入图片描述
    根据上述读字节时序,得到读字节函数代码:
//函数功能:返回AT24C02指定地址的一个字节数据
//入口参数:读取数据的地址
u8 EEPROM_R(u8 add)
{
	u8 dat;
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	
	IIC_Start();
	IIC_SendByte(0xa1);
	IIC_WaitAck();
	
	dat = IIC_RecByte();
	IIC_Ack(0);                 //不应答
	IIC_Stop();
	return dat;
}

注:本模块采用的是IIC为基础的协议编写,IIC的起始信号、停止信号、写字节信号、等待应答信号、应答信号、读字节信号等等函数,这里默认读者都有先前了解。


AT24C02字符串存储和读取

其基本理论与上面字节的写入和读出是一样的,这里就不重复说明。

相关代码编写:
  • AT24C02字符串写入函数
//函数功能:写入AT24C02一字符串
//入口参数:写入地址、字符串数组名,字符串长度
void EEPROM_WS(u8 add, u8 *p,u8 lens)
{
	u8 i;
	
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	
	for(i=0;i<lens;i++)
	{
		IIC_SendByte(*p++);
		IIC_WaitAck();
	}
	IIC_Stop();
	Delay5ms();
}
  • AT24C02字符串读出函数
//函数功能:读取AT24C02一字符串
//入口参数:读取地址、读取存放数组名,读取字符串长度
void EEPROM_RS(u8 add, u8 *p,u8 lens)
{
	u8 i;
	
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	
	IIC_Start();
	IIC_SendByte(0xa1);
	IIC_WaitAck();
	
	for(i=0;i<lens;i++)
	{
		*p++ = IIC_RecByte();
		if(i!=lens) IIC_SendAck(0);  
	}
	IIC_SendAck(1);       //不应答
	IIC_Stop(); 
}

函数的使用方法,这里就不展示了,欢迎提问和咨询 ~

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用Arduino UNO和AT24C02存储器进行读写实验,并通过液晶显示读取的数据的示例代码。 首先,需要连接AT24C02存储器和液晶显示器到Arduino UNO上。AT24C02使用I2C协议连接到Arduino UNO的A4和A5引脚。液晶显示器则连接到数字引脚2、3、4、5、11和12。 示例代码如下: ```C++ #include <Wire.h> #include <LiquidCrystal.h> LiquidCrystal lcd(2, 3, 4, 5, 11, 12); // 设置液晶显示器引脚 #define EEPROM_ADDR 0x50 // AT24C02存储器地址 void setup() { Serial.begin(9600); Wire.begin(); lcd.begin(16, 2); // 初始化液晶显示器 lcd.setCursor(0, 0); lcd.print("AT24C02 Test"); } void loop() { int value = random(256); // 随机生成一个0到255的整数 writeEEPROM(0, value); // 写入AT24C02存储器 int readValue = readEEPROM(0); // 从AT24C02存储器读取数据 lcd.setCursor(0, 1); lcd.print("Value: "); lcd.print(readValue); delay(5000); // 延迟5秒 } void writeEEPROM(int address, int data) { Wire.beginTransmission(EEPROM_ADDR); Wire.write((int)(address >> 8)); Wire.write((int)(address & 0xFF)); Wire.write(data); Wire.endTransmission(); delay(5); } int readEEPROM(int address) { int value = 0; Wire.beginTransmission(EEPROM_ADDR); Wire.write((int)(address >> 8)); Wire.write((int)(address & 0xFF)); Wire.endTransmission(); Wire.requestFrom(EEPROM_ADDR, 1); if (Wire.available()) { value = Wire.read(); } return value; } ``` 在setup函数中,初始化串口和液晶显示器,并显示一个欢迎消息。在loop函数中,生成一个随机整数,并将其写入AT24C02存储器中。然后,从存储器中读取数据并在液晶显示器上显示。最后,延迟5秒以等待下一个循环。 writeEEPROM函数用于将数据写入AT24C02存储器中。它接受两个参数:地址和要写入的数据。它首先发送存储器地址,然后发送要写入的数据。最后,它结束传输并延迟5毫秒以确保数据被写入存储器。 readEEPROM函数用于从AT24C02存储器中读取数据。它接受一个参数:地址。它首先发送存储器地址,然后请求一个字节的数据。如果数据可用,则将其读取并返回。 在液晶显示器上,第一行显示欢迎消息,第二行显示从存储器中读取的数据。 注意:在使用AT24C02存储器之前,请确保将其正确连接到Arduino UNO,并确保I2C地址正确。如果您遇到问题,请参阅AT24C02数据表以获取更多信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值