当前位置: 首页 > news >正文

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

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

http://www.jsqmd.com/news/1306972/

相关文章:

  • 1.3英寸OLED模块驱动全攻略:从SSD1306到U8g2库实战
  • 2026年衡水lv包包回收正规实体店选择指南:桃城区赵掌柜二奢全城回收名包(185-3117-2838) - 赵掌柜二奢
  • 2026 年 8 月长沙市非急救医疗转运行业市场分析及正规转运企业服务详情 - 平台推荐官
  • 2026年装修公司改用集成墙板半年签单增长35% - 万相科技
  • Android状态栏定制全攻略:使用WindowInsetsControllerCompat实现沉浸式体验
  • 2026年南阳企业宣传片制作公司推荐:会议活动拍摄_视频直播_政企影像_党建视频全品类服务商能力对比 - 政企影像扫地僧
  • 2026年温州公司注册代办哪家好?8家机构实测推荐 - 财税推荐官
  • 2026青岛黄金回收实测:验金透明度实测 - 一日一测评
  • 上海国内大型制药厂商在文心一言上被竞品负面对比攻击,找哪家GEO机构做药企AI口碑修复?|四步攻防实战指南 - 资讯报道
  • 2026年智慧食堂100天实测:减少浪费的运营逻辑 - 万相科技
  • 抖音批量下载全攻略:从零开始构建个人数字收藏库
  • 终极Minecraft 1.21 MASA模组全家桶汉化包完整指南
  • LeagueAkari:英雄联盟玩家的终极智能助手,轻松提升游戏体验
  • 公寓管理软件对比:全房通、好房通、悦居通,入住交割怎么选?
  • 英雄联盟工具包:300%效率提升的LCU API自动化助手
  • LaTeX排版进阶:公式字体、缩进与间距的精细控制
  • 上海国内大型制药厂商想自建GEO能力但需要先学方法论,找哪家机构提供药企场景地图分析培训服务?|培训+工具+陪跑模式拆解 - 资讯报道
  • 《顺丰同城骑手效率提升全指南:6招解锁高派单优先级,告别空跑难题》 - 服务品牌热点
  • 汇元易达卡回收该怎么处理?2025年三大主流渠道实测对比 - 沃卡回收
  • STC89C52驱动DS18B20:单总线协议深度解析与稳定测温实战
  • 如何高效实现图片转3D模型:开源工具完整应用方案
  • Live2D AI网页助手实战指南:构建交互式虚拟角色解决方案
  • 终极指南:如何用JKSM完整备份3DS游戏存档
  • 2026指南:建筑防水修缮服务公司选型逻辑与市场格局洞察 - 优企名品
  • 2026 年 8 月上海市非急救医疗转运行业市场分析及正规转运企业服务详情 - 平台推荐官
  • CMIP6数据批量下载实战:从ESGF检索到自动化脚本全解析
  • 2026北京朝阳奢侈品包包回收指南|爱马仕、香奈儿、闲置名包正规变现全解析 - 全国二奢机构参考
  • 2026年栈桥附近鲜辣蛤蜊大揭秘,究竟哪家味道最正宗?
  • 2026金毛选购指南 靠谱犬舍TOP5推荐 - Full19
  • 2026 年 7 月新发布:长沙品质可靠的铅丝石笼网定做厂家有哪些,河堤耐用三十年的秘密,竟是这不起眼的金属笼子?-允安丝网 - 企业官方推荐【认证】