一。使用软件
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)文章来源:https://www.toymoban.com/news/detail-700887.html
(3)文章来源地址https://www.toymoban.com/news/detail-700887.html
到了这里,关于项目(智慧教室)第三部分,人机交互在stm32上的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!