找回密码
 立即注册
楼主: 浦江一水

32G12K128驱动OLED12864,用普通IO模拟SPI或硬件SPI接口方式+双页显示

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2024-6-23 21:41:16 | 显示全部楼层
wnag*** 发表于 2024-6-23 16:18
有没有同时驱动两个屏幕的,两个屏幕驱动芯片不同,屏幕分辨率不同

只要单片机IO口够用,能区分片选或地址,带N个不同驱动芯片、不同分辨率的屏、单色和彩色的,应该是没什么问题的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-6-23 22:01:13 | 显示全部楼层
这个不错学习一下就是耗ram
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-12-12 15:05:58

2

主题

4

回帖

60

积分

注册会员

积分
60
发表于 2024-7-27 16:41:59 | 显示全部楼层
好帖,学习了。正好最近在学习stc32点亮oled屏幕,有不少迷惑,能否咨询一个问题?看到很多SPI/IIC驱动oled视频,但是基本通篇都在讲oled相关函数,没有一个讲到oled和spi的关联的,可否认为不管是硬件spi模块和软件spi,都不需要有特别的代码去初始化它?直接定义几个io口后就能直接进行oled相关操作了?而且这io口也可以随便定义?用哪几个io驱动屏幕都可以?可是看手册还是有专门的spi引脚。这spi资源和要驱动的oled屏幕到底有什么联系?在所有的代码里都看不出来有联系!简直看的一头雾水,能否帮忙解答一下,谢谢!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2024-7-27 21:35:53 | 显示全部楼层
感谢楼上坛友浏览本帖, 关于您提出的几个问号已经看到, 今日天色已晚, 改日会尝试给出我的认知和解答.  请稍等候,  希望能关注一下我的笔复......
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2024-7-28 11:30:25 | 显示全部楼层
今日抽空,写上几句:

看到很多SPI/IIC驱动oled视频,但是基本通篇都在讲oled相关函数,没有一个讲到oled和spi的关联的,
若讲oled和spi的关联,其实也是在讲oled相关函数。

本贴的实验是基于七针OLED显示屏,其实就是在讲与SPI相关的驱动函数。



OLED(12864)显示屏,市面上常见有七针和四针两种,无论是哪种,总要有接口让上位机(单片机MCU)能够去控制驱动它的。
这接口就体现了它是用怎样的通讯协议了:
四针接口是:GND VCC SCL SDA,
除了GND地线、VCC电源线,就是SCL时钟线和SDA数据线,两根线通讯,显然是用IIC通讯协议的。
而本实验所用的屏是七针接口:
//   1.GND ------- 地线
//   2.VCC ------- 电源 3.3-5V
//   3.SCK -- P2.5 时钟端
//   4.SDA -- P2.3 数据端 (MOSI)
//   5.RES -- P2.4 复位端
//   6.DC  -- P3.4 数据/命令切换
//   7.CS  -- P1.1 片选端
除了GND地线、VCC电源线、SCL时钟线、和SDA数据线,还有DC(数据/命令)线,CS片选线, RES复位线。
这让人想到的是:它不是一般的IIC接口了,那么是什么接口呢?


屏内部的主控芯片是SSD1306,其实SSD1306本身是可支持串、并口通讯,包括IIC和SPI等多种接口模式的。
我们所看到的屏是经过厂家二次开发,增加了转接板的显示屏模块,同时也就局限了它的接口类型。
看它对外的接口引脚不多,显然它不会是并行通讯接口了,那只能是串口通讯接口了。
再对照标准SPI通讯协议接口:
(1)MOSI – 主器件数据输出,从器件数据输入
(2)MISO – 主器件数据输入,从器件数据输出
(3)SCLK – 时钟信号,由主器件产生
(4)NSS  – 从器件使能信号,也有标注为CS(片选)
与此七针屏模块接口大部分对应覆盖,基本上可认为是SPI的接口屏了。
无论是什么接口,总是要让上位机(单片机MCU)能够去控制驱动它的。
那么首先,最重要的就是要了解屏模块的通讯时序了。
任何屏模块的手册,总要给出接口通讯的时序图的。
从显示屏的立场说,无论用什么样的上位机(单片机MCU),只要接口通讯时序符合屏模块的时序要求,都可以控制显示。


那么:
可否认为不管是硬件spi模块和软件spi,都不需要有特别的代码去初始化它?
应该是:不管是硬件spi模块和软件spi,都需要用符合屏模块时序要求的特殊的代码去初始化它。

直接定义几个io口后就能直接进行oled相关操作了?
是的。这是仅指软件模拟SPI方式。

