1.前言

最近公司使用了一块用SH1106驱动的OLED 屏幕,但是发现网上的OLED大部分都是基于ssd1306驱动芯片的,关于SH1106的资料比较少,因此将自己使用过程中遇到的问题写下来。

2.电路及连接

屏幕使用的是IIC接口,按照正常的iiC连接即可

3.驱动屏幕

到这一步,就开始点亮屏幕吧。SH1106在使用中基本和ssd1306是一样的,只是在初始化的地方存在不一样。

 Write_Command(0xAE);//set display display ON/OFF,AFH/AEHWrite_Command(0x02);Write_Command(0x10);Write_Command(0x40);//set display start line:COM0Write_Command(0xB0);Write_Command(0x81);//set contrast controlWrite_Command(0xCF);Write_Command(0xA1);//entire display on: A4H:OFF/A5H:ONWrite_Command(0xC8); //该指令控制显示方向显示方向0xc8或者0xc0//Write_Command(0xC0);Write_Command(0xAF);Write_Command(0xA7);//set normal/inverse display: A6H:normal/A7H:inverseWrite_Command(0xA8);//set multiplex ratioWrite_Command(0x3F);//1/64dutyWrite_Command(0xD3);//set display offsetWrite_Command(0x00);//Write_Command(0xD5);//set display clock divide ratio/oscillator frequencyWrite_Command(0x80);//105HzWrite_Command(0xD9);//Dis-charge /Pre-charge Period Mode SetWrite_Command(0xF1);//Write_Command(0xDA);//Common Pads Hardware Configuration Mode SetWrite_Command(0x12);//Write_Command(0xDB);//set vcomh deselect levelWrite_Command(0x40);//VCOM = β X VREF = (0.430 + A[7:0] X 0.006415) X VREFWrite_Command(0xA4);Write_Command(0xA6);Write_Command(0xAF);//set display display ON/OFF,AEH/AFH//这两条指令是设置反显,取消注释即为打开反显,//Write_Command(0xAF);//Write_Command(0xA7);//set normal/inverse display: A6H:normal/A7H:inverse

SH1106初始化过程。

初始化的时候,就按照上面的部分进行初始化就可以了。


