zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

K_A00_003 基于单片机驱动OLED 1.3 字符/切换图片/滚动显示

驱动字符单片机 基于 显示 图片 切换 滚动
2023-09-11 14:21:44 时间

目录

一、程序功能说明

二、基本参数

        1.常规参数

        2.引脚说明

三、通信协议说明

        1.IIC协议

                1.1、  起始信号

                1.2、停止信号

                1.3、等待应答

                1.4、发送数据

        2、SPI协议

四、部分代码说明

        1、接线说明

                1.1、STC89C52RC+4针OLED(IIC)

                1.2、STC89C52RC+7针OLED(SPI)

                1.3、STM32F103C8T6+4针OLED(IIC)

                1.4、STM32F103C8T6+7针OLED(SPI)

        2、背光亮度调

五、相关资料链接

六、字符图片提取格式

七、视频效果展示与程序资料获取 ​​​​​​

八、项目所有材料清单

九、注意事项

十、接线表格


一、程序功能说明

单片机型号

测试条件

模块名称

代码功能

STC89C52RC

1.晶振11.0592M

OLED 1.3(4针 IIC)

  1. 1.3OLED显示分秒时钟
  2. 1.3OLED显示文字
  3. 1.3OLED切换显示图片
  4. 1.3OLED文字滚动显示

OLED 1.3(7针 SPI)

STM32F103C8T6

  1. 晶振8M
  2. 系统时钟72M

OLED 1.3(4针 IIC)

OLED 1.3(7针 SPI)

二、基本参数

        1.常规参数

          4针IIC 与7针SPI/IIC  OLED 1.3 OLED基本参数类似,只是通信协议不一样,一般使用主要关注驱动芯片,分辨率,通信接口,供电电压。

8eb0c6f5d87c4892baa1989b7a0e2a56.jpeg

        2.引脚说明

4针IIC引脚

引脚说明

GND

GND引脚接电源地,如果外接电源,一般必须共地

VCC

VCC电源引脚,可接3.3V或5V,推荐3.3V

SCL

IIC时钟线

SDA

IIC数据线

7针SPI引脚

引脚说明

GND

GND引脚接电源地,如果外接电源,一般必须共地

VCC

VCC电源引脚,可接3.3V或5V,推荐3.3V

D0

SPI时钟线,IIC接口时钟线

D1

SPI数据线,IIC接口数据线

RES

OLED复位,上电需要复位一次

DC

SPI数据/命令引脚,IIC地址选择线,上拉0X7A下拉0X78

CS

SPI片选信号,低电平有效

三、通信协议说明

        1.IIC协议

                1.1、  起始信号

                        时序图:

20a603bbd6684da2974dc0d2637204b9.png

                        代码:

//IIC Start
void IIC_Start()
{
   OLED_SCL_High;		
   OLED_SDA_High;
	 IIC_Delay();
   OLED_SDA_Low;
	 IIC_Delay();
   OLED_SCL_Low;
}

                1.2、停止信号

                        时序图:

694c8505d58e4c908a602160b40b94aa.png

                代码:

//IIC Stop
void IIC_Stop()
{
   OLED_SCL_Low;
   OLED_SDA_Low;
	 IIC_Delay();
	 OLED_SCL_High;		
   OLED_SDA_High;
}

                1.3、等待应答

时序图:

        

0bb7145e7a2e4837b329e71b9dae6716.png

                        代码:

//等待信号响应,对应答信号进行判断并添加返回值
uint8_t I2C_WaitAck(void) //测数据信号的电平
{
	uint8_t Ack_Sta;
	OLED_SDA_High;
	IIC_Delay();
	OLED_SCL_High;
	IIC_Delay();
	if(OLED_SDA)
	{
		Ack_Sta = 1;
	}
	else
	{
		Ack_Sta = 0;
	}
	OLED_SCL_Low;
	IIC_Delay();
	return Ack_Sta;
}

                1.4、发送数据

                        时序图:

