OLED SH1108 STM32 8080接口实际使用

目录

OLED SH1108 STM32 8080接口实际使用

硬件部分

软件部分


之前有项目使用维信诺一款OLED 核心控制器为SH1108,一直埋头搞项目,没有实际做点记录查看SH1108数据手册,感觉这个图很好,把SH1108描述的很形象,这里贴出来

硬件部分

项目选择是用8080接口,采用IO模拟的方式进行SH1108通信

项目使用的OLED屏屏为128 COM× 160 SEG,该屏幕有128 个column与20 个Page,每Page有8 Seg即一共160 Seg。

OLED和STM32的硬件连接,STM32使用外部晶振25Mhz,倍频到72Mhz

软件部分

关于stm32和OLED的管脚定义如下所列


//------------OLED ------------------------------------------------------------------
#define OLED_SH1108_CS_PIN              GPIO_Pin_1                  /* PB.1 -------> OLED_CS */
#define OLED_SH1108_CS_GPIO_PORT        GPIOB                       /* GPIOB */
#define OLED_SH1108_CS_GPIO_CLK         RCC_APB2Periph_GPIOB#define OLED_SH1108_DC_PIN              GPIO_Pin_13                  /* PB.13 -------> OLED_A0 */
#define OLED_SH1108_DC_GPIO_PORT        GPIOB                       /* GPIOB */
#define OLED_SH1108_DC_GPIO_CLK         RCC_APB2Periph_GPIOB#define OLED_SH1108_WR_PIN              GPIO_Pin_14                  /* PB.14 -------> OLED_WR */
#define OLED_SH1108_WR_GPIO_PORT        GPIOB                       /* GPIOB */
#define OLED_SH1108_WR_GPIO_CLK         RCC_APB2Periph_GPIOB#define OLED_SH1108_RD_PIN              GPIO_Pin_15                 /* PB.15 -------> OLED_RD */
#define OLED_SH1108_RD_GPIO_PORT        GPIOB                       /* GPIOB */
#define OLED_SH1108_RD_GPIO_CLK         RCC_APB2Periph_GPIOB#define OLED_SH1108_RES_PIN              GPIO_Pin_12                /* PB.12 -------> OLED_RES */
#define OLED_SH1108_RES_GPIO_PORT        GPIOB                      /* GPIOB */
#define OLED_SH1108_RES_GPIO_CLK         RCC_APB2Periph_GPIOB#define OLED_SH1108_D0_PIN              GPIO_Pin_0                 /* PC.0 -------> OLED_D0 */
#define OLED_SH1108_D0_GPIO_PORT        GPIOC                      /* GPIOC */
#define OLED_SH1108_D0_GPIO_CLK         RCC_APB2Periph_GPIOC#define OLED_SH1108_D1_PIN              GPIO_Pin_1                 /* PC.1 -------> OLED_D1 */
#define OLED_SH1108_D1_GPIO_PORT        GPIOC                      /* GPIOC */
#define OLED_SH1108_D1_GPIO_CLK         RCC_APB2Periph_GPIOC#define OLED_SH1108_D2_PIN              GPIO_Pin_2                 /* PC.2 -------> OLED_D2 */#define OLED_SH1108_D3_PIN              GPIO_Pin_3                 /* PC.3 -------> OLED_D3 */#define OLED_SH1108_D4_PIN              GPIO_Pin_4                 /* PC.4 -------> OLED_D4 */#define OLED_SH1108_D5_PIN              GPIO_Pin_5                 /* PC.5 -------> OLED_D5 */#define OLED_SH1108_D6_PIN              GPIO_Pin_6                 /* PC.6 -------> OLED_D6 */#define OLED_SH1108_D7_PIN              GPIO_Pin_7                 /* PC.7 -------> OLED_D7 */#define OLED_SH1108_XDATA_GPIO_PORT     GPIOC                       /* GPIOC */
#define OLED_SH1108_XDATA_GPIO_CLK      RCC_APB2Periph_GPIOC#define OLED_SH1108_RES_LOW()            GPIO_ResetBits(OLED_SH1108_RES_GPIO_PORT, OLED_SH1108_RES_PIN)
#define OLED_SH1108_RES_HIGH()           GPIO_SetBits(OLED_SH1108_RES_GPIO_PORT, OLED_SH1108_RES_PIN)#define OLED_SH1108_CS_LOW()            GPIO_ResetBits(OLED_SH1108_CS_GPIO_PORT, OLED_SH1108_CS_PIN)
#define OLED_SH1108_CS_HIGH()           GPIO_SetBits(OLED_SH1108_CS_GPIO_PORT, OLED_SH1108_CS_PIN)#define OLED_SH1108_DC_LOW()            GPIO_ResetBits(OLED_SH1108_DC_GPIO_PORT, OLED_SH1108_DC_PIN)
#define OLED_SH1108_DC_HIGH()           GPIO_SetBits(OLED_SH1108_DC_GPIO_PORT, OLED_SH1108_DC_PIN)#define OLED_SH1108_WR_LOW()            GPIO_ResetBits(OLED_SH1108_WR_GPIO_PORT, OLED_SH1108_WR_PIN)
#define OLED_SH1108_WR_HIGH()           GPIO_SetBits(OLED_SH1108_WR_GPIO_PORT, OLED_SH1108_WR_PIN)#define OLED_SH1108_RD_LOW()            GPIO_ResetBits(OLED_SH1108_RD_GPIO_PORT, OLED_SH1108_RD_PIN)
#define OLED_SH1108_RD_HIGH()           GPIO_SetBits(OLED_SH1108_RD_GPIO_PORT, OLED_SH1108_RD_PIN)#define OLED_SH1108_XDATA(x)            GPIO_Write(OLED_SH1108_XDATA_GPIO_PORT, x)
//#define OLED_SH1108_XDATA(x)            GPIOC->ODR=(GPIOC->ODR & 0xff00) | (x & 0x00FF)#define OLED_SH1108_SCL_LOW()           GPIO_ResetBits(OLED_SH1108_XDATA_GPIO_PORT, OLED_SH1108_D0_PIN)
#define OLED_SH1108_SCL_HIGH()          GPIO_SetBits(OLED_SH1108_XDATA_GPIO_PORT, OLED_SH1108_D0_PIN)
#define OLED_SH1108_SI_LOW()            GPIO_ResetBits(OLED_SH1108_XDATA_GPIO_PORT, OLED_SH1108_D1_PIN)
#define OLED_SH1108_SI_HIGH()           GPIO_SetBits(OLED_SH1108_XDATA_GPIO_PORT, OLED_SH1108_D1_PIN)#define OLED_SH1108_D2_LOW()            GPIO_ResetBits(OLED_SH1108_XDATA_GPIO_PORT, GPIO_Pin_2)
#define OLED_SH1108_D2_HIGH()           GPIO_SetBits(OLED_SH1108_XDATA_GPIO_PORT, GPIO_Pin_2)#define OLED_SH1108_D3_LOW()            GPIO_ResetBits(OLED_SH1108_XDATA_GPIO_PORT, GPIO_Pin_3)
#define OLED_SH1108_D3_HIGH()           GPIO_SetBits(OLED_SH1108_XDATA_GPIO_PORT, GPIO_Pin_3)#define OLED_SH1108_D4_LOW()            GPIO_ResetBits(OLED_SH1108_XDATA_GPIO_PORT, GPIO_Pin_4)
#define OLED_SH1108_D4_HIGH()           GPIO_SetBits(OLED_SH1108_XDATA_GPIO_PORT, GPIO_Pin_4)#define OLED_SH1108_D5_LOW()            GPIO_ResetBits(OLED_SH1108_XDATA_GPIO_PORT, GPIO_Pin_5)
#define OLED_SH1108_D5_HIGH()           GPIO_SetBits(OLED_SH1108_XDATA_GPIO_PORT, GPIO_Pin_5)#define OLED_SH1108_D6_LOW()            GPIO_ResetBits(OLED_SH1108_XDATA_GPIO_PORT, GPIO_Pin_6)
#define OLED_SH1108_D6_HIGH()           GPIO_SetBits(OLED_SH1108_XDATA_GPIO_PORT, GPIO_Pin_6)#define OLED_SH1108_D7_LOW()            GPIO_ResetBits(OLED_SH1108_XDATA_GPIO_PORT, GPIO_Pin_7)
#define OLED_SH1108_D7_HIGH()           GPIO_SetBits(OLED_SH1108_XDATA_GPIO_PORT, GPIO_Pin_7)

