OLED显示实验

OLED

Organic Light-Emitting Diode 有机发光二极管,又叫有机电机光显示。

OLED特点

  自发光、对比度高、厚度薄、视角广、使用温度范围广、构造及制程简单
  自发光,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,有机材料就会发光

OLED模块

一:模块有单色(纯蓝色)和双色(黄蓝双色
二:尺寸小显示尺寸为0.96 寸
三:高分辨率,模块分辨率为128*64
四:四种接口方式:6800/8080两种并行接口方式、四线的穿行SPI接口方式、IIC接口方式
五:不需高压,接3.3V就可工作

工作模式选择

通过模块的BS1/BS2设置
接口模式与BS1/BS2设置的关系图
在这里插入图片描述

OLED 8080并行接口信号线

CS:OLED片选信号
WR:向OLED写入数据
RD:从OLED读取数据
D[7:0]:8位双向数据线
RST(RES):硬复位OLED
DC:命令/数据标志(0,读写命令;1,读写数据)

SSD1306:OLED控制器

OLED 8080 并口读写过程

根据要写入/读取的数据的类型,设置DC为高(数据)/低(命令),而后拉低片段
选中SSD1306
读数据:在RD的上升沿,使数据锁存到数据线(D[7:0])上
写数据:在WR的上升沿,使数据写入到SSD1306里面
在这里插入图片描述
并口写时序图

在这里插入图片描述
并口读时序图

OLED 模块显存

SSD1306 的显存总共为128*64 bit大小,SSD1306将这些显存分为8页,每页包含了128个字节总共八页。

显示原理

内部建立一个缓存(共128*8个字节) ,在每次修改的时候,只是修改STM32 上的缓存(实际上就是SRAM),在修改完了之后,一次性把STM32上的缓存数据写入到OLED的GRAM。

SSD1306 的命令

如图:
在这里插入图片描述
命令0X81:设置对比度,两个字节,第一个0X81为命令,随后的字节为要设置的对比度,越大越亮
命令0XAE/0XAF:0XAE为关闭显示命令,0XAF为开启显示命令
命令0X8D:两个字节,第一个为命令字,第二个为设置值,第二个字节的BIT2 表示电荷泵的开关状态,该位为一开启电荷泵,为0关闭。模块初始化一定要开启
命令0XB0~B7:用于设置页地址,其第三位的值对应GRAM的页地址
命令0X00~0X0F:用于设置显示时的起始列地址低四位
命令0X10~0X1F:用于设置显示时的起始列地址高四位

OLED初始化

复位SSD1306
驱动IC初始化代码
开启显示
清0显存
开始显示

OLED写字节代码实现

void OLED_WR_Byte(u8 dat,u8 cmd)
{
  DATAOUT(dat);
  if(cmd)
    OLED_RS_Set();
   else
   OLED_RS_Clr();
  OLED_CS_Clr();
  OLED_WR_Clr();
  OLED_WR_Set();
  OLED_CS_Set();
  OLED_RS_Set();
}

OLED更新缓存显示内容

u8 OLED_GRAM[128][8];

void OLED_Refresh_Gram(void)
{
   u8 i,n;
   for(i=0;i<8;i++)
   {
     OLED_WR_Byte (0xb0+i,OLED_CMD);
     OLED_WR_Byte (0x00,OLED_CMD);
     OLED_WR_Byte (0x10,OLED_CMD);
for(n=0;n<128;n++)
  OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);
  }
 }

OLED 画点函数

void OLED_DrawPoint(u8 x,u8 y,u8 t)
{
  u8 pos,bx,temp=0;
  if(x>127||y>63)return ;
  pos=7-y/8;
  bx=y%8;
  temp=1<<(7-bx);
  if(t)OLED_GRAM[x][pos]=temp;
  else OLED_GRAM[x][pos]&=~temp;
}

OLED字符显示函数

//在指定位置显示一个字符,包括部分字符
//x:0~127 y:0~63
//mode:0,反白显示 
//size:选择字体  12/16/24
{
  u8 temp,t,11;u8 y0=y;
  u8 csize=(size/8+((size%8)?1:0))*(size/2);
  chr=chr-'-';
  for(t=0;t<csize;t++)
  {
  if(size==2)temp=asc2_1206[chr][t];
  else if(size==16)temp=asc2_1608[chr][t];
  else if(size==24)temp=asc2_2412[chr][t];
  else return;
  for(t1=0;t1<8;t1++)
  {
               if(temp&0x80)OLED_DrawPoint(x,y,mode);
               else OLED_DrawPoint(x,y,!mode);
               temp<<=1;
               y++;
               if((y-y0)==size)
               {
               y=y0;
               x++;break;
               }
   }
    }
}


实验代码

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "oled.h"

int main(void)
{ 
	u8 t=0;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	delay_init(168);    
	uart_init(115200);	
	LED_Init();				
 	OLED_Init();	
  OLED_ShowString(0,0,"ALIENTEK",24);  
	OLED_ShowString(0,24, "0.96' OLED TEST",16);  
 	OLED_ShowString(0,40,"ATOM 2014/5/4",12);  
 	OLED_ShowString(0,52,"ASCII:",12);  
 	OLED_ShowString(64,52,"CODE:",12);  
	OLED_Refresh_Gram();	 
	t=' ';  
	while(1) 
	{		
		OLED_ShowChar(36,52,t,12,1);
		OLED_ShowNum(94,52,t,3,12);	 
		OLED_Refresh_Gram();      
		t++;
		if(t>'~')t=' ';  
		delay_ms(500);
		LED0=!LED0;
	}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于OLED显示实验,硬件连接通常涉及以下组件: 1. OLED显示屏:首先,你需要一个OLED显示屏,它通常具有I2C或SPI接口。这些接口用于将数据和命令传输到显示屏。 2. 微控制器/开发板:你需要一个微控制器或开发板来控制OLED显示屏。常见的选择包括Arduino、Raspberry Pi等。 3. 连接线:你需要适当的连接线将OLED显示屏与微控制器或开发板连接起来。根据显示屏和控制器之间的接口类型(I2C或SPI),你可能需要使用相应的连接线。 连接步骤如下: 1. 确保你的OLED显示屏和微控制器/开发板处于断电状态。 2. 查阅OLED显示屏和微控制器/开发板的规格说明和引脚定义。确定显示屏的电源、地线以及数据/命令线的引脚。 3. 连接电源:将OLED显示屏的电源引脚连接到微控制器/开发板的相应电源引脚。确保极性正确,以避免损坏。 4. 连接地线:将OLED显示屏的地线引脚连接到微控制器/开发板的相应地线引脚。 5. 连接数据/命令线:根据OLED显示屏的接口类型(I2C或SPI),将其数据/命令线引脚连接到微控制器/开发板的相应引脚。对于I2C接口,通常有两个引脚:SDA(串行数据线)和SCL(串行时钟线)。对于SPI接口,通常有四个引脚:SCK(时钟线)、MOSI(主设备输出,从设备输入)、MISO(主设备输入,从设备输出)和CS(片选线)。 6. 完成连接后,确保所有连接牢固可靠。 7. 打开电源,启动微控制器/开发板,并根据相关文档编写代码来控制OLED显示屏。 请注意,在进行硬件连接之前,务必阅读并理解相关设备的规格说明和文档,以确保正确连接,并避免损坏设备。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

。✧* ꧁流痕꧂✧*。

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值