项目(智慧教室)第三部分,人机交互在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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QTday3(QT实现文件对话框保存操作、实现键盘触发事件【WASD控制小球的移动】)

1.实现文件对话框保存操作 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }void Widget::on_fontBtn_clicked() {//调用QFo…

dll文件反编译源代码 C#反编译 dotpeek反编译dll文件后export

目录 背景下载安装dotpeek导入dll文件export导出文件参考 背景 项目合作的时候&#xff0c;使用前人的或者其他部门dll文件直接在机台运行&#xff0c;会出现很多问题&#xff0c;逻辑&#xff0c;效率等等&#xff0c;此时我们可以选择对他们的代码进行反编译和重构&#xff…

redisson分布式锁

RLock官网解释 基于Redis的Java分布式可重入锁对象&#xff0c;实现了锁接口。 如果获得锁的Redisson实例崩溃&#xff0c;那么这种锁可能永远挂起在获得状态。为了避免这种情况&#xff0c;Redisson维护了锁看门狗&#xff0c;它在锁持有者Redisson实例活着的时候延长锁过期时…

算法笔记:哈夫曼树、哈夫曼编码

1 字符的机内表示 2 前缀编码 字符只放在叶结点中字符编码可以有不同的长度由于字符只放在叶结点中&#xff0c;所以每个字符的编码都不可能是其他字符编码的前缀前缀编码可被惟一解码 3 哈夫曼树 哈夫曼树是一棵最小代价的二叉树&#xff0c;在这棵树上&#xff0c;所有的字…

SpotBugs(是FindBugs的继任者)安装、使用

SpotBugs介绍 SpotBugs和FindBugs的关系 SpotBugs是FindBugs的继任者&#xff0c;从SpotBugs停止的地方继续。 备注&#xff1a;FindBugs项目已经停止了&#xff0c;从2015年发布3.0.1版本以后再没有新的版本。 SpotBugs通过静态分析寻找java代码中的bug&#xff0c;通过发现…

lv3 嵌入式开发-9 linux TFTP服务器搭建及使用

目录 1 TFTP服务器的介绍 2 TFTP文件传输的特点 3 TFTP服务器的适用场景 4 配置介绍 4.1 配置步骤 4.2 使用 5 常见错误 1 TFTP服务器的介绍 TFTP&#xff08;Trivial File Transfer Protocol&#xff09;即简单文件传输协议 是TCP/IP协议族中的一个用来在客户机与服务器…

手机也可以搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站【cpolar实现公网访问】

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

mysql 安全加固

PS&#xff1a;之前在做安全测试的时候&#xff0c;报告mysql有安全漏洞&#xff0c;于是研究了下如何修复&#xff0c;于是记录下来分享给大家 1.1修改mysql 存放位置 修复 1.停服务 service mysqld stop2.迁位置 2.1 新建迁移目录 mkdir /home/database2.2 迁移数据文件…

【MySQL】MySQL8.0安装教程

下载 MySQL官网下载安装包 安装 1、双击安装程序开始安装 2、选择安装类型 选Server only&#xff08;只安装mysql&#xff09;&#xff0c;然后点击“next”。 3、检测需要的安装&#xff0c; 直接点击Execute开始安装 4、点击next 5、点击next 6、next 7、密码验证方式&a…

macos13 arm芯片(m2) 搭建hbase docker容器 并用flink通过自定义richSinkFunction写入数据到hbase

搭建hbase docker容器 下载镜像 https://hub.docker.com/r/satoshiyamamoto/hbase/tags 点击run 使用镜像新建容器 填写容器名和 容器与宿主机的端口映射 测试 通过宿主机访问容器内的hbase webUI http://localhost:60010/master-status

I2C与I3C的对比

I2C与I3C的对比 电气特性 I2C 1.半双工 2.串行数据线(SDA)和串行时钟线(SCL) 3.数据线漏极开路&#xff0c;即I2C接口接上拉电阻 4.I2C总线运行速度&#xff1a;**标准模式100kbit/s&#xff0c;快速模式400kbit/s&#xff0c;快速模式plus 1Mbit/s&#xff0c;**高速模式…

深入探讨梯度下降:优化机器学习的关键步骤(三)

文章目录 &#x1f340;引言&#x1f340;随机、批量梯度下降的差异&#x1f340;随机梯度下降的实现&#x1f340;随机梯度下降的调试 &#x1f340;引言 随机梯度下降是一种优化方法&#xff0c;主要作用是提高迭代速度&#xff0c;避免陷入庞大计算量的泥沼。在每次更新时&a…

[uniapp]踩坑日记 unexpected character > 1或‘=’>1 报错

在红色报错文档里下滑&#xff0c;找到Show more 根据提示看是缺少标签&#xff0c;如果不是缺少标签&#xff0c;看看view标签内容是否含有<、>、>、<号,把以上符合都进行以<号为例做{{“<”}}处理

Ubuntu编译运行socket.io

本篇文章记录一下自己在ubuntu上编译运行socket.io的过程&#xff0c;客户端选用的是socket.io的c的库&#xff0c;编译起来倒不难&#xff0c;但是说到运行的话&#xff0c;对我来说确实是花了点功夫。毕竟程序要能运行起来才能更方便地去熟悉代码&#xff0c;因此今天我就记录…

MySQL——索引

索引在 MySQL 数据库中分三类&#xff1a; B 树索引Hash 索引全文索引 目的&#xff1a;在查询的时候提升效率 b树 参考&#xff1a;https://blog.csdn.net/qq_40649503/article/details/115799935 数据库索引&#xff0c;是数据库管理系统中一个排序的数据结构&#xf…

在VScode中使用sftp传输本地文件到服务器端

安装SFTP 在VScode的扩展中安装sftp 注意这里需要在你没连接服务器的状态下安装&#xff0c;即本机需要有sftp 配置传输端口 安装成功后&#xff0c;使用快捷键"ctrlshiftp",输入sftp&#xff0c;选择Config 根据自己的实际情况修改配置文件&#xff0c;主要改h…

Golang-GJSON 快速而简单的方法来从 json 文档获取值

GJSON 是一个 Go 包&#xff0c;它提供了一种快速而简单的方法来从 json 文档获取值。它具有单行搜索、点符号路径、迭代和解析 json 行等功能。 GJSON 也可用于Python和Rust 入门 安装中 要开始使用GJSON 请安装 Go 并运行 go get &#xff1a; $ go get -u github.com/ti…

大型企业是否有必要进行数字化转型?

数字化转型对大型企业来说是至关重要的。随着科技的不断发展和市场竞争的加剧&#xff0c;企业面临着更高的客户期望、更复杂的供应链管理、更快的市场变化等挑战。以下是为什么大型企业有必要进行数字化转型的几个主要理由&#xff1a; 提升效率和生产力&#xff1a; 数字化…

AQS同步队列和等待队列的同步机制

理解AQS必须要理解同步队列和等待队列之间的同步机制&#xff0c;简单来说流程是&#xff1a; 获取锁失败的线程进入同步队列&#xff0c;成功的占用锁&#xff0c;占锁线程调用await方法进入条件等待队列&#xff0c;其他占锁线程调用signal方法&#xff0c;条件等待队列线程进…

Python学习 -- datetime模块

当涉及到处理日期和时间数据时&#xff0c;Python的datetime模块提供了一系列类来帮助您执行各种操作。以下是各个类及其常用方法的详细介绍&#xff1a; date 类 date 类表示一个年、月、日的日期对象。以下是一些常用的 date 类方法&#xff1a; date.today()获取当前日期…