赞
踩
文件名称为HMI CODE,包含两个字库和一个工程
双击test打开工程并照教程载入字库
如图所示为工程模板
如何串口通讯改变屏幕参数
首先点击上方的调试界面进入调试
点击左下角键盘输入,在指令区域输入x1.val=1点击执行所有代码
可以看到此时绿灯旁边示数为0.01这是因为采用了虚拟浮点数,因此想要显示小数就必须乘以100来显示。比如要显示3.14,输入就是314
以串口3为例,单片机执行指令
HAL_UART_Transmit(&huart3,"x1.val=1000\xff\xff\xff", 14, 0xffff);
注意14为长度是要算好的,其他指令根据长度是要变换的,三个\xff为截止符一定要加。
此时选择用户MCU输入,选择好波特率和串口并点击开始可以看到
Vci示数为10,我们输入的指令是1000,虚拟浮点数减少两位为10
如何关机保存数据
写入一个变量到用户存储区(EEPROM)
(支持X3、X5、K0系列)
wepo att,add
att:变量/常量
add: 用户存储区位置(从0开始,到1023结束,总共1024个)
实例1:wepo t0.txt,10 (将t0.txt的内容写入用户存储区的第10位置,在储存区中的占用空间为t0.txt的最大设置值+1,即t0的txt-maxl属性表示的大小+1,假如txt-maxl=20,那么最多可以放下10个汉字或者20个英文字母,实际占用的控件为10-30,共21个位置,下个存储地址应从31开始)
实例2:wepo “abcd”,20 (将字符串“abcd”写入用户存储区的第20位置,在储存区中占用大小为5字节,一个英文字母1个字节,共四个字节,因为是字符串,多加1个字节,最后为5个字节,实际存储地址为20-24,注意:由双引号括起来的或者xx.txt的就是字符串)
实例3:wepo 125,10 (将数值125写入用户存储区的第10位置, 在储存区中占用大小为4字节,即10-13位置)
实例4:wepo “一二三四五”,100 (将”一二三四五”字符串写入用户存储区的第100位置,每个汉字占用2字节,5个汉字共10字节,因为是字符串,加1字节,共11字节,实际存储地址100-110,下个存储地址应该从111开始)
备注:
1.写入内容为变量字符串的时候,在储存区中的占用空间为此变量的最大字符数+1;写入内容为常量字符串的时候,在储存区中的占用空间为此常量字符串的实际字符数+1。
2.写入内容为变量数值或常量数值的时候,在储存区中的占用空间统一为4字节。
3.使用用户存储区读写操作过程中请切记规划好数据区位置,以免位置交错引起数据覆盖错乱。
从用户存储区(EEPRO)读数据到一个变量
repo att,add
att:目标变量
add: 用户存储区位置(从0开始)
实例1:repo t0.txt,10 (从用户存储区的10位置读数据到t0.txt变量中,在储存区中的读取数据量为t0.txt的最大设置值+1,即t0的txt-maxl属性表示的大小+1)
实例2.repo n0.val,10 (从用户存储区的10位置读数据到n0.val,在存储区中的读取数据量为4字节)
备注:
1.读入内容为变量字符串的时候,在储存区中的读取数据量为此变量的最大字符数+1。
2.读入内容为变量数值时候,在储存区中的读取数据量统一为4字节。
3.使用用户存储区读写操作过程中请切记规划好数据区位置,以免位置交错引起数据覆盖错乱。
如何实现按键长按功能
1.新建一个定时器tm0,en属性设置为0,其他属性不用管;此时定时器处于默认关闭状态。
2.在按钮的按下事件中写上如下代码:
tm0.tim=2000 2秒后进入长按功能
tm0.en=1 打开定时器
3.在按钮的弹起事件中写上如下代码:
tm0.en=0 已经松手了,所以定时器立即停止工作
4.在定时器tm0的定时事件中写上如下代码:
tm0.tim=100 按钮刚按下的时候,定时时间是2秒,这里修改为100ms,就意味着如果不松手,每100ms会来执行一次后面的代码
此处写上您想操作的长按事件代码,比如:n0.val++
如何实现单片机读取数据
如图选择滑块来实现频率的改变
在弹起事件和滑动事件中输入
- n1.val=h1.val 使用n1显示示数
-
- printh AA 起始标识符,可以自己更改,主要作用是让单片机识别串口数据是谁的
-
- prints h1.val,1 将h1的数据发送出去,长度为1
-
- printh BB 结束标识符,可以自己更改,作用同上
-
- wepo h1.val,10 如前面介绍将数字保存起来
此时单片机内使用字符串接收,黄色部分不能去掉,会报错
- #define RXBUFFERSIZE 6 //最大接受字节数
-
- uint8_t RxBuffer[RXBUFFERSIZE]; //接收数据
在主函数写入
HAL_UART_Receive(&huart3, (uint8_t *)&RxBuffer,4,0xff);
此时做逻辑判断
- if (RxBuffer[0]==0xAA&&RxBuffer[2]==0xBB) //起始位0是0XAA结束位是0XBB
-
- {
-
- fre_fenpin=RxBuffer[1]; //fenpin等于第二个数组,也就是我们发送的数据
-
- fre_val = (fre_fenpin)*10; //乘以10,因为我分频采用了71,需要计算
-
- TIM8->ARR=fre_val;//更改频率,不做解释
-
- HAL_Delay(1);
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。