零基础STM32单片机编程入门(十一) OLED显示屏实战含源码视频 您所在的位置:网站首页 串口屏显示视频信号 零基础STM32单片机编程入门(十一) OLED显示屏实战含源码视频

零基础STM32单片机编程入门(十一) OLED显示屏实战含源码视频

2024-07-11 07:58| 来源: 网络整理| 查看: 265

文章目录 一.概要二.0.96寸OLED屏介绍1.OLED屏外观图2.OLED屏特点3.OLED屏接口定义4.OLED屏原理图5.OLED屏像素分辨率 三.字库取模软件PCtoLCD2002介绍四.STM32单片机驱动OLED显示实验五.CubeMX工程源代码下载六.讲解视频链接地址七.小结

一.概要

OLED被称为有机激光二极管显示,OLED采用有机材料涂层和玻璃基板,当有电流通过时有机材料就会发光,所以OLED具有自发光特性,不需要背光源的特点。 显示的原理是将图像或文字分解为一组组小点,并通过控制每个点的亮度或颜色来显示信息。这些小点通常是很小的正方形,并且由有机发光二极管组成。 常用的点阵大小有12x12、14x14、16x16、8x16等,每个点用0或1表示,0代表没有点,1代表有点。这样,每个汉字就可以通过一个二进制数组来表示。

例如汉字16x16点阵如下图显示 在这里插入图片描述 其中"光"字C语言数组如下:

{0x40,0x40,0x42,0x46,0x5C,0xD8,0xC0,0x7F,0x7F,0xC0,0xD0,0x58,0x4E,0x46,0x40,0x40},//光字上半部分点阵数组{0x80,0x80,0xC0,0x60,0x38,0x1F,0x07,0x00,0x00,0x3F,0x7F,0x40,0x40,0x40,0x78,0x78},//光字下半部分点阵数组

二.0.96寸OLED屏介绍 1.OLED屏外观图

正面 在这里插入图片描述

背面

在这里插入图片描述

2.OLED屏特点

0.96寸OLED显示屏是一种小尺寸的有机发光二极管(OLED)显示屏,具有许多优点和特点。

尺寸:0.96寸指的是显示屏的对角线尺寸,通常为0.96英寸(约24.4毫米),适合小型设备和紧凑空间。 分辨率:通常具有128x64像素的分辨率,可以显示清晰的图像和文本。 技术:采用OLED技术,每个像素都是自发光的,不需要背光,因此具有更高的对比度和更广的视角。 高亮度:OLED显示屏具有较高的亮度,即使在室外或明亮的环境下也能清晰可见。 视角广:OLED显示屏具有广阔的视角,即使从不同的角度观看,图像仍然清晰可见。 薄型轻便:OLED显示屏采用薄型设计,重量轻,适合应用于便携式设备和可穿戴设备。 灵活性:某些OLED显示屏采用柔性基板制造,具有弯曲和弯折的能力,适用于柔性显示应用。 高对比度:OLED显示屏具有高对比度,黑色显示非常深黑,白色显示非常亮白,使图像更加清晰。

3.OLED屏接口定义

在这里插入图片描述 内部驱动IC为SSD1306,SSD1306作为从机地址为0x78。

4.OLED屏原理图

在这里插入图片描述

5.OLED屏像素分辨率

0.96寸OLED是128x64像素的分辨率,我们可以理解为:水平方向分布了128个像素点,垂直方向分布了64个像素点。而驱动芯片在点亮像素点的时候,是以8个像素点为单位的。我们在画点的时候坐标Y的取值为0-7,坐标X的取值为0-127。 在这里插入图片描述

三.字库取模软件PCtoLCD2002介绍

PCtoLCD2002 是专业的取字模软件,采用C语言和汇编语言两种格式,支持逐行、逐列、行列、列行四种取模方式,可以选择字体、大小、文字的长宽,自动生成你想要的字符。 以生成中文字符为例介绍: 1.双击PCtoLCD2002.exe打开软件 在这里插入图片描述 2.配置生成字模格式 在这里插入图片描述 3.保存参数配置 在这里插入图片描述

4.输入要显示的中文,生成显示数组如图

在这里插入图片描述 5.内容拷贝到程序驱动字库数组 在这里插入图片描述

四.STM32单片机驱动OLED显示实验

硬件准备:

STLINK接STM32F103C8T6小系统板,STLINK接电脑USB口。 用杜邦线连接: 板子G----液晶GND 板子3.3–液晶VCC 板子B10—液晶SCL 板子B11—液晶SDA

在这里插入图片描述

