AiCube图形化程序自动生成【SPI,SPI-DMA,I2C,I2C-DMA】代码,驱动OLED-12864

AiCube 图形化程序自动生成【SPI,SPI-DMA,I2C,I2C-DMA】代码,
===驱动 OLED-12864,4种 通信组合,一网打尽
===使用 AiCube 生成基于 Ai8051U 的 I2C / SPI 代码
大家可以轻松改到 STC8H8K64U / STC32G12K128 系列

1、认识 OLED-12864 显示屏(SPI+I2C,2种 通信模式)
下图是网络上比较常用的OLED-12864显示屏,通过电阻跳线选择是 SPI通信接口,还是 I2C通信接口

当需要使用SPI接口时,R1、R2、R8不焊,R3、R4焊4.7K电阻,如下图

当需要使用I2C接口时,R2、R3、R9不焊,R1、R4焊4.7K电阻,R8焊0欧电阻,如下图

2、OLED-12864屏接口
本帖的测试环境使用的是Ai8051U试验箱V1.2,试验箱上的OLED12864接口如下图所示:

此部分的接口电路图如下:

SPI使用的是: SS(P3.5), MOSI(P3.4), MISO(P3.3), SCLK(P3.2)这组端口
===但 进行了 MOSI / MISO 切换,也就是 SPI 变成了
                        SS(P3.5), MISO(P3.4), MOSI(P3.3), SCLK(P3.2)
                        强推挽       准双向口         强推挽            强推挽
I2C使用的是:SCL(P3.2), SDA(P3.3)这组端口
                       准双向口      准双向口
                       开漏+上拉   开漏+上拉

试验箱上的OLED接口是8Pin,本帖使用的OLED是7Pin,
靠左对齐将屏插到接口上即可,如下图:
 

3、使用AiCube生成SPI驱动框架
打开AiCube,新建Ai8051U-32Bit项目


3.1、在图形化I/O配置界面中选择SPI的P3口切换组

3.2、在图形化I/O配置界面对OLED相关的I/O模式做如下配置
(特别说明:为适配Ai8051U试验箱的电路图,本范例的SPI需要交换MISO和MOSI管脚功能,
原本的MISO脚需要当作MOSI功能脚进行配置为强推挽)

3.3、在图形化I/O配置界面配置完成后,务必勾选相应的端口,如下图
若不勾选,则AiCube不会生成相应的初始化代码
 

3.4、如下图对SPI功能模块进行配置

(特别说明:为适配Ai8051U试验箱的电路图,本范例的SPI需要交换MISO和MOSI管脚功能
下图中“交换MISO和MOSI功能脚”项需要配置为“是”

虽然给定引用未直接提及在 Keil51 中编写 OLED12864 I2C 模块代码的具体方法,但可从相关信息中获取一些思路。 首先,要了解 I2C 协议。IIC 是一种两线接口,只需要两条线,一条 Serial Data Line(SDA),一条 Serial Clock Line(SCL)。SCL 上升沿将数据输入到从机中,下降沿驱动从机将数据输出给主机(边沿触发);SDA 是双向数据线,为 OD 门,与其他任意数量的 OD 门构成“与”关系 [^3]。 可以借助工具生成基础代码,如 AiCube图形化程序自动生成SPISPI - DMAI2CI2C - DMA代码,可生成基于 Ai8051U 的 I2C 代码,并且可以轻松改到 STC8H8K64U / STC32G12K128 系列,这些代码可作为在 Keil51 中编写 OLED12864 I2C 模块代码的基础进行修改和完善 [^1]。 另外,参考基于 I2C 协议的 OLED 显示的实现过程也有帮助。例如利用 stm32f103 的 GPIO 管脚、VCC 和 GND 连接 OLED 屏的 I2C 接口,采用 cubemx 设计 HAL 库程序框架,下载 U8G2 源码并针对具体硬件进行代码裁剪,最后移植到 HAL 程序中完成显示。虽然这是针对 stm32f103 的操作,但思路可借鉴到 Keil51 中,比如在 Keil51 中也需要对代码进行适配和调整以实现 OLED12864 I2C 模块功能 [^2]。 以下是一个简单的伪代码示例,展示在 Keil51 中可能的 I2C 初始化和数据传输的框架: ```c // 定义 SDA 和 SCL 引脚 sbit SDA = P1^0; sbit SCL = P1^1; // I2C 起始信号 void I2C_Start() { SDA = 1; SCL = 1; SDA = 0; SCL = 0; } // I2C 停止信号 void I2C_Stop() { SDA = 0; SCL = 1; SDA = 1; } // 发送一个字节数据 void I2C_SendByte(unsigned char dat) { unsigned char i; for (i = 0; i < 8; i++) { SDA = (dat & 0x80) >> 7; SCL = 1; SCL = 0; dat <<= 1; } } // 主函数 void main() { // 初始化 I2C_Start(); // 发送数据 I2C_SendByte(0x55); // 停止 I2C_Stop(); while(1); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值