OLED显示屏详解(IIC协议0.96寸 STM32)
目录
一、介绍
二、模块原理
1.原理图
2.工作原理:SSD1306显存与命令
三、程序设计
main.c文件
oled.h文件
oled.c文件
四、实验效果
五、资料获取
项目分享
一、介绍
OLED是有机发光二极管,又称为有机电激光显示(Organic Electroluminescence Display, OLED)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术
以下是OLED显示屏的参数:
尺寸 | 0.96寸 |
模块电压 | DC:3~5V |
分辨率 | 128×64 |
驱动 | SSD1306 |
管脚数 | 4针 |
接口 | IIC |
工作温度 | -20℃~70℃ |
哔哩哔哩视频链接:
https://www.bilibili.com/video/BV17Z421K7vV/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2
(资料分享见文末)
二、模块原理
1.原理图
以下为OLED显示屏的引脚描述
引脚名称 | 描述 |
VCC | 供给电压3~5V |
SCL | I2C总线时钟线 |
SDA | I2C总线数据线 |
GND | 电源地 |
2.工作原理:SSD1306显存与命令
SSD1306的显存总共为128*64bit大小,其将这些显存分为了8页。每页包含了128个字节,总共8页,这样刚好是128*64的点阵大小。
- 命令 0X81 : 设置对比度 。 包含两个字节,第一个 0X81 为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。
- 命令0XAE/0XAF : 0XAE 为关闭显示命令; 0XAF 为开启显示命令。
- 命令0XB0~B7 : 用于设置页地址,其低三位的值对应着 GRAM 的页地址。
- 命令0X00~0X0F : 用于设置显示时的起始列地址低四位。
-
命令0X10~0X1F
:
用于设置显示时的起始列地址高四位。
三、程序设计
使用STM32F103C8T6将中英文字符、数字和图片显示在OLED显示屏上
main.c文件
#include "stm32f10x.h" #include "led.h" #include "usart.h" #include "delay.h" #include "dht11.h" #include "oled.h" #include "bmp.h" /*****************辰哥单片机设计****************** STM32 * 项目 : OLED显示屏实验 * 版本 : V1.0 * 日期 : 2024.8.7 * MCU : STM32F103C8T6 * 接口 : 参看oled.h * BILIBILI : 辰哥单片机设计 * CSDN : 辰哥单片机设计 * 作者 : 辰哥 **********************BEGIN***********************/ int main(void) { SystemInit();//配置系统时钟为72M delay_init(72); LED_Init(); LED_On(); USART1_Config();//串口初始化 OLED_Init(); printf("Start \n"); delay_ms(1000); //OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1,u8 mode) //x,y:起点坐标 num:汉字对应的序号 mode:0,反色显示;1,正常显示 OLED_ShowChinese(0,32,0,16,1); //你 OLED_ShowChinese(32,32,1,16,1);//好 OLED_ShowChinese(64,32,2,16,1);//世 OLED_ShowChinese(96,32,3,16,1);//界 //OLED_ShowString(u8 x,u8 y,u8 *chr,u8 size1,u8 mode); //x,y:起点坐标 size1:字体大小 *chr:字符串起始地址 mode:0,反色显示;1,正常显示 //OLED_ShowString(0,16,"HELLO WORLD!",16,1); //OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size1,u8 mode); //x,y :起点坐标 num :要显示的数字 len :数字的位数 size:字体大小 mode:0,反色显示;1,正常显示 //OLED_ShowNum(0,32,666,3,24,1); //OLED_Clear(); //OLED_ShowPicture(u8 x,u8 y,u8 sizex,u8 sizey,u8 BMP[],u8 mode) //x,y:起点坐标 sizex,sizey,图片长宽 BMP[]:要写入的图片数组 mode:0,反色显示;1,正常显示 // OLED_ShowPicture(0,0,128,64,BMP4,0); while (1) { LED_Toggle(); delay_ms(500); } }
oled.h文件
#ifndef __OLED_H #define __OLED_H #include "sys.h" #include "stdlib.h" /*****************辰哥单片机设计****************** STM32 * 文件 : OLED显示屏h文件 * 版本 : V1.0 * 日期 : 2024.8.7 * MCU : STM32F103C8T6 * 接口 : 见代码 * BILIBILI : 辰哥单片机设计 * CSDN : 辰哥单片机设计 * 作者 : 辰哥 **********************BEGIN***********************/ //----------------OLED端口定义----------------- /***************根据自己需求更改****************/ #define OLED_SCL_PROT GPIOB #define OLED_SCL_PIN GPIO_Pin_11 #define OLED_SCL_GPIO_CLK RCC_APB2Periph_GPIOB #define OLED_SDA_PROT GPIOB #define OLED_SDA_PIN GPIO_Pin_10 #define OLED_SDA_GPIO_CLK RCC_APB2Periph_GPIOB /*********************END**********************/ #define OLED_SCL_Clr() GPIO_ResetBits(OLED_SCL_PROT,OLED_SCL_PIN)//SCL #define OLED_SCL_Set() GPIO_SetBits(OLED_SCL_PROT,OLED_SCL_PIN) #define OLED_SDA_Clr() GPIO_ResetBits(OLED_SDA_PROT,OLED_SDA_PIN)//DIN #define OLED_SDA_Set() GPIO_SetBits(OLED_SDA_PROT,OLED_SDA_PIN) #define OLED_CMD 0 //写命令 #define OLED_DATA 1 //写数据 void OLED_ClearPoint(u8 x,u8 y); void OLED_ColorTurn(u8 i); void OLED_DisplayTurn(u8 i); void OLED_I2C_Start(void); void OLED_I2C_Stop(void); void OLED_I2C_WaitAck(void); void OLED_Send_Byte(u8 dat); void OLED_WR_Byte(u8 dat,u8 mode); void OLED_DisPlay_On(void); void OLED_DisPlay_Off(void); void OLED_Refresh(void); void OLED_Clear(void); void OLED_DrawPoint(u8 x,u8 y,u8 t); void OLED_DrawLine(u8 x1,u8 y1,u8 x2,u8 y2,u8 mode); void OLED_DrawCircle(u8 x,u8 y,u8 r); void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size1,u8 mode); void OLED_ShowChar6x8(u8 x,u8 y,u8 chr,u8 mode); void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 size1,u8 mode); void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size1,u8 mode); void OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1,u8 mode); void OLED_ScrollDisplay(u8 num,u8 space,u8 mode); void OLED_ShowPicture(u8 x,u8 y,u8 sizex,u8 sizey,u8 BMP[],u8 mode); void OLED_Init(void); #endif
oled.c文件
#include "oled.h" #include "stdlib.h" #include "oledfont.h" #include "delay.h" /*****************辰哥单片机设计****************** STM32 * 文件 : OLED显示屏c文件 * 版本 : V1.0 * 日期 : 2024.8.7 * MCU : STM32F103C8T6 * 接口 : 见代码 * BILIBILI : 辰哥单片机设计 * CSDN : 辰哥单片机设计 * 作者 : 辰哥 **********************BEGIN***********************/ u8 OLED_GRAM[144][8]; //反显函数 void OLED_ColorTurn(u8 i) { if(i==0) { OLED_WR_Byte(0xA6,OLED_CMD);//正常显示 } if(i==1) { OLED_WR_Byte(0xA7,OLED_CMD);//反色显示 } } //屏幕旋转180度 void OLED_DisplayTurn(u8 i) { if(i==0) { OLED_WR_Byte(0xC8,OLED_CMD);//正常显示 OLED_WR_Byte(0xA1,OLED_CMD); } if(i==1) { OLED_WR_Byte(0xC0,OLED_CMD);//反转显示 OLED_WR_Byte(0xA0,OLED_CMD); } } //延时 void IIC_delay(void) { u8 t=3; while(t--); } //起始信号 void OLED_I2C_Start(void) { OLED_SDA_Set(); OLED_SCL_Set(); IIC_delay(); OLED_SDA_Clr(); IIC_delay(); OLED_SCL_Clr(); IIC_delay(); } //结束信号 void OLED_I2C_Stop(void) { OLED_SDA_Clr(); OLED_SCL_Set(); IIC_delay(); OLED_SDA_Set(); } //等待信号响应 void OLED_I2C_WaitAck(void) //测数据信号的电平 { OLED_SDA_Set(); IIC_delay(); OLED_SCL_Set(); IIC_delay(); OLED_SCL_Clr(); IIC_delay(); } //写入一个字节 void OLED_Send_Byte(u8 dat) { u8 i; for(i=0;i
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。