从0开始点亮OLED屏幕(二)OLED的初始化

本文详细介绍了如何通过I2C通信接口初始化128x64OLED屏幕,包括设置时序、驱动操作、数据传输以及如何点亮和控制像素点。还提供了OLED屏幕的显存管理和刷新、清屏函数等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于篇一我已经介绍了IIC的一些基本时序,本篇文章将教会你们如何初始化程序以及点亮像素点。 

一、OLED屏幕的简单介绍:

1.OLED显存介绍:

        我所使用的OLED为128*64分辨率的,即RAM为128*64位。而RAM分为8个页面,从PAGE0到PAGE7,如图所示:5d78c213f2c146e7887fbfe6d2dcc8d6.png

 而每一页有8个像素,即八位,而刚好一个字节的数据就是八位,8*8=64就是这么来的。我想这不是巧合,可能就是为了让我们可以用一个字节的数据表示某一列的八个像素点的亮灭。从下图可知,其低位是在最上面的,高位依次往下。

f43b122609884f16b7bdc6293b6c41c6.png

而我们点亮OLED相当于将这128*64个像素点点亮的过程,和点阵屏类似。

下面来介绍如何点亮OLED:

二、OLED屏幕的驱动

1.向屏幕写数据:OLED_WR_Byte

        IIC写时序图如下:

2e3694ed71304939b5053a6afae0f116.png

首先开始IIC通信(START),然后发送器件地址(DEVICE ADDRESS) :0X78;等待应答,然后发送命令(OLED命令寄存器地址:0x40;数据寄存器地址:0x00),等待应答,发送数据,等待应答,结束信号;        

//发送一个字节
//mode:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 mode)
{
	I2C_Start();
	Send_Byte(0x78);
	I2C_WaitAck();
	if(mode)
		Send_Byte(0x40);
	else
		Send_Byte(0x00);
	I2C_WaitAck();
	Send_Byte(dat);
	I2C_WaitAck();
	I2C_Stop();
}

2.OLED的初始化

初始化流程图:

2a13bfa109a5457082f80a286e6242c2.png

 

//OLED的初始化
void OLED_Init(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 //使能A端口时钟
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12;	 
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; 		 //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
 	GPIO_Init(GPIOA, &GPIO_InitStructure);	  //初始化PA0,1
 	GPIO_SetBits(GPIOA,GPIO_Pin_11|GPIO_Pin_12);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;	 
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mo
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值