这里为了速度将PC口单独连接到OLED的数据线上,这样可以加快操作OLED的读写速度。

测试main函数,实现了OLED显示汉字和字符串,部分图案显示没有测试

/******************************************************************************
* 函数名称: main()
* 功能描述: OLED测试
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
* 其它说明:
* 修改日期      版本号      修改人     修改内容
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* 2013/02/22    V1.0.0.0
******************************************************************************/
INT32S main (void)
{BSP_Init();        // 系统初始化    oled_sh1108_init_program();OLED_ShowChinese(1, 20, 4, 1);//主OLED_ShowChinese(93, 20, 5, 1);//副while(1){     sprintf((char*)oled_display_buf,"    ");oled_sh1108_show_string(61, 5, oled_display_buf, 12);             sprintf((char*)oled_display_buf,"%4.4d-%2.2d-%2.2d", 2022, 1, 1);oled_sh1108_show_string(1, 5, oled_display_buf, 12);sprintf((char*)oled_display_buf,"%2.2d:%2.2d:%2.2d", 10, 10, 10);oled_sh1108_show_string(105, 5, oled_display_buf, 12);    oled_sh1108_refresh_gram();}return (0);
}

STM32内部缓存定义,每次更改该数据,一定时间,或者及时将该数据刷新​​​​​

