OLED刷新闪烁,大家在程序中如何处理呢 | 用硬件I2C/SPI
本帖最后由 lao4jiadian 于 2024-11-11 19:30 编辑玩OLED时发现刷新数据时屏幕眨眼睛的时间非常明显,
大家在程序中怎么处理,避免减轻屏幕闪烁的呢?
我的是4线I2C屏, P1.4 / P1.3端口模拟 I2C
---------------------------------------------------------------------------------------------------------------------------------------
找淘宝要来一份硬件I2C的例程,源程序是1.3寸屏幕的,淘宝客服表示可以用.因为我的硬件已固定.没移植测试.
用硬件I2C,OLED内部时钟设置为最高频率 提高iic速率,或者使用局部刷新。
或者使用全屏缓存刷新,避免使用空白数据复制进去一遍。 用什么芯片,有硬件I2C就用硬件。
51 开源 电容表: 8H8K64U比较器+OLED12864-I2C 实现 - 开源示波器,频谱分析仪-FFT,PID控制,四轴飞行器,智能小车 国芯技术交流网站 - AI32位8051交流社区 (stcaimcu.com)
DMA+SPI高刷 DebugLab 发表于 2024-11-10 17:51
用硬件I2C,OLED内部时钟设置为最高频率
没有找到这个屏的硬件I2C的例程,梁工的充放电式电容表例程好像也是模拟I2C lao4jiadian 发表于 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);
}
找淘宝要来一份硬件I2C的例程,源程序是1.3寸屏幕的,淘宝客服表示可以用.因为我的硬件已固定,所以没移植.原包发上来,分享给大家.附件在1楼
页:
[1]