ITPub博客

首页 > 数据库 > 数据库开发技术 > OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕

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

数据库开发技术 作者:BinaryKiller 时间:2022-01-25 15:10:00 0 删除 编辑
摘要:本文简单介绍如何操作I2C去显示oled屏幕,并且实现动画播放、中文英文显示、绘图等功能
适合群体:适用于润和Hi3861开发板,L0轻量系统驱动开发
本文参考许思维老师的文章,许思维老师主页是:
https://HarmonyOS.51cto.com/user/posts/6631823
感谢许思维老师~
 
7.1实验效果
Hispark WiFi开发套件又提供一个oLED屏幕,但是鸿蒙源码中没有这个屏幕的驱动,我们需要自己去移植。
以下是移植效果:
image.png
 
image.png
接口:I2C
使用引脚:HI_IO_NAME_GPIO_13 、 HI_IO_NAME_GPIO_14

7.2代码
这里我直接用许思维老师之前移植好的代码,不过由于鸿蒙版本更新过快,许思维老师之前的代码是基于1.0版本,直接拿到3.0以上版本编译会出错,这里我修改了编译错误。放在我的仓库中。
整个代码目录如下:
image.png
 
主要是3个文件夹:
(1)examples
测试代码,里面有一个ssd1306_demo.c文件,是我们的入口函数。
(2)libm_port
从musl libc中抽取的`sin`和`cos`的实现。
(3)ssd1306
相关驱动代码部分。
接下来我们来重点看下代码部分:
 
(1)初始化入口函数
入口函数是 Ssd1306TestDemo ,它创建了Ssd1306TestTask线程,所以我们重点看 Ssd1306TestTask线程。
  1. void Ssd1306TestTask(void* arg)
  2. {
  3.     (void) arg;
  4.     //先初始化引脚
  5.     IoTGpioInit(HI_IO_NAME_GPIO_13);
  6.     IoTGpioInit(HI_IO_NAME_GPIO_14);
  7.     //将引脚功能设置为I2C引脚
  8.     hi_io_set_func(HI_IO_NAME_GPIO_13, HI_IO_FUNC_GPIO_13_I2C0_SDA);
  9.     hi_io_set_func(HI_IO_NAME_GPIO_14, HI_IO_FUNC_GPIO_14_I2C0_SCL);
  10.     //初始化I2C0
  11.     Ioti2cInit(0, OLED_I2C_BAUDRATE);
  12.     //WatchDogDisable();
  13.     usleep(20*1000);
  14.     //初始化SSD1306
  15.     ssd1306_Init();
  16.     //全部清空
  17.     ssd1306_Fill(Black);
  18.     ssd1306_SetCursor(0, 0);
  19.     //显示 Hello HarmonyOS!
  20.     ssd1306_DrawString("Hello HarmonyOS!", Font_7x10, White);
  21.     uint32_t start = HAL_GetTick();
  22.     ssd1306_UpdateScreen();
  23.     uint32_t end = HAL_GetTick();
  24.     printf("ssd1306_UpdateScreen time cost: %d ms.\r\n", end - start);
  25.     TestDrawChinese1();
  26.     TestDrawChinese2();
  27.     TestGetTick();
  28.     while (1) {
  29.         //进行所有用例测试
  30.         ssd1306_TestAll();
  31.         usleep(10000);
  32.     }
  33. }
复制代码

(2)I2C发送函数
我们要操作OLED屏幕,就需要使用I2C发送数据给OLED屏幕,代码使用
ssd1306_SendData函数发送I2C数据,该函数原型如下,直接调用的hi3861的i2c接口函数:
  1. static uint32_t ssd1306_SendData(uint8_t* data, size_t size)
  2. {
  3.     int id = SSD1306_I2C_IDX;
  4.     return IoTI2cWrite(id, SSD1306_I2C_ADDR, data, size);
  5. }
复制代码


 
(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
image.png

原文作者:;如有侵权,请联系管理员删除。

下一篇: HarmonyOS介绍篇
请登录后发表评论 登录
全部评论

注册时间:2020-09-26

  • 博文量
    9
  • 访问量
    72