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

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

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:213
  • 最近打卡:2025-10-30 08:52:48
已绑定手机

37

主题

175

回帖

1404

积分

金牌会员

积分
1404
发表于 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, 下载次数: 142)


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

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:600
  • 最近打卡:2025-10-31 06:34:52
已绑定手机

87

主题

6408

回帖

1万

积分

超级版主

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

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:605
  • 最近打卡:2025-10-31 18:35:33
已绑定手机
已实名认证

122

主题

2941

回帖

7648

积分

版主

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

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:605
  • 最近打卡:2025-11-01 00:01:02
已绑定手机

19

主题

3275

回帖

6114

积分

论坛元老

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:224
  • 最近打卡:2025-10-31 13:03:41

792

主题

1万

回帖

2万

积分

管理员

积分
20093
发表于 2024-11-10 18:15:04 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:471
  • 最近打卡:2025-10-27 14:54:33
已绑定手机

247

主题

353

回帖

1913

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:213
  • 最近打卡:2025-10-30 08:52:48
已绑定手机

37

主题

175

回帖

1404

积分

金牌会员

积分
1404
发表于 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位机了.
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:600
  • 最近打卡:2025-10-31 06:34:52
已绑定手机

87

主题

6408

回帖

1万

积分

超级版主

积分
12070
发表于 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);
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:213
  • 最近打卡:2025-10-30 08:52:48
已绑定手机

37

主题

175

回帖

1404

积分

金牌会员

积分
1404
发表于 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-11-1 07:59 , Processed in 0.143306 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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