而且这io口也可以随便定义?
是的,只要能控制IO端口电平输出输入的,就可以随便定义。这是指软件模拟SPI方式。
硬件SPI方式不可以随便定义,需要查看MCU手册,其中规定了可切换使用的IO端口。

用哪几个io驱动屏幕都可以?
是的,只要能控制IO端口电平输出输入的,都可以。这是指软件模拟SPI方式。
硬件SPI方式不可以随便用,需要查看MCU手册,其中规定了可切换使用的IO端口。

可是看手册还是有专门的spi引脚。
这个“手册”应该是指单片机MCU的手册吧? 而不是指OLED屏的手册。
这就与MCU的资源有关了,当然STC32G12K128很强大,是具有专门的SPI引脚的。
也就是说,STC32G12K128具有硬件SPI接口功能。你可以选用它,也可以不用它。

这spi资源和要驱动的oled屏幕到底有什么联系?
笼统地说,可以说没有必然关系,也可以说有关系,就是这么个关系。
硬件SPI资源是对与SPI设备而言的,不是独对OLED屏的,它可以对接具有SPI接口的存储器,也可以对接具有SPI接口的显示屏。
如果OLED屏模块具有SPI接口,就可以用硬件SPI方式控制它显示,如果OLED屏模块没有SPI接口,就无法用硬件SPI方式控制它显示。
再回到具体本帖实验来说,这OLED屏模块是具有SPI接口的,这STC32G也具有SPI资源的,
那么,就是有可能实现用硬件SPI方式来控制OLED屏的显示了。
当然也可以不用它! 为了便于移植,可直接用软件模拟SPI方式,不用查MCU手册资料,牺牲一点速度,如果可以接受的话。


在所有的代码里都看不出来有联系!
应该能看出来的,尤其是在写命令、写数据字节的函数中,这些代码正是在执行符合OLED屏时序图所要求的操作。

简直看的一头雾水,能否帮忙解答一下,谢谢!
希望能拨开迷雾见青天。不用谢的,互相学习交流,是一件快乐的事,很乐意。


关于硬件SPI与软件模拟SPI各有特点,本帖楼上都已有谈论,可以再阅读一下。


匆匆笔复,也许辞不达意,多包涵,仅供参考了。



回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2024-8-2 11:05:55 | 显示全部楼层
非常感谢 autopccopy 的鲜花鼓励。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:347
  • 最近打卡:2025-05-01 10:36:23

7

主题

281

回帖

1051

积分

金牌会员

积分
1051
发表于 2024-8-4 13:46:56 | 显示全部楼层
楼主你好!请教个问题。我最近学习“冲哥提供的 DMA-I2C OLED12864 演示程序”,发现屠龙刀三的P14,P15端口,不能用IIC驱动OLED,其他两个端口都可以驱动。不知道是什么原因。我用的是屠龙刀三.2。是不是有什么特殊的地方要注意?谢谢!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2024-8-4 16:35:11 | 显示全部楼层
楼上坛友你好,首先感谢你对本帖的浏览。

关于“冲哥提供的 DMA-I2C OLED12864 演示程序”目前我还没有实验过,但是对于你所提的问题,尝试回答一下。

发现屠龙刀三的P14,P15端口,不能用IIC驱动OLED,其他两个端口都可以驱动“, 这说明软件代码算法应该是没什么问题的。
为什么切换端口后不行呢?本人认为可从两方面思考:
一是查手册,对应切换端口的寄存器设置是否正确?
    这在IIC_Init()函数中看是比较方便的,将I2C_S1 =0;I2C_S0 =0;即可。(这就是切换到P1.4和P1.5的,当然要注意P1.4对应SDA和P1.5对应SCL,可别搞反了)
二是检查硬件是否有影响?
    经查,屠龙刀三对P1.4和P1.5端口是另有设计安排的,P1.5和P1.4外围电阻电容默认是焊着的。这样的RC电路,对IIC线路的电平变化的时序极有可能是有影响的。
    所以,如果要用P1.4和P1.5作为IIC端口来驱动OLED时, 至少要把R108和R118那两个0欧电阻焊开了,排除这一因素。

供参考,祝实验顺利愉快!

2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2024-8-5 08:08:01 | 显示全部楼层
本帖最后由 浦江一水 于 2024-8-5 14:30 编辑

感谢版主 autopccopy 对楼上回复的鲜花鼓励。

感谢版主 STC芯征程 对楼上回复的鲜花鼓励。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:265
  • 最近打卡:2025-05-01 07:25:06

0

主题

206

回帖

1522

积分

金牌会员

积分
1522
发表于 2024-8-5 19:11:28 | 显示全部楼层
支持,点赞
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 07:10 , Processed in 0.176986 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表