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

Hi3861 OpenHarmony嵌入式应用入门--0.96寸液晶屏 iic驱动ssd1306

使用iic驱动ssd1306,代码来源hihope\hispark_pegasus\demo\12_ssd1306

本样例提供了一个HarmonyOS IoT硬件接口的SSD1306 OLED屏驱动库,其功能如下:

  • 内置了128*64 bit的内存缓冲区,支持全屏刷新;
  • 优化了屏幕刷新速率,实测最大帧率10fps;
  • libm_port

是从musl libc中抽取的 sin和 cos的实现;

  • 用于规避链接Hi3861 SDK中的libm_flash.a报错的问题;
  • gif2imgs.py

可用于将gif动图中的帧分离出来;

  • 依赖 pillow 包,可以使用 pip install pillow 命令安装;
  • img2code.py

可用于将图片转为C数组,每个字节表示8个像素;

  • 依赖 opecv-python 包,可以使用 pip install opencv-python 命令安装;
  • 使用Harmony OS的IoT硬件接口;
  • 接口简洁易于使用、易于移植;
  • 内置了测试程序,可直接进行测试;

硬件原理图

IO口定义

I2C API

API名称

说明

I2cInit (WifiIotI2cIdx id, unsigned int baudrate)

用指定的波特速率初始化I2C设备

I2cDeinit (WifiIotI2cIdx id)

取消初始化I2C设备

I2cWrite (WifiIotI2cIdx id, unsigned short deviceAddr, const WifiIotI2cData *i2cData)

将数据写入I2C设备

I2cRead (WifiIotI2cIdx id, unsigned short deviceAddr, const WifiIotI2cData *i2cData)

从I2C设备中读取数据

I2cWriteread (WifiIotI2cIdx id, unsigned short deviceAddr, const WifiIotI2cData *i2cData)

向I2C设备发送数据并接收数据响应

I2cRegisterResetBusFunc (WifiIotI2cIdx id, WifiIotI2cFunc pfn)

注册I2C设备回调

I2cSetBaudrate (WifiIotI2cIdx id, unsigned int baudrate)

设置I2C设备的波特率

ssd1306 API

API名称

说明

void ssd1306_Init(void)

初始化

void ssd1306_Fill(SSD1306_COLOR color)

以指定的颜色填充屏幕

void ssd1306_SetCursor(uint8_t x, uint8_t y)

定位光标

void ssd1306_UpdateScreen(void)

更新屏幕内容

char ssd1306_DrawChar(char ch, FontDef Font, SSD1306_COLOR color)

在屏幕缓冲区绘制1个字符

char ssd1306_DrawString(char* str, FontDef Font, SSD1306_COLOR color)

将完整字符串写入屏幕缓冲区

void ssd1306_DrawPixel(uint8_t x, uint8_t y, SSD1306_COLOR color)

在屏幕缓冲区中绘制一个像素

void ssd1306_DrawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, SSD1306_COLOR color)

用Bresenhem算法画直线

void ssd1306_DrawPolyline(const SSD1306_VERTEX *par_vertex, uint16_t par_size, SSD1306_COLOR color)

绘制多段线

void ssd1306_DrawRectangle(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, SSD1306_COLOR color)

绘制矩形

void ssd1306_DrawArc(uint8_t x, uint8_t y, uint8_t radius, uint16_t start_angle, uint16_t sweep, SSD1306_COLOR color)

绘图角度

void ssd1306_DrawCircle(uint8_t par_x, uint8_t par_y, uint8_t par_r, SSD1306_COLOR color)

用Bresenhem算法画圆

void ssd1306_DrawBitmap(const uint8_t* bitmap, uint32_t size)

绘图位图

void ssd1306_DrawRegion(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t* data, uint32_t size, uint32_t stride)

绘制区域

修改D:\DevEcoProjects\test\src\vendor\rtplay\rt_hi3861\demo\BUILD.gn文件

# Copyright (c) 2023 Beijing HuaQing YuanJian Education Technology Co., Ltd
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#    http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License. import("//build/lite/config/component/lite_component.gni")lite_component("demo") {features = [#"base_00_helloworld:base_helloworld_example",#"base_01_led:base_led_example",#"base_02_loopkey:base_loopkey_example",#"base_03_irqkey:base_irqkey_example",#"base_04_adc:base_adc_example",#"base_05_pwm:base_pwm_example","base_06_ssd1306:base_ssd1306_example",]
}

将D:\DevEcoProjects\test\src\vendor\hihope\hispark_pegasus\demo\12_ssd1306文件复制到D:\DevEcoProjects\test\src\vendor\rtplay\rt_hi3861\demo\base_06_ssd1306中

