当前位置: 首页 > news >正文

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

AiCube 图形化程序自动生成SPISPI-DMAI2CI2C-DMA代码,
===驱动 OLED-128644种 通信组合,一网打尽
===使用 AiCube 生成基于 Ai8051U 的 I2C / SPI 代码
大家可以轻松改到 STC8H8K64U / STC32G12K128 系列1、认识 OLED-12864 显示屏SPI+I2C2种 通信模式
下图是网络上比较常用的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功能脚”项需要配置为“是”)

3.5、完成上面的配置点击AiCube界面中的“创建Keil项目”按钮即可生成Keil项目框架及相应的代码

4、完善代码添加OLED驱动代码
4.1、添加OLED驱动代码和数据代码到项目中
打开AiCube自动生成的Keil项目,将OLED驱动代码"oled.c"和图片字库代码"tab.c"添加到项目中

4.2、使用硬件SPI实现OLED的底层驱动代码(核心代码)
  1. ////////////////////////////////////////

  1. ////////////////////////////////////////
  2. // 复位OLED
  3. // 入口参数: 无
  4. // 函数返回: 无
  5. ////////////////////////////////////////
  6. void OLED_RESET()
  7. {
  8.     OLED_RES = 1; delay_ms(200);
  9.     OLED_RES = 0; delay_ms(200);        //复位
  10.     OLED_RES = 1;
  11. }
  12. ////////////////////////////////////////
  13. // 写OLED命令
  14. // 入口参数: cmd (命令序列)
  15. //           len (命令长度)
  16. // 函数返回: 无
  17. ////////////////////////////////////////
  18. void OLED_WR_CMD(uint8_t *cmd, uint16_t len)
  19. {
  20.     OLED_DC = 0;                        //写命令
  21.     OLED_SendData(cmd, len);
  22. }
  23. ////////////////////////////////////////
  24. // 写OLED数据
  25. // 入口参数: dat (数据序列)
  26. //           len (数据长度)
  27. // 函数返回: 无
  28. ////////////////////////////////////////
  29. void OLED_WR_DAT(uint8_t *dat, uint16_t len)
  30. {
  31.     OLED_DC = 1;                        //写数据
  32.     OLED_SendData(dat, len);
  33. }
  34. ////////////////////////////////////////
  35. // 发送OLED数据
  36. // 入口参数: dat (数据序列)
  37. //           len (数据长度)
  38. // 函数返回: 无
  39. ////////////////////////////////////////
  40. void OLED_SendData(uint8_t *dat, uint16_t len)
  41. {
  42.     OLED_CS = 0;                       //片选使能
  43.     while (len--)
  44.     {
  45.         SPI_SendData(*dat++);             //写数据
  46.         while (!SPI_CheckFlag());          //等待数据发生完成
  47.         SPI_ClearFlag();               //清除完成标志
  48.     }
  49.     OLED_CS = 1;                      //片选禁能
  50. }
http://www.dtcms.com/a/449711.html

相关文章:

  • Java 变量类型
  • 怎么修改网站源文件高明网站设计多少钱
  • 第14节-增强表结构-Renaming-columns
  • 网站开发长沙免费国内linux服务器
  • 276-基于Python的爱奇艺视频数据可视化分析系统
  • Kubernetes容器运行时:cri-docker vs containerd
  • 购物网站图片的放大怎么做的wordpress表格布局插件
  • 【Canvas与机械】铜制螺帽
  • HarmonyOS ArkTS 深度解析:装饰器与状态管理机制
  • 关于建设网站的合作合同范本中国住房城乡建设部网站首页
  • 松江新城建设投资有限公司网站电子商务营销策略分析
  • 做零售的外贸网站老薛主机卸载wordpress
  • 【Android】Android 的三种动画(帧动画、View 动画、属性动画)
  • 南阳提高网站排名做网站租服务器多少钱
  • Dify本地初始化后安装模型供应商瞬间失败控制台报错401
  • Prometheus接入“飞书“实现自动化告警
  • 现在asp做网站网站改版后百度不收录
  • 做外贸要做什么网站搭建一个网站教程
  • 织梦做的网站怎么会被黑建设项目环评在什么网站公示
  • Python @装饰器用法详解
  • 模电基础:差分放大电路
  • SSM--day2--Spring(二)--核心容器注解开发Spring整合
  • 正规的装饰行业网站建设公司北京新浪网站制作公司
  • Verilog可综合电路设计:重要语法细节指南
  • 力扣hot100做题整理(41-50)
  • 大连模板网站制作公司电话创业平台有哪些
  • 实战指南:文生图模型 Animagine XL 4.0
  • Linux中fcntl系统调用的实现
  • 网站搭建大型公司框架网站模板
  • RAG开发