ba89daac3470423e82952fcd68417c7c.png

735db190bee34a43a343855c9ab43a2b.png

                         代码:

// 通过I2C总线写一个字节
uint8_t Write_IIC_Byte(uint8_t IIC_Byte)
{
	uint8_t i;
	for(i=0;i<8;i++)
	{
		if(IIC_Byte & 0x80)
		{
			OLED_SDA_High;
		}
		else
		{
			OLED_SDA_Low;
		}
		IIC_Delay();
		OLED_SCL_High;
		IIC_Delay();
		OLED_SCL_Low;
		IIC_Byte<<=1;
	}
  return I2C_WaitAck();
}

        2、SPI协议

SPI写数据 D/C选择写数据或者写命令 高电平写数据  低电平写命令,CS位片选,低电平有效,详细可参考手册

                时序:

340b5119649e4399bb756228b51238ec.png

                 代码:

//OLED写数据
void WriteDat(uint8_t SPI_Data)
{
	uint8_t i;
	OLED_DC_High;
	OLED_CS_Low;
	for(i=0;i<8;i++)
	{			  
		OLED_SCL_Low;
		if(SPI_Data&0x80)
		{
		 OLED_SDA_High;
		}
		else
		{
		 OLED_SDA_Low;
		}
	  OLED_SCL_High;
		SPI_Data<<=1;   
	}				 		  
	OLED_CS_High;
	OLED_DC_High;  
}
//OLED写命令
void WriteCmd(uint8_t SPI_Command)
{
	uint8_t i;
	
	OLED_DC_Low;	
	OLED_CS_Low;
	for(i=0;i<8;i++)
	{			  
		OLED_SCL_Low;
		if(SPI_Command&0x80)
		{
		 OLED_SDA_High;
		}
		else
		{
		 OLED_SDA_Low;
		}
	  OLED_SCL_High;
		SPI_Command<<=1;   
	}				 		  
	OLED_CS_High;
	OLED_DC_High;  
}

四、部分代码说明

        1、接线说明

        需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改

                1.1、STC89C52RC+4针OLED(IIC)

sbit OLED_SCL = P1^0; //串行时钟
sbit OLED_SDA = P1^1; //串行数据
sbit OLED_RES = P1^2; //SPI改IIC需要接,正常使用可不接

                1.2、STC89C52RC+7针OLED(SPI)

//SPI  IO口定义

sbit OLED_SCL = P1^4;//DO

sbit OLED_SDA = P1^3;//DI

sbit OLED_RES = P1^2;//RES

sbit OLED_DC  = P1^1;//DC

sbit OLED_CS  = P1^0; //CS

                1.3、STM32F103C8T6+4针OLED(IIC)

//IIC 对应IO口高低电平 宏定义

//RES引脚

#define       OLED_RES_CLK                 RCC_APB2Periph_GPIOB   

#define       OLED_RES_PORT                GPIOB   

#define       OLED_RES_PIN                 GPIO_Pin_5

//SCL//DO

#define       OLED_SCL_CLK                 RCC_APB2Periph_GPIOB    

#define       OLED_SCL_PORT                GPIOB

#define       OLED_SCL_PIN                 GPIO_Pin_6      

//SDA//DI

#define       OLED_SDA_CLK                 RCC_APB2Periph_GPIOB    

#define       OLED_SDA_PORT                GPIOB

#define       OLED_SDA_PIN                 GPIO_Pin_7

                1.4、STM32F103C8T6+7针OLED(SPI)

//CS(NSS)引脚

#define       OLED_CS_APBxClock_CMD       RCC_APB2PeriphClockCmd

#define       OLED_CS_CLK                  RCC_APB2Periph_GPIOA   

#define       OLED_CS_PORT                 GPIOA

#define       OLED_CS_PIN                  GPIO_Pin_3

//DC引脚

#define       OLED_DC_APBxClock_CMD        RCC_APB2PeriphClockCmd

