0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何操作I2C去显示oled屏幕

电子发烧友开源社区 来源:HarmonyOS官方合作社区 作者:HarmonyOS官方合作社 2022-03-02 17:54 次阅读

摘要:本文简单介绍如何操作I2C去显示oled屏幕,并且实现动画播放、中文英文显示、绘图等功能

适合群体:适用于润和Hi3861开发板,L0轻量系统驱动开发

7.1 实验效果

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

以下是移植效果:

如何操作I2C去显示oled屏幕

如何操作I2C去显示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中抽取的`sin`和`cos`的实现。

(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);
  //初始化I2C0  Ioti2cInit(0, OLED_I2C_BAUDRATE);
  //WatchDogDisable();
  usleep(20*1000);  //初始化SSD1306  ssd1306_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.
", 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)的路径是:

devicesochisiliconhi3861v100sdk_liteosuildconfigusr_config.mk

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

增加 CONFIG_I2C_SUPPORT=y

如何操作I2C去显示oled屏幕

原文标题:OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕

文章出处:【微信公众号:HarmonyOS官方合作社区】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OLED
    +关注

    关注

    118

    文章

    5986

    浏览量

    221426
  • 驱动
    +关注

    关注

    11

    文章

    1717

    浏览量

    84340
  • 屏幕
    +关注

    关注

    6

    文章

    1161

    浏览量

    55348

原文标题:OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕

文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    I2C 0.96OLED例程

    I2C 0.96OLED例程
    发表于 08-18 19:56

    0.91”128x32 I2C OLED单色显示

    0.91英寸128x32 I2C OLED图形显示器,体积小,仅约1英寸对角线,但由于OLED显示屏的高对比度而非常易读。该
    发表于 06-13 15:22

    第6节 Hi3861 OLED屏幕驱动 基于鸿蒙系统

    显示 1 屏幕翻转显示 OLED_ShowString(8,16,"hello world",16); OL
    发表于 10-02 22:33

    【HarmonyOS HiSpark Wi-Fi IoT套件】I2C驱动 Hi3861 驱动OLED屏幕显示

    ,大家自己下载。(2)设置I2C引脚复用确定i2c引脚,查看原理图,可以看到OLED屏幕使用到的是I2C
    发表于 10-16 09:26

    OLED显示原理

    RCT6为PA2,PA3软件I2C读写EEPROM,VET6为PB6,PB7硬件I2C读写EEPROM.1)将I2C1改为I2C2惠特自动化
    发表于 08-11 07:18

    OLED屏幕怎么使用

    初始化u8g2图形库显示。选择不同的u8g图形库,有不同的初始化函数,但入口参数基本相同我选择的是ssd1306_i2c_128x64_noname图形库,所以初始化语法如下I2C
    发表于 12-09 06:28

    怎样使用I2C接口控制OLED屏幕显示

    XR806外设I2C接口有何作用?怎样使用I2C接口控制OLED屏幕
    发表于 12-28 07:30

    OLED屏幕和GY30光照传感器接在IIC(I2C)总线上

    最终效果展示OLED屏幕和GY30光照传感器(BH1750FVI)都连接在一个IIC(I2C)总线上,所以只需要接4根线即可。获取到的光照强度可以在OLED上实时
    发表于 01-13 08:31

    OLED屏幕显示时间天气设计实现

    先发一下效果图吧我这里用的是I2C的0.96寸OLED屏幕,所以仅需将I2C的修改为你所接的那组I2C引脚即可。这两个文件夹下面是u8gli
    发表于 01-18 10:13

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

    摘要:本文简单介绍如何操作I2C显示OLED屏幕,并且实现动画播放、中文英文
    发表于 01-21 16:37

    如何在RK2206开发板上使用I2C控制OLED液晶屏显示

    屏是0.96寸OLED显示屏,型号为SSD1306,像素为128 * 64。OLED液晶屏采用i2c通信方式,根据芯片手册说明,从设备地址为 0x3
    发表于 08-11 17:07

    请教大神怎样使用I2C接口点亮OLED屏幕

    。其他问题虽然例程名称看起来使用了硬件i2c,但是实际上使用的依然是gpio模拟的i2c。我这个小oeld屏幕右边固定会有两列像素不能控制,而且左边显示缺了一列,屏的资料翻不到了,就不
    发表于 09-09 15:34

    如何指定I2C OLED的从机地址?

    我不清楚如何设置 I2C OLED 地址以用于 Basic 的 OLED 操作。你假设一个地址?你能简单地先调用 i2c.begin() 来
    发表于 04-26 08:12

    【瑞萨RA MCU创意氛围赛】3. 硬件I2C驱动OLED显示汉字

    选择了使用EBF模块接口上的I2C接口,因为改接口的布线顺序和OLEDI2C接口一致。可以直接将OLED插上去,减少了接线。 该接口使用的是SCI6的
    发表于 05-26 14:06

    如何驱动I2C接口的OLED屏?

    前面我们介绍了驱动SPI接口LCD5110显示屏的方法,这次介绍一下如何驱动I2C接口的OLED屏,该OLED屏为0.91寸单色屏。
    发表于 06-27 06:37