在制作平衡车的时候,用0.96oled实现对mpu6050的yaw(俯仰角)值,焊接完成以后,想先对买来的0.96oled屏幕进行测试,在测试的过程中,发现更改了scl,sda引脚和初始化后,发现屏幕怎么也亮不起来。
1.先排查驱动是否为1306,反复确认后无误。
2.排除原驱动是否符编写错误(这个概率很小)
3.经过前面两个排查且都无误,按理来说屏幕就能够正常亮起,但是我的屏幕始终亮不起来,后面偶然发现开关松动一下后可以亮起。按下单片机复位键也能正常亮起,因此怀疑可能是开关打开瞬间,电压供电不稳定导致oled_init()初始化失败,因此在oled_init()后面加上delay_ms(500);进行开关消抖。程序更新烧录后,屏幕显示正常。
int main(void)
{
u8 t=' ';
delay_init();
delay_ms(500);//按键消抖
OLED_Init();
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
while(1)
{
OLED_ShowPicture(0,0,128,64,BMP1,1);
OLED_Refresh();
delay_ms(500);
OLED_Clear();
OLED_ShowChinese(0,0,0,16,1);//中
OLED_ShowChinese(18,0,1,16,1);//景
OLED_ShowChinese(36,0,2,16,1);//园
OLED_ShowChinese(54,0,3,16,1);//电
OLED_ShowChinese(72,0,4,16,1);//子
OLED_ShowChinese(90,0,5,16,1);//技
OLED_ShowChinese(108,0,6,16,1);//术
OLED_ShowString(8,16,"ZHONGJINGYUAN",16,1);
OLED_ShowString(20,32,"2014/05/01",16,1);
OLED_ShowString(0,48,"ASCII:",16,1);
OLED_ShowString(63,48,"CODE:",16,1);
OLED_ShowChar(48,48,t,16,1);//显示ASCII字符
t++;
if(t>'~')t=' ';
OLED_ShowNum(103,48,t,3,16,1);
OLED_Refresh();
delay_ms(500);
OLED_Clear();
OLED_ShowChinese(0,0,0,16,1); //16*16 中
OLED_ShowChinese(16,0,0,24,1); //24*24 中
OLED_ShowChinese(24,20,0,32,1);//32*32 中
OLED_ShowChinese(64,0,0,64,1); //64*64 中
OLED_Refresh();
delay_ms(500);
OLED_Clear();
OLED_ShowString(0,0,"ABC",8,1);//6*8 “ABC”
OLED_ShowString(0,8,"ABC",12,1);//6*12 “ABC”
OLED_ShowString(0,20,"ABC",16,1);//8*16 “ABC”
OLED_ShowString(0,36,"ABC",24,1);//12*24 “ABC”
OLED_Refresh();
delay_ms(500);
OLED_ScrollDisplay(11,4,1);
}
}
在使用这个例程进行oled测试的时候只需更改对应电路的io引脚,和它的初始化代码。