Day6-人机交互功能开发(基于STM32)

1.中文字库生成原理

点阵字体及字符编码

点阵字体

image-20200505173303594

字符编码

ASC||

image-20200505002758351

GB2312

image-20200505173838278

Unicode

image-20200505002947355

UTF-8

image-20200505003108161

只要在点阵显示之前,进行调用一次就可以,一般都是在我们GUI_INIT 之后

image-20200505003217962

emWin创建中文字库

FontCvtST

image-20200505003941011

基于windows字库创建emWin字库

生成全部字库,需要占用35.2MB   STM32 flash也就是几百k

image-20200505004239689

创建小型字库

image-20200505004503290

生成项目所需中文字库

温度
湿
光照
报警
灯光
风扇
传感器
控制

2.实现界面中文显示

Created with Raphaël 2.3.0 使能UTF-8编码方案 添加字库到工程中 设置c源文件(需要显示中文)为UTF-8编码 程序中引用字库 text小工具选择字库 打印字符内容

3.代码移植到STM32上

Created with Raphaël 2.3.0 文件拷贝 MDK工程添加 编译

MDK工程编码格式修改为utf-8

image-20200508184021407

需要创建include_dlg.h

//在需要引用的地方进行头文件包含
#ifndef 	_DLG_H
#define 	_DLG_H
#include "DIALOG.h"

extern WM_HWIN TempCreate(void);

extern WM_HWIN MainCreate(void);

extern WM_HWIN LightCreate(void);

extern WM_HWIN LedCreate(void);

extern WM_HWIN HumCreate(void);

extern WM_HWIN FanCreate(void);

extern WM_HWIN AlarmCreate(void);
#endif

在freeRTOS GUItask里调用 MainTask

/**
* @brief Function implementing the GuiTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_Gui_Task */
void Gui_Task(void const * argument)
{
  /* USER CODE BEGIN Gui_Task */
  /* Infinite loop */
	MainTask();
  /* USER CODE END Gui_Task */
}

在Touch任务里保留 Touch检测

/* USER CODE BEGIN Header_Touch_Task */
/**
  * @brief  Function implementing the TouchTask thread.
  * @param  argument: Not used 
  * @retval None
  */
/* USER CODE END Header_Touch_Task */
void Touch_Task(void const * argument)
{
    
                 
//  /* init code for FATFS */
//  MX_FATFS_Init();

//  /* init code for LWIP */
//  MX_LWIP_Init();
  /* USER CODE BEGIN Touch_Task */
	printf("system is runing!\r\n");
  /* Infinite loop */
  for(;;)
  {
		//ִ触摸屏需要轮询检测,不然emWin没有办法触发事件
		GUI_TOUCH_Exec();	
		osDelay(20);
  }
  /* USER CODE END Touch_Task */
}

4.代码移植到STM32下

Created with Raphaël 2.3.0 烧录测试 控制实际的硬件 采集实际的传感器

测试出的bug

bug1:当切换界面时,出现闪屏动作,体验感非常差
bug2:当频繁切换界面时,出现花屏或者白屏

5.人机交互功能测试验证

切换界面闪屏问题

使用存储设备

image-20200508194342937

自动使能存储设备

image-20200508194418650

使能存储设备API

image-20200508194455450

6.频繁切换界面花屏问题

/*********************************************************************
*
*       GUI_X_Config
*
* Purpose:
*   Called during the initialization process in order to set up the
*   available memory for the GUI.
*/
void GUI_X_Config(void) {
  //
  // 32 bit aligned memory area
  //
	volatile U32* aMemory = (volatile U32*)(SRAM_BANK_ADDR);
  //
  // Assign memory to emWin
  GUI_ALLOC_AssignMemory((void *)aMemory, GUI_NUMBYTES);
  GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSUZE);
  //
  // Set default font
  //
  GUI_SetDefaultFont(GUI_FONT_32_1);
}

  • 28
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值