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

一。使用软件

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

2.对数据进行处理

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

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

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

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

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

解决

3.所有的宋体字符删除

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

5.保存为font.c

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

二。中文字符移植到Codeblock中

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

GUI_UC_SetEncodeUTF8()

2.添加字符库到工程中

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

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

(3)添加到工程文件

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

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

4.程序中引用字库

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

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

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

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

7.测试

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

二模拟器向stm32cumex移植

1.模拟器,stm32cumex工程文件

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

3.复制

4.添加存在的文件

5.把所有窗口选择

(1)页面窗口

(2)字符窗口

(3)主页面图片

(4)子页面图片

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

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

#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添加上述头文件,表示声明

注意:这里可能报错

解决:

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

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

在Freertos中

    void MainTask(); 

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个子页面对数据的操作

(2)

(3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值