IIC驱动0.96寸OLED屏幕(C51/52)

IIC的初始化

  1. iic起始信号
void iic_Start()
{
	scl=0;//防止雪花
	scl=1;
	sda=1;
	_nop_();
	sda=0;
	_nop_();
}

 2.停止信号

void iic_Stop()
{
	scl=0;
	scl=1;
	sda=0;
	_nop_();
	sda=1;
	_nop_();

}

 3.应答

char iic_ACK()
{
	char flag;
	sda=1;
	_nop_();
	scl=1;
	_nop_();
	flag = sda;
	_nop_();
	scl=0;
	_nop_();
	return flag;
}

4.发送字节

void iic_SendByte(char byte)
{
		int i;
		for(i=0;i<8;i++){
		scl=0;
		sda = byte & 0x80;
		_nop_();
		scl=1;
		_nop_();
		scl=0;
		_nop_();
		byte<<=1;
		}
}

 5.发送命令模式

void olde_Write_cmd(char cmd){
		iic_Start();//开始信号
		iic_SendByte(0x78); //设备地址 0111 1000
		iic_ACK(); //应答信号
		iic_SendByte(0x00); //控制位选择 命令模式 0000 0000
		iic_ACK();
		iic_SendByte(cmd); //命令
		iic_ACK();
		iic_Stop();
}

6.发送数据模式

void olde_Write_data(char datainfo){
		iic_Start();//开始信号
		iic_SendByte(0x78); //设备地址
		iic_ACK(); //应答信号
		iic_SendByte(0x40); //控制位选择 数据模式  0100 0000
		iic_ACK();
		iic_SendByte(datainfo); //数据
		iic_ACK();
		iic_Stop();
}

7.OLED屏幕初始化

void Oled_Init(void){
		olde_Write_cmd(0xAE);//--display off
		olde_Write_cmd(0x00);//---set low column address
		olde_Write_cmd(0x10);//---set high column address
		olde_Write_cmd(0x40);//--set start line address
		olde_Write_cmd(0xB0);//--set page address
		olde_Write_cmd(0x81); // contract control
		olde_Write_cmd(0xFF);//--128
		olde_Write_cmd(0xA1);//set segment remap
		olde_Write_cmd(0xA6);//--normal / reverse
		olde_Write_cmd(0xA8);//--set multiplex ratio(1 to 64)
		olde_Write_cmd(0x3F);//--1/32 duty
		olde_Write_cmd(0xC8);//Com scan direction
		olde_Write_cmd(0xD3);//-set display offset
		olde_Write_cmd(0x00);//
		olde_Write_cmd(0xD5);//set osc division
		olde_Write_cmd(0x80);//
		olde_Write_cmd(0xD8);//set area color mode off
		olde_Write_cmd(0x05);//
		olde_Write_cmd(0xD9);//Set Pre-Charge Period
		olde_Write_cmd(0xF1);//
		olde_Write_cmd(0xDA);//set com pin configuartion
		olde_Write_cmd(0x12);//
		olde_Write_cmd(0xDB);//set Vcomh
		olde_Write_cmd(0x30);//
		olde_Write_cmd(0x8D);//set charge pump enable
		olde_Write_cmd(0x14);//
		olde_Write_cmd(0xAF);//--turn on oled panel
}

8.OLDE清屏


void Oled_Clear()
{
	unsigned char i,j; //-128 --- 127
	
	for(i=0;i<8;i++){
		olde_Write_cmd(0xB0 + i);//page0--page7
		//每个page从0列
		olde_Write_cmd(0x00);
		olde_Write_cmd(0x10);
		//0到127列,依次写入0,每写入数据,列地址自动偏移
		for(j = 0;j<128;j++){
			olde_Write_data(0);
		}
	}
}

演示效果,显示XWD 

#include "reg52.h"
#include "intrins.h"
#include "ZiMo.h"

sbit scl = P0^1;
sbit sda =P0^3;






void main()
{
	char i;
	Oled_Init(); //初始化Oled
	//确认位置
	olde_Write_cmd(0x20);
	//选择页寻址模式
	olde_Write_cmd(0x02);
		Oled_Clear();
	//选择页0 1011 0000
	//XWD
	olde_Write_cmd(0xB0);
	olde_Write_cmd(0x00);
		olde_Write_cmd(0x10);
	for(i=0;i<8;i++){
	olde_Write_data(X1[i]);
	}
	for(i=0;i<8;i++){
	olde_Write_data(W1[i]);
	}
	for(i=0;i<8;i++){
	olde_Write_data(D1[i]);
	}
	
	olde_Write_cmd(0xB1);
	olde_Write_cmd(0x00);
	olde_Write_cmd(0x10);
	for(i=0;i<8;i++){
	olde_Write_data(X2[i]);
	}
	for(i=0;i<8;i++){
	olde_Write_data(W2[i]);
	}
	for(i=0;i<8;i++){
	olde_Write_data(D2[i]);
	}
	while(1);
	
}

                                        

