378
社区成员




#include <stc16.h>
#include "iic.h" // 假设逐飞库中有一个包含IIC功能的头文件
#define OLED_ADDRESS 0x78 // OLED的I2C地址
void OLED_WriteCmd(unsigned char cmd) {
IIC_Start();
IIC_SendByte(OLED_ADDRESS); // 发送OLED的地址
IIC_WaitAck();
IIC_SendByte(0x00); // 表示接下来是命令
IIC_WaitAck();
IIC_SendByte(cmd); // 发送命令
IIC_WaitAck();
IIC_Stop();
}
void OLED_WriteData(unsigned char data) {
IIC_Start();
IIC_SendByte(OLED_ADDRESS); // 发送OLED的地址
IIC_WaitAck();
IIC_SendByte(0x40); // 表示接下来是数据
IIC_WaitAck();
IIC_SendByte(data); // 发送数据
IIC_WaitAck();
IIC_Stop();
}
void OLED_Init() {
OLED_WriteCmd(0xAE); // 关闭显示
OLED_WriteCmd(0x00); // 设置低列地址
OLED_WriteCmd(0x10); // 设置高列地址
OLED_WriteCmd(0x40); // 设置起始行地址
OLED_WriteCmd(0x81); // 设置对比度控制
OLED_WriteCmd(0xCF);
OLED_WriteCmd(0xA1); // 段重映射
OLED_WriteCmd(0xC8); // COM输出扫描方向
OLED_WriteCmd(0xA6); // 设置显示模式:正常显示
OLED_WriteCmd(0xA8); // 设置复用率
OLED_WriteCmd(0x3F);
OLED_WriteCmd(0xD3); // 设置显示偏移
OLED_WriteCmd(0x00);
OLED_WriteCmd(0xD5); // 设置时钟分频因子/振荡频率
OLED_WriteCmd(0x80);
OLED_WriteCmd(0xD9); // 设置预充电周期
OLED_WriteCmd(0xF1);
OLED_WriteCmd(0xDA); // 设置COM引脚硬件配置
OLED_WriteCmd(0x12);
OLED_WriteCmd(0xDB); // 设置VCOMH
OLED_WriteCmd(0x40);
OLED_WriteCmd(0x20); // 设置内存寻址模式
OLED_WriteCmd(0x02);
OLED_WriteCmd(0x8D); // 设置充电泵
OLED_WriteCmd(0x14);
OLED_WriteCmd(0xAF); // 开启显示
}
void OLED_Clear() {
unsigned char i, j;
for (i = 0; i < 8; i++) {
OLED_WriteCmd(0xB0 + i); // 设置页地址(0~7)
OLED_WriteCmd(0x00); // 设置显示位置—列低地址
OLED_WriteCmd(0x10); // 设置显示位置—列高地址
for (j = 0; j < 128; j++) {
OLED_WriteData(0x00); // 清除屏幕
}
}
}
void main() {
IIC_Init(); // 初始化I2C
OLED_Init(); // 初始化OLED
OLED_Clear(); // 清屏
while (1) {
// 主循环,可以在此处添加其他代码控制OLED显示
}
}