打开STM32CubeMX软件,新建工程 在这里插入图片描述 Part Number处输入STM32F103C8,再双击就创建新的工程 在这里插入图片描述 配置下载口引脚 在这里插入图片描述 配置外部晶振引脚 在这里插入图片描述

PB10,PB11配置成输出 在这里插入图片描述

配置系统主频 在这里插入图片描述 配置工程文件名,保存路径,KEIL5工程输出方式 在这里插入图片描述 生成工程 在这里插入图片描述 用Keil5打开工程 在这里插入图片描述 添加代码

在这里插入图片描述 添加OLED驱动文件 在这里插入图片描述

中文字库里放取模软件生成的数组 在这里插入图片描述 主要代码

int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config();//8M外部晶振,72M系统主频 /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init();//OLED液晶控制引脚初始化 /* USER CODE BEGIN 2 */ OLED_Init();//OLED初始化 OLED_Clear();//清屏 /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ OLED_Clear();//清屏 OLED_ShowCHinese(18,0,0);//光 OLED_ShowCHinese(36,0,1);//子 OLED_ShowCHinese(54,0,2);//物 OLED_ShowCHinese(72,0,3);//联 OLED_ShowCHinese(90,0,4);//网 OLED_ShowString(6,3,"0.96' OLED TEST");//显示字符串 OLED_ShowString(0,6,"ASCII:"); OLED_ShowString(63,6,"CODE:"); HAL_Delay(5000);//等待5000ms } /* USER CODE END 3 */ } //初始化SSD1306 void OLED_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;//配置管脚为输出 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10|GPIO_PIN_11, GPIO_PIN_SET); HAL_Delay(200);//等待200ms OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel OLED_WR_Byte(0x00,OLED_CMD);//---set low column address OLED_WR_Byte(0x10,OLED_CMD);//---set high column address OLED_WR_Byte(0x40,OLED_CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F) OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register OLED_WR_Byte(0xCF,OLED_CMD); // Set SEG Output Current Brightness OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常 OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常 OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64) OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F) OLED_WR_Byte(0x00,OLED_CMD);//-not offset OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency OLED_WR_Byte(0xf0,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration OLED_WR_Byte(0x12,OLED_CMD); OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02) OLED_WR_Byte(0x02,OLED_CMD);// OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5) OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7) OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/ OLED_Clear(); OLED_Set_Pos(0,0); } //在指定位置显示一个字符,包括部分字符 //x:0~127 //y:0~63 //mode:0,反白显示;1,正常显示 //size:选择字体 16/12 void OLED_ShowChar(u8 x,u8 y,u8 chr) { unsigned char c=0,i=0; c=chr-' ';//得到偏移后的值 if(x>Max_Column-1){x=0;y=y+2;} if(SIZE ==16) { OLED_Set_Pos(x,y); for(i=0;i unsigned char j=0; while (chr[j]!='\0') { OLED_ShowChar(x,y,chr[j]); x+=8; if(x>120){x=0;y+=2;} j++; } } //IIC驱动相关 #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET)//SCL IIC接口的时钟信号 #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET) #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_RESET)//SDA IIC接口的数据信号 #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_SET) void IIC_Start() { OLED_SCLK_Set() ; OLED_SDIN_Set(); OLED_SDIN_Clr(); OLED_SCLK_Clr(); } /********************************************** //IIC Stop **********************************************/ void IIC_Stop() { OLED_SCLK_Set() ; OLED_SDIN_Clr(); OLED_SDIN_Set(); } void IIC_Wait_Ack() { OLED_SCLK_Set() ; OLED_SCLK_Clr(); } /********************************************** // IIC Write byte **********************************************/ void Write_IIC_Byte(unsigned char IIC_Byte) { unsigned char i; unsigned char m,da; da=IIC_Byte; OLED_SCLK_Clr(); for(i=0;iOLED_SDIN_Set();} else OLED_SDIN_Clr(); da=da IIC_Start(); Write_IIC_Byte(0x78); //D/C#=0; R/W#=0 IIC_Wait_Ack(); Write_IIC_Byte(0x40); //write data IIC_Wait_Ack(); Write_IIC_Byte(IIC_Data); IIC_Wait_Ack(); IIC_Stop(); } 五.CubeMX工程源代码下载

链接:https://pan.baidu.com/s/1NOAypFIvaR1q41eQb25Lhg 提取码:z8un 如果链接失效,可以联系博主给最新链接 程序下载下来之后解压就行

六.讲解视频链接地址

OLED显示实验

七.小结

该OLED显示屏广泛应用于手持设备、智能手表、健康监测、智能家居等众多领域中,成为现代产品中不可或缺的核心部件之一,所以学会STM32驱动OLED显示,能适应很多产品的开发。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有