|  | 
 
| 屏幕型号T5L DMG85480F050_01WTCZ02 1、迪文GUI设计,包含一个变量图标控制和2个text显示控件。注意中英文字库问题,字库可用DWIN DGUS软件的DGUS配置工具中的DGUS字库工具,生成0号字库,主要英文、数字和符号,中文字库用GBK编码制作字库。
 
 
 
 
 
 
 
 
 
 
 2、迪文C51设计,串口2自定义处理小凌派rk2206的串口数据,并对显示控件进行控制。用keil开发C51单片机程序,主要main代码如下:
 
 完整代码附件上传。KEIL工程我加入了直接生成T5L51.bin文件功能,大家可以打开工程查看。目标文件修改需要修改bat文件。复制代码#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、小凌派rk2206手势控制传感器结果,由串口发送给迪文串口屏的串口2.小凌派跑的是鸿蒙系统,没有的可以使用其他对接开发板即可,也可用另一51单片机串口发送控制,用按键即可,都可以。手里正好有这个板子。
 
 
 复制代码/*
 * 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 <stdio.h>
#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);
 代码附件可见
 
 | 
 
x本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?立即注册  |