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

OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕

7.1实验效果

Hispark WiFi开发套件又提供一个oled屏幕,但是鸿蒙源码中没有这个屏幕的驱动,我们需要自己去移植。

以下是移植效果:

接口:I2C

使用引脚:HI_IO_NAME_GPIO_13 、 HI_IO_NAME_GPIO_14

7.2代码

这里我直接用许思维老师之前移植好的代码,不过由于鸿蒙版本更新过快,许思维老师之前的代码是基于1.0版本,直接拿到3.0以上版本编译会出错,这里我修改了编译错误。放在我的仓库中。

整个代码目录如下:

主要是3个文件夹:

(1)examples

测试代码,里面有一个ssd1306_demo.c文件,是我们的入口函数。

(2)libm_port

从musl libc中抽取的sincos的实现。

(3)ssd1306

相关驱动代码部分。

接下来我们来重点看下代码部分:

(1)初始化入口函数

入口函数是 Ssd1306TestDemo ,它创建了Ssd1306TestTask线程,所以我们重点看 Ssd1306TestTask线程。

void Ssd1306TestTask(void* arg)
{(void) arg;//先初始化引脚IoTGpioInit(HI_IO_NAME_GPIO_13);IoTGpioInit(HI_IO_NAME_GPIO_14);//将引脚功能设置为I2C引脚hi_io_set_func(HI_IO_NAME_GPIO_13, HI_IO_FUNC_GPIO_13_I2C0_SDA);hi_io_set_func(HI_IO_NAME_GPIO_14, HI_IO_FUNC_GPIO_14_I2C0_SCL);//初始化I2C0IoTI2cInit(0, OLED_I2C_BAUDRATE);//WatchDogDisable();usleep(20*1000);//初始化SSD1306ssd1306_Init();//全部清空ssd1306_Fill(Black);ssd1306_SetCursor(0, 0);//显示 Hello HarmonyOS!ssd1306_DrawString("Hello HarmonyOS!", Font_7x10, White);uint32_t start = HAL_GetTick();ssd1306_UpdateScreen();uint32_t end = HAL_GetTick();printf("ssd1306_UpdateScreen time cost: %d ms.\r\n", end - start);TestDrawChinese1();TestDrawChinese2();TestGetTick();while (1) {//进行所有用例测试ssd1306_TestAll();usleep(10000);}
}

(2)I2C发送函数

我们要操作OLED屏幕,就需要使用I2C发送数据给OLED屏幕,代码使用

ssd1306_SendData函数发送I2C数据,该函数原型如下,直接调用的hi3861的i2c接口函数:

static uint32_t ssd1306_SendData(uint8_t* data, size_t size)
{int id = SSD1306_I2C_IDX;return IoTI2cWrite(id, SSD1306_I2C_ADDR, data, size);
}

(3)修改 usr_config.mk文件

注意,默认代码是没有打开i2c功能的,直接编译会提示相关的i2c函数没有定义,我们需要打开i2c的功能,具体是修改usr_config.mk文件 ,目前版本(3.1)的路径是:

device\soc\hisilicon\hi3861v100\sdk_liteos\build\config\usr_config.mk

但是代码结构可能会调整,路径可能会变。

增加 CONFIG_I2C_SUPPORT=y

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

http://www.lryc.cn/news/339940.html

相关文章:

  • C#:循环中断
  • 34. UE5 RPG实现鼠标点击移动
  • 《二》Qt Creator工具介绍与使用
  • 20240415金融读报:市场信贷不能过于宽松声音碳领域新增文件
  • 2024年第十五届蓝桥杯研究生组题目总结(Java、Python、C++)
  • MindOpt APL向量化建模语法的介绍与应用(2)
  • 深入理解图形处理器(GPU):加速人工智能和大数据计算的引擎
  • 【Java探索之旅】数组使用 初探JVM内存布局
  • RabbitMQ消息模型之Simple消息模型
  • 设计模式系列:简单工厂模式
  • 解决 windows+Ubuntu 时间不同步问题
  • Learn SRP 01
  • NL2SQL进阶系列(4):ConvAI、DIN-SQL、C3-浙大、DAIL-SQL-阿里等16个业界开源应用实践详解[Text2SQL]
  • Python统计分析库之statsmodels使用详解
  • A Learning-Based Approach for IP Geolocation(2010年)
  • 高创新 | [24年新算法]NRBO-XGBoost回归+交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测
  • Web APP设计:将多个相近的机器学习模型融合到一个Web APP中
  • 网络爬虫:定义、应用及法律道德考量
  • (三)ffmpeg 解码流程以及函数介绍
  • go work模块与go mod包管理是的注意事项
  • 华为OD-C卷-最长子字符串的长度(一)[100分]
  • 实战小项目 | ESP32-S3和ESP32-C3通过ESP-Mesh-Lite组网 温湿度传感器案例
  • SiLM5350系列带米勒钳位的单通道隔离驱动器 助力汽车与工业应用实现稳定与高效的解决方案
  • c#中怎么自动下载软件
  • Unity笔记之下拉刷新列表
  • 防火墙操作!
  • 代码随想录算法训练营第四十一天| 343. 整数拆分,96.不同的二叉搜索树
  • 【MATLAB源码-第53期】m代码基于粒子群算法(PSO)的三维路径规划,显示最优路径和适应度曲线。
  • el-table多行合并
  • Vue3 + Element-Plus 使用 Table 插槽时数据未及时更新