//数字0到9 ,字体格式 16*16,横坐标只占了8个像素点,纵坐标占了16个像素点
const uint8_t number_array[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",0*/0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,/*"1",0*/0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",0*/0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,/*"3",0*/0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,/*"4",0*/0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,    //        50x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00  , //       60x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,/*"7",0*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",0*/0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,/*"9",0*/};
/*** @brief  Write_Command,写命令* @param  参考芯片手册*** @retval 无*/#define  OLED_ADDRESS  0x78
static void Write_Command(unsigned char I2C_Command)//???
{uint8_t *pData;pData = &I2C_Command;HAL_I2C_Mem_Write(&hi2c1,OLED_ADDRESS,0x00,I2C_MEMADD_SIZE_8BIT,pData,1,10);
}/*** @brief  WriteDat,写数据命令全屏填充* @param  无参考芯片手册*** @retval 无*/
static void WriteDat(unsigned char I2C_Data)//???
{uint8_t *pData;pData = &I2C_Data;HAL_I2C_Mem_Write(&hi2c1,OLED_ADDRESS,0x40,I2C_MEMADD_SIZE_8BIT,pData,1,100);
}
/*** @brief  OLED_Fill,全屏填充* @param  0xff,全屏点亮*         0x00,全屏变黑** @retval 无*/
void OLED_Fill(unsigned char fill_Data)
{unsigned char m,n;for(m=0;m<8;m++){Write_Command(0xb0+m);Write_Command(0x01);Write_Command(0x10);for(n=0;n<129;n++){WriteDat(fill_Data);}}
}/*** @brief  OLED_SetPos,设置光标* @param  x,光标x位置 范围 0-128*      y,光标y位置 范围 0-7* @retval 无*/
void OLED_SetPos(unsigned char x, unsigned char y) //设置起始点坐标
{Write_Command(0xb0+y);Write_Command(((x&0xf0)>>4)|0x10);  //设置列的显示位置 的高低字节Write_Command((x&0x0f)|0x01);
}
/*** @brief  OLED_Show_Number_16,显示数字,数字大小16*16* @param  x,光标x位置 范围 0-128*      y,光标y位置 范围 0-7*      number 需要显示的数字,范围0-9,* @retval 无*/
void  OLED_Show_Number_16(u8 x,u8  y,u8  number )
{uint32_t i=0,j=0;OLED_SetPos(x,y);//显示数字的上半部分for(i=0;i<8;i++){WriteDat(number_array[number*16+i]);}//显示数字的下半部分OLED_SetPos(x,y+1);for(i=8;i<16;i++){WriteDat(number_array[number*16+i]);}
}

驱动代码如上所示,先设置坐标,在显示字符,。

4.总结

综上所述,可以看到SH1106使用起来和SSD1306基本是一样的,除了初始化不同。因此在使用的时候,只要注意一下初始化就可了。

1.3寸 SH1106 OLED 屏幕驱动 基于stm32相关推荐

  1. ESP8266 驱动1.3寸SH1106 OLED屏幕显示库

    ESP8266 驱动1.3寸SH1106 OLED屏幕显示库 Adafruit_SH110X 接线说明 SDA---D2(GPIO4) SCL---D1(GPIO5) 驱动示例程序 /******** ...

  2. 51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序

    51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序 Proteus仿真效果 注意点击运行仿真后,图像刷新出来比较慢. 示例主程序 #include "REG51.h& ...

  3. 关于arduino驱动SH1106 OLED屏幕使用U8g2库显示案例

    博主刚接触arduino不久,对硬件这块也是略微了解,因为我是从51转过来的. 博主可能跟读者遇到的问题一样,就是在淘宝购买屏幕的时候,觉得1.3寸的屏幕比0.96大就果断买了1.3寸的oled屏.结 ...

  4. STM32F103C8T6 0.42寸的OLED屏幕IIC例程

    初始化部分 void OLED_Init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Perip ...

  5. MAX6675 带冷端补偿的热电偶测温芯片驱动-基于STM32 HAL库

    MAX6675 简介 MAX6675 是一款带冷端补偿的热电偶测温芯片,通过3线SPI总线直接输出热电偶测量温度值. 引脚如下: 与单片机连接关系如下: 通信时序与数据格式如下: MAX6675 驱动 ...

  6. STM32(基于HAL库)驱动0.96寸OLED屏幕(六脚)

    STM32驱动0.96寸OLED屏幕(六脚) 1 序言 2 如何利用STM32单片机驱动12864液晶屏 2.1*基本配置* 2.2 *0.96寸OLED端口含义* 2.3 *0.96寸OLED液晶屏 ...

  7. esp8266下使用sh1106 的1.3寸 oled 屏幕

    很多0.96寸的oled 屏幕使用的是ssd1306 ,而为了稍微屏幕大一点买了1.3寸的IIC 版本,结果是sh1106,这几天重新打算用的使用麻烦来了,用不起来了,找了很多sh1106 的驱动都不 ...

  8. CX32l003 点亮0.96寸OLED屏幕

    之前的文章写了很多关于CX32L003芯片的程序代码,几乎都是应用的芯片内部资源,对于这款低成本的芯片还能做些什么功能呢.本篇文章采用cx32l003单片机实现点亮0.96寸的OLED屏幕. OLED ...

  9. 基于STM32的OLED多级菜单GUI实现(简化版智能手表)

    前言:本文的OLED多级菜单UI为一个综合性的STM32小项目,使用多传感器与OLED显示屏实现智能终端的效果.项目中的多级菜单UI使用了较为常见的结构体索引法去实现功能与功能之间的来回切换,搭配DH ...

最新文章

  1. java项目经理也就那么回事_网易PM | 我们之前在需求评审环节踩过的坑...
  2. 第十七届第一场智能车竞速校内赛,比往年来的早一些
  3. 裸辞后,从Android转战Web前端的学习以及求职之路
  4. 实验1 LINUX基本操作
  5. php5.3二进制包,php使用pack处理二进制文件的方法
  6. 如何利用Excel进行同类项合并?
  7. 评估模型如何建立_建立和评估分类ML模型
  8. LinearLayout和RelativeLayout
  9. 常见网站CSS样式重置
  10. C++安全方向(二):2.5 Base58_比特币钱包地址_算法分析
  11. Codeforces 1065E(计数)
  12. 火狐浏览器59.0.1英文版如何改为中文版界面
  13. 500g linux怎么分区吗,500G的硬盘,怎么分区比较合理?
  14. 《云云众声》第101期:众家发声 追求“中国特色”
  15. 网易云音乐ncm格式转换为mp3
  16. idea集成SVN后查看当前文件修改的历史版本
  17. 关系型数据库的物理连接
  18. Linux学习系列 --awk命令学习
  19. rpm -e卸载mysql_rpm
  20. 申请https证书的过程

热门文章

  1. 简洁风个人主页(1) html 静态布局
  2. 19年拿了19个诺贝尔奖,日本科学为何“井喷”?
  3. labview调用DLL
  4. 启动IDEA时出现error launching idea failed to create jvm的解决办法
  5. python storm连接mysql_Python ORM Storm 源码修改
  6. 【工业互联网】郭朝晖:工业互联网平台背景下的工业大数据与智能制造
  7. 2060显卡驱动最新版本_GPU驱动CUDAPyTorch对应关系
  8. 解决阿里云CentOS8 yum安装appstream报错,更新yum后无法makecache的问题
  9. 联合国发布2019年《世界人口展望》:人口老化加剧, 到本世纪末地球人口将达109亿...
  10. ESP32 Https server 错误Header fields are too long for server to interpret