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

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

3天内不再提示

基于小凌派开发板的迪文屏控制案例

电子发烧友开源社区 来源:HarmonyOS官方合作社区 作者:贺婷婷 2022-05-17 09:20 次阅读

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

1

迪文屏方面

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

aac735c0-d579-11ec-bce3-dac502259ad0.png

图1 dgus字库生成

aadaf902-d579-11ec-bce3-dac502259ad0.png

图2 生成0号字库

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

aaf989e4-d579-11ec-bce3-dac502259ad0.png

图3 GBK字库

ab0c1636-d579-11ec-bce3-dac502259ad0.png

图4 生成汉字库gbk

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

ab2832c6-d579-11ec-bce3-dac502259ad0.png

图5 新建GUI工程

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

ab443dae-d579-11ec-bce3-dac502259ad0.png

图6 生成图标icl

ab622634-d579-11ec-bce3-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即可。

ab804d8a-d579-11ec-bce3-dac502259ad0.png

图8 放置显示控件

abcea35e-d579-11ec-bce3-dac502259ad0.png

图9 text设置属性

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

abedd1de-d579-11ec-bce3-dac502259ad0.png

图10 变量图标显示设置

最后生成即可。

2

T5L51方面

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

#include "sys.h"#include "uart2.h"#include "string.h"
#define FIRST_TXT  "手势结果:" //必须以两个字节的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;//得到串口数据包的长度,不包含"
"或者'
'结束符的长度                        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!
", __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!
", __FILE__, __LINE__, ret);    return;  }    while (1)  {    ret = e53_gs_get_gesture_state(&flag);    if (ret != 0)    {      printf("Get Gesture Statu: 0x%x
", flag);      if (flag & GES_UP)      {        printf("	Up
");      }      if (flag & GES_DOWM)      {        printf("	Down
");      }      if (flag & GES_LEFT)      {        printf("	Left
");      }      if (flag & GES_RIGHT)      {        printf("	Right
");      }      if (flag & GES_FORWARD)      {        printf("	Forward
");      }      if (flag & GES_BACKWARD)      {        printf("	Backward
");      }      if (flag & GES_CLOCKWISE)      {        printf("	Clockwise
");      }      if (flag & GES_COUNT_CLOCKWISE)      {        printf("	Count Clockwise
");      }      if (flag & GES_WAVE)      {        printf("	Wave
");      }            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] = '
';      tubiao[3] = '
';                        printf("tubiao:
");                        for(i=0;i<4;i++) {                            sprintf(tubiao_str+i*3, "%02X ", tubiao[i] & 0xFF);                        }                        printf("DOWN HEX: %s", tubiao_str);                        printf("
");      ret = LzUartWrite(UART_ID, tubiao, 4);      if (ret != LZ_HARDWARE_SUCCESS)      {        printf("%s, %d: LzUartInit(%d) failed!
", __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
", ret);    return;  }}
APP_FEATURE_INIT(e53_gs_example);

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

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

原文标题:如何用小凌派鸿蒙开发板轻松控制迪文智能屏?

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

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

    关注

    25

    文章

    4428

    浏览量

    93964
  • 迪文屏
    +关注

    关注

    3

    文章

    63

    浏览量

    5116
  • 小凌派
    +关注

    关注

    0

    文章

    27

    浏览量

    1140

原文标题:如何用小凌派鸿蒙开发板轻松控制迪文智能屏?

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

