一句句的解释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++); } }
时间: 2023-07-18 13:50:10 浏览: 62
这是一段嵌入式系统中使用的代码,用于控制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毫秒。
这些函数的具体实现细节可以参考代码中的注释。
相关问题
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 IIC_Start() { OLED_SCLK_Set() ; OLED_SDIN_Set(); OLED_SDIN_Clr(); OLED_SCLK_Clr(); } /********************************************** //IIC Stop **********************************************/ void IIC_Stop() { OLED_SCLK_Set() ; // OLED_SCLK_Clr(); OLED_SDIN_Clr(); OLED_SDIN_Set(); } void IIC_Wait_Ack() { OLED_SCLK_Set() ; OLED_SCLK_Clr(); } 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总线的基本操作函数,包括启动信号函数IIC_Start()、停止信号函数IIC_Stop()、等待应答信号函数IIC_Wait_Ack()以及向IIC总线写入一个字节的函数Write_IIC_Byte()。
其中,启动信号函数IIC_Start()的作用是在IIC总线上发送起始信号,即SDA从高电平向低电平切换时,SCL为高电平。停止信号函数IIC_Stop()的作用则是在IIC总线上发送停止信号,即SDA从低电平向高电平切换时,SCL为高电平。等待应答信号函数IIC_Wait_Ack()的作用是在向IIC总线写入一个字节后,等待从设备(如传感器)返回的应答信号。向IIC总线写入一个字节的函数Write_IIC_Byte()则是将一个字节的数据写入到IIC总线上。
这些函数代码中的OLED_SCLK_Set()和OLED_SDIN_Set()以及OLED_SCLK_Clr()和OLED_SDIN_Clr()函数,应该是具体硬件平台上的IO口控制函数,根据具体硬件平台的不同,这些函数的实现方法和作用可能会有所不同。