本帖最后由 jinglixixi 于 2021-7-4 13:04 编辑
为了便于人机交互,伴随开发板推出的还有相应的OLED屏显示模块,其显示屏是一款I2C接口的0.96寸单色显示屏,其外观如图1所示。 图1 OLED屏显示模块
尽管本人没有这款显示屏,但手头却有一块0.91寸的单色OLED 屏,且也是I2C接口的。抱着测试的态度,用模块的程序点亮了自己的OLED屏,其结果如图2所示。 图2 0.91寸OLED屏显示
若对初始化程序加以修改,则实现显示效果是图3的样子,因屏幕的尺寸及像素点比模块的少,故显示的内容只是原内容的一半。 图3 修改后的显示效果
0.91寸OLED屏的初始化函数为: void SSD1306(){ Writec(0XAE);//displayoff Writec(0X40);//setdisplay start line Writec(0XB0);//setpage address Writec(0XC8);//setpage address Writec(0X81);//setcontract control Writec(0XFF);//VCC Generated by Internal DC/DC Circuit Writec(0XA1);//setsegment remap column address 127 is mapped to SEG0 Writec(0XA6);//normal/ reverse normal display Writec(0XA8);//multiplexratio Writec(0X1F);//1/64 Writec(0XD3);//setdisplay offset Writec(0X00); Writec(0XD5);//setosc division Writec(0XF0); Writec(0XD9);//setpre-charge period Writec(0X22); Writec(0XDa);//setCOM pins Writec(0X02); Writec(0X8d);/*setcharge pump enable*/ Writec(0X14); Writec(0Xdb);//SetVcomH Writec(0X49); Writec(0XAF);//displayON }
在修改程序和构建字库的情况下,可实现字符、数值及字符串显示。 其中实现数值显示的函数为: void OLED_ShowNum(unsignedchar x,unsigned char y,unsigned int num,unsigned char len) { unsigned char t,temp, 16; unsigned char enshow=0; for(t=0;t<len;t++){ temp=(num/oled_pow(10,len-t-1))%10; if(enshow==0 && t<(len-1) ) { if(temp==0){ OLED_ShowChar(x+8*t,y,' ',size2); continue; } else enshow=1; } OLED_ShowChar(x+8*t,y,temp+'0',size2); } } 实现图4显示效果的语句为: OLED_ShowNum(8,2,1234,4,16); 图4显示数值 实现字符串显示的函数为: void OLED_ShowString(unsigned charx,unsigned char y,unsigned char Char_Size) { unsigned char j=0; while (chr[j]!='\0'){ OLED_ShowChar(x,y,chr[j],Char_Size); x+=8; if(x>120){ x=0; y+=2; } j++; } } 实现图5显示效果的语句为: 图5 显示字符串
unsigned char chr[]="FireBeetle"; unsigned char chr1[]="-ESP32 "; OLED_ShowString(0,0,16); for(i=0;i<10;i++){ chr=chr1; } OLED_ShowString(0,2,16);
注:在字符串的显示过程中,之所以使用数组,是因为在开发软件不支持指针型变量。 |