找回密码
 立即注册
查看: 745|回复: 17

用 AiCube 配置硬件 I2C 点亮OLED12864 的过程记录, STC8H8K64U, Ai8051U

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:428
  • 最近打卡:2025-06-09 05:03:21

28

主题

328

回帖

2830

积分

荣誉版主

积分
2830
发表于 7 天前 | 显示全部楼层 |阅读模式
截图202506031333041140.jpg
记录一下用 AiCube 配置硬件 I2C 点亮OLED12864 的过程
===STC8H8K64U, Ai8051U
OLED_I2C_Ai8051U_32bit.rar (81.75 KB, 下载次数: 30)
一、首先是用AiCube创建硬件I2C工程
1.打开最新版的ISP软件,然后从菜单栏打开AiCube

1.1打开ISP打开AiCube.jpg

要使用AiCube创建的工程,首先需要更新Keil的头文件,否则编译过程中会报错。
1.1.1报错提示.jpg


2. 新建工程
1.2新建工程.jpg

看到窗口下方依旧有添加头文件的提示,AiCube的工程师真是操碎了心


3. 在弹出的【新建】窗口里,首先选择使用的单片机的型号。
下拉菜单列出的是目前支持的四种型号,这里用AI8051U 32bit做演示
1.3选择单片机型号.jpg



4、选择新建工程项目的路径,起一个项目名称。
1.4工程名称.jpg

路径和项目名称尽量不要跟已有的工程项目重名,否则会覆盖掉原有的配置和代码。
点击“确定”之后会进入配置界面

5. 需要的功能都可以在左侧列表里选择,然后根据需要配置
1.5.1配置界面总.jpg

比如时钟配置没选择需要的工作频率
如果需要USB直接下载,USB外设也可以勾选上。
1.5.2时钟配置.jpg


既然要驱动I2C的OLED屏幕,“IIC总线”这一项需要重点配置
1.5.3配置I2C.jpg

工作模式选择【主机模式】
如果单片机速度设置的比较快,【I2C时钟分频】这一项必须设置。
比如在40MHz的时候,测试过几种不同驱动芯片的OLED屏幕,
不分频的时候基本都不能点亮,有的分频填1就可以点亮,有的需要填2才可以。
为了通用,基本至少填2就可以了。
其它I2C设备的话,根据需要选择,也可以在程序中随时修改。
比如存储芯片AT24C256,40MHz下至少需要3才能比较顺利地读写。

最后是在【图形化I/O口配置】窗口选择要用的硬件I2C管脚。
我用的是P24和P23这一组。
选择之后,管脚图上也会有对应的显示。
1.5.4图形化配置管脚.jpg


这样对硬件I2C的配置就完成了
在I2C窗口里也可以看到选中的管脚。
点击创建按钮,项目工程就会自动生成了。

1.5.5确认创建.jpg 1.5.6生成项目文件.jpg


==========================================================

二、加入OLED驱动程序

第一步,先找到一个模拟I2C的OLED驱动程序,
将驱动文件夹复制到工程文件夹里
然后添加驱动文件的路径
并将驱动文件加入到工程列表里
2.1添加OLED驱动路径.jpg 2.2添加文件到列表.jpg


第二步,将OLED里调用单片机的头文件
替换成AiCube生成的config.h头文件
这样一些预设就不用繁琐地到处添了
2.3替换头文件.jpg


第三步,是将模拟I2C的代码替换成硬件I2C的。

打开OLED.C文件
可以看到一串模拟I2C的命令
2.4模拟I2C命令.jpg


接下来就是将模拟I2C的命令替换成硬件I2C的。替换方式有两种:
一种是根据数据手册里的例程,直接将这些替换成硬件I2C的命令;
2.5硬件I2C命令.jpg


另一种就是AiCube生成的调用i2c库文件的方式。
这个方式比较清爽,因为在库文件里,可以找到预设好的所有I2C命令
比起各种相关寄存器的名称,这些命令从字面上更容易理解用途
2.7硬件I2C库.jpg


于是那一串I2C命令函数就可以直接去掉了

只保留向OLED发送指令和数据的函数进行替换就可以了
2.6库形式替换硬件I2C命令.jpg


为了调用方便,在i2c库文件里还有封装好的几个OLED常用的命令函数
2.8硬件I2C库封装命令函数.jpg

