|
屏幕型号T5L DMG85480F050_01WTCZ02
1、迪文GUI设计,包含一个变量图标控制和2个text显示控件。注意中英文字库问题,字库可用DWIN DGUS软件的DGUS配置工具中的DGUS字库工具,生成0号字库,主要英文、数字和符号,中文字库用GBK编码制作字库。
2、迪文C51设计,串口2自定义处理小凌派rk2206的串口数据,并对显示控件进行控制。用keil开发C51单片机程序,主要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代表处理掉了此串口包
- }
- }
- }
复制代码 完整代码附件上传。KEIL工程我加入了直接生成T5L51.bin文件功能,大家可以打开工程查看。目标文件修改需要修改bat文件。
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
|