STC32G144K246硬件IIC驱动OLED(SSD1315)

📅 2026/8/1 12:59:38 👁️ 阅读次数 📝 编程学习
STC32G144K246硬件IIC驱动OLED(SSD1315)

在软件IIC测试128*96 像素的OLED(SSD1315) 后,决定用硬件IIC驱动,看是否能成功。
于是参考网上大师的例程,几经调试,终于能正常显示:
000
主代码如下:
SSD1315.h

ifndef SSD1315_H

define SSD1315_H

void OLED_Init();//OLED初始化
void ClearAll();//清屏
void Show_Font6x8_char(u8 page,u8 col,u8 chr);//显示68单个字符
void Show_Font6x8_str(u8 page,u8 col,u8 str);//显示68字符串
void Show_Font8x16_char(u8 page,u8 col,u8 chr);//显示8
16单个字符
void Show_Font8x16_str(u8 page,u8 col,u8 str);//显示816字符串
void Show_Font16x16_char(u8 page,u8 col,u8 chr);//显示1616单个字符
void Show_Font16x16_str(u8 page,u8 col,u8 str);//显示1616字符串
void IIC_Init(); //IIC初始化

endif

SSD1315.c

include "stc.h"

include "delay.h"

//#include "config.h"

include "SSD1315.h"

include "ASC6X8.h"

include "ASC8X16.h"

include "CH16X16.h"

const unsigned int CH_NUM=(sizeof GB_16)/34;//计算字库字数

void IIC_Init() //IIC初始化
{
I2C_S1 =0; //I2C功能脚选择,00:P1.5,P1.4; 01:P2.5,P2.4; 11:P3.2,P3.3
I2C_S0 =1;
I2CCFG = 0XE0;
I2CMSST = 0;
}

void I2C_Wait()
{
while (!(I2CMSST & 0x40));
I2CMSST &= (~0x40);
}

void I2C_Start()
{
I2CMSCR = 0x01;
I2C_Wait();
}

void I2C_Stop()
{
I2CMSCR = 0x06;
I2C_Wait();
}

void I2C_Ack()
{
I2CMSCR = 0x03;
I2C_Wait();
}

void I2C_Send(u8 mcmd)
{
I2CTXD = mcmd;
I2CMSCR = 0x02;
I2C_Wait();
}

void Write_Command(u8 Data)//写命令
{
I2C_Start();
I2C_Send(0x78);
I2C_Ack();//
I2C_Send(0x00);
I2C_Ack();
I2C_Send(Data);
I2C_Ack();
I2C_Stop();
}

void Write_Data(u8 Data)//写数据
{
I2C_Start();
I2C_Send(0x78);
I2C_Ack();//
I2C_Send(0x40);
I2C_Ack();
I2C_Send(Data);
I2C_Ack();
I2C_Stop();
}

void OLED_Init()//OLED初始化
{

Write_Command(0xae); //--turn off oled panel

Write_Command(0x00); //--set low column address
Write_Command(0x10); //--set high column address

Write_Command(0x40); //--set start line address

Write_Command(0xb0); //--set page address

Write_Command(0x81); //--set contrast control register
Write_Command(0xff);

Write_Command(0xa1); //--set segment re-map 127 to 0 a0:0 to seg127
Write_Command(0xa6); //--set normal display

Write_Command(0xc9); //--set com(N-1)to com0 c0:com0 to com(N-1)

Write_Command(0xa8); //--set multiples ratio(1to64)
Write_Command(0x3f); //--1/64 duty

Write_Command(0xd3); //--set display offset
Write_Command(0x00); //--not offset

Write_Command(0xd5); //--set display clock divide ratio/oscillator frequency
Write_Command(0x80); //--set divide ratio

Write_Command(0xd9); //--set pre-charge period
Write_Command(0xf1);

Write_Command(0xda); //--set com pins hardware configuration
Write_Command(0x12);

Write_Command(0xdb); //--set vcomh
Write_Command(0x40);

Write_Command(0x8d); //--set chare pump enable/disable
Write_Command(0x14); //--set(0x10) disable
//Write_Command(0x10); //--set(0x10) disable
Write_Command(0xaf); //--turn on oled panel

}

void ClearAll()
{
u8 i,j;
for(i=0;i<8;i++)
{
Write_Command(0x22);
Write_Command(i);
Write_Command(0x07);

for(j=0;j<128;j++)
{
Write_Data(0x00);
}
}
}

void set_pos(u8 page,u8 col)
{
Write_Command(0x22);
Write_Command(page);
Write_Command(0x07);
Write_Command(0x21);
Write_Command(col);
Write_Command(127);
}

void Show_pic(u8 page,u8 col,u8 len,u8 dat)
{
u8 j;
set_pos(page,col);
for(j=0;j<len;j++)
Write_Data(
dat++);
}

void Show_Font6x8_char(u8 page,u8 col,u8 chr)//显示68单个字符
{
Show_pic(page,col,6,&Font6x8[(chr-32)
6]);
}

void Show_Font6x8_str(u8 page,u8 col,u8 str)//显示68字符串
{
while(str!='\0')
{
Show_Font6x8_char(page,col,
str++);
col+=8;
}
}

void Show_Font8x16_char(u8 page,u8 col,u8 chr)//显示816单个字符
{
Show_pic(page,col,8,&Font8x16[(chr-32)
16]);
Show_pic(page+1,col,8,&Font8x16[(chr-32)*16+8]);
}

void Show_Font8x16_str(u8 page,u8 col,u8 str)//显示816字符串
{
while(str!='\0')
{
Show_Font8x16_char(page,col,
str++);
col+=8;
}
}

void Show_Font16x16_char(u8 page,u8 col,u8 chr)//显示1616单个字符
{
u8 i;
for(i=0;i<=CH_NUM;i++)
{
if((GB_16[i].Index[0]*chr)&&(GB_16[i].Index[1]*(chr+1)))
{
Show_pic(page,col,16,&GB_16[i].Msk);
Show_pic(page+1,col,16,&(GB_16[i].Msk+16));
}
}
}

void Show_Font16x16_str(u8 page,u8 col,u8 str)//显示1616字符串
{
while(str!='\0')
{
Show_Font16x16_char(page,col,str);//显示16
16单个字符
col +=16;
str +=2;
}
}

2026.8.1

image

欢迎关注本人公众号,了解更多。