查看: 2424|回复: 1

[评测分享] 【ESP32-E Arduino开发板】0.91寸OLED 屏的显示驱动

[复制链接]
  • TA的每日心情
    奋斗
    2023-5-10 20:09
  • 签到天数: 1742 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2021-7-4 12:59:36 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 jinglixixi 于 2021-7-4 13:04 编辑

    为了便于人机交互,伴随开发板推出的还有相应的OLED屏显示模块,其显示屏是一款I2C接口的0.96寸单色显示屏,其外观如图1所示。
    1.jpg
    图1  OLED屏显示模块

    尽管本人没有这款显示屏,但手头却有一块0.91寸的单色OLED 屏,且也是I2C接口的。抱着测试的态度,用模块的程序点亮了自己的OLED屏,其结果如图2所示。
    2.jpg
    图2  0.91寸OLED屏显示

    若对初始化程序加以修改,则实现显示效果是图3的样子,因屏幕的尺寸及像素点比模块的少,故显示的内容只是原内容的一半。
    3.jpg
    图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.jpg
    图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.jpg
    图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);


    注:在字符串的显示过程中,之所以使用数组,是因为在开发软件不支持指针型变量。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-26 19:36
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2021-12-23 22:51:34 | 显示全部楼层
    值得好好学习
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-26 08:35 , Processed in 0.141226 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.