找回密码
 立即注册
查看: 556|回复: 8

OLED刷新闪烁,大家在程序中如何处理呢 | 用硬件I2C/SPI

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:174
  • 最近打卡:2025-05-09 07:53:20
已绑定手机

34

主题

171

回帖

1209

积分

金牌会员

积分
1209
发表于 2024-11-10 17:44:30 | 显示全部楼层 |阅读模式
本帖最后由 lao4jiadian 于 2024-11-11 19:30 编辑

玩OLED时发现刷新数据时屏幕眨眼睛的时间非常明显,
大家在程序中怎么处理,避免减轻屏幕闪烁的呢?

我的是4线I2C屏, P1.4 / P1.3端口模拟 I2C

---------------------------------------------------------------------------------------------------------------------------------------
找淘宝要来一份硬件I2C的例程,源程序是1.3寸屏幕的,淘宝客服表示可以用.因为我的硬件已固定.没移植测试. 微信图片_20241111192931.jpg 1.3inch_IIC_OLED_Module_SH1106_MC130GX&MC130VX_V1.0.zip (47.79 MB, 下载次数: 44)


8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:431
  • 最近打卡:2025-05-09 09:00:33
已绑定手机

77

主题

4879

回帖

8510

积分

超级版主

DebugLab

积分
8510
发表于 2024-11-10 17:51:43 | 显示全部楼层
用硬件I2C,OLED内部时钟设置为最高频率
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:466
  • 最近打卡:2025-05-09 18:07:45
已绑定手机
已实名认证

110

主题

2240

回帖

5536

积分

版主

积分
5536
发表于 2024-11-10 18:01:50 | 显示全部楼层
提高iic速率,或者使用局部刷新。
或者使用全屏缓存刷新,避免使用空白数据复制进去一遍。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:430
  • 最近打卡:2025-05-09 08:24:27
已绑定手机

19

主题

3196

回帖

4960

积分

论坛元老

积分
4960
发表于 2024-11-10 18:03:47 | 显示全部楼层
用什么芯片,有硬件I2C就用硬件。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:62
  • 最近打卡:2025-05-09 11:19:24

719

主题

1万

回帖

1万

积分

管理员

积分
15659
发表于 2024-11-10 18:15:04 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:440
  • 最近打卡:2025-05-09 07:56:39
已绑定手机

229

主题

328

回帖

1509

积分

金牌会员

积分
1509
发表于 2024-11-10 18:20:07 | 显示全部楼层
DMA+SPI高刷
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:174
  • 最近打卡:2025-05-09 07:53:20
已绑定手机

34

主题

171

回帖

1209

积分

金牌会员

积分
1209
发表于 2024-11-10 23:11:51 | 显示全部楼层
Debu*** 发表于 2024-11-10 17:51
用硬件I2C,OLED内部时钟设置为最高频率

没有找到这个屏的硬件I2C的例程,梁工的充放电式电容表例程好像也是模拟I2C

点评

void I2C_Start(void) { I2C_Busy=1; I2CMSCR=0x81; while(I2C_Busy); } void I2C_SendData(unsigned char dat) { I2CTXD=dat; I2C_Busy=1; I2CMSCR=0x82; while(I2C_Busy); } void I2C_RecvACK(void) { I  详情 回复 发表于 2024-11-10 23:29
8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:431
  • 最近打卡:2025-05-09 09:00:33
已绑定手机

77

主题

4879

回帖

8510

积分

超级版主

DebugLab

积分
8510
发表于 2024-11-10 23:29:51 | 显示全部楼层
lao4ji*** 发表于 2024-11-10 23:11
没有找到这个屏的硬件I2C的例程,梁工的充放电式电容表例程好像也是模拟I2C ...

void I2C_Start(void)
{
        I2C_Busy=1;
        I2CMSCR=0x81;
        while(I2C_Busy);
}

void I2C_SendData(unsigned char dat)
{
        I2CTXD=dat;
        I2C_Busy=1;
        I2CMSCR=0x82;
        while(I2C_Busy);
}

void I2C_RecvACK(void)
{
        I2C_Busy=1;
        I2CMSCR=0x83;
        while(I2C_Busy);
}

//unsigned char I2C_RecvData(void)
//{
//        I2C_Busy=1;
//        I2CMSCR=0x84;
//        while(I2C_Busy);
//        return I2CRXD;
//}

//void I2C_SendACK(void)
//{
//        I2CMSST=0x00;
//        I2C_Busy=1;
//        I2CMSCR=0x85;
//        while(I2C_Busy);
//}

//void I2C_SendNAK(void)
//{
//        I2CMSST=0x01;
//        I2C_Busy=1;
//        I2CMSCR=0x85;
//        while(I2C_Busy);
//}

void I2C_Stop(void)
{
        I2C_Busy=1;
        I2CMSCR=0x86;
        while(I2C_Busy);
}

void Init(void)
{
        P_SW2|=EAXFR;
        P3M0=0x00;
        P3M1=0x00;
        P5M0=0x00;
        P5M1=0x00;
        P3PU=0x0c;
        I2CCFG=0xC1;        //921.6K@11.0592M
        I2CMSCR=EMSI;
        I2CMSST=0x00;
        EA=1;
        Delay_x10ms(10);
        OLED_Init();
}

void I2C_Isr(void) interrupt 24
{
        _push_(P_SW2);
        P_SW2|=EAXFR;
        if(I2CMSST&MSIF)
        {
                I2CMSST&=~MSIF;
                I2C_Busy=0;
        }
        _pop_(P_SW2);
}

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:174
  • 最近打卡:2025-05-09 07:53:20
已绑定手机

34

主题

171

回帖

1209

积分

金牌会员

积分
1209
发表于 2024-11-11 19:32:25 | 显示全部楼层
找淘宝要来一份硬件I2C的例程,源程序是1.3寸屏幕的,淘宝客服表示可以用.因为我的硬件已固定,所以没移植.原包发上来,分享给大家.附件在1楼
8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-9 21:45 , Processed in 0.149442 second(s), 114 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表