今天在老谭的帮助下,操作了一下OLED,以前对于液晶显示不是很重视,特别是对于这种OLED的显示,更是没怎么好好的熟悉过,今天被老谭逼着,好好的练习了一下对于OLED的操作。

先来一些OLED的介绍。

OLED,即有机发光二极管,又称为有机电激光显示。OLED由于具备自发光,不需要光源、对比度高、厚度薄、视角广、反应速度快、可用于扭曲性面板、使用温度范围广、构造及制作简单等优异性特点。

以现在的技术,OLED尺寸很难做到大型化,但是分辨率却而已做到很高。这次我使用的OLED尺寸为0.96寸,但是分辨率达到了128*64。

这附图是显存和屏幕对应关系表,从上表上可以发现,屏幕每页包含128列,总共8页,每页总共8行。正好就是128*64的点阵大小。

该OLED提供多种接口方式:6800、8080、4线SPI、IIC接口,方式的选择主要是通过芯片引脚BS1和BS2设置的,BS1和BS2的设置方法与模块的接口模式的关系如下表:

关于6800和8080、IIC方式的接口和电路连接就不介绍了。我主要使用的是SPI接口,在这里主要介绍一下关于SPI的引脚连接。

CS:OLED的片选信号。

RST(RES):硬复位OLED

DC:命令/数据标志 (0:读写命令,1:读写数据)

SCLK:串行时钟线。在4线串行模式下,D0信号线作为串行时钟线SCLK。

SDIN:串行数据线。在4线串行模式下,D1信号线作为串行数据线SDIN。

其余引脚的连接查看数据手册就可以进行自行设计。

这里,我使用的MCU是STM32F103ZET6,本来在电路板上设计的时候,想着是使用硬件SPI,所以除了SCLK、SDIN之外,其余引脚也是连接的硬件SPI的I/O引脚,但是后来想到,自己不知道在使能SPI引脚时钟之后,我只使用了其中两个引脚,怎么将其余两个引脚作为普通GPIO使用,所以最后直接使用的是模拟SPI方式。

其实,只要是编写了模拟SPI部分的程序之后,就可以完全操作这个液晶屏了。我的学习过程是参照正点原子的例程了PDF文档进行学习的。这里,前面的程序部分都是参考正点原子的程序编写的,但是,后面关于显示部分,个人感觉正点原子对于OLED的操作方式有点像对于TFT彩色液晶屏的操作,感觉不是很适合OLED的操作方式,所以,自己重新编写了这部分的程序。

今天在自己编写和调试过程中,主要问题是集中在关于字模取模和关于显示部分的理解,所以,今天晚上的总结主要是对于这部分只是的总结。

字模取模软件使用的是PCtoLCD2002软件,感觉这个软件还是使用起来比较的顺手的。下面,先来一个软件界面的截图,然后再说明一下操作需要注意的事项。

第一张图片是软件的界面,在这个界面中,我们可以进行以下操作:①字体大小设置;②点阵大小设置;③字模输入;④生成字模编码;⑤保存字模编码为TXT文本。

第二张图片是软件取模方式设置界面,在这个界面中,我们可以进行以下操作:①点阵格式选择,这个根据你使用的点阵的实际情况进行选择。②取模方式选择,这个是比较重要的,如果取模方式设置不正确,那么取模的编码是没有任何意义的;③取模走向:这个也是关系到字模编码正确与否的关键,需要认真选择;④自定义格式,可以选择你需要的字模编码输出格式,可以选择C51模式,输出的是十六进制数据,方便我们使用;⑤每行显示的数据:这个选项是关系到你最后生成的字模编码的数组大小,可以根据自己的实际情况进行选择,然后在程序中进行运用。

关于取模方式,我使用的OLED支持的是列行式,即先显示每列,然后再一行一行的增加,直至显示完我们的数据。

然后,还有一点需要注意的就是,使用这个软件生成的字模编码,我们可以有两种存储方式:①使用二维数组;②使用一维数组。数组使用的不同,也就造成了我们在程序中应用时候的不同。

如果我们要显示的字符比较的小,即16*8,或者12*8,也就是不牵扯到多页的话,我们的程序就比较的简单,因为在编程的过程中,我们不需要增加页的地址,但是,如果我们显示的字符是多页的话,这样就牵扯到了多页的处理。下面附上我自己编写的程序:

上面的程序中,主要使用的一维数组存储的字模编码。而且字模的大小是32*16大小的字符,即需要占用4页。使用offset变量实现了 初始列 位置的设置,通过num来查询数据,确定了我们字模编码。

如果在使用过程中,使用的字模大小不一样的话,如果不牵扯到多页,就可以取消掉k变量,使用k变量实现了多页的显示。

如果我们使用的字模的大小不一样的话,即不是 16的大小,我们只需要修改 for(j=k*16;j<(k=1)*16;j++) 中的数字 16,将 16 修改为我们实际工作中需要的编码。

如果我们使用的字模数组不是二维数组的话,只需要修改LCDWriteByte 函数中的第一个参数,这个参数 就是 编码数据值。比如修改为二维数组 numeric[x1][x2],其中x1代表的是索引值,即我们需要显示的数据。x2代表的是 整个字模大小,一般,二维数组中的数组大小都是一样的,即x2为固定值。所以,这个程序中,我们就修改为

numeric[num+j][64];

从上面的分析中,我才渐渐的明白了关于多页显示部分的原理。可能是有点笨吧。呵呵

下面实际说明一个自己的取模画面:

   

通过实例说明一下自己对OLED上面的字符显示的理解,和对取模方式的选择。

