项目(智慧教室)第三部分,人机交互在stm32上的实现

一。使用软件

1.stm32cubemx中针对汉字提供的软件

项目(智慧教室)第三部分,人机交互在stm32上的实现_第1张图片2.对数据进行处理

项目(智慧教室)第三部分,人机交互在stm32上的实现_第2张图片

项目(智慧教室)第三部分,人机交互在stm32上的实现_第3张图片

2.上面点击ok--》这里选择确定

项目(智慧教室)第三部分,人机交互在stm32上的实现_第4张图片

3.这里选择保存即可由字符库,但是需要占用内存太大,需35M,但是stm32只有几百k,所以需要自己删减。

项目(智慧教室)第三部分,人机交互在stm32上的实现_第5张图片

生成中文字符(用C语言表示)方式

1.编写好我们智慧教室需要用到的汉字

项目(智慧教室)第三部分,人机交互在stm32上的实现_第6张图片

2.另存为---》Unicode编码

项目(智慧教室)第三部分,人机交互在stm32上的实现_第7张图片

解决

项目(智慧教室)第三部分,人机交互在stm32上的实现_第8张图片

3.所有的宋体字符删除

项目(智慧教室)第三部分,人机交互在stm32上的实现_第9张图片

4.打开刚刚创建的txt文件

项目(智慧教室)第三部分,人机交互在stm32上的实现_第10张图片

5.保存为font.c

项目(智慧教室)第三部分,人机交互在stm32上的实现_第11张图片

6.我们使用汉字就调用GUI_Fontfont

项目(智慧教室)第三部分,人机交互在stm32上的实现_第12张图片

二。中文字符移植到Codeblock中

