物联网智慧教室项目(六):人机交互功能开发(stm32)

一、中文字库生成原理

(一)点阵字体及字符编码

点阵字体

在这里插入图片描述

字符编码

ASC||

在这里插入图片描述

GB2312

在这里插入图片描述

Unicode

在这里插入图片描述

UTF-8

在这里插入图片描述

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

在这里插入图片描述

emWin创建中文字库

FontCvtST

在这里插入图片描述

基于windows字库创建emWin字库

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

在这里插入图片描述

创建小型字库

在这里插入图片描述

(三)生成项目所需中文字库

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

二、实现界面中文显示

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

三、代码移植到STM32(上)

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

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

在这里插入图片描述

(二)需要创建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 */
}

四、代码移植到STM32(下)

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

测试出的bug

bug1:当切换界面时,出现闪屏动作,体验感非常差
bug2:当频繁切换界面时,出现花屏或者白屏
在下一节进行解决

五、人机交互功能测试验证

(一)切换界面闪屏问题

使用存储设备

在这里插入图片描述

自动使能存储设备

在这里插入图片描述

使能存储设备API

在这里插入图片描述

频繁切换界面花屏问题

/*********************************************************************
*
*       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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值