这几个函数可以直接使用,也可以作为例程,用来学习I2C的配置过程,
然后写出自己的命令函数,比单纯啃数据手册容易太多了



第四步,就是将发送指令和数据的函数里的命令函数,用库函数里的命令函数进行替换。
2.9硬件I2C库封装命令函数.jpg



到这里,整个替换过成就完成了。

在main.c文件里,添加上OLED的头文件,还有OLED初始化函数,
编译之后顺利点亮OLED屏幕

3.1测试程序.jpg 3.2演示结果.jpg


===============================================================

另外,又试了一下不在AiCube的选型列表里的STC8G1K08A单片机,用的是八脚的芯片。

从数据手册里看到,八脚的管脚定义有些特殊
P32 P33这一组I2C引脚对应的是通常型号的P15 P14这一组的配置
3.3STC8G手册.jpg


所以在AiCube里,试了下用同为8系列的AI8H8K64U这个型号创建工程,
然后I2C引脚配置成P15 P14这一组
3.4STC8G管脚配置.jpg


结果同样也可以顺利点亮OLED屏幕!
3.5STC8G演示.jpg





最后是把存储芯片AT24C256和OLED挂在同一条I2C总线上读写的实验
AT24C的读写代码也是用同样的方法替换成了硬件I2C
3.6AT读写.jpg

在STC8H8K64U上用的是 P15/P14 引脚,负责向AT24C256写入图片数据,
在Ai8051U上用的是 P24/P23 引脚,负责读取数据显示出来

AiCube 配置硬件I2C 点亮OLED12864 的过程, STC8H8K64U, Ai8051U  


==================================================

AiCube 配置硬件 I2C 点亮OLED12864 的过程记录的视频版


截图202506031332049220.jpg
2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

3

主题

832

回帖

375

积分

等待验证会员

积分
375
发表于 7 天前 | 显示全部楼层
在使用AiCube配置硬件的I2C点亮OLED系统时,以下是详细的步骤记录:

一、创建AiCube工程
1. 打开ISP软件:首先,打开ISP软件,确保其系统完全运行。
2. 更新Keil头文件:从菜单栏中选择“Keil”→“更新”→“更新头文件”。更新Keil头文件是配置AiCube系统的基础,确保所有外部库和插件能够正常工作。
3. 新建AiCube工程:
在ISP软件的菜单栏中选择“AiCube”→“新建工程”。
在弹出的“新建工程”窗口中,选择“项目”类型,并按照提示填写项目名称和路径。
确定后,进入配置界面,点击“确定”以创建新项目。

二、配置AiCube项目
1. 选择单片机型号:在配置界面中,选择使用Ai8051U的32bit型号。
2. 选择项目路径和名称:在弹出的“项目路径”下,选择一个适合的项目名称,确保其不与已有的项目名称冲突,以避免覆盖原有配置和代码。
3. 点击“确定”:完成项目路径和名称的设置后,点击“确定”以创建新项目。

三、配置I2C外设
1. 选择I2C外设:
在配置界面中,点击“I2C外设”以打开I2C配置界面。
选择“主机模式”以确保I2C驱动能够正常工作。
2. 配置I2C时钟:
在I2C时钟下,输入需要的时钟频率(如40MHz)。
标记为“工作模式:主机模式”。
3. 配置I2C分频:
在I2C分频下,输入需要的时钟分频值(如40MHz)。
标记为“工作模式:主机模式”。
4. 验证配置:
点击“确定”以保存配置。
进入测试模式,验证I2C外设的配置是否正确。

四、配置OLED屏幕外设
1. 选择OLED屏幕型号:在配置界面中,选择需要驱动的OLED屏幕型号。
2. 选择OLED外设:
在配置界面中,点击“OLED外设”以打开OLED外设配置界面。
选择支持的OLED接口,并勾选必要的驱动芯片(如华为OLED驱动)。
3. 配置I2C驱动:
在OLED外设配置中,点击“I2C驱动”以打开I2C驱动配置界面。
在“驱动类型”下选择“主机模式”。
在“I2C时钟”下输入时钟频率(如40MHz)。
在“I2C分频”下输入时钟分频值(如40MHz)。
4. 确认配置:
点击“确定”以保存配置。
进入测试模式,验证I2C驱动是否正常工作。

