STM32驱动OLED显示汉字,字符------IIC

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

目录

一、OLED简介

二、IIC简介

三、代码介绍

四、完整代码


一、OLED简介


OLED,即有机发光二极管( Organic Light Emitting Diode )。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。

LCD都需要背光,而OLED不需要,因为它是自发光的。这样同样的显示OLED效果要来得好一些。以目前的技术,OLED的尺寸还难以大型化,但是分辨率确可以做到很高。

二、IIC简介

IIC(Inter Integrated Circuit) 总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接
微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。
CPU 与被控 IC 之间、 IC IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。
I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答
信号。
开始信号: SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。
结束信号: SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,
表示已收到数据。 CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号, CPU
收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为
受控单元出现故障。
这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。 IIC 总线时序图如
所示:
STM32驱动OLED显示汉字,字符------IIC
目前大部分 MCU 都带有 IIC 总线接口, STM32 也不例外。但是这里我们不使用 STM32
的硬件 IIC 来读写 24C02 ,而是通过软件模拟。 STM32 的硬件 IIC 非常复杂,更重要的是不稳
定,故不推荐使用。所以我们这里就通过模拟来实现了。有兴趣的读者可以研究一下
STM32 的硬件 IIC

2.1 IIC接口模块

如图所示:

STM32驱动OLED显示汉字,字符------IIC

 模块接口定义:

1.GND——电源地

2.VCC——电源正(3.3v-5v)

3.SCL——IIC时钟线

4.SDA——IIC数据线

分辨率:128*64     

 显示区域:21.744*10.864(mm)

接口类型:IIC接口 

管脚数量:4

工作电压:3.5v

视角方向:全方向

控制芯片:SSD1306

工作温度:-40~70

三、代码介绍

oled.c

模拟IIC三种类型信号:开始信号,结束信号,等待应答信号。
根据时序表可以分别写出三种信号的表达方式。
//开始信号
void I2C_Start(void)
{
	OLED_SDIN_Set();
	OLED_SCLK_Set();
	OLED_SDIN_Clr();
	OLED_SCLK_Clr();
}

//结束信号
void I2C_Stop(void)
{
	OLED_SCLK_Set();
	OLED_SDIN_Clr();
	OLED_SDIN_Set();
}

//应答信号
void I2C_WaitAck(void) //²âÊý¾ÝÐźŵĵçƽ
{
	OLED_SCLK_Set();
	OLED_SCLK_Clr();
}

IIC写入一个字节

//写入一个字节
void Send_Byte(u8 dat)
{
	u8 i;
	for(i=0;i<8;i++)
	{
		OLED_SCLK_Clr();//将时钟信号设置为低电平
		if(dat&0x80)//将数据从高8位一次写入
		{
			OLED_SDIN_Set();
    }
		else
		{
			OLED_SDIN_Clr();
    }
		OLED_SCLK_Set();//将时钟信号设置为高电平
		OLED_SCLK_Clr();/将时钟信号设置为低电平
		dat<<=1;
  }
}

向SSD1306发送一个字节

//mode:数据/命令 0:数据;1:命令;
void OLED_WR_Byte(u8 dat,u8 mode)
{
	I2C_Start();
	Send_Byte(0x78);
	I2C_WaitAck();
	if(mode){Send_Byte(0x40);}
  else{Send_Byte(0x00);}
	I2C_WaitAck();
	Send_Byte(dat);
	I2C_WaitAck();
	I2C_Stop();
}

OLED清屏函数

void OLED_Clear(void)
{
	u8 i,n;
	for(i=0;i<8;i++)
	{
	   for(n=0;n<128;n++)
			{
			 OLED_GRAM[n][i]=0;//清楚所有数据
			}
  }
	OLED_Refresh();//更新显示
}

显示一个字符串

