摘要:本文简单介绍如何操作i2c去显示oled屏幕,并且实现动画播放、中文英文显示、绘图等功能
适合群体:适用于润和hi3861开发板,l0轻量系统驱动开发
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中抽取的`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
原文标题:openharmony轻量系统开发【7】驱动之i2c显示oled屏幕
文章出处:【微信公众号:harmonyos官方合作社区】欢迎添加关注!文章转载请注明出处。
电动汽车电池管理系统技术趋势及方案精选
5G网络切片技术简介
Gartner:2018年第四季度全球智能手机销量增长陷停滞
创维推出“无人机自动踏勘系统”和“光伏电站自动化设计系统”
简易三极管小功放制作教程
如何操作I2C去显示oled屏幕
沈阳 开房门:新兴产业的发展现状
电子产品越来越薄,对制造材料提出了更高的要求
国内电动车产业链竞争力几何?
PHP代码执行-PNG注入
Q1季度内存芯片合约价或小幅上涨 利基型内存涨价将直接受三星停电事故影响
魅族Flyme6最新消息:Flyme6值得更新吗?一加3t刷入Flyme6一天使用体验,更不更新你说了算?
钳形电流表的结构工作原理及其价格介绍
华为智选车载智慧屏:搭载鸿蒙 OS 2.0 系统 与Mate40 系列一同发布
大陆集团汽车业务重组:分拆赚钱和不赚钱的
iPhone6翻新机和山寨机的鉴别方法
并联电容器和串联电容器的作用
Intel驱动开始默认搜集数据
GPT4做Leetcode的能力
刷脸支付与5G的相遇,是否是下一个现象级支付方式