好了,到这里,就将自己今天比较疑惑的地方总结完成了。今天的问题还是主要在多页字符显示方式的不理解方面,经过这个之后,对于多页显示终于有了清晰的认识了。

对于OLED的操作也是有些认知了。但是没有做字符串和点的显示实验,以后在补上。

关于OLED操作函数补充:

//OLED数据显示函数

void LCD_DisNumLine(UINT8 offset, UINT8 num)
{
UINT8 j, k;

for(k=0; k<4; k++)
{
OLED_WR_Byte(0xb2+k, OLED_CMD); // set page address
OLED_WR_Byte(0x10+offset, OLED_CMD); //set column 
OLED_WR_Byte(0x00, OLED_CMD);

for(j=k*16; j<(k+1)*16; j++)
{
OLED_WR_Byte(zimo[num][j],OLED_DATA);
}
}
}

//OLED写数据函数

void OLED_WR_Byte(u8 dat,u8 cmd)
{
u8 i;  
OLED_RS=cmd; 
OLED_CS=0;  
for(i=0;i<8;i++)
{  
OLED_SCLK=0;
if(dat&0x80)OLED_SDIN=1;
else OLED_SDIN=0;
OLED_SCLK=1;
dat<<=1;   
}  
OLED_CS=1;  
OLED_RS=1;    
}

OLED液晶屏操作记录相关推荐

  1. 【雕爷学编程】Arduino动手做(93)--- 0.96寸OLED液晶屏

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  2. 【雕爷学编程】Arduino动手做(136)---0.91寸OLED液晶屏模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  3. micropython stm32f429_[MicroPython]STM32F407开发板驱动OLED液晶屏

    1.实验目的 1.学习在PC机系统中扩展简单I/O 接口的方法. 2.进一步学习编制数据输出程序的设计方法. 3.学习 F407 Micropython开发板控制OLED显示字符. 2.所需元器件 F ...

  4. micropython 驱动oled0.91_[MicroPython]STM32F407开发板驱动OLED液晶屏

    1.实验目的 1.学习在PC机系统中扩展简单I/O 接口的方法. 2.进一步学习编制数据输出程序的设计方法. 3.学习 F407 Micropython开发板控制OLED显示字符. 2.所需元器件 F ...

  5. STM32驱动0.96寸OLED液晶屏

    一.OLED简述 1.OLED模块简介 2.SSD1306控制芯片驱动 3.如何显示字符 4.字幕显示原理 二. 上下或左右的滑动显示长字符 三. 显示AHT20的温度和湿度 四.总结 一.OLED简 ...

  6. 基于STM32F103ZET6主控平台实现(SPI接口)OLED液晶屏驱动

    一个热爱代码的工程师,唯有凭借双手不断敲打,才可以快速提升实力! 本文谨以记录,日后相忘时再作复习,代码没有贵贱,既来之则安之. OLED液晶屏产品图和效果图 由上图我们知道:OLED液晶屏分别有GN ...

  7. ESP8266配网并将IP显示至oled液晶屏 ESP8266远程连接服务器控制灯或继电器

    智能车与机器人技术交流平台 概述 可能已经有人很熟练的编写ESP8266程序,但是因为我学习运用的时间也就一周左右,踩了好多坑,所以不喜就不要看勿喷.文章仅此分享交流一些经验,供此参考. 主要做的工作 ...

  8. Arduino--0.91寸OLED液晶屏

    (1)简介 0.91寸OLED液晶屏如下图所示,接线比较简单,通过IIC通讯,但是需要注意的是OLED没有背光,只供电的情况下是不会有任何显示的,只有程序正确下载后才会有显示. (2)接线 0.91O ...

  9. 联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 128x64 OLED液晶屏

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

最新文章

  1. php 清空cache,到底如何清除 cache? 我真的快瘋了
  2. Android开发之sdcard读写数据(源代码分享)
  3. 078_html5Canvas
  4. LumaQQ.NET操作指令制作(3)
  5. VTK:Arbitrary3DCursor用法实战
  6. webbrowser载入地图网页出现脚本错误解决
  7. ios 百度地图指定区域_获取百度地图可视区域范围的数据
  8. Web前后端笔记-vue cli及java进行AES加解密
  9. Mobile-LPR——面向移动端的准商业级车牌识别库
  10. 与时俱进的治疗策略不断提高RA无药缓解机会[EULAR2015_SAT0058]
  11. python3.6---之f'{}'
  12. 尚学堂-张士兵-王勇JAVA视频教程下载
  13. 电脑系统没有自带的字体-楷体GB2312字体 免费版提供下载
  14. RPG多人回合制游戏战斗框架设计《一:基本战斗流程》
  15. 数据科学 IPython 笔记本 8.16 地理数据和 Basemap
  16. 数值计算作业:Guass列选主元消去法解线性方程组
  17. 2021字节秋招算法岗面经——抖音推荐
  18. 开发DSP硬件驱动程序的一种方法
  19. 比原链CEO朗豫:DeFi让用户真正理解区块链,意义重大
  20. 使用MayaLiveLink插件在UE4中预览Maya模型动作

热门文章

  1. java Comparator实现排序
  2. 7-8 将x的平方赋值给y (5 分)
  3. 把握新时代的投资机会,品今控股专家分析“新经济”发展方向
  4. 全球及中国滚珠轴承抽屉滑轨行业研究及十四五规划分析报告
  5. hibernate4.1 find illustrate
  6. 报错:C1189#error: The <experimental/filesystem> header providing std::ex………………
  7. uni-app获取Storage中的数据以及将数据赋值给变量
  8. Linux中各命令英文缩写的含义
  9. 插值、拟合和逼近的区别
  10. facebook,twitter的分享图片功能,facebook分享图片