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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值