基于stm32的oled显示

这篇具有很好参考价值的文章主要介绍了基于stm32的oled显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.显示原理

 2.接口配置

8080并行接口模式

spi四线

3.程序控制


1.显示原理

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

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

基于stm32的oled显示

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 里面;

基于stm32的oled显示

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

#if OLED_MODE==1		//使用8080并口模式		
	
	//GPIO初始化设置      
    GPIO_Initure.Pin=GPIO_PIN_4;         	//PA4
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;	//推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;        	//上拉
    GPIO_Initure.Speed=GPIO_SPEED_FAST;   	//快速
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);   	//初始化
	
    //PB6,7
    GPIO_Initure.Pin=GPIO_PIN_6|GPIO_PIN_7;	
	HAL_GPIO_Init(GPIOB,&GPIO_Initure);//初始化

    //PC6,7,8,9,11
    GPIO_Initure.Pin=GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_11;	
	HAL_GPIO_Init(GPIOC,&GPIO_Initure);//初始化	
  
    //PD6,7
	GPIO_Initure.Pin=GPIO_PIN_6|GPIO_PIN_7;	
	HAL_GPIO_Init(GPIOD,&GPIO_Initure);//初始化	
	
    //PE5,6
	GPIO_Initure.Pin=GPIO_PIN_5|GPIO_PIN_6;	
	HAL_GPIO_Init(GPIOE,&GPIO_Initure);//初始化	
	
	//PG15
	GPIO_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~9
	GPIOC->ODR|=dat<<6;			//D[3:0]-->PC[9:6]
    
    GPIOC->ODR&=~(0X1<<11);		//清空11
    GPIOC->ODR|=((data>>4)&0x01)<<11;
    
    GPIOB->ODR&=~(0X1<<6);		//清空6
    GPIOB->ODR|=((data>>5)&0x01)<<6;
    
    GPIOE->ODR&=~(0X3<<5);		//清空5,6
    GPIOE->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;         	//PB7
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;	//推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;        	//上拉
    GPIO_Initure.Speed=GPIO_SPEED_FAST;   	//高速
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);   	//初始化
	
    //PC6,7
    GPIO_Initure.Pin=GPIO_PIN_6|GPIO_PIN_7;	
	HAL_GPIO_Init(GPIOC,&GPIO_Initure);//初始化

    //PD6
    GPIO_Initure.Pin=GPIO_PIN_6;	
	HAL_GPIO_Init(GPIOD,&GPIO_Initure);//初始化	
	
	//PG15
    GPIO_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有下列指令:

基于stm32的oled显示

初始化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画面文章来源地址https://www.toymoban.com/news/detail-446157.html

到了这里,关于基于stm32的oled显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K_A12_033 基于STM32等单片机驱动TCS34725颜色传感 串口与OLED0.96双显示

    单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M TCS34725颜色传感 模块 STC89C52RC驱动TCS34725颜色传感模块串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M TCS34725颜色传感模块 STM32F103C8T6驱动TCS34725颜色传感模块串口与OLED0.96双显示 其他资料目录 直戳跳转 工作电压:

    2024年02月06日
    浏览(52)
  • K_A16_001 基于STM32等单片机驱动HX711称重模块 串口与OLED0.96双显示

    单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M HX711称重模块 STC89C52RC驱动HX711称重模块 串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M HX711称重模块 STM32F103C8T6驱动HX711称重模块参数 串口与OLED0.96双显示 其他资料目录 直戳跳转 HX711参数 1.两路可选择差分输入

    2023年04月27日
    浏览(68)
  • K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示

    注意:此处程序用的波特率都是9600 使用前请用上位机把模块波特率调到9600 上位机使用与下载 直戳跳转 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M AS608光学指纹模块 STC89C52RC驱动AS608光学指纹模块 串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M AS608光学指

    2024年02月06日
    浏览(50)
  • stm32+OLED显示数据

    理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能: 显示自己的学号和姓名; 显示AHT20的温度和湿度; 上下或左右的滑动显示长字符。 OLED(Organic Light Emitting Display,中文名有机发光显示器)是指有机半导体材料和发光材料在电场驱动下,通过载流子注

    2024年02月02日
    浏览(34)
  • STM32之OLED显示

    一、模块介绍 1、常见的显示设备 LED、数码管、点阵、LCD屏(1602/12864)、OLED屏(消费电子) 2、OLED屏的概述 OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。因为具备 轻薄、省电等 特性,因此从2003 年开始,这种显示

    2024年01月17日
    浏览(43)
  • K_A16_003 基于STM32等单片机采集薄膜压力传感器参数串口与OLED0.96双显示

    单片机型号 测试条件 模块名称 代码功能 STM32F103C8T6 晶振8M/系统时钟72M 薄膜压力传感器模块 STM32F103C8T6驱动薄膜压力传感器模块 串口与OLED0.96双显示 其他资料目录 直戳跳转 厚度 :0.4mm 样式 :薄片状,柔性 触发力 :20g,默认电阻值小于 200kΩ 时触发 压力感应范围 :20g~6kg

    2024年02月05日
    浏览(52)
  • K_A37_005 基于STM32等单片机驱动ADS1115 ADC模块 串口与OLED0.96双显示

    其他资料目录 直戳跳转 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M ADS1115 ADC模块 STC89C52RC驱动ADS1115 ADC模块 串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M ADS1115 ADC模块 STM32F103C8T6驱动ADS1115 ADC模块 串口与OLED0.96双显示 ADS1115 ADC模块 引脚说明 VIN 正极 5V供电

    2024年02月16日
    浏览(58)
  • K_A18_001 基于STM32等单片机采集MQ2传感参数串口与OLED0.96双显示

    单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M MQ2传感模块 STC89C52RC采集MQ2传感模块参数 串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M MQ2传感模块 STM32F103C8T6采集MQ2传感模块参数 串口与OLED0.96双显示 其他资料目录 直戳跳转 可以用于家庭和工厂的气体泄漏监

    2024年02月01日
    浏览(88)
  • K_A18_008 基于STM32等单片机驱动SGP30气体传感器串口与OLED0.96双显示

    其他资料目录 直戳跳转 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M SGP30气体传感器 模块 STC89C52RC驱动SGP30气体传感器模块串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M SGP30气体传感器模块 STM32F103C8T6驱动SGP30气体传感器模块串口与OLED0.96双显示 SGP30气体传

    2024年02月04日
    浏览(57)
  • STM32-OLED显示屏

    *本文采用的OLED显示屏为4针脚IIC显示屏,4针脚分别为GND,VCC,SCL,SDA OLED.C OLED_Font.h main.c

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包