基于stm32的oled显示

news/2024/11/24 1:35:32/

目录

1.显示原理

 2.接口配置

8080并行接口模式

spi四线

3.程序控制


1.显示原理

基于stm32的oled显示(以ALINETEK0.96寸OLED模块为例)

ALINETEK0.96寸OLED模块由SSD1306驱动芯片控制:

SSD1306的显存总共为128*64bit大小,分为八页,每页为128个字节,共计128*68位,以此对应屏幕的168*64像素,将显存的各位置0或置1即可控制像素点的亮灭。

使用时在stm32内建立一个缓存,大小为128*8字节,在每次修改时先修改stm32的缓存,在修改完成后,一次性地将stm32上的缓存写入OLED的GRAM来更新显示

 2.接口配置

单片机与SSD1306的通信可以采用8080并口、6800并口、SPI、IIC四种方式,这里介绍8080与SPI两种

8080并行接口模式

8080 并行接口被广泛应用于各类液晶显示器, ALIENTEK OLED 模块也提供了这种接口,使得 MCU 可以快速的访问 OLED。
8080 接口方式需要如下一些信号线:
CS: OLED 片选信号。
WR:向 OLED 写入数据。
RD:从 OLED 读取数据。
D[7: 0]: 8 位双向数据线。
RST(RES):硬复位 OLED。
DC:命令/数据标志(0,读写命令; 1,读写数据)。

读数据:在 RD 的上升沿, 使数据锁存到数据线(D[7: 0])上;
写数据:在 WR 的上升沿,使数据写入到 SSD1306 里面;

在正点原子例程中对8080接口的初始化如下

#if OLED_MODE==1		//使用8080并口模式		//GPIO初始化设置      GPIO_Initure.Pin=GPIO_PIN_4;         	//PA4GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;	//推挽输出GPIO_Initure.Pull=GPIO_PULLUP;        	//上拉GPIO_Initure.Speed=GPIO_SPEED_FAST;   	//快速HAL_GPIO_Init(GPIOA,&GPIO_Initure);   	//初始化//PB6,7GPIO_Initure.Pin=GPIO_PIN_6|GPIO_PIN_7;	HAL_GPIO_Init(GPIOB,&GPIO_Initure);//初始化//PC6,7,8,9,11GPIO_Initure.Pin=GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_11;	HAL_GPIO_Init(GPIOC,&GPIO_Initure);//初始化	//PD6,7GPIO_Initure.Pin=GPIO_PIN_6|GPIO_PIN_7;	HAL_GPIO_Init(GPIOD,&GPIO_Initure);//初始化	//PE5,6GPIO_Initure.Pin=GPIO_PIN_5|GPIO_PIN_6;	HAL_GPIO_Init(GPIOE,&GPIO_Initure);//初始化	//PG15GPIO_Initure.Pin=GPIO_PIN_15;	HAL_GPIO_Init(GPIOG,&GPIO_Initure);//初始化	OLED_WR=1;OLED_RD=1; 
#else					//使用4线SPI 串口模式

8080写字节:

#if OLED_MODE==1	//8080并口
//通过拼凑的方法向OLED输出一个8位数据
//data:要输出的数据
void OLED_Data_Out(u8 data)
{u16 dat=data&0X0F;GPIOC->ODR&=~(0XF<<6);		//清空6~9GPIOC->ODR|=dat<<6;			//D[3:0]-->PC[9:6]GPIOC->ODR&=~(0X1<<11);		//清空11GPIOC->ODR|=((data>>4)&0x01)<<11;GPIOB->ODR&=~(0X1<<6);		//清空6GPIOB->ODR|=((data>>5)&0x01)<<6;GPIOE->ODR&=~(0X3<<5);		//清空5,6GPIOE->ODR|=((data>>6)&0x01)<<5;GPIOE->ODR|=((data>>7)&0x01)<<6;
} 
//向SSD1306写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{OLED_Data_Out(dat);	OLED_RS=cmd;OLED_CS=0;	OLED_WR=0;	  OLED_WR=1;   OLED_CS=1;   OLED_RS=1;   
} 	   

spi四线

SPI介绍:STM32 SPI介绍及CubeMX配置

在正点原子例程中对SPI接口的初始化如下

#else					//使用4线SPI 串口模式//GPIO初始化设置      GPIO_Initure.Pin=GPIO_PIN_7;         	//PB7GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;	//推挽输出GPIO_Initure.Pull=GPIO_PULLUP;        	//上拉GPIO_Initure.Speed=GPIO_SPEED_FAST;   	//高速HAL_GPIO_Init(GPIOB,&GPIO_Initure);   	//初始化//PC6,7GPIO_Initure.Pin=GPIO_PIN_6|GPIO_PIN_7;	HAL_GPIO_Init(GPIOC,&GPIO_Initure);//初始化//PD6GPIO_Initure.Pin=GPIO_PIN_6;	HAL_GPIO_Init(GPIOD,&GPIO_Initure);//初始化	//PG15GPIO_Initure.Pin=GPIO_PIN_15;	HAL_GPIO_Init(GPIOG,&GPIO_Initure);//初始化OLED_SDIN=1;OLED_SCLK=1;
#endif