修改D:\DevEcoProjects\test\src\vendor\rtplay\rt_hi3861\demo\base_06_ssd1306\BUILD.gn

#Copyright (C) 2021 HiHope Open Source Organization .
#Licensed under the Apache License, Version 2.0 (the "License");
#you may not use this file except in compliance with the License.
#You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
#Unless required by applicable law or agreed to in writing, software
#distributed under the License is distributed on an "AS IS" BASIS,
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#See the License for the specific language governing permissions and
#
#limitations under the License.import("//build/lite/config/component/lite_component.gni")lite_component("base_ssd1306_example") {features = ["ssd1306:oled_ssd1306","examples:oled_test","//third_party/libm_port:libm_port"]
}

目录结构

│  config.json
│
├─common
│  └─bsp
│      ├─include
│      └─src
├─demo
│  │  BUILD.gn
│  │
│  ├─base_00_helloworld
│  │      base_helloworld_example.c
│  │      BUILD.gn
│  │
│  ├─base_01_led
│  │      base_led_example.c
│  │      BUILD.gn
│  │
│  ├─base_02_loopkey
│  │      base_loopkey_example.c
│  │      BUILD.gn
│  │
│  ├─base_03_irqkey
│  │      base_irqkey_example.c
│  │      BUILD.gn
│  │
│  ├─base_04_adc
│  │      base_adc_example.c
│  │      BUILD.gn
│  │
│  ├─base_05_pwm
│  │      base_pwm_example.c
│  │      BUILD.gn
│  │
│  └─base_06_ssd1306
│      │  BUILD.gn
│      │  gif2imgs.py
│      │  img2code.py
│      │  LICENSE
│      │  README.md
│      │  requirements.txt
│      │
│      ├─examples
│      │      BUILD.gn
│      │      ssd1306_demo.c
│      │      ssd1306_tests.c
│      │      ssd1306_tests.h
│      │
│      └─ssd1306
│              BUILD.gn
│              ssd1306.c
│              ssd1306.h
│              ssd1306_conf.h
│
└─doc│  HarmonyOS开发板实验指导书 v2.1.pdf│  华清远见 FS_Hi3861开发指导.md│  华清远见 FS_Hi3861新手入门手册.md│├─board│      FS-Hi3861-V4.2.pdf│      FS-Hi3861QDB-V3.2.pdf│      hi-12f_kit_v1.1.0规格书-20211025.pdf│      hi-12f_v1.1.2-规格书-20211202.pdf│      nodemcu-hi-07s_12f-kit_v1.1-20210913.pdf│      RTplay2.01_A1_2024-06-20.pdf│└─figures

进行编译,编译好如下

烧写进开发板,运行效果如下

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

相关文章:

  • 代码随想录训练营第二十二天 77组合
  • Unity踩坑记录
  • 内容安全复习 1 - 信息内容安全概述
  • 【深度学习】python之人工智能应用篇--跨模态生成技术
  • springboot中获取某个注解下面的某个方法的方法名,参数值等等详细实例
  • 代码随想录——跳跃游戏Ⅱ(Leetcode 45)
  • 从0-1搭建一个web项目(package.json)详解
  • 图解ReentrantLock的基石AQS-独占锁的获取与释放
  • Perl语言入门学习读物
  • 电脑浏览器问题
  • [Docker] Ubuntu安装Home Assistant
  • 浅谈请求中数据转换
  • Flutter学习:从搭建环境到运行
  • sheng的学习笔记-AI-聚类(Clustering)
  • 从0构建一个录制UI测试工具
  • 代码随想录算法训练营第五十一天|LeetCode72 编辑距离、LeetCode647 回文子串、LeetCode516 最长回文子序列、动态规划的小总结
  • sessionStorage 能在多个标签页之间共享数据吗?
  • 鸿蒙期末项目(完结)
  • 【Linux】对共享库加载问题的深入理解——基本原理概述
  • easyui的topjui前端框架使用指南
  • Java中的程序异常处理介绍
  • Gradle学习-3 Gradle插件
  • 百度文心智能体,创建属于自己的智能体应用
  • 【软件测试】白盒测试与接口测试详解
  • 【SpringBoot Web框架实战教程】03 SpingBoot 获取 http 请求参数
  • Mac14.1.2 M1芯片免费读写ntfs硬盘-亲测有效,免费!!!
  • 手写SpringMVC之ApplicationContextListener
  • Paimon 在汽车之家的业务实践
  • 2024-06-27 问AI: 介绍一下 LLM building process
  • 猫也有自动厕所上了吗?自费分享好用的智能猫砂盆,看完不亏。