五、测试并完成配置
1. 测试I2C连接:在测试模式中,连接AiCube到OLED屏幕,并验证I2C通信是否正常。
2. 测试OLED显示:在测试模式中,直接尝试显示文字或简单的图形,以确认OLED屏幕是否正常工作。
3. 完成配置:确认所有外设配置已完成,返回到项目配置界面。

通过以上步骤,你已经成功配置了AiCube系统并驱动了I2C外设的OLED屏幕。如果在任何步骤中遇到问题,建议查阅AiCube的官方文档或联系技术支持团队进行进一步支持。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-06-03 09:09:20
已绑定手机

9

主题

61

回帖

313

积分

中级会员

积分
313
发表于 7 天前 | 显示全部楼层
大佬分享一下OLED的驱动呗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-06-03 09:09:20
已绑定手机

9

主题

61

回帖

313

积分

中级会员

积分
313
发表于 7 天前 | 显示全部楼层
或者分享一下工程行不,感觉我的oled驱动库占用有点大

点评

整理了一个精简过的驱动。 工程文件是Ai8051U 32bit版的, 里面的OLEDiic文件夹是OLED驱动,不受单片机型号限制,移植到STC8H上也一样用。 里面模拟I2C部分只是注释掉了,如果需要模拟I2C可以换回来。  详情 回复 发表于 7 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:92
  • 最近打卡:2025-06-09 08:32:55

731

主题

1万

回帖

1万

积分

管理员

积分
16326
发表于 7 天前 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:428
  • 最近打卡:2025-06-09 05:03:21

28

主题

328

回帖

2830

积分

荣誉版主

积分
2830
发表于 7 天前 | 显示全部楼层
Sky_c*** 发表于 2025-6-2 16:37
或者分享一下工程行不,感觉我的oled驱动库占用有点大

更新了一个精简过的驱动。
整理在一楼最上面了。
工程文件是Ai8051U 32bit版的,
里面的OLEDiic文件夹是OLED驱动,不受单片机型号限制,移植到STC8H上也一样用。
里面模拟I2C部分只是注释掉了,如果需要模拟I2C可以换回来。


已经尽可能精简了,初始化函数只保留了必须的几条指令,其它都用OLED芯片的默认值。
如果还觉得大,可以把用缓存方式画画的函数还有缓存数组去掉,只保留最简单的显示文字和图片的函数。
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-06-08 08:54:43
已绑定手机

1

主题

11

回帖

87

积分

注册会员

积分
87
发表于 6 天前 | 显示全部楼层
不错不错,好工具啊。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-06-09 08:20:27
已绑定手机

0

主题

2

回帖

102

积分

注册会员

积分
102
发表于 6 天前 | 显示全部楼层
谢谢分享,学习
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-06-03 09:09:20
已绑定手机

9

主题

61

回帖

313

积分

中级会员

积分
313
发表于 6 天前 | 显示全部楼层
大*** 发表于 2025-6-2 21:25
更新了一个精简过的驱动。
整理在一楼最上面了。
工程文件是Ai8051U 32bit版的,

感谢大佬!更换后edata降低了将近700个字节,edata本身就2kb,降低了1/4,本来都打算改设置了

点评

自己定制的驱动库才是最好用的。 这个还可以继续精简, 比如英文字符的字库,里面放了6×8和8×16两种字号。假如只需要一种字号,把用不到的去掉,显示函数里也对应去掉,就又能省掉好多。假如只用保留要用到的数字  详情 回复 发表于 6 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:428
  • 最近打卡:2025-06-09 05:03:21

28

主题

328

回帖

2830

积分

荣誉版主

积分
2830
发表于 6 天前 | 显示全部楼层
Sky_c*** 发表于 2025-6-3 09:09
感谢大佬!更换后edata降低了将近700个字节,edata本身就2kb,降低了1/4,本来都打算改设置了 ...

自己定制的驱动库才是最好用的。
这个还可以继续精简,
比如英文字符的字库,里面放了6×8和8×16两种字号。
假如只需要一种字号,把用不到的去掉,显示函数里也对应去掉,就又能省掉好多。
假如只保留要用到的数字和字母,就像中文字模数组那样,就又能省好几百字节。

能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-9 12:50 , Processed in 1.036235 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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