1.使能UTF-8编码方案(emwin参考手册27.1.4中

项目(智慧教室)第三部分,人机交互在stm32上的实现_第13张图片

GUI_UC_SetEncodeUTF8()

2.添加字符库到工程中

(1)模拟器工程中创建font文件夹

项目(智慧教室)第三部分,人机交互在stm32上的实现_第14张图片

(2)font.c添加进入font文件夹

项目(智慧教室)第三部分,人机交互在stm32上的实现_第15张图片

(3)添加到工程文件

<1>右键SimulaionTrial---->add files recursively---->找到font文件夹

项目(智慧教室)第三部分,人机交互在stm32上的实现_第16张图片

3.设置c源文件(需要显示中文)为UTF-8编码

4.程序中引用字库

(1)找到font.c最下方的font字库

项目(智慧教室)第三部分,人机交互在stm32上的实现_第17张图片

(2)声明到子页面中(注意:主页面不需要添加)

项目(智慧教室)第三部分,人机交互在stm32上的实现_第18张图片

5.text初始化下,修改setfont为nuicode编码

项目(智慧教室)第三部分,人机交互在stm32上的实现_第19张图片

6..c文件通过txt文档保存为UTF-8模式

项目(智慧教室)第三部分,人机交互在stm32上的实现_第20张图片

7.测试

项目(智慧教室)第三部分,人机交互在stm32上的实现_第21张图片

8.循环上述内容,把所有子页面

二模拟器向stm32cumex移植

1.模拟器,stm32cumex工程文件

项目(智慧教室)第三部分,人机交互在stm32上的实现_第22张图片

2.进入stm32cubemx的第三方工程目录下

项目(智慧教室)第三部分,人机交互在stm32上的实现_第23张图片

3.复制

项目(智慧教室)第三部分,人机交互在stm32上的实现_第24张图片

4.添加存在的文件

项目(智慧教室)第三部分,人机交互在stm32上的实现_第25张图片

5.把所有窗口选择

(1)页面窗口

项目(智慧教室)第三部分,人机交互在stm32上的实现_第26张图片

(2)字符窗口

项目(智慧教室)第三部分,人机交互在stm32上的实现_第27张图片

(3)主页面图片

项目(智慧教室)第三部分,人机交互在stm32上的实现_第28张图片

(4)子页面图片

项目(智慧教室)第三部分,人机交互在stm32上的实现_第29张图片

(5)现在编译会有很多警告,表示没有声明

项目(智慧教室)第三部分,人机交互在stm32上的实现_第30张图片

解决:创建一个.h文件,命名为include-dlg.h,放在application下。

项目(智慧教室)第三部分,人机交互在stm32上的实现_第31张图片

#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

5.对每一个页面,mainTask添加上述头文件,表示声明

项目(智慧教室)第三部分,人机交互在stm32上的实现_第32张图片

注意:这里可能报错

解决:

把所有的页面改为UTF-8编码即可(注意不要有漏网之鱼)

6.我们没有调用mainCreate()函数所以不会显示在stm32上,所以需要在Freertos.c中调用。

项目(智慧教室)第三部分,人机交互在stm32上的实现_第33张图片

在Freertos中

项目(智慧教室)第三部分,人机交互在stm32上的实现_第34张图片

    void MainTask(); 

项目(智慧教室)第三部分,人机交互在stm32上的实现_第35张图片

7.没有任何错误,但是烧写到stm上没有任何反应。

原因:

        虚拟器是鼠标进行调用的,这里是触摸屏。触摸屏需要轮寻检测,不然emwin没有办法触发。

解决:

以前的代码清楚,只需要轮寻检测

void Touch_Task(void const * argument)
{
  /* init code for LWIP */
 // MX_LWIP_Init();

  /* init code for FATFS */
  //MX_FATFS_Init();
  //GUI_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 */
}

三。Keil工程中对器件操作的代码

1.Freertos任务使用void MainTask(); 

2.MainTask使用主页面子页面的函数。

3.主页面子页面函数调用CmdAndSensor.c

1.创建文件到inc文件夹CmdAndSensor.h

#ifndef _CMD_AND_SENSOR_H
#define _CMD_AND_SENSOR_H

//1、控制功能

//1.1、风扇控制
void vFanCmd(int Cmd);


//1.2、报警控制
void vAlarmCmd(int Cmd);

//1.3、灯光控制
void vLedCmd(int Cmd);

//2、采集功能

//2.1、光照采集
int iGetLightValue(void);

//2.2、温度采集
int iGetTempValue(void);

//2.3、湿度采集
int iGetHumValue(void);
#endif


2.创建文件到src文件夹CmdAndSensor.c

#include "CmdAndSensor.h"

#include "gpio.h"

int SensorValue[3] = {11001, 25, 56};

//1、控制功能

//1.1、风扇控制
void vFanCmd(int Cmd){

	// 需要控制zigbee节点,后面进行开发

}


//1.2、报警控制
void vAlarmCmd(int Cmd){

	if(Cmd){
		HAL_GPIO_WritePin(BUZ_GPIO_Port, BUZ_Pin, GPIO_PIN_SET);
	}else{
  HAL_GPIO_WritePin(BUZ_GPIO_Port, BUZ_Pin, GPIO_PIN_RESET);	
	}

}

//1.3、灯光控制
void vLedCmd(int Cmd){

	if(Cmd){
		HAL_GPIO_WritePin(GPIOF, D6_Pin|D7_Pin|D8_Pin|D9_Pin, GPIO_PIN_RESET);
	}else{
		HAL_GPIO_WritePin(GPIOF, D6_Pin|D7_Pin|D8_Pin|D9_Pin, GPIO_PIN_SET);
	}


}

//2、采集功能

//2.1、光照采集
int iGetLightValue(void){

	return SensorValue[0];
}

//2.2、温度采集
int iGetTempValue(void){

		return SensorValue[1];
}

//2.3、湿度采集
int iGetHumValue(void){

		return SensorValue[2];
}

3.子页面加入头文件 #include "CmdAndSensor.h"

        目的:使用封装好的操作函数。

(1)6个子页面对数据的操作

项目(智慧教室)第三部分,人机交互在stm32上的实现_第36张图片

(2)

(3)

你可能感兴趣的:(人机交互)