收藏 人收藏

    评论

    相关推荐

    怎样通过DGUS实现按键控制控制板的输出

    一、项目背景如上图所示,DGUS与单片机通过串口通信,来获取单片机板输入输出状态、AD电压值,同时可以通过DGUS
    发表于 07-15 07:00

    开发板无法进行通信该怎么办呢

    开发板无法进行通信该怎么办呢?如何对其进行调试?
    发表于 12-09 07:05

    【小RK2206开发板试用体验】小隔空操作COF智能

    ,于是自然的就想着两者怎么结合使用。最终达到了视频中所呈现的效果,通过小RK2206开发板感应手势,通过串口给COF智能
    发表于 05-06 13:57

    RK2206加串口,体会OH和手势带来的乐趣

    大概18年前开始使用液晶模组,但确实没想过在开源鸿蒙里实现!小RK2206加串口
    发表于 05-07 23:39

    【小RK2206开发板试用体验】小手势应用之原力控制星球大战BB-8机器人

    在上一篇文章中,我分享了 小隔空操作COF智能 ,这次再给大家分享一个更有趣的智能手势应用----小
    发表于 05-11 12:52

    【小RK2206开发板试用体验】3. 事件处理

    一、前言使用小进行通信,有一些特殊的命令,为了方便识别及处理,我设计了
    发表于 05-17 12:38

    【小RK2206开发板试用体验】小手势应用之原力控制星球大战BB-8机器人

    在上一篇文章中,我分享了 小隔空操作COF智能 ,这次再给大家分享一个更有趣的智能手势应用----小
    发表于 05-24 10:56

    基于开发板的FastDeploy适配

    、多平台的产业部署需求。准备工作本文的FastDeploy适配过程需要准备如下:-RK3568开发板(即需FastDeploy适配的设备终端)Ubuntu(即建立于虚拟机的Linux编译环境
    发表于 02-16 09:43

    迅为iTOP-4412嵌入式开发板实现中断驱动例程

    今天我们来学习一下 linux 中断处理驱动的编写,本节我们实现的功能是通过开发板上的按键来控制 led 发光二极管
    发表于 02-25 14:10 14次下载

    如何用DragonBoard 410c开发板实现LED彩灯控制

    控制器通过控制IC对FPCB里面的电路进行控制,从而控制LED灯条变化不同的效果;如闪烁,追逐,跳变,顺时针跑马,逆时针跑马等,可以根据需要,自行编写代码实现。
    发表于 03-06 15:23 1329次阅读

    锆石FPGA A4_Nano开发板视频:PS/2的控制原理

     PS/2接口是输入装置接口,而不是传输接口。所以PS2口根本没有传输速率的概念,只有扫描速率。在Windows环境下,ps/2鼠标的采样率默认为60次/秒,USB鼠标的采样率为120次/秒。较高的采样率理论上可以提高鼠标的移动精度。鼠标的PS/2的接口是绿色,而键盘的PS/2接口是紫色。
    的头像 发表于 09-25 07:03 1513次阅读
    锆石FPGA A4_Nano<b class='flag-5'>开发板</b>视频:PS/2的<b class='flag-5'>控制</b>原理

    如何使用Python控制Arduino开发板

    尽管承担的项目比通常的初学者闪烁的LED稍大一些在教程中,我们几乎没有涉及到Arduino开发板和类似微控制器可以完成的全部工作。
    的头像 发表于 11-28 17:36 1.1w次阅读

    浅析ARM开发板的车辆检测控制单元设计

    由于交通需求的不断增加,有越来越多的环形感应线圈检测器用于交通检测。这些埋设在道路表面下的线圈可以检测
    的头像 发表于 04-07 18:25 2073次阅读
    浅析ARM<b class='flag-5'>开发板</b>的车辆检测<b class='flag-5'>控制</b>单元设计

    【飞凌OKA40i-C开发板试用体验】伺服电机控制之准备篇

    控制伺服电机。 【 硬件准备 】 OKA40i-C开发板一个,485转TTL模块一个,YZ-ACSD608伺服务电机驱动器一个,SM060R20B30MNAD伺服务电机一台,300W数据电源一台
    的头像 发表于 10-19 11:19 785次阅读
    【飞凌OKA40i-C<b class='flag-5'>开发板</b>试用体验】伺服电机<b class='flag-5'>控制</b>之准备篇

    搭建Node-RED环境,将开发板变身为工业控制网关——米尔基于NXP LS1028A开发板

    控制系统LED五、系统命令控制GPIO六、Node-RED控制GPIO七、开发板上的S3按键使用八、在Node-RED中使用S3按键控制LE
    的头像 发表于 12-05 09:47 2790次阅读
    搭建Node-RED环境,将<b class='flag-5'>开发板</b>变身为工业<b class='flag-5'>控制</b>网关——米尔基于NXP LS1028A<b class='flag-5'>开发板</b>