I2C总线存储器读写实验,24c02数据通过8个LED灯实现
时间: 2023-06-17 17:02:26 浏览: 139
I2C例程-24C02+LED
要进行I2C总线存储器24C02的读写实验,需要以下材料:
- Arduino Uno开发板
- 24C02芯片
- 8个LED灯
- 8个220欧姆电阻
- 杜邦线若干
- 电路连接板
接线步骤如下:
1. 将Arduino Uno开发板与电脑连接,打开Arduino IDE,创建一个新的空白文件。
2. 将24C02芯片连接到电路连接板上,并将电路连接板连接到Arduino Uno开发板上,具体连接方式如下:
- 将24C02芯片的SDA引脚连接到Arduino Uno的A4引脚上。
- 将24C02芯片的SCL引脚连接到Arduino Uno的A5引脚上。
- 将24C02芯片的VCC引脚连接到Arduino Uno的5V引脚上。
- 将24C02芯片的GND引脚连接到Arduino Uno的GND引脚上。
3. 将8个LED灯连接到电路连接板上,每个LED灯都要与一个220欧姆电阻并联,具体连接方式如下:
- 将LED灯的正极连接到220欧姆电阻的一端。
- 将220欧姆电阻的另一端连接到Arduino Uno开发板上的数字引脚2-9之间的任意一个引脚上。
- 将LED灯的负极连接到电路连接板上的GND引脚上。
4. 在Arduino IDE中编写代码,实现24C02芯片的读写功能,并控制LED灯亮灭。代码示例如下:
```C++
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
// 写入数据
Wire.beginTransmission(0x50); // 24C02芯片的地址为0x50
Wire.write(0x00); // 写入数据的地址为0x00
Wire.write(0xAA); // 写入的数据为0xAA
Wire.endTransmission();
// 读取数据
Wire.beginTransmission(0x50); // 24C02芯片的地址为0x50
Wire.write(0x00); // 要读取的数据的地址为0x00
Wire.endTransmission(false);
Wire.requestFrom(0x50, 1); // 从24C02芯片读取1个字节的数据
byte data = Wire.read(); // 读取数据
// 控制LED灯亮灭
for (int i = 2; i <= 9; i++) {
if (i <= data) {
digitalWrite(i, HIGH); // LED亮
} else {
digitalWrite(i, LOW); // LED灭
}
}
delay(1000);
}
```
代码中,我们使用了Wire库来实现I2C总线的通信。首先,我们在setup()函数中初始化Wire库,并打开串口。然后,在loop()函数中实现数据的写入和读取。我们使用Wire.beginTransmission()函数来开始写入数据,将24C02芯片的地址0x50传入作为参数。接着,我们使用Wire.write()函数来写入数据的地址和数据本身,分别为0x00和0xAA。最后,我们使用Wire.endTransmission()函数来结束写入操作。
接下来,我们使用Wire.beginTransmission()函数来开始读取数据,同样将24C02芯片的地址0x50传入作为参数。然后,我们使用Wire.write()函数来写入要读取的数据的地址,即0x00。注意,这里传入了false作为Wire.endTransmission()函数的参数,这是因为我们需要继续进行数据读取操作。接着,我们使用Wire.requestFrom()函数来从24C02芯片读取1个字节的数据,并使用Wire.read()函数来读取数据。最后,我们通过for循环控制8个LED灯的亮灭,使得LED灯的数量与读取到的数据一致。
5. 将编写好的代码上传到Arduino Uno开发板上,并观察LED灯的亮灭情况。LED灯的数量应该与写入的数据为0xAA时一致,LED灯全部亮起。如果读取到的数据不是0xAA,则LED灯的数量会与读取到的数据一致。
至此,I2C总线存储器24C02的读写实验就完成了。
阅读全文