#define       OLED_DC_CLK                  RCC_APB2Periph_GPIOA   

#define       OLED_DC_PORT                 GPIOA

#define       OLED_DC_PIN                  GPIO_Pin_4

//RES引脚

#define       OLED_RES_APBxClock_CMD       RCC_APB2PeriphClockCmd

#define       OLED_RES_CLK                 RCC_APB2Periph_GPIOA   

#define       OLED_RES_PORT                GPIOA   

#define       OLED_RES_PIN                 GPIO_Pin_5

//SDA//DI

#define       OLED_SDA_APBxClock_CMD     RCC_APB2PeriphClockCmd

#define       OLED_SDA_CLK                RCC_APB2Periph_GPIOA    

#define       OLED_SDA_PORT               GPIOA

#define       OLED_SDA_PIN                GPIO_Pin_6

//SCL//DO

#define       OLED_SCL_APBxClock_CMD     RCC_APB2PeriphClockCmd

#define       OLED_SCL_CLK                RCC_APB2Periph_GPIOA    

#define       OLED_SCL_PORT               GPIOA

#define       OLED_SCL_PIN                GPIO_Pin_7                        

        2、背光亮度调

//背光亮度调节宏定义,0x00~0xff

#define Brightness 0xCF 

WriteCmd(0x81); //--set contrast control register//设置对比度,也就是亮度

WriteCmd(Brightness); //亮度调节 0x00~0xff

五、相关资料链接

  1. STC89C52RC程序下载   直戳跳转
  2. STM32F103C8T6程序下载
    1. 串口下载                直戳跳转
    2. ST-LINK下载          直戳跳转
    3. J-LINK下载             直戳跳转
    4. DAP-LINK下载       直戳跳转
  3. 字符软件使用                  直戳跳转

六、字符图片提取格式

文字格式:共阴——列行式——逆向——C51——行前后缀括号去掉

090fe8f4dde148689e7fbf544166b014.png

图像格式:共阴——列行式——逆向——C51——行前后缀括号去掉 

554b8ba0350246e29b5a5cdafe78159b.png

七、视频效果展示与程序资料获取 ​​​​​​

资料链接    直戳跳转

资料获取            ( 滑到最后添加群号看公告免费获取)  

八、项目所有材料清单

STC89C52RC驱动方案图片

STM32F103C8T6驱动方案

图片

备注

K_A00_003

STC89C52RC系统板X1STM32F103C8T6系统板X1
  1. OLED4针和7针看需要 选一种即可
  2. STM32系统板两根Micro USB线一根用于J-LINK下载器,另一根用于给系统板供电
  3. 杜邦线建议不用太长的
OLED 1.3 4针X1OLED 1.3 4针X1
OLED1.3 7针X1OLED1.3 7针X1
Micro USB线X1Micro USB线X2
母母杜邦线X7母母杜邦线X7
J-LINK下载器

九、注意事项

  1. VCC GND请勿接反,接反易烧
  2. 显示异常时,排除接线接触不良
  3. 同程序换其他同类屏幕后需要按单片机复位才会正常显示
  4. 不同尺寸OLED屏幕程序并不完全兼容
  5. 下载后显示多出一些杂点的时候可以重新上电复位下

十、接线表格

单片机型号

模块

对应引脚(上:模块引脚 下:单片机引脚)

STM32F103

C8T6

OLED1.3  4针(IIC)

GND

VCC

SCL

SDA

RES

GND

3.3V

PB6

PB7

OLED1.3  7针(SPI)

GND

VCC

D0

D1

RES

DC

CS

GND

3.3V

PA7

PA6

PA5

PA4

PA3

STC89C52RC

OLED1.3  4针(IIC)

GND

VCC

SCL

SDA

RES

GND

3.3V

P1.0

P1.1

P1.2

OLED1.3  7针(SPI)

GND

VCC

D0

D1

RES

DC

CS

GND

3.3V

P1.4

P1.3

P1.2

P1.1

P1.0