//显示字符串
//x,y:起点坐标
//size1:字体大小
//*chr:字符串起始地址
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 size1)
{
	while((*chr>=' ')&&(*chr<='~'))//判断是不是非法字符  
	{
		OLED_ShowChar(x,y,*chr,size1);
		x+=size1/2;
		if(x>128-size1)  //换行
		{
			x=0;
			y+=2;
    }
		chr++;
  }
}

STM32驱动OLED显示汉字,字符------IIC

显示汉字,字体大小可以调12,16,32,64

//显示汉字
//x,y:起点坐标
//num:汉字对应的序号
//取模方式,列行式
void OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1)
{
	u8 i,m,n=0,temp,chr1;
	u8 x0=x,y0=y;
	u8 size3=size1/8;
	while(size3--)
	{
		chr1=num*size1/8+n;
		n++;
			for(i=0;i<size1;i++)
			{
				if(size1==16)
						{temp=Hzk1[chr1][i];}//调用16*16字体
				else if(size1==24)
						{temp=Hzk2[chr1][i];}//调用24*24字体
				else if(size1==32)       
						{temp=Hzk3[chr1][i];}//调用32*32字体
				else if(size1==64)
						{temp=Hzk4[chr1][i];}//调用64*64字体
				else return;
							
						for(m=0;m<8;m++)
							{
								if(temp&0x01)OLED_DrawPoint(x,y);
								else OLED_ClearPoint(x,y);
								temp>>=1;
								y++;
							}
							x++;
							if((x-x0)==size1)
							{x=x0;y0=y0+8;}
							y=y0;
			 }
	}
}

显示一张下图片

//x0,y0起点坐标
//x1,y1终点坐标
//BMP[]要写入的图片数组
void OLED_ShowPicture(u8 x0,u8 y0,u8 x1,u8 y1,u8 BMP[])
{
	u32 j=0;
	u8 x=0,y=0;
	if(y%8==0)y=0;
	else y+=1;
	for(y=y0;y<y1;y++)
	 {
		 OLED_WR_BP(x0,y);
		 for(x=x0;x<x1;x++)
		 {
			 OLED_WR_Byte(BMP[j],OLED_DATA);
			 j++;
     }
	 }
}

显示结果

STM32驱动OLED显示汉字,字符------IIC

 主函数,同时显示汉字跟字符

#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "bmp.h"
#include "led.h"
int main(void)
{
	u8 t;
	delay_init();
	OLED_Init();	
	OLED_ColorTurn(0);//0正常显示,1反色显示
    OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
	OLED_Refresh();	//更新显示到oled
	t=' ';
	while(1)
	{

	  OLED_ShowChinese(64,0,0,64); //64*64 中
	  OLED_Refresh();
	  delay_ms(500);
      OLED_Clear();
	  OLED_ShowString(0,0,"ABC",12);//6*12 
	  OLED_ShowString(0,12,"ABC",16);//8*16
	  OLED_ShowString(0,28,"ABC",24);//12*24 
	  OLED_Refresh();
	  delay_ms(500);
	}
}

STM32驱动OLED显示汉字,字符------IIC

  取模方式:

STM32驱动OLED显示汉字,字符------IIC

四、完整代码

制作不易,需要完整的工程文件,点赞收藏,评论区留邮箱

STM32基于IIC的OLED显示程序资源-CSDN文库文章来源地址https://www.toymoban.com/news/detail-410060.html

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

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

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

