SWM181 驱动ssd1306 I2C OLED屏幕显示
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SWM181 驱动ssd1306 I2C OLED屏幕显示相关的知识,希望对你有一定的参考价值。
SWM181 驱动ssd1306 I2C OLED屏幕显示
✨本案例程序可以通过修改代码中相对于的偏移地址可以兼容驱动显示SH1106 I2C 1.3寸 OLED屏幕。上面的相关篇驱动中的程序不能兼容驱动ssd1306 I2C,其实也是可以只是需要修改的内容较多,不建议这么做。
- 🌼所使用的开发板:
- 🚩没有实现通过硬件I2C点亮屏幕。
- 🔗1.3寸屏幕资料
链接:https://pan.baidu.com/s/1IPY3meKgO1Saeu6uE_4R7g
提取码:8888
- 🔗0.96寸屏幕资料
链接:https://pan.baidu.com/s/1xy2zH8-hs-S8-_AcVtBP_g
提取码:0jhj
📑引脚说明
SWM181 --- OLED I2C
PA4 ------ SCL
PA5 ------ SDA
⛳SH1106 和 ssd1306 I2C OLED屏幕选择代码修改位置
- 📑有两处需要修改
//更新显存到OLED
void OLED_Refresh(void)
u8 i,n;
for(i=0;i<8;i++)
OLED_WR_Byte(0xb0+i,OLED_CMD); //设置行起始地址
OLED_WR_Byte(0x02,OLED_CMD); //设置低列起始地址, 0.96"屏幕:0x00;1.3"屏幕:0x02
OLED_WR_Byte(0x10,OLED_CMD); //设置高列起始地址
Oled_I2C_Start();
Send_Byte(0x78);
I2C_WaitAck();
Send_Byte(0x40);
I2C_WaitAck();
for(n=0;n<128;n++)
Send_Byte(OLED_GRAM[n][i]);
I2C_WaitAck();
Oled_I2C_Stop();
//OLED的初始化
void OLED_Init(void)
OLED_RES_Clr();
delay_ms(200);
OLED_RES_Set();
OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
OLED_WR_Byte(0x02,OLED_CMD);//---set low column address, 0.96"屏幕:0x00;1.3"屏幕:0x02
OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
OLED_WR_Byte(0x40,OLED_CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
OLED_WR_Byte(0xCF,OLED_CMD);// Set SEG Output Current Brightness
.............
📝主程序代码
#include "SWM181.h"
#include "delay.h"
#include "oled.h"
#include "bmp.h"
void I2CMstInit(void)
I2C_InitStructure I2C_initStruct;
PORT_Init(PORTA, PIN4, FUNMUX_I2C0_SCL, 1); //GPIOA.4配置为I2C0 SCL引脚
PORTA->OPEND |= (1 << PIN4); //开漏
PORTA->PULLU |= (1 << PIN4); //上拉
PORT_Init(PORTA, PIN5, FUNMUX_I2C0_SDA, 1); //GPIOA.5配置为I2C0 SDA引脚
PORTA->OPEND |= (1 << PIN5); //开漏
PORTA->PULLU |= (1 << PIN5); //上拉
I2C_initStruct.Master = 1;
I2C_initStruct.Addr7b = 1;
I2C_initStruct.MstClk = 10000;
I2C_initStruct.MstIEn = 1;//主机模式中断使能
I2C_Init(I2C0, &I2C_initStruct);
I2C_Open(I2C0);
int main(void)
u8 t=' ';
SystemInit();
GPIO_Init(GPIOB, PIN8, 1, 0, 0, 0); //输出,推挽模式,接LED
// I2CMstInit();
GPIO_Init(GPIOA, PIN4, 1, 1, 0, 1); //输出,上拉, 开漏输出
GPIO_Init(GPIOA, PIN5, 1, 1, 0, 1); //输出,上拉, 开漏输出
// GPIO_SetBit(GPIOA, PIN4);
// GPIO_SetBit(GPIOA, PIN5);
OLED_Init();
while(1)
OLED_ShowPicture(0,0,128,64,BMP1,1);
OLED_Refresh();
GPIO_InvBit(GPIOB, PIN8);//电平反转
delay_ms(250);delay_ms(250);
OLED_Clear();
OLED_ShowChinese(0,0,0,16,1);//中
OLED_ShowChinese(18,0,1,16,1);//景
OLED_ShowChinese(36,0,2,16,1);//园
OLED_ShowChinese(54,0,3,16,1);//电
OLED_ShowChinese(72,0,4,16,1);//子
OLED_ShowChinese(90,0,5,16,1);//技
OLED_ShowChinese(108,0,6,16,1);//术
OLED_ShowString(8,16,(u8*)"ZHONGJINGYUAN",16,1);
OLED_ShowString(20,32,(u8*)"2014/05/01",16,1);
OLED_ShowString(0,48,(u8*)"ASCII:",16,1);
OLED_ShowString(63,48,(u8*)"CODE:",16,1);
OLED_ShowChar(48,48,t,16,1);//显示ASCII字符
t++;
if(t>'~')t=' ';
OLED_ShowNum(103,48,t,3,16,1);
OLED_Refresh();
delay_ms(250);delay_ms(250);
OLED_Clear();
OLED_ShowChinese(0,0,0,16,1); //16*16 中
OLED_ShowChinese(16,0,0,24,1); //24*24 中
OLED_ShowChinese(24,20,0,32,1);//32*32 中
OLED_ShowChinese(64,0,0,64,1); //64*64 中
OLED_Refresh();
GPIO_InvBit(GPIOB, PIN8);//电平反转
delay_ms(250);delay_ms(250);
OLED_Clear();
OLED_ShowString(0,0,(u8*)"ABC",8,1);//6*8 “ABC”
OLED_ShowString(0,8,(u8*)"ABC",12,1);//6*12 “ABC”
OLED_ShowString(0,20,(u8*)"ABC",16,1);//8*16 “ABC”
OLED_ShowString(0,36,(u8*)"ABC",24,1);//12*24 “ABC”
OLED_Refresh();
GPIO_InvBit(GPIOB, PIN8);//电平反转
delay_ms(250);delay_ms(250);
// OLED_ScrollDisplay(11,4,1);
📚程序源码
链接: https://pan.baidu.com/s/1TJB1sIyBAP8ktXfrz6XluQ
提取码: 5wq4
以上是关于SWM181 驱动ssd1306 I2C OLED屏幕显示的主要内容,如果未能解决你的问题,请参考以下文章
Arduino RP2040 驱动ssd1306 I2C OLED屏幕
用于 OLED 屏幕的 Debian I2C 驱动程序无法正常工作。 [ssd1306]
STC8单片机基于开源库驱动ssd1306 i2c oled例程