/*                  OLED的显存
*                   存放格式如下.
*                   [0]0 1 2 3 ... 127
*                   [1]0 1 2 3 ... 127
*                   [2]0 1 2 3 ... 127
*
*                   [19]0 1 2 3 ... 127
*/
static unsigned char OLED_GRAM[128][20];    

刷新缓存到OLED,该函数实现将缓存数据刷新到OLED

/******************************************************************************
* 函数名称: oled_sh1108_all_screen()
* 功能描述: 更新显存到LCD
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
* 其它说明:
* 修改日期      版本号      修改人     修改内容
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* 2013/02/22    V1.0.0.0
******************************************************************************/
void oled_sh1108_refresh_gram(void)
{unsigned char i, j;
//  for(i = 0 ; i < 8; i++)
//  {
//      OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)
//      OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址
//      OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址
//      for(n=0;n<128;n++)
//          OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);
//  }for(i = 0; i < 20; i++){oled_sh1108_write_c(0xb0);oled_sh1108_write_c(0x00 + i);oled_sh1108_write_c(0x00);oled_sh1108_write_c(0x11); for(j = 0; j < 128; j++){oled_sh1108_write_d(OLED_GRAM[j][i]);}}
}       

OLED SH1108 STM32 8080接口实际使用相关推荐

  1. 利用 STC32G12K128 的 LCM 驱动 8080 接口的液晶屏

    零.目录 零.目录 一.硬件和参考对象 二.STC32G 的 LCM 三.简要的初始化流程 四.代码的移植和修改 五.引脚接线 六.运行结果 七.总结和注意事项 一.硬件和参考对象 本次将使用 STC ...

  2. i2c hid 触摸板不能用_I2C 总线协议初探 - STM32 I2C 接口外设学习笔记

    I2C(Inter-Integrated Circuit)总线是由 PHILIPS(飞利浦) 公司开发的两线式串行总线,用于连接微控制器及其外围设备.是微电子通信控制领域广泛采用的一种总线标准.它是同 ...

  3. STM32——SPI接口

    STM32--SPI接口 宗旨:技术的学习是有限的,分享的精神是无限的. 一.SPI协议[SerialPeripheral Interface] 串行外围设备接口,是一种高速全双工的通信总线.在ADC ...

  4. 全志melis系统 - 8080接口CPU屏调试

    全志melis系统8080接口CPU屏调试 一.准备工作 二.点屏步骤 三.核验资料 1. 查看屏规格书确认其为8080接口的CPU屏 2.查看驱动IC型号 四.确认硬件 1.8080接口18位.16 ...

  5. OLED显示屏与Arduino接口

    原文:https://circuitdigest.com/microcontroller-projects/arduino-ssd1306-oled-display 将SSD1306 OLED显示屏与 ...

  6. STM32 FSMC接口驱动4.3寸TFT LCD屏

    STM32 FSMC接口驱动4.3寸TFT LCD屏 STM32的FSMC接口是并行总线接口,可以用于驱动存储芯片如FLASH/SRAM等,也可以用于驱动并口LCD屏. 这里以STM32F103VET ...

  7. 编码器是什么?STM32编码器接口及应用编程

    关注.星标公众号,不错过精彩内容 作者:strongerHuang 微信公众号:strongerHuang 编码器是一种比较常见的产品(也可以理解为传感器),最常见的就是配合电机一起工作,那么,你对编 ...

  8. 数字麦克风PDM信号采集与STM32 I2S接口应用(二)

    在使用STM32的数字麦克风I2S接口时,计算采样率让人头疼,芯片手册上没有明确的说法,而手册上的计算方法经过测试却和实验不符.借助搜索引擎,大部分资料都是来自于开发板卖家或开发板论坛,主要是咪头采集 ...

  9. 第六章 OLED模块+STM32的使用

    这一章教大家使用OLED显示模块,OLED模块在众多的物联网相关的毕设中出现率是比较高的,一般我们用OLED模块来显示系统的一些检测数据或者当前一些状态. 下图是我经常使用的OLED显示模块,其使用也 ...

  10. STM32——SPI接口原理与配置

    一.SPI接口简介 SPI是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口,是Motoroal首先在其MC68HCXX系列处理器上定义的. SPI是一种 ...

