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

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

3天内不再提示

如何用小凌派HarmonyOS开发板轻松控制迪文智能屏

福州市凌睿智捷电子有限公司 2022-06-14 11:11 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言:因2个原因导致迟迟没有出来想要的效果。原因1:迪文屏的中文字库问题,对CFG文件及FLASH的分配不熟,导致icl文件覆盖了字库文件,在迪文论坛发帖解决。原因2:串口线不能2节连接,我测试一直2节杜邦线连接,导致rk2206发不出数据,用串口demo测试,只有一节杜邦线电脑才能接到数据,弄了一节将两个板子连接终于可以了。

1

迪文屏方面

1、用dgus软件设计的欢迎使用界面中生成0号字库和GBK字库,如图1所示,点击DGUS字库,出现如图2所示,生成0号ASCII字库。

72a0ca12-e735-11ec-a2f4-dac502259ad0.png

图1 dgus字库生成

72dfa9da-e735-11ec-a2f4-dac502259ad0.png

图2 生成0号字库

2、下面就来生成GBK汉字库,如图3和图4所示,生成的24宋体24.bin字库。

7347841a-e735-11ec-a2f4-dac502259ad0.png

图3 GBK字库

7386461e-e735-11ec-a2f4-dac502259ad0.png

图4 生成汉字库gbk

3、接下来,新建GUI工程,选一张480*854的背景图,如图5所示,保存位置确定。

73df471e-e735-11ec-a2f4-dac502259ad0.png

图5 新建GUI工程

4、网上找了9张图标,其中自己用位图编辑了一遍,想多大自己设置即可,用DWIN ICL生成工具生成图标icl,如图6所示

74139d5c-e735-11ec-a2f4-dac502259ad0.png

图6 生成图标icl

7451f3fe-e735-11ec-a2f4-dac502259ad0.png

图7 导入生成

5、生成背景icl一样。注意:软件默认背景图为32.icl,生成CFG文件时需要修改。这个根据屏的flash大小设置,我的屏只有8M,因此最大为30,32超出了出现了问题。

6、在背景图上放置一个图标控件和2个text控件,如图8所示,text地址设置2000,另一个设置2064。设置TEXT的属性,ASCII选择0号字库,汉字库选24号字库,编码选择GBK编码,后面的X和Y点阵设置为24点阵。这个点阵数根据自己字库生成的点阵设置。使用出厂的字库,则分别为0号字库和12汉字库。配置为0和12即可。

748a01ea-e735-11ec-a2f4-dac502259ad0.png

图8 放置显示控件

74f73ac6-e735-11ec-a2f4-dac502259ad0.png

图9 text设置属性

7、设置变量图标显示属性,如图10所示,从0开始到8共9个变量图标。

754883f4-e735-11ec-a2f4-dac502259ad0.png

图10 变量图标显示设置

最后生成即可。

2

T5L51方面

1、因我刷过T5L51,所以串口2调试协议不通,只能重刷出厂程序或者自己写程序。我自己写的程序,在熊家余老师的串口程序基础上写自己的接收代码,main函数如下代码:

#include "sys.h"#include "uart2.h"#include "string.h"
#define FIRST_TXT "手势结果:\0\0" //必须以两个字节的0x00或者两个字节的0xFF为文本结束标记
void main(void){ u16 len; s16 ges; u8 text_buf[32]={0}; u16 ic_sta;//存储ICON值 sys_init();//系统初始化 sys_write_vp(0x2000,FIRST_TXT,sizeof(FIRST_TXT)/2+1);//给第一个文本显示控件设置文本内容 uart2_init(115200);//初始化串口2 while(1) { IF(uart2_rx_sta&UART2_PACKET_OK)//接受到了串口数据包 { len = uart2_rx_sta&UART2_PACKET_LEN;//得到串口数据包的长度,不包含"\r\n"或者'\n'结束符的长度 ges = uart2_buf[0]+uart2_buf[1]*256; switch(ges) { case 1: ic_sta = 0; sys_write_vp(0x1000,(u8*)&ic_sta,1); sprintf(text_buf,"GES_UP:0x%x",ges); break; case 2: ic_sta = 1; sys_write_vp(0x1000,(u8*)&ic_sta,1); sprintf(text_buf,"GES_DOWN:0x%x",ges); break; case 4: ic_sta = 2; sys_write_vp(0x1000,(u8*)&ic_sta,1); sprintf(text_buf,"GES_LEFT:0x%x",ges); break; case 8: ic_sta = 3; sys_write_vp(0x1000,(u8*)&ic_sta,1); sprintf(text_buf,"GES_RIGHT:0x%x",ges); break; case 16: ic_sta = 4; sys_write_vp(0x1000,(u8*)&ic_sta,1); sprintf(text_buf,"GES_FORWARD:0x%x",ges); break; case 32: ic_sta = 5; sys_write_vp(0x1000,(u8*)&ic_sta,1); sprintf(text_buf,"GES_BACKWARD:0x%x",ges); break; case 64: ic_sta = 6; sys_write_vp(0x1000,(u8*)&ic_sta,1); sprintf(text_buf,"GES_clockWISE:0x%x",ges); break; case 128: ic_sta = 7; sys_write_vp(0x1000,(u8*)&ic_sta,1); sprintf(text_buf,"GES_COUNT_CLOCKWISE:0x%x",ges); break; case 256: ic_sta = 8; sys_write_vp(0x1000,(u8*)&ic_sta,1); sprintf(text_buf,"GES_WAVE:0x%x",ges); break; default: break; } len = strlen(text_buf); text_buf[len++] = 0; text_buf[len++] = 0; sys_write_vp(0x2064,text_buf,len/2+1);//同时把数据包显示到界面上 uart2_rx_sta = 0;//清0代表处理掉了此串口包 } }}

(左右移动查看全部内容)

3

小凌派方面

根据手势demo将uart的demo加入到手势demo.rar中,如下所示

/** Copyright (c) 2022 FuZhou Lockzhiner Electronic Co., Ltd. All rights reserved.* 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.*/#include #include "los_task.h"#include "ohos_init.h"#include "lz_hardware.h"#include "e53_gesture_sensor.h"
/* E53模块中* UART0_RX_M0 -> GPIO0_B6* UART0_TX_M0 -> GPIO0_B7*/#define UART_ID 0
unsigned short getCRC16(unsigned char *ptr,unsigned char len){ unsigned char i; unsigned short crc = 0xFFFF; if(ptr==0) { return 0; } if(len==0) { len = 1; } //if(len<=255)                {                                while(len--)                                {                                                crc ^= *ptr;                                                for(i=0; i<8; i++)                                                {                                                        if(crc&1)                                                        {                                                                crc >>= 1; crc ^= 0xA001; } else crc >>= 1; } ptr++; } } return(crc);}void uart0_init(void){ unsigned int ret; UartAttribute attr; LzUartDeinit(UART_ID); attr.baudRate = 115200; attr.dataBits = UART_DATA_BIT_8; attr.pad = FLOW_CTRL_NONE; attr.parity = UART_PARITY_NONE; attr.rxBlock = UART_BLOCK_STATE_NONE_BLOCK; attr.stopBits = UART_STOP_BIT_1; attr.txBlock = UART_BLOCK_STATE_NONE_BLOCK; PinctrlSet(GPIO0_PB6, MUX_FUNC2, PULL_KEEP, DRIVE_LEVEL2); PinctrlSet(GPIO0_PB7, MUX_FUNC2, PULL_KEEP, DRIVE_LEVEL2); ret = LzUartInit(UART_ID, &attr); if (ret != LZ_HARDWARE_SUCCESS) { printf("%s, %d: LzUartInit(%d) faiLED!\n", __FILE__, __LINE__, ret); return; } return;}void e53_gs_process(void *arg){ unsigned int ret = 0; unsigned int i=0; unsigned short flag = 0; unsigned short rc = 0; unsigned char tubiao[16] = {0}; unsigned char tubiao_str[48] = {0}; e53_gs_init(); uart0_init(); ret = LzUartWrite(UART_ID, tubiao, 4); if (ret != LZ_HARDWARE_SUCCESS) { printf("%s, %d: LzUartInit(%d) failed!\n", __FILE__, __LINE__, ret); return; } while (1) { ret = e53_gs_get_gesture_state(&flag); if (ret != 0) { printf("Get Gesture Statu: 0x%x\n", flag); if (flag & GES_UP) { printf("\tUp\n"); } if (flag & GES_DOWM) { printf("\tDown\n"); } if (flag & GES_LEFT) { printf("\tLeft\n"); } if (flag & GES_RIGHT) { printf("\tRight\n"); } if (flag & GES_FORWARD) { printf("\tForward\n"); } if (flag & GES_BACKWARD) { printf("\tBackward\n"); } if (flag & GES_CLOCKWISE) { printf("\tClockwise\n"); } if (flag & GES_COUNT_CLOCKWISE) { printf("\tCount Clockwise\n"); } if (flag & GES_WAVE) { printf("\tWave\n"); } e53_gs_led_up_set((flag & GES_UP) ? (1) : (0)); e53_gs_led_down_set((flag & GES_DOWM) ? (1) : (0)); e53_gs_led_left_set((flag & GES_LEFT) ? (1) : (0)); e53_gs_led_right_set((flag & GES_RIGHT) ? (1) : (0)); e53_gs_led_forward_set((flag & GES_FORWARD) ? (1) : (0)); e53_gs_led_backward_set((flag & GES_BACKWARD) ? (1) : (0)); e53_gs_led_cw_set((flag & GES_CLOCKWISE) ? (1) : (0)); e53_gs_led_ccw_set((flag & GES_COUNT_CLOCKWISE) ? (1) : (0)); e53_gs_led_wave_set((flag & GES_WAVE) ? (1) : (0)); tubiao[0] = flag; tubiao[1] = (flag&0xff00)>>8; tubiao[2] = '\r'; tubiao[3] = '\n'; printf("tubiao:\n"); for(i=0;i<4;i++) {                                                        sprintf(tubiao_str+i*3, "%02X ", tubiao[i] & 0xFF);                                                }                                                printf("DOWN HEX: %s", tubiao_str);                                                printf("\n");            ret = LzUartWrite(UART_ID, tubiao, 4);            if (ret != LZ_HARDWARE_SUCCESS)            {                printf("%s, %d: LzUartInit(%d) failed!\n", __FILE__, __LINE__, ret);                return;            }        }        else        {            /* 如果没有数据,则多等待 */            LOS_Msleep(100);        }    }}
void e53_gs_example(){ unsigned int thread_id; TSK_INIT_PARAM_S task = {0}; unsigned int ret = LOS_OK;
task.pfnTaskEntry = (TSK_ENTRY_FUNC)e53_gs_process; task.uwStackSize = 2048; task.pcName = "e53 getsture sensor process"; task.usTaskPrio = 24; ret = LOS_TaskCreate(&thread_id, &task); if (ret != LOS_OK) { printf("Falied to create Task_One ret:0x%x\n", ret); return; }}
APP_FEATURE_INIT(e53_gs_example);

(左右移动查看全部内容)

测试:测试的时候总是控制不了,用小凌派的串口发给电脑串口,也没有。不应该,人家厂家肯定没问题。本来2节杜邦线,改成了1节杜邦线,可以了。

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

    关注

    0

    文章

    28

    浏览量

    1553
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【作品合集】飞嵌入式OK527N-C开发板测评

    开发板试用】开箱与开发板介绍视频 作者:jf_69121293【飞T527N开发板试用】开箱晒图 查看配置 设置参 【飞
    发表于 09-22 15:54

    何用Arduino Nano/UNO R3开发板给另一个Arduino IDE不能下载的Arduino Nano/UNO R3开发板重新烧录引导程序bootlaoder

    本文介绍了如何用能够Arduino IDE下载的Arduino Nano/UNO R3开发板给另一个Arduino IDE不能下载的Arduino Nano/UNO R3开发板重新烧录引导程序bootlaoder
    的头像 发表于 08-08 20:16 3061次阅读
    如<b class='flag-5'>何用</b>Arduino Nano/UNO R3<b class='flag-5'>开发板</b>给另一个Arduino IDE不能下载的Arduino Nano/UNO R3<b class='flag-5'>开发板</b>重新烧录引导程序bootlaoder

    deepin 25成功适配魔方3开发板

    近日,deepin(深度)社区宣布,deepin 25 已正式适配魔方 3(RUBIK Pi 3)开发板,并完成产品兼容性认证!
    的头像 发表于 07-28 15:14 837次阅读

    RK3568开发板暗藏32位兼容开关?飞嵌入式带你一键解锁!

    RK3568是一款64位处理器,飞嵌入式为其提供的交叉编译器也是64位的,然而部分用户可能需要在RK3568开发板上运行32位应用。本文将详细阐述如何使用32位交叉编译器,编译出32位应用,并使其能够在飞嵌入式RK3568
    的头像 发表于 07-19 08:49 4180次阅读
    RK3568<b class='flag-5'>开发板</b>暗藏32位兼容开关?飞<b class='flag-5'>凌</b>嵌入式带你一键解锁!

    【开源获奖案例】AI智能交互新方案:基于T5L智能的AI DeepSeek大模型

    ——来自开发者论坛本期为大家推送开发者论坛获奖开源案例——AI
    的头像 发表于 07-12 09:02 727次阅读
    【开源获奖案例】AI<b class='flag-5'>智能</b>交互新方案:基于T5L<b class='flag-5'>智能</b><b class='flag-5'>屏</b>的AI DeepSeek大模型

    【开源获奖案例】基于T5L智能的音乐播放与歌词显示方案

    ——来自开发者论坛本期为大家推送开发者论坛获奖开源案例——基于T5L
    的头像 发表于 05-08 09:52 636次阅读
    【开源获奖案例】基于T5L<b class='flag-5'>智能</b><b class='flag-5'>屏</b>的音乐播放与歌词显示方案

    明远智睿SSD2351开发板智能家居的智能核心

    1.4GHz处理器具备强大的运算能力,能够快速处理智能家居系统中的各种数据和指令。在智能家居环境中,大量的设备需要进行实时监控和控制,如智能灯光、
    发表于 05-07 18:59

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制FLASH外设

    1、实验简介本实验将演示如何在小-RK2206开发板上使用IOT库的FLASH接口,进行FLASH编程开发。例程将创建一个任务,实现FLASH读写操作。例程源代码:https
    的头像 发表于 04-22 14:49 685次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b>RK2206<b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口<b class='flag-5'>控制</b>FLASH外设

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制UART外设

    1、实验简介本实验将演示如何在小-RK2206开发板上使用IOT库的UART接口,进行UART编程开发。例程将创建一个任务,通过配置UART引脚,实现UART读写操作。例程源代码:
    的头像 发表于 04-22 14:22 794次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b>RK2206<b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口<b class='flag-5'>控制</b>UART外设

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制GPIO中断

    1、实验简介本实验将演示如何在小-RK2206开发板上使用IOT库的GPIO中断模式,进行GPIO编程开发。例程将创建一个任务,通过配置GPIO引脚为中断模式,实现GPIO中断操作
    的头像 发表于 04-21 10:39 889次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b>RK2206<b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口<b class='flag-5'>控制</b>GPIO中断

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制GPIO外设

    1、案例简介本案例主要是如何在小-RK2206开发板上使用IOT库的GPIO接口,进行GPIO编程开发。例程将创建一个任务,通过配置GPIO引脚,实现GPIO读写操作。例程源代码:
    的头像 发表于 04-11 15:36 1614次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b>RK2206<b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口<b class='flag-5'>控制</b>GPIO外设

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制ADC外设

    1、案例简介本案例主要讲解如何在小-RK2206开发板上使用IoT库的ADC接口,进行ADC编程开发。例程内容为创建一个任务,读取按键的ADC值,并打印到串口。例程源代码:http
    的头像 发表于 04-10 16:00 710次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b>RK2206<b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口<b class='flag-5'>控制</b>ADC外设

    基于小RK2206开发板:OpenHarmony如何使用IoT接口控制PWM外设

    1、案例简介本案例是在小-RK2206开发板上使用IoT库PWM接口,进行PWM编程开发。例程将创建一个任务,每隔5秒将PWM0~10依次启用,输出1000Hz。
    的头像 发表于 04-09 08:59 2051次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b>RK2206<b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口<b class='flag-5'>控制</b>PWM外设

    【开源获奖案例】基于T5L智能的EQ均衡效果器

    ——来自开发者论坛本期为大家推送开发者论坛获奖开源案例——基于T5L
    的头像 发表于 02-14 11:27 914次阅读
    【开源获奖案例】基于T5L<b class='flag-5'>智能</b><b class='flag-5'>屏</b>的EQ均衡效果器

    OpenHarmony默认30秒熄太麻烦?触觉智能鸿蒙开发板教你轻松取消

    OpenHarmony系统开机后 30 秒会自动息,教大家两招轻松取消自动息,触觉智能Purple Pi OH鸿蒙开发板演示,已适配全新
    的头像 发表于 12-09 11:45 1304次阅读
    OpenHarmony默认30秒熄<b class='flag-5'>屏</b>太麻烦?触觉<b class='flag-5'>智能</b>鸿蒙<b class='flag-5'>开发板</b>教你<b class='flag-5'>轻松</b>取消