迪文科技论坛

 找回密码
 立即注册
搜索
查看: 709|回复: 0

【开源】迪文串口屏与小凌派rk2206通信控制

[复制链接]

1

主题

7

回帖

48

积分

新手上路

Rank: 1

积分
48
发表于 2022-5-15 10:46:36 | 显示全部楼层 |阅读模式
屏幕型号T5L DMG85480F050_01WTCZ02
1、迪文GUI设计,包含一个变量图标控制和2个text显示控件。注意中英文字库问题,字库可用DWIN DGUS软件的DGUS配置工具中的DGUS字库工具,生成0号字库,主要英文、数字和符号,中文字库用GBK编码制作字库。










2、迪文C51设计,串口2自定义处理小凌派rk2206的串口数据,并对显示控件进行控制。用keil开发C51单片机程序,主要main代码如下:
  1. #include "sys.h"
  2. #include "uart2.h"
  3. #include "string.h"

  4. #define FIRST_TXT    "手势结果:\0\0" //必须以两个字节的0x00或者两个字节的0xFF为文本结束标记

  5. void main(void)
  6. {   
  7.         u16 len;
  8.         s16 ges;
  9.         u8  text_buf[32]={0};
  10.         u16 ic_sta;//存储ICON值
  11.         sys_init();//系统初始化
  12.         
  13.         sys_write_vp(0x2000,FIRST_TXT,sizeof(FIRST_TXT)/2+1);//给第一个文本显示控件设置文本内容
  14.         
  15.         uart2_init(115200);//初始化串口2
  16.         
  17.         while(1)
  18.         {   
  19.                 if(uart2_rx_sta&UART2_PACKET_OK)//接受到了串口数据包
  20.                 {
  21.                         len = uart2_rx_sta&UART2_PACKET_LEN;//得到串口数据包的长度,不包含"\r\n"或者'\n'结束符的长度
  22.                         
  23.                         ges = uart2_buf[0]+uart2_buf[1]*256;
  24.                         switch(ges)
  25.                         {
  26.                                 case 1:
  27.                                         ic_sta = 0;
  28.                                         sys_write_vp(0x1000,(u8*)&ic_sta,1);
  29.                                   sprintf(text_buf,"GES_UP:0x%x",ges);
  30.                                 break;
  31.                                 case 2:
  32.                                         ic_sta = 1;
  33.                                         sys_write_vp(0x1000,(u8*)&ic_sta,1);
  34.                                   sprintf(text_buf,"GES_DOWN:0x%x",ges);
  35.                                 break;
  36.                                 case 4:
  37.                                         ic_sta = 2;
  38.                                         sys_write_vp(0x1000,(u8*)&ic_sta,1);
  39.                                         sprintf(text_buf,"GES_LEFT:0x%x",ges);
  40.                                 break;
  41.                                 case 8:
  42.                                         ic_sta = 3;
  43.                                         sys_write_vp(0x1000,(u8*)&ic_sta,1);
  44.                                   sprintf(text_buf,"GES_RIGHT:0x%x",ges);
  45.                                 break;
  46.                                 case 16:
  47.                                         ic_sta = 4;
  48.                                         sys_write_vp(0x1000,(u8*)&ic_sta,1);
  49.                                   sprintf(text_buf,"GES_FORWARD:0x%x",ges);
  50.                                 break;
  51.                                 case 32:
  52.                                         ic_sta = 5;
  53.                                         sys_write_vp(0x1000,(u8*)&ic_sta,1);
  54.                                   sprintf(text_buf,"GES_BACKWARD:0x%x",ges);
  55.                                 break;
  56.                                 case 64:
  57.                                         ic_sta = 6;
  58.                                         sys_write_vp(0x1000,(u8*)&ic_sta,1);
  59.                                   sprintf(text_buf,"GES_CLOCKWISE:0x%x",ges);
  60.                                 break;
  61.                                 case 128:
  62.                                         ic_sta = 7;
  63.                                         sys_write_vp(0x1000,(u8*)&ic_sta,1);
  64.                                   sprintf(text_buf,"GES_COUNT_CLOCKWISE:0x%x",ges);
  65.                                 break;
  66.                                 case 256:
  67.                                         ic_sta = 8;
  68.                                         sys_write_vp(0x1000,(u8*)&ic_sta,1);
  69.                                   sprintf(text_buf,"GES_WAVE:0x%x",ges);
  70.                                 break;
  71.                                 default:
  72.                                        
  73.                                         break;
  74.                         }
  75.                         len = strlen(text_buf);
  76.                         text_buf[len++] = 0;
  77.                         text_buf[len++] = 0;
  78.                         sys_write_vp(0x2064,text_buf,len/2+1);//同时把数据包显示到界面上
  79.                         
  80.                         uart2_rx_sta = 0;//清0代表处理掉了此串口包
  81.                 }
  82.         }
  83. }

