嵌入式学习之oled模块(SSD1306控制器)

(1)OLED显存存放格式(GDDRAM)
在这里插入图片描述
(2)在某页的一列中D0在高位,D7位在底。
在这里插入图片描述
2.时序:在每个时钟的上升沿写入且先写高位。
在这里插入图片描述
3.常用命令:
第一个命令为 0X81,用于设置对比度的,这个命令包含了两个字节,第一个 0X81 为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。
第二个命令为 0XAE/0XAF。0XAE 为关闭显示命令;0XAF 为开启显示命令。
第三个命令为 0X8D,该指令也包含 2 个字节,第一个为命令字,第二个为设置值,第二个字节的 BIT2 表示电荷泵的开关状态,该位为 1,则开启电荷泵,为 0 则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。
第四个命令为 0XB0~B7,该命令用于设置页地址,其低三位的值对应着 GRAM 的页地址。
第五个指令为 0X00~0X0F,该指令用于设置显示时的起始列地址低四位。
第六个指令为 0X10~0X1F,该指令用于设置显示时的起始列地址高四位。
注意:第五个和第六个命令两者合起来选择128列中的一列,如图所示为选择第100列时的两个命令应写入的值:
在这里插入图片描述
4.实现代码解读:
(1)在 STM32 内部定义了一个块 GRAM:
static unsigned char OLED_buffer[1024](1024 * 8==128 * 64)
用于对应oled中的GDDRAM,这样在操作的时候,我们只要修改 STM32 内部的 GRAM(即修改数组) 就可以了,然后通过下面这个OLED_Display(void)函数把 GRAM 一次刷新到 OLED 的 GDDRAM上。

void OLED_Display(void)//将数组的内容更新到到oled中
{
	u8 i,n;		    
	for(i=0;i<PAGE_SIZE;i++)  
	{  
		OLED_WR_Byte (YLevel+i,OLED_CMD);    //设置页地址(0~7)
		OLED_WR_Byte (XLevelL,OLED_CMD);      //设置显示位置—列低地址
		OLED_WR_Byte (XLevelH,OLED_CMD);      //设置显示位置—列高地址  
		for(n=0;n<WIDTH;n++)//即从低0页的第一列开始写起
		{
			OLED_WR_Byte(OLED_buffer[i*WIDTH+n],OLED_DATA); 
		}
	}   //更新显示
}

(2)写某一个像素点的函数(当然操作的是定义的数组)

void OLED_Set_Pixel(unsigned char x, unsigned char y,unsigned char color)
{
	if(color)
	{
		OLED_buffer[(y/PAGE_SIZE)*WIDTH+x]|= (1<<(y%PAGE_SIZE))&0xff;
	}
	else
	{
		OLED_buffer[(y/PAGE_SIZE)*WIDTH+x]&= ~((1<<(y%PAGE_SIZE))&0xff);
	}
}	

在这里插入图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值