最新文章

  1. Python3 reversed 函数
  2. cytocape绘图(三)
  3. 双重惊喜——Windows Phone Developer Tools初体验
  4. (转)程序员新人怎样在复杂代码中找 bug?
  5. 大学生职业生涯规划书性格特征_搞定职业生涯规划书,看这里!
  6. python调用api应用接口_Python接口测试之urllib2库应用
  7. 2017.10.1 蚯蚓 思考记录
  8. 《移山之道-VSTS软件开发指南》---读书笔记
  9. C语言及程序设计提高例程-17 一维数组的定义和引用
  10. 数学建模——人口增长模型的matlab实现以及对2010年人口预测
  11. catia圆管焊接焊接_CATIA焊接设计实例教程
  12. 无穷级数求和7个公式_Excel技能:职场必备的三个SUM函数、10个求和公式
  13. 台式计算机无线网经常掉线,台式机无线上网经常断网怎么办呢
  14. 关闭和重启脚本合二为一orderlist.sh
  15. matlab三点求法向量,matlab求法向量
  16. 微信开发者模式php,php 开启微信公众号开发者模式
  17. 用mysql编资产负债表_资产负债表如何编制!
  18. H5 CSS 引入方式 外联样式表
  19. mysql导出数据到文件
  20. 冒牌网站提供假冒卡巴斯基KIS7.0下载

热门文章

  1. 电子信息工程专业概论_本科专业介绍 | 电子信息工程
  2. 乘客网上订票系统MVC
  3. 电大网络教育计算机应用基础,(热)最新电大奥鹏远程网络教育计算机应用基础题库.doc...
  4. Java 测试:将用户输入的字符串中的敏感字和谐成星星
  5. Xcode6与Xcode5之间的细节差别(Precompile Prefix Header)
  6. xps in html5,学术干货 | 带你“一网捞尽”XPS 基本理论【绝对没有套路】
  7. vs窗体应用程序c语言,使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)...
  8. php构建webservice,php webservice实例(简单易懂)
  9. html小票表格制作,菜单小票模板word
  10. 计算机主板不认硬盘怎么回事,主板sata接口不认硬盘怎么办