帮我补充完整void iic_start(void)
时间: 2024-05-25 09:12:30 浏览: 88
void iic_start(void) {
// 1. 发送起始信号
IIC_SCL_H; // 将 SCL 置高
IIC_SDA_H; // 将 SDA 置高
delay_us(4); // 稍作延时
IIC_SDA_L; // 将 SDA 置低
delay_us(4); // 稍作延时
IIC_SCL_L; // 将 SCL 置低
}
该函数是用于在 I2C 总线上发送起始信号(Start Bit)。起始信号包括一个高电平的 SDA 抑制信号,接着跟随一个下降沿的 SCL 时钟信号。在起始信号发送后,I2C 设备可以开始进行通信操作。
相关问题
void Write_IIC_Command(unsigned char IIC_Command) { IIC_Start(); Write_IIC_Byte(0x78); //Slave address,SA0=0 IIC_Wait_Ack(); Write_IIC_Byte(0x00); //write command IIC_Wait_Ack(); Write_IIC_Byte(IIC_Command); IIC_Wait_Ack(); IIC_Stop(); } /********************************************** // IIC Write Data **********************************************/ void Write_IIC_Data(unsigned char IIC_Data) { IIC_Start(); Write_IIC_Byte(0x78); //D/C#=0; R/W#=0 IIC_Wait_Ack(); Write_IIC_Byte(0x40); //write data 通过IIC开启的OLED屏幕显示IIC_Wait_Ack(); Write_IIC_Byte(IIC_Data); IIC_Wait_Ack(); IIC_Stop();
这段代码是关于IIC总线通信的驱动程序,用于通过IIC总线与OLED屏幕通信,实现向OLED屏幕写入命令和数据。函数`Write_IIC_Command`用于写入命令,函数`Write_IIC_Data`用于写入数据。其中,`IIC_Start`用于启动IIC总线,`Write_IIC_Byte`用于向IIC总线写入一个字节,`IIC_Wait_Ack`用于等待从设备的响应信号,`IIC_Stop`用于关闭IIC总线。
解释这段代码void PCF8591_Init() { IIC_Start(); IIC_SendByte(0x90); IIC_WaitAck(); IIC_SendByte(0x01); IIC_WaitAck(); IIC_Stop(); } unsigned char PCF8951_Read() { unsigned char temp; IIC_Start(); IIC_SendByte(0x91); IIC_WaitAck(); temp=IIC_RecByte(); IIC_SendAck(1); IIC_Stop(); return temp; }
这段代码包含了两个函数,一个是 `PCF8591_Init()`,另一个是 `PCF8951_Read()`。这两个函数作用于 PCF8591 芯片,该芯片是一种集成了 ADC 和 DAC 功能的芯片,可以将模拟信号转换为数字信号并且反之。
函数 `PCF8591_Init()` 的作用是初始化 PCF8591 芯片,具体来说,其实现了以下步骤:
1. 发送起始信号;
2. 发送器件地址 0x90(7 位地址 + 写入位);
3. 等待应答信号;
4. 发送控制字节 0x01,该字节设置了 PCF8591 的工作模式和输入通道;
5. 等待应答信号;
6. 发送停止信号。
函数 `PCF8951_Read()` 的作用是从 PCF8591 芯片中读取数据,具体来说,其实现了以下步骤:
1. 发送起始信号;
2. 发送器件地址 0x91(7 位地址 + 读取位);
3. 等待应答信号;
4. 读取一个字节数据;
5. 发送一个应答信号;
6. 发送停止信号;
7. 返回读取到的数据。
这里需要注意的是,该函数只读取了一个字节的数据,如果需要读取多个字节的数据,需要在调用该函数的地方进行循环。
阅读全文