### 回答1: 0.96OLED是一种小型的有机发光二极管显示屏。它是一种高亮度、高对比度、高分辨率的显示屏,适用于各种应用场合。IIC驱动程序则是操作系统或电路板与其它设备之间的通信协议,它可以进行数据传输和控制信号的交互。因此,编写0.96OLEDIIC驱动程序就是要实现电路板与显示屏之间的通信交互,使显示屏能够正确地显示图像和文字。 在编写0.96OLEDIIC驱动程序时,应首先了解其IIC接口的相关规范,包括SCL时钟速率、SDA数据线的电平和传输协议等。其次,需要了解OLED屏幕的显示控制指令,以便能够控制屏幕的显示效果。最后,就是编写具体的IIC驱动程序,主要包括向OLED发送指令和数据信息,以及控制屏幕的显示效果。 在具体的编写过程中,需要注意一些问题。首先,要确保发送的指令和数据信息能够正确地被OLED屏幕接收和解析,以便实现正确的显示效果。其次,要考虑不同操作系统和电路板的兼容性,以确保程序的可移植性和通用性。此外,还需要对程序进行不断测试和优化,以提高程序的稳定性和运行效率。 总之,编写0.96OLEDIIC驱动程序需要有一定的电子组装和编程知识,但也是一种具有挑战性和实用性的任务。通过不断地学习和实践,我们可以掌握其编写技巧,为各种应用场合提供高品质的显示屏幕。 ### 回答2: 0.96oled是一种小型显示屏,由于其小巧、高清和低功耗特点,被广泛应用于各种便携式电子产品中。而其iic驱动程序则是控制该显示屏的重要部分。 iic驱动程序的主要作用是通过iic总线与显示屏通信,将需要显示的图像或数据发送到oled屏幕上。在编写iic驱动程序时,需要考虑以下几个关键因素: 首先,需要明确o了屏幕iic地址。通常,该地址为0x3C或0x3D。然后,还需要通过iic总线初始化oled屏幕,并设置其显示模式、亮度和对比度等参数。 其次,需要将设计好的图像或数据转换成oled屏幕能够识别的格式,并通过iic总线发送到屏幕上。这通常需要使用一些特殊的函数和库,例如Adafruit或u8g2等。 最后,需要考虑屏幕的尺和分辨率,以保证显示效果清晰和稳定。此外,还需要在程序中加入一些延迟、清屏和休眠等功能,以降低功耗和延长oled屏幕的使用寿命。 总之,编写0.96olediic驱动程序需要考虑诸多因素,但只要掌握一定的知识和经验,就能轻松完成该任务,让oled屏幕在各种应用场景中发挥出其优异的性能和效果。 ### 回答3: IIC是一种串行通信总线协议,也称为I2C(Inter-Integrated Circuit)。IIC协议可以实现多个设备之间的通信,这些设备可以是不同的芯片或者模块。对于0.96OLED显示屏来说,我们需要使用IIC驱动程序来使其正常显示。 IIC协议中传输的数据是通过使用SCL和SDA两个线路进行同步传输的,其中SCL线路用于时钟信号的传输,SDA线路用于数据的传输。在将OLED屏幕连接到单片机或者开发板之后,我们需要根据OLED的型号和接线方式编写相应的IIC驱动程序。 在编写IIC驱动程序之前,需要先确定OLED显示屏的IIC地址,多数情况下该地址为0x3C或者0x3D。然后,我们需要根据OLED屏幕的接口协议编写读取和写入数据的函数。对于写入数据函数,通常的流程如下:首先启动IIC总线,然后发送OLED屏幕IIC地址,接着发送控制字节和具体的数据,最后释放IIC总线。对于读取数据函数,流程类似,只需要在发送IIC地址之后,向OLED屏幕发送读取命令即可。 需要注意的是,不同厂商的OLED屏幕可能存在接口协议的差异,因此在编写IIC驱动程序时需要了解具体的厂商数据手册和接口定义。同时,在实际使用过程中,还需要根据具体的应用场景对IIC驱动程序进行优化和改进,以实现更高效的数据传输和显示效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值