零基础STM32单片机编程入门(十一) OLED显示屏实战含源码视频 |
您所在的位置:网站首页 › 串口屏显示视频信号 › 零基础STM32单片机编程入门(十一) OLED显示屏实战含源码视频 |
文章目录
一.概要二.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 办公设备维修网 版权所有 豫ICP备15022753号-3 |