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();
时间: 2023-07-18 17:49:59 浏览: 256
这段代码是关于IIC总线通信的驱动程序,用于通过IIC总线与OLED屏幕通信,实现向OLED屏幕写入命令和数据。函数`Write_IIC_Command`用于写入命令,函数`Write_IIC_Data`用于写入数据。其中,`IIC_Start`用于启动IIC总线,`Write_IIC_Byte`用于向IIC总线写入一个字节,`IIC_Wait_Ack`用于等待从设备的响应信号,`IIC_Stop`用于关闭IIC总线。
相关问题
一句句的解释void Write_IIC_Byte(unsigned char IIC_Byte) { unsigned char i; unsigned char m,da; da=IIC_Byte; OLED_SCLK_Clr(); for(i=0;i<8;i++) { m=da; // OLED_SCLK_Clr(); m=m&0x80; if(m==0x80) {OLED_SDIN_Set();} else OLED_SDIN_Clr(); da=da<<1; OLED_SCLK_Set(); OLED_SCLK_Clr(); } } /********************************************** // IIC Write Command **********************************************/ 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_Wait_Ack(); Write_IIC_Byte(IIC_Data); IIC_Wait_Ack(); IIC_Stop(); } void OLED_WR_Byte(unsigned dat,unsigned cmd) { if(cmd) { Write_IIC_Data(dat); } else { Write_IIC_Command(dat); } } /******************************************** // fill_Picture ********************************************/ void fill_picture(unsigned char fill_Data) { unsigned char m,n; for(m=0;m<8;m++) { OLED_WR_Byte(0xb0+m,0); //page0-page1 OLED_WR_Byte(0x00,0); //low column start address OLED_WR_Byte(0x10,0); //high column start address for(n=0;n<128;n++) { OLED_WR_Byte(fill_Data,1); } } } /***********************Delay****************************************/ void Delay_50ms(unsigned int Del_50ms) { unsigned int m; for(;Del_50ms>0;Del_50ms--) for(m=6245;m>0;m--); } void Delay_1ms(unsigned int Del_1ms) { unsigned char j; while(Del_1ms--) { for(j=0;j<123;j++); } }
这是一段嵌入式系统中使用的代码,用于控制OLED显示屏的显示。具体来说,这段代码实现了以下几个函数:
1. Write_IIC_Byte:向I2C总线上写入一个字节的数据;
2. Write_IIC_Command:向OLED显示屏写入一个命令;
3. Write_IIC_Data:向OLED显示屏写入一段数据;
4. OLED_WR_Byte:向OLED显示屏写入一个字节的数据,可以指定是命令还是数据;
5. fill_picture:填充整个OLED显示屏的像素点;
6. Delay_50ms:延时50毫秒;
7. Delay_1ms:延时1毫秒。
这些函数的具体实现细节可以参考代码中的注释。
Write_IIC_Byte(unsigned char IIC_Byte)什么意思
根据提供的引用内容,函数`Write_IIC_Byte(unsigned char IIC_Byte)`的意思是向I2C总线写入一个字节的数据。具体的实现代码如下所示[^1]:
```c
unsigned char Single_Write(unsigned char SlaveAddress, unsigned char REG_Address, unsigned char REG_data)
{
if(!I2C_Start()) return 0;
I2C_SendByte(SlaveAddress);
// ...
}
```
该函数使用了I2C总线通信协议,通过调用`I2C_Start()`函数开始通信,然后使用`I2C_SendByte()`函数向指定的从设备地址发送数据。具体的数据内容包括从设备地址、寄存器地址和要写入的数据。该函数的返回值为无符号字符型,表示写入操作是否成功。
阅读全文