51单片机实验代码,c语言,IIC 通讯,实现了对 24c02 的 32 个字节数据写入,后读出并点亮 LED 灯, 写入方式:字节写入 实验步骤
时间: 2023-12-14 15:03:38 浏览: 75
好的,下面是 51 单片机实验代码,c语言,IIC 通讯,实现了对 24c02 的 32 个字节数据写入,后读出并点亮 LED 灯的实验步骤:
1. 首先,需要连接好 51 单片机和 24c02,连接方式如下:
- 51单片机的 P2.0 口连接到 24c02 的 SDA 接口;
- 51单片机的 P2.1 口连接到 24c02 的 SCL 接口;
- 24c02 的 A0,A1,A2 接口可以接到 GND 或 VCC 来确定器件地址。
2. 在程序中定义需要使用的引脚:
```c
#define SDA P2_0
#define SCL P2_1
#define LED P1_0 // LED 灯连接到 P1.0 口
```
3. 初始化 IIC 总线:
```c
void IIC_Init()
{
SDA = 1; // SDA 和 SCL 开始时都为 1
SCL = 1;
}
```
4. 实现 IIC 总线的起始信号:
```c
void IIC_Start()
{
SDA = 1;
SCL = 1;
SDA = 0; // 先将 SDA 拉低,然后再拉低 SCL,完成起始信号的发送
SCL = 0;
}
```
5. 实现 IIC 总线的停止信号:
```c
void IIC_Stop()
{
SDA = 0;
SCL = 1;
SDA = 1; // 先将 SCL 拉高,然后再拉高 SDA,完成停止信号的发送
}
```
6. 实现 IIC 总线的应答信号:
```c
bit IIC_Ack()
{
bit ack;
SDA = 1;
SCL = 1;
ack = SDA; // 接收从设备发出的应答信号
SCL = 0;
return ack;
}
```
7. 实现 IIC 总线的写操作:
```c
void IIC_Write(unsigned char dat)
{
unsigned char i;
for (i = 0; i < 8; i++) // 先发送高位
{
SDA = dat & 0x80;
SCL = 1;
SCL = 0;
dat <<= 1;
}
IIC_Ack(); // 发送完一个字节后,等待从设备的应答信号
}
```
8. 实现 IIC 总线的读操作:
```c
unsigned char IIC_Read()
{
unsigned char i, dat = 0;
for (i = 0; i < 8; i++) // 先接收高位
{
SCL = 1;
dat <<= 1;
dat |= SDA;
SCL = 0;
}
return dat;
}
```
9. 实现对 24c02 的 32 个字节数据写入:
```c
void Write24C02(unsigned char addr, unsigned char dat)
{
IIC_Start(); // 发送起始信号
IIC_Write(0xA0); // 发送器件地址和写操作位
IIC_Write(addr); // 发送要写入的地址
IIC_Write(dat); // 发送要写入的数据
IIC_Stop(); // 发送停止信号
}
```
10. 实现对 24c02 的 32 个字节数据读取:
```c
unsigned char Read24C02(unsigned char addr)
{
unsigned char dat;
IIC_Start(); // 发送起始信号
IIC_Write(0xA0); // 发送器件地址和写操作位
IIC_Write(addr); // 发送要读取的地址
IIC_Start(); // 发送起始信号
IIC_Write(0xA1); // 发送器件地址和读操作位
dat = IIC_Read(); // 读取要读取的数据
IIC_Stop(); // 发送停止信号
return dat;
}
```
11. 在主函数中实现数据的写入和读取,并点亮 LED 灯:
```c
void main()
{
unsigned char i, dat;
IIC_Init(); // 初始化 IIC 总线
// 写入数据
for (i = 0; i < 32; i++)
{
Write24C02(i, i); // 写入数据
delay(10); // 等待一段时间
}
// 读取数据并点亮 LED 灯
while (1)
{
for (i = 0; i < 32; i++)
{
dat = Read24C02(i); // 读取数据
P1 = dat; // 将数据输出到 LED 灯
delay(10); // 等待一段时间
}
}
}
```
至此,实验完成。
阅读全文