SPI写字节:

//向SSD1306写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{	u8 i;			  OLED_RS=cmd; //写命令 OLED_CS=0;		  for(i=0;i<8;i++){			  OLED_SCLK=0;if(dat&0x80)OLED_SDIN=1;else OLED_SDIN=0;OLED_SCLK=1;dat<<=1;   }				 OLED_CS=1;		  OLED_RS=1;   	  
} 

3.程序控制

通过指令可以修改OLED对比度、显示开关及修改缓存

SSD1306有下列指令:

初始化OLED过程为 复位SSD1306→驱动IC初始化代码→开启显示→请0显存→开始显示

初始化完成后,修改单片机内缓存数据并上传至SSD1306即可更新更新OLED显示画面

例程中定义了以下函数可供使用:

//OLED控制用函数
void OLED_WR_Byte(u8 dat,u8 cmd);	    
void OLED_Display_On(void);
void OLED_Display_Off(void);
void OLED_Refresh_Gram(void);		   void OLED_Init(void);
void OLED_Clear(void);
void OLED_DrawPoint(u8 x,u8 y,u8 t);
void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
void OLED_ShowString(u8 x,u8 y,const u8 *p,u8 size);

用以上函数修改缓存后调用OLED_Refresh_Gram()函数就可以更新OLED画面


http://www.ppmy.cn/news/284471.html

相关文章

显卡及显示芯片厂商名称

显卡及显示芯片厂商名称 厂商网址3DFX http://www.3dfx.com nVidia http://www.nvidia.com S3http://www.s3.com 3D labshttp://www.3dlabs.com Trident http://www.trid.com http://www.tridentmicro.com Tseng http://www.tseng.com     ASUS&#xff08;华硕&…

OLED屏显传感器数据显示到OLED上

前言 目录 一、SPI介绍Ⅰ.什么是SPIⅡ.SPI接口介绍Ⅲ.数据传输Ⅳ.工作模式Ⅴ.优缺点 二、OLED屏显字模提取Ⅰ.OLED定义Ⅱ.OLED模块介绍Ⅲ .获取资料途径 三、字模提取Ⅰ.字模定义Ⅱ.取字模原理Ⅲ.取得汉字的区位的方法Ⅳ.Pctolcd介绍 四、小试牛刀Ⅰ.实验内容Ⅱ .实验分析1.提…

使用STM32系列芯片控制OLED屏显示数字+文字等信息

本次实验使用的是stm32f103芯片控制0.96寸OLED屏幕显示姓名学号温度湿度等信息 目录 1.了解OLED显示屏 2.开始配置工程项目 2.1用OLED屏显示自己的姓名学号 2.2用OLED屏滚动显示信息 1.了解OLED显示屏 有关OLED屏幕的信息可以参考一下网站&#xff0c;本次实验使用的程序是…

TFT-LCD屏幕读取Flash芯片图片资源并显示

TFT-LCD屏幕读取Flash芯片图片资源并显示 在前面用TFT-LCD显示图片的实验中&#xff0c;由于图片资源过大&#xff0c;240 * 320 的图片大小为150K&#xff0c;而STM32F103ZET6的内部Flash才512K&#xff0c;最多能放三张图片&#xff0c;所以这次将图片放到外部Flash中&#…

显示芯片

显示芯片是指主板所板载的显示芯片&#xff0c;有显示芯片的主板不需要独立显卡就能实现普通的显示功能&#xff0c;以满足一般的家庭娱乐和商业应用&#xff0c;节省用户购买显卡的开支。板载显示芯片可以分为两种类型&#xff1a;整合到北桥芯片内部的显示芯片以及板载的独立…

Type-c显示屏芯片方案(禾川兴)

随着USB TYPE-C接口的普及&#xff0c;越来越多的手机和笔记本电脑都支持通过C接口输出视频。这个小巧而精密的接口&#xff0c;大有把传统的HDMI和DisplayPort接口取而代之的架势。特别是usb4的推出&#xff0c;更是为USB TYPE-C接口一统有线接口形态奠定了基础。在这样的背景…

LED显示行业之驱动芯片

LED显示驱动芯片分为3种。1&#xff0c;常规芯片。2&#xff0c;双锁存芯片。3&#xff0c;PWM芯片。 1&#xff0c;常规芯片 这个是常规芯片的内部结构图。 毛华望 15889765314 这个是常规芯片的逻辑波形图。 LED显示驱动芯片的接口差别不大。 都是由 SDI &#xff0c;CLK&…

package.json与package-lock.json区别需不需要被.gitignore文件忽略

前言 先要搞清楚package.json与package-lock.json文件分别是什么作用 .gitignore文件是干什么的-主页文章有 介绍 package.json 1.项目名称版本号&#xff0c;描述&#xff0c;以及运行命令和一些配置的node环境命令 2.记录那些包会在开发环境中用到&#xff0c;哪些包会…