proteus如何添加stm32_STM32驱动0.96⼨OLED液晶屏⽬录
序⾔
OLED简介
模块介绍
引脚定义
SSD1306控制芯⽚驱动
时序图讲解
SSD1306常⽤命令
命令设置SSD1306
如何显⽰字符
测试结果
资料下载
序⾔
伪劣商品
液晶屏通常作为嵌⼊式设备的显⽰终端,⽤于显⽰⼀些关键信息,将信息直接显⽰在⼀块⼩的液晶屏幕上。
液晶屏除了可以作为显⽰终端外,还可以作为调试信息输出的⼀个终端。
在调试硬件程序的时候,通常会对程序进⾏调试,想输出⼀些状态或者信息来体现程序当前的运⾏状态,⼀般我们会选择串⼝打印输出内容,或者LED的不同闪烁频率代表不同状态,当然我们也可以使⽤⼀个液晶屏来显⽰不同内容,这种⽅式也是⼗分的⽅便快捷的。
中国移动网上营业厅福建OLED简介
OLED,即有机发光⼆极管(Organic Light-Emitting Diode),⼜称为有机电激光显⽰(Organic Electroluminesence Display,OELD)。OLED由于同时具备⾃发光,不需背光源、对⽐度⾼、厚度薄、视⾓⼴、反应速度快、可⽤于挠曲性⾯板、使⽤温度范围⼴、构造及制程较简单等优异之特性,被认为是下⼀代的平⾯显⽰器新兴应⽤技术。
LCD都需要背光,⽽OLED不需要,因为它是⾃发光的。这样同样的显⽰,OLED效果要来得好⼀些。OLED的尺⼨难以⼤型化,但是分辨率确可以做到很⾼。
陈紫函古装图片模块介绍
尺⼨:0.96⼨
控制芯⽚:SSD1306
管脚数量:7
引脚间距:2.54mm
分辨率:128*64,可以显⽰汉字、ASCII、图案,对⽐度⾼
可视⾓度:>160度
⽆需背光(OLED屏的特点)
供电:3V-5V
有的模块是不跟5V接⼝兼容的,使⽤前⼀定要确认好。
引脚定义
GND:电源地
VCC:2.2V~5.5V
D0:SCL,CLK时钟
D1:SDA,MOSI数据
RES:RST复位
D/C:数据/命令选择
CS:⽚选,接地
此模块可以采⽤SPI或IIC通信⽅式,最多只需要4个IO⼝既可驱动。
SPI电路连接:
GND---地
VCC---3.3V或5V
D0---接单⽚机IO,作为SPI总线的CLK时钟引脚,时钟
D1---接单⽚机IO,作为SPI总线的MOSI数据引脚,数据输⼊
RES---接单⽚机IO
D/C---接单⽚机IO,⾼电平为写数据,低电平为写命令
CS---⽚选,接地(可不连接单⽚机IO),选中SSD1306
IIC电路连接:
GND---地
VCC---3.3V或5V
D0---接单⽚机IO,作为IIC的SCL引脚
D1---接单⽚机IO,作为IIC的SDA引脚
教师节祝福语 简短20字CS---接地
SSD1306控制芯⽚驱动
时序图讲解
我们以STM32单⽚机为例,使⽤5个GPIO模拟SPI总线与SSD1306总线进⾏通讯。
因为STM32与OLED屏的通讯只是单向数据传输,即只存在STM32向OLED屏发送数据,不涉及到读取返回数据,所以我们要实现显⽰功能之前,需要根据SPI写操作时序图,先实现⼀个向SSD1306写⼊⼀个字节的函数实现。
SSD1306使⽤4Wire SPI写操作的时序图
封装⼀个向SSD1306写⼊⼀个字节的函数,
函数原型为:
void OLED_WR_Byte(uint8_t dat,uint8_t cmd);
其中:
dat为待写⼊的数据或者命令;
cmd为数据或命令标志,0表⽰命令;1表⽰数据。
由上⾯SPI操作的时序图可知,IO引脚的时序如下所⽰:
⾸选看发送的字节是命令还是数据,如果是命令,OLED_DC(D/C)引脚置0,即低电平;如果是数据,OLED_DC(D/C)引脚置1,即⾼电平。
if
⽚选OLED_CS(CS)引脚置0,即拉低(硬件电路中CS引脚也可以直接与GND相连,这样就不⽤操作CS引脚了)。
OLED_CS_Clr
1个字节的数据有8位,将8位数据由⾼到低的顺序发出,数据要在OLED_SCLK(D0)引脚的上升沿
之前设置好,所以要先将OLED_SCLK(D0)置低,然后将⼀位数据送⾄OLED_SDIN(D1)引脚,然后将OLED_SCLK(D0)置⾼,这样⼀位数据就发送出去了,如此循环8次,⼀个字节的数据就发送出去了。
for
8位数据发送完毕之后,将OLED_CS(CS)引脚拉⾼,即置1,恢复⾄初始状态。
OLED_CS_Set
演员范志博
代码完整实现
*代码完整实现
void
SSD1306常⽤命令
其他命令,可以详见SSD1306 datasheet的第28页。从这页开始,对SSD1306的指令有详细的介绍。(⼿册的下载链接,见⽂尾资料下载)
命令设置SSD1306
有了写字节的函数封装:
void OLED_WR_Byte(uint8_t dat,uint8_t cmd);
然后查询⼿册中的命令字,我们可以发送命令初始化SSD1306,⽐如:
关闭显⽰⾯板
OLED_WR_Byte
设置页地址模式
OLED_WR_Byte
SSD1306有3种内存寻址模式,分别是:
页寻址模式(page addressing mode), ⽔平寻址模式(horizontal addressing mode)和垂直寻址模式(vertical addressing mode),分别对应的命令字节为:20h、21h、22h,因为OLED模块复位之后默认是 page addressing mode,所以下⾯只讲页寻址模式;其他两种模式跟页寻址模式的差异就是地址指针⾃增⽅式不⼀样,详情可以参考⼀下SSD1306的数据⼿册。
如何显⽰字符
在初始化OLED之后,如何在屏幕上显⽰字符呢?
在这之前,先了解⼀下SSD1306内部的RAM;SSD1306内部有个SRAM称为GDDRAM(Graphic Display Data RAM),⼤⼩是128× 64 bits,被分为8个 PAGE,⽤于单⾊128×64点阵显⽰,当我们往这个RAM写⼊数据,就会显⽰特定内容,如图:五格剖象法
上⾯'COL'的含义是GDDRAM列(column)
在页寻址模式下,每当对RAM进⾏读写操作之后,列地址指针会⾃动+1,直到列地址指针指向列结束地址后,会重新指向列开始地址;⽽且在该模式下,⼀定要设置新的页⾯和列地址才能访问下⼀个页⾯的内容,所以设置显⽰字符之前⼀般都会调⽤下⾯⼏句语句来确定显⽰位置:
OLED_WR_Byte
封装设置显⽰位置的函数如下:
void
例如如果页地址设为B2h,低列地址为03h,⽽⾼列地址为00h,那么也就意味着开始列是PAGE2的SEG3,⽽RAM的获取指针定位到下图中。⽽输⼊的数据将会被写⼊列3的位置。
所以确定好了显⽰位置,直接输出字符对应的像素数据数组就好了。
测试结果
测试电路连接:
GND---地
VCC---3.3V
D0---接PB9,作为SPI总线的CLK时钟引脚,时钟
D1---接PB8,作为SPI总线的MOSI数据引脚,数据输⼊
RES---接PB7
D/C---接PB6,⾼电平为写数据,低电平为写命令
CS---⽚选,接PB5,接地选中SSD1306