K_A00_001 基于多种单片机驱动OLED 0.96 显示字符图文时钟及滚动显示
目录
一、程序功能说明
单片机型号 | 测试条件 | 模块名称 | 代码功能 |
STC89C52RC | 1.晶振11.0592M | OLED 0.96(4针 IIC) |
|
OLED 0.96(7针 SPI) | |||
STM32F103C8T6 |
| OLED 0.96(4针 IIC) | |
OLED 0.96(7针 SPI) |
二、基本参数
1.常规参数
4针IIC 与7针SPI/IIC OLED 0.96 OLED基本参数类似,只是通信协议不一样,一般使用主要关注驱动芯片,分辨率,通信接口,供电电压。
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、 起始信号
时序图:
代码:
//IIC Start
void IIC_Start()
{
OLED_SCL_High;
OLED_SDA_High;
IIC_Delay();
OLED_SDA_Low;
IIC_Delay();
OLED_SCL_Low;
}
1.2、停止信号
时序图:
代码:
//IIC Stop
void IIC_Stop()
{
OLED_SCL_Low;
OLED_SDA_Low;
IIC_Delay();
OLED_SCL_High;
OLED_SDA_High;
}
1.3、等待应答
时序图:
代码:
//等待信号响应,对应答信号进行判断并添加返回值
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、发送数据
时序图:
代码:
// 通过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位片选,低电平有效,详细可参考手册
时序:
代码:
//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
五、相关资料链接
- STC89C52RC程序下载 直戳跳转
- STM32F103C8T6程序下载
- 串口下载 直戳跳转
- ST-LINK下载 直戳跳转
- J-LINK下载 直戳跳转
- DAP-LINK下载 直戳跳转
-
字符软件使用 直戳跳转
六、字符图片提取格式
文字格式:共阴——列行式——逆向——C51——行前后缀括号去掉
图像格式:共阴——列行式——逆向——C51——行前后缀括号去掉
七、视频效果展示与程序资料获取
- 视频连接 直戳跳转
- 资料获取 ( 滑到最后添加群号看公告免费获取)
八、注意事项
- VCC GND请勿接反,接反易烧
- 显示异常时,排除接线接触不良
- 同程序换其他同类屏幕后需要按单片机复位才会正常显示
- 不同尺寸OLED屏幕程序并不完全兼容
- 下载后显示多出一些杂点的时候可以重新上电复位下
九、接线表格
单片机型号 | 模块 | 对应引脚(上:模块引脚 下:单片机引脚) | |||||||
STM32F103 C8T6 | OLED0.96 4针(IIC) | GND | VCC | SCL | SDA | RES |
|
|
|
GND | 3.3V | PB6 | PB7 |
|
|
|
| ||
OLED0.96 7针(SPI) | GND | VCC | D0 | D1 | RES | DC | CS |
| |
GND | 3.3V | PA7 | PA6 | PA5 | PA4 | PA3 |
| ||
STC89C52RC | OLED0.96 4针(IIC) | GND | VCC | SCL | SDA | RES |
|
|
|
GND | 3.3V | P1.0 | P1.1 | P1.2 |
|
|
| ||
OLED0.96 7针(SPI) | GND | VCC | D0 | D1 | RES | DC | CS |
| |
GND | 3.3V | P1.4 | P1.3 | P1.2 | P1.1 | P1.0 |
|
相关文章
- [FitNesse|cucumber]FitNesse与cucumber行为驱动测试开发的典范
- linux驱动开发--中断:按键中断
- MSP430FR6972驱动模块模组调试
- Linux 设备总线驱动模型
- 安装Broadcom无线网卡驱动
- android 键盘驱动编写
- 一种数据驱动的自动驾驶汽车前馈补偿器优化方法(Matlab代码实现)
- 【NLP】第16章 Transformer驱动副驾驶的出现
- 基于风驱动算法优化的lssvm回归预测-附代码
- 【Spring注解驱动开发】使用InitializingBean和DisposableBean来管理bean的生命周期,你真的了解吗?
- 检測磁盘驱动的健康程度SMART
- Linux驱动---休眠与唤醒
- Day 33 - 实作 S3 驱动 Lambda 函数进行镜像
- SPI总线设备驱动模型
- RK3399_PCIe_Host驱动分析_设备枚举