0.96寸OLED-单独驱动和U8g2驱动-硬件软件IIC

0.96寸OLED-单独驱动和U8g2驱动-硬件软件IIC


博主平时DIY经常使用OLED,其中以4脚的I2C屏最多,就想着总结一下子,让广大DIY朋友更容易找到资源。

驱动采用的时SSD1306

        同学们拿到代码后,可以直接用,其中博主给的代码默认引脚都是SDA接板子PB11SCL接板子PB10,下载完代码接上之后重启会直接亮屏。

U8g2驱动OLDE

        STM32-U8g2驱动OLED屏幕。

U8g2驱动OLED

U8g2硬件I2C驱动

由于硬件IIC口只有两组(STM32F103C8T6)所以选择IO口有限,各位同学选择的时候注意。

init.h中需要修改:IO口宏定义

#define IIC_OLED_SDA_Pin        	GPIO_Pin_11
#define IIC_OLED_SDA_GPIO       	GPIOB

#define IIC_OLED_SCL_Pin        	GPIO_Pin_10
#define IIC_OLED_SCL_GPIO       	GPIOB

和**init.c中需要修改**:IO口初始化

	/*STM32F103C8T6芯片的硬件I2C: PB6 -- SCL; PB7 -- SDA */
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10 | GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;//I2C必须开漏输出
	GPIO_Init(GPIOB, &GPIO_InitStructure);

博主选择的时I2C2,同学如果想用I2C1的话还需要修改。

init.c中需要修改:I2C初始化还有所有使用中的I2C都要改为你所用的I2C

void I2C_Configuration(void)
{
	I2C_InitTypeDef  I2C_InitStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2,ENABLE);

	I2C_DeInit(I2C2);//使用I2C1
	I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
	I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
	I2C_InitStructure.I2C_OwnAddress1 = 0x30;//主机的I2C地址,随便写的
	I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
	I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
	I2C_InitStructure.I2C_ClockSpeed = 1000000;//1M

	I2C_Cmd(I2C2, ENABLE);
	I2C_Init(I2C2, &I2C_InitStructure);
}

uint8_t u8x8_byte_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) {
    uint8_t* data = (uint8_t*) arg_ptr;
    switch(msg) {
        case U8X8_MSG_BYTE_SEND:
            while( arg_int-- > 0 ) {
                I2C_SendData(I2C2, *data++);
                while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) 
                    continue;
            }
            break;
        case U8X8_MSG_BYTE_INIT:
        /* add your custom code to init i2c subsystem */
            I2C_Configuration();
            break;
        case U8X8_MSG_BYTE_SET_DC:
        /* ignored for i2c */
            break;
        case U8X8_MSG_BYTE_START_TRANSFER:
            while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));
            I2C_GenerateSTART(I2C2, ENABLE);
            while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT))
                continue;
            I2C_Send7bitAddress(I2C2, 0x78, I2C_Direction_Transmitter);
            while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
                continue;
            break;
        case U8X8_MSG_BYTE_END_TRANSFER:
            I2C_GenerateSTOP(I2C2, ENABLE);
            break;
        default:
            return 0;
    }
    return 1;
}

即可使用。

U8g2软件I2C驱动

软件I2C只需要修改为你所使用的引脚即可。别忘了还有初始化中的IO引脚初始化。

#define IIC_OLED_SDA_Pin        	GPIO_Pin_11
#define IIC_OLED_SDA_GPIO       	GPIOB

#define IIC_OLED_SCL_Pin        	GPIO_Pin_10
#define IIC_OLED_SCL_GPIO       	GPIOB

普通库驱动OLDE

        STM32-普通库驱动OLED屏幕。

普通库硬件I2C驱动

oled.c中需要修改:其实和U8g2库需要改动的地方一样,都是IO口初始化和I2C初始化。如果使用I2C2就不需要改了。

	/*STM32F103C8T6芯片的硬件I2C: PB10 -- SCL; PB11 -- SDA */
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10 | GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;//I2C必须开漏输出
	GPIO_Init(GPIOB, &GPIO_InitStructure);

普通库软件I2C驱动

oled.h中需要修改:IO口宏定义

#define OLED_SCL_PORT GPIOB
#define OLED_SCL_PIN GPIO_Pin_10
#define OLED_SCLK_Clr() GPIO_ResetBits(OLED_SCL_PORT,OLED_SCL_PIN)//SCL
#define OLED_SCLK_Set() GPIO_SetBits(OLED_SCL_PORT,OLED_SCL_PIN)

#define OLED_SDA_PORT GPIOB
#define OLED_SDA_PIN GPIO_Pin_11
#define OLED_SDIN_Clr() GPIO_ResetBits(OLED_SDA_PORT,OLED_SDA_PIN)//SDA
#define OLED_SDIN_Set() GPIO_SetBits(OLED_SDA_PORT,OLED_SDA_PIN)

即可使用

插入汉字

按照博主以下步骤即可加入汉字显示。

我们以上文中普通库硬件I2C驱动OLED为例子。

  1. 打开取模软件PCtoLCD2002软件。
  2. 点击设置,按照如图所示方式进行设置,并点击确认。
    在这里插入图片描述
  3. 输入取模文字,并点击生成字模。
    在这里插入图片描述
  4. 将生成的字模复制到oledfont.hunsigned char F16x16[] 数组中,并将unsigned char character[]字符串的相应位置添加你增加的中文字符。
  5. 调用OLED_Show(0,0,"你好");即可显示,其中的0,0代表xy坐标的位置。到此我们就显示了汉字了。

插入简单图片

按照博主以下步骤即可加入图片显示。

我们以上文中普通库软件I2C驱动OLED为例子。

  1. 搞到一张你想显示的图片;一张.BMP结尾的照片。如果不是可以在线转换。图片格式转换链接:https://www.gaitubao.com/jpg-gif-png
  2. 使用系统画图工具打开打开。
  3. 主页图像栏重新调整大小点机像素,取消勾选保持纵横比,调整合适的水平和垂直像素(0.96的OLED屏分辨为128*64)保存图片。
  4. 打开取模软件,点击设置,调为图中的参数。 返回主界面点击模式->选择图形模式。
    在这里插入图片描述
  5. 复制到bmp.h文件的unsigned char BMP1[] 数组中即可。
  6. 调用函数OLED_DrawBMP(0,0,128,8,BMP1);。其中0,0代表起点xy轴坐标,128,8代表结束xy轴坐标。

复杂图形取模显示

  1. 将图片转为128*64分辨率的bmp格式。
  2. 使用Image2Lcd v2.9打开图像,调整亮度,得到希望得到的显示率。
    在这里插入图片描述
  3. 输出为bmp格式。
  4. 然后调用插入简单图片方式导入程序。

显示小图片

  1. 调整合适大小在PCtolcd形成字模。
  2. 放到代码数组中。
  3. 计算好图片分辨率和显示分辨率。例如:图片30*30 则代码中显示应为OLED_DrawBMP(50,0,80,6,BMP2); x1-x0为30 y1-y0小于图片的话图片显示不全但是不会乱码。

显示gif

  1. gifsplitter2.0.exe将gif分离成帧。
  2. 之后跟显示图片一样。

OLED显示GIF


源码地址:https://download.csdn.net/download/weixin_42320020/88759113
拒绝转载!

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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驱动程序进行优化和改进,以实现更高效的数据传输和显示效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

释博文

您的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值