相关文章

  • 【正点原子STM32】OLED实验(OLED显示屏、ATK_OLED模块,OLED驱动原理、SSD1306工作时序(8080时序),OLED驱动芯片,字符显示原理、字模生成软件,OLED基本驱动步骤)

    一、OLED显示屏介绍 1.1、ATK_OLED模块介绍 1.2、ATK_OLED模块引脚说明(8080并口模式) 1.3、OLED模块硬件连接 二、OLED驱动原理 2.1、SSD1306工作时序(8080时序) 2.2、SSD1306工作时序(8080时序)–写时序 三、OLED驱动芯片简介 3.1、什么是GRAM? 3.2、什么是页地址模式? 3.3、解决显示覆盖问题

    2024年03月13日
    浏览(47)
  • stm32的IIC驱动0.96OLED

    IIC原理介绍: IIC是一个总线的结构但不支持总线协议 本文采用的是4针的0.96寸OLED显示进行讲解,采用的是SPI协议,速度会比采用I2C协议的更快,但这两者的显示驱动都一样,本质上没有太大差别。屏幕整体分辨率为128*64,有黄蓝、白、蓝三种颜色可选,驱动芯片为SSD1306 1)

    2024年01月24日
    浏览(44)
  • STM32(HAL库)软件IIC驱动OLED

    目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 软件IIC引脚配置 2.3 项目生成  3、KEIL端程序整合 3.1 OLED驱动添加 3.3 主函数代 3.4 效果展示 本文通过STM32F103C8T6单片机(HAL库)通过软件IIC方式对OLED进行驱动。 2.1.1 SYS配置  2.1.2 RCC配置 首先在建立Ha

    2024年02月14日
    浏览(49)
  • stm32之27.iic协议oled显示

    屏幕如果无法点亮,需要用GPIO_OType_PP推挽输出,加并上拉电阻 1.显示字符串代码 2.显示图片代码(+unsigned+强制转换(char*)) 汉字显示

    2024年02月10日
    浏览(40)
  • STM32 软件IIC 控制OLED 显示屏

    需要看原理图了

    2024年02月09日
    浏览(48)
  • STM32 OLED显示汉字及屏幕滚动(I2C协议)

    理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能: 显示自己的学号和姓名; 显示AHT20的温度和湿度; 上下或左右的滑动显示长字符。 STM32F103C8T6最小板 AHT20温湿度传感器 ST-LINK 仿真器 4针脚使用I2C通信协议的OLED屏 面包板 杜邦线 KEIL 5 字模软件 可以看

    2024年02月03日
    浏览(73)
  • STM32单片机初学5-IIC通信驱动OLED屏幕

    在我上篇文章(STM32-软件模拟IIC通信)讲解了软件模拟IIC通信。这篇文章详将细讲解利用软件模拟IIC来控制0.96寸的OLED屏幕(如下图),使其显示字符串。本文将不再对IIC通信原理做详细讲解,所以对IIC通信原理不熟悉的话可以参考我上篇文章(点击上面的链接直接跳转)。

    2023年04月10日
    浏览(51)
  • 【STM32+HAL库】---- 硬件IIC驱动0.96OLED

    代码借鉴学习于以下文章: STM32 使用硬件IIC驱动0.96寸4针IOLED显示器(HAL库) 略... 点击查看代码 首先在 main.c 中引入头文件 随即根据要求在 main函数 中添加对应功能函数即可 【 注意 】使用时应将编译器编码选项选择为 GBK系列 ,否则编译报错,尤其注意通过keil修改后,再

    2024年02月19日
    浏览(37)
  • STM32使用IIC协议驱动0.96寸OLED屏

    IIC是常用的协议之一,它通过不同的地址来区分设备,并且端口需要是开漏模式,并且需要接上拉电阻  要使用IIC驱动OLED,首先要配置IIC 然后编写写入函数 ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT) 为判断事件的函数 有以下多种事件 OLED初始化 上图分别为 (起始位

    2024年02月03日
    浏览(36)
  • STM32+7针脚0.96OLED屏显示数字汉字符号英文(入门级)

    本文即做单纯的简单使用介绍说明,基于stm32t103函数库,采用GPIO口模拟的通信协议方式。 在OLED屏上显示字符以及汉字。 源码获取:链接:https://pan.baidu.com/s/1D6lk-fRq64gJILgeDBd2rQ?pwd=qng5  提取码:qng5 目录 一、OLED屏介绍 二、硬件接线说明 三、软件代码介绍 1、驱动代码 2、OL

    2024年04月14日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包