复制代码
完整代码附件上传。KEIL工程我加入了直接生成T5L51.bin文件功能,大家可以打开工程查看。目标文件修改需要修改bat文件。
3、小凌派rk2206手势控制传感器结果,由串口发送给迪文串口屏的串口2.小凌派跑的是鸿蒙系统,没有的可以使用其他对接开发板即可,也可用另一51单片机串口发送控制,用按键即可,都可以。手里正好有这个板子。

  1. /*
  2. * Copyright (c) 2022 FuZhou Lockzhiner Electronic Co., Ltd. All rights reserved.
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. *     http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. */
  15. #include <stdio.h>
  16. #include "los_task.h"
  17. #include "ohos_init.h"
  18. #include "lz_hardware.h"
  19. #include "e53_gesture_sensor.h"

  20. /* E53模块中
  21. * UART0_RX_M0 -> GPIO0_B6
  22. * UART0_TX_M0 -> GPIO0_B7
  23. */
  24. #define UART_ID                 0

  25. unsigned short getCRC16(unsigned char *ptr,unsigned char len)
  26. {
  27.                 unsigned char i;
  28.                 unsigned short crc = 0xFFFF;
  29.                
  30.                 if(ptr==0)
  31.                 {
  32.                                 return 0;
  33.                 }
  34.                 if(len==0)
  35.                 {
  36.                         len = 1;
  37.                 }
  38.                 //if(len<=255)
  39.                 {
  40.                                 while(len--)
  41.                                 {
  42.                                                 crc ^= *ptr;
  43.                                                 for(i=0; i<8; i++)
  44.                                                 {
  45.                                                         if(crc&1)
  46.                                                         {
  47.                                                                 crc >>= 1;
  48.                                                                 crc ^= 0xA001;
  49.                                                         }
  50.                                                         else
  51.                                                                 crc >>= 1;
  52.                                                 }
  53.                                                 ptr++;
  54.                                 }
  55.                 }
  56.                 return(crc);
  57. }
  58. void uart0_init(void)
  59. {
  60.     unsigned int ret;
  61.     UartAttribute attr;
  62.    
  63.     LzUartDeinit(UART_ID);
  64.    
  65.     attr.baudRate = 115200;
  66.     attr.dataBits = UART_DATA_BIT_8;
  67.     attr.pad = FLOW_CTRL_NONE;
  68.     attr.parity = UART_PARITY_NONE;
  69.     attr.rxBlock = UART_BLOCK_STATE_NONE_BLOCK;
  70.     attr.stopBits = UART_STOP_BIT_1;
  71.     attr.txBlock = UART_BLOCK_STATE_NONE_BLOCK;
  72.    
  73.     PinctrlSet(GPIO0_PB6, MUX_FUNC2, PULL_KEEP, DRIVE_LEVEL2);
  74.     PinctrlSet(GPIO0_PB7, MUX_FUNC2, PULL_KEEP, DRIVE_LEVEL2);
  75.    
  76.     ret = LzUartInit(UART_ID, &attr);
  77.     if (ret != LZ_HARDWARE_SUCCESS)
  78.     {
  79.         printf("%s, %d: LzUartInit(%d) failed!\n", __FILE__, __LINE__, ret);
  80.         return;
  81.     }
  82.    
  83.     return;
  84. }
  85. void e53_gs_process(void *arg)
  86. {
  87.     unsigned int ret = 0;
  88.                 unsigned int i=0;
  89.     unsigned short flag = 0;
  90.                 unsigned short rc = 0;
  91.     unsigned char tubiao[16] = {0};
  92.                 unsigned char tubiao_str[48] = {0};
  93.    
  94.     e53_gs_init();
  95.     uart0_init();
  96.    
  97.                  ret = LzUartWrite(UART_ID, tubiao, 4);
  98.     if (ret != LZ_HARDWARE_SUCCESS)
  99.     {
  100.         printf("%s, %d: LzUartInit(%d) failed!\n", __FILE__, __LINE__, ret);
  101.         return;
  102.     }
  103.    
  104.     while (1)
  105.     {
  106.         ret = e53_gs_get_gesture_state(&flag);
  107.         if (ret != 0)
  108.         {
  109.             printf("Get Gesture Statu: 0x%x\n", flag);
  110.             if (flag & GES_UP)
  111.             {
  112.                 printf("\tUp\n");
  113.             }
  114.             if (flag & GES_DOWM)
  115.             {
  116.                 printf("\tDown\n");
  117.             }
  118.             if (flag & GES_LEFT)
  119.             {
  120.                 printf("\tLeft\n");
  121.             }
  122.             if (flag & GES_RIGHT)
  123.             {
  124.                 printf("\tRight\n");
  125.             }
  126.             if (flag & GES_FORWARD)
  127.             {
  128.                 printf("\tForward\n");
  129.             }
  130.             if (flag & GES_BACKWARD)
  131.             {
  132.                 printf("\tBackward\n");
  133.             }
  134.             if (flag & GES_CLOCKWISE)
  135.             {
  136.                 printf("\tClockwise\n");
  137.             }
  138.             if (flag & GES_COUNT_CLOCKWISE)
  139.             {
  140.                 printf("\tCount Clockwise\n");
  141.             }
  142.             if (flag & GES_WAVE)
  143.             {
  144.                 printf("\tWave\n");
  145.             }
  146.             
  147.             e53_gs_led_up_set((flag & GES_UP) ? (1) : (0));
  148.             e53_gs_led_down_set((flag & GES_DOWM) ? (1) : (0));
  149.             e53_gs_led_left_set((flag & GES_LEFT) ? (1) : (0));
  150.             e53_gs_led_right_set((flag & GES_RIGHT) ? (1) : (0));
  151.             e53_gs_led_forward_set((flag & GES_FORWARD) ? (1) : (0));
  152.             e53_gs_led_backward_set((flag & GES_BACKWARD) ? (1) : (0));
  153.             e53_gs_led_cw_set((flag & GES_CLOCKWISE) ? (1) : (0));
  154.             e53_gs_led_ccw_set((flag & GES_COUNT_CLOCKWISE) ? (1) : (0));
  155.             e53_gs_led_wave_set((flag & GES_WAVE) ? (1) : (0));
  156.             
  157.             tubiao[0] = flag;
  158.             tubiao[1] = (flag&0xff00)>>8;
  159.             tubiao[2] = '\r';
  160.             tubiao[3] = '\n';
  161.                                                 printf("tubiao:\n");
  162.                                                 for(i=0;i<4;i++) {
  163.                                                         sprintf(tubiao_str+i*3, "%02X ", tubiao[i] & 0xFF);
  164.                                                 }
  165.                                                 printf("DOWN HEX: %s", tubiao_str);
  166.                                                 printf("\n");
  167.             ret = LzUartWrite(UART_ID, tubiao, 4);
  168.             if (ret != LZ_HARDWARE_SUCCESS)
  169.             {
  170.                 printf("%s, %d: LzUartInit(%d) failed!\n", __FILE__, __LINE__, ret);
  171.                 return;
  172.             }
  173.         }
  174.         else
  175.         {
  176.             /* 如果没有数据,则多等待 */
  177.             LOS_Msleep(100);
  178.         }
  179.     }
  180. }

  181. void e53_gs_example()
  182. {
  183.     unsigned int thread_id;
  184.     TSK_INIT_PARAM_S task = {0};
  185.     unsigned int ret = LOS_OK;

  186.     task.pfnTaskEntry = (TSK_ENTRY_FUNC)e53_gs_process;
  187.     task.uwStackSize = 2048;
  188.     task.pcName = "e53 getsture sensor process";
  189.     task.usTaskPrio = 24;
  190.     ret = LOS_TaskCreate(&thread_id, &task);
  191.     if (ret != LOS_OK)
  192.     {
  193.         printf("Falied to create Task_One ret:0x%x\n", ret);
  194.         return;
  195.     }
  196. }

  197. APP_FEATURE_INIT(e53_gs_example);
复制代码


代码附件可见

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-12-27 03:07 , Processed in 0.089771 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表