stm32驱动液晶屏(stm32驱动液晶屏显示照片)
一,oled简介
OLED即有机发光二级管(Organic Light-Emitting Diode,OLED)。OLED 显示技术具 有自发光、广视角、几乎无穷高的对比度、较低耗电、极高反应速度、可用于挠曲性面板、 使用温度范围广、构造及制程较简单等优点,被认为是下一代的平面显示器新兴应用技术。
OLED 显示和传统的 LCD 显示不同,其可以自发光,所以不需要背光灯,这使得OLED显示屏相对于LCD显示屏尺寸更薄,同时显示效果更优。 LCD都需要背光,而OLED不需要,因为它是自发光的。这样同样的显示,OLED效果 要来得好一些。以目前的技术,OLED的尺寸还难以大型化,但是分辨率却可以做到很高。
二,SSD1306框图
图片来自于网络
相关引脚说明:
1,RES:复位引脚。
该引脚是复位信号输入。当引脚被拉低,芯片的初始化被执行。保持此引脚高(即连接到VDD)在正常运行。
2,CS:片选信号,响应时拉低。
3,D/C:命令数据控制引脚
这是数据/命令控制引脚。当它被拉高(即连接到VDD),数据D[7:0]被视为数据。当它被拉低时,D[7:0]处的数据将被传输到命令寄存器。
4,D[7:0]:数据引脚
这些是连接到微处理器的数据总线的8位双向数据总线。当选择串行接口方式,D0为串行时钟输入:SCLK;D1是序列数据输入:SDIN。
5,BS0,BS1,BS2:单片机总线接口引脚选择
此模块只支持四线 SPI、三线 SPI、IIC 接口和 6800、8080 并口方式,我们可以通过 BS0,BS1,BS2 三个管脚来配置我们所使用的通讯方式。
通讯方式配置
6,CL:外部时钟输入引脚。
当内部时钟是启用(CLS引脚为高),该引脚不使用,应该连接到VSS。当内部时钟被禁用(CLS引脚为低),这个引脚是外部时钟源输入管脚。
具体硬件连接(4线spi方式)如下:
三,屏幕驱动相关指令
个人采用4线spi方式驱动屏幕,4线串行接口由串行时钟SCLK、串行数据SDIN、D/C、cs组成。在4线SPI模式下,D0为SCLK, D1为SDIN。对于从D2到D7的未使用的数据引脚,R/ w# (wr#), E和D/ c#可以连接外部接地。
发送命令时需要控制D/C引脚为低电平,写入数据时为高电平。
基础命令:
设置页寻址模式的低列起始地址(00h~0Fh)
设置页面寻址模式的高列起始地址(10h~1Fh)
设置寻址模式:20h
寻址模式包括:页寻址(A[1:0]=10xb) 水平寻址(A[1:0]=00b) 垂直寻址(A[1:0]=01b)
设置列起始地址 (21h)
设置页起始地址(22h)
设置叶寻址的流程如下
1. 发送命令 20H
2. 发送命令 02H
3. 发送命令 B0–B7H 页地址
4. 发送命令 00H–0FH 列地址高位
5. 发送命令 10H–1FH 列地址低位
设置垂直/水平寻址:
1 发送命令 20H
2 发送命令 00/01 H
3. 发送命令 21H
4. 发送命令列起始地址 0-127
5. 发送命令列结束地址 0-127
6. 发送命令 22H
7. 发送命令页起始地址 0-7
8. 发送命令页结束地址 0-7
四,oled启动流程
官方给出的启动流程如下:
五,驱动屏幕代码(已删减)
//启动代码void Oled_Confing(void){ //Oled_SpiSendData是一个spi发送数据的函数。 Init_SPI();//初始化spi通讯,为传输数据准备 OLED_RES(1); //复位 Delay_ms(200); OLED_RES(0); Delay_ms(200); OLED_RES(1); Delay_ms(200); Oled_SpiSendData(0,0xAE); /*display off*/ Oled_SpiSendData(0,0x00); /*set lower column address*/ Oled_SpiSendData(0,0x10); /*set higher column address*/ Oled_SpiSendData(0,0x40); /*set display start line*/ Oled_SpiSendData(0,0xB0); /*set page address*/ Oled_SpiSendData(0,0x81); /*contract control*/ Oled_SpiSendData(0,0x66); /*128*/ Oled_SpiSendData(0,0xA1); /*set segment remap*/ Oled_SpiSendData(0,0xA6); /*normal / reverse*/ Oled_SpiSendData(0,0xA8); /*multiplex ratio*/ Oled_SpiSendData(0,0x3F); /*duty = 1/64*/ Oled_SpiSendData(0,0xC8); /*Com scan direction*/ Oled_SpiSendData(0,0xD3); /*set display offset*/ Oled_SpiSendData(0,0x00); Oled_SpiSendData(0,0xD5); /*set osc division*/ Oled_SpiSendData(0,0x80); Oled_SpiSendData(0,0xD9); /*set pre-charge period*/ Oled_SpiSendData(0,0x1f); Oled_SpiSendData(0,0xDA); /*set COM pins*/ Oled_SpiSendData(0,0x12); Oled_SpiSendData(0,0xdb); /*set vcomh*/ Oled_SpiSendData(0,0x30); Oled_SpiSendData(0,0x8d); /*set charge pump enable*/ Oled_SpiSendData(0,0x14); Oled_SpiSendData(0,0xAF); /*display ON*/ Oled_clear();}/*设置显示区域col列地址 0-127page页地址 0-63wide显示宽度 0-128heigth显示高度0-64*/void Oled_DisplayArear(u8 col,u8 page,u8 wide,u8 heigth){ Oled_SpiSendData(DC_CMD ,0x20);//发送指令确定寻址方式 Oled_SpiSendData(DC_CMD ,0x00);//垂直寻址 Oled_SpiSendData(DC_CMD ,0x21);//设置列地址 Oled_SpiSendData(DC_CMD ,col);//列起始地址 Oled_SpiSendData(DC_CMD ,col wide-1);//列结束地址 Oled_SpiSendData(DC_CMD ,0x22);//设置页地址 Oled_SpiSendData(DC_CMD ,page/8);//页起始地址 Oled_SpiSendData(DC_CMD ,(page heigth-1)/8);//页结束地址}