串口触摸屏的键盘控制

2024-06-17 08:36
文章标签 串口 触摸屏 键盘 控制

本文主要是介绍串口触摸屏的键盘控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(text 属性txt_maxl 800)
①变量loadpageid.val:调用页的页面ID。
②变量loadcmpid.val:调用页的控件ID。
③定时器tm0:让输入框有个光标不断闪烁,如果不需要,控件属性en=0即可。
④变量inputlenth:获取正在使用系统键盘控件字符最大长度。
⑤变量input:输入的数据。(属性txt_maxl改200)
⑥文本show:键盘显示的数据,主要目的是为了让输入框有个闪烁的效果。
其他跳转到键盘页面的方法
注意
正常情况下是不需要配这三条代码的
是为了让其他原本不支持键盘的控件控件也能调用键盘
或者是从其他工程中导入的键盘,因为不是用正常方法添加的键盘,没法通过key属性进行配置,需要使用这个方法
page到键盘页之前,先对键盘页的loadgageid.val和loadcmpid.val赋值就可以了
一般在文本控件或数字控件的按下事件中进行赋值,键盘名.loadpageid.val=dp,键盘名.loadcmpid.val=当前控
件的id
其他的逻辑会自动实现,loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID,然后调用page
指令跳转到键盘页面即可
这样就可以在键盘页面判断跳转过来的控件类型(type属性),然后根据不同类型调用不同代码转换到键盘上进行
显示
keybdAP.loadpageid.val=dp
keybdAP.loadcmpid.val='&id&'
page keybdAP
下面的代码为键盘页面的前初始化事件
//调用此页之前,先对此页的loadpageid.val和loadcmpid.val赋值就可以了,
其他的逻辑本页会自动实现
//loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID
if(p[loadpageid.val].b[loadcmpid.val].type==54)//整数
{
covx p[loadpageid.val].b[loadcmpid.val].val,input.txt,0,0
//
inputlenth.val=24
}else if(p[loadpageid.val].b[loadcmpid.val].type==59)//虚拟浮点数
// 页面ID 控件ID
{
inputlenth.val=p[loadpageid.val].b[loadcmpid.val].val
// 页面ID 控件ID
if(inputlenth.val<0)
{
inputlenth.val*=-1
input.txt="-"
}else
{
input.txt=""
}
temp.val=1
for(temp2.val=0;temp2.val<p[loadpageid.val].b[loadcmpid.val].vvs1;temp2.val++)
{
temp.val*=10
}
temp2.val=inputlenth.val/temp.val//得到整数位
cov temp2.val,tempstr.txt,0
input.txt+=tempstr.txt+"."
temp2.val=temp2.val*temp.val-inputlenth.val//得到小数位
if(temp2.val<0)
{
temp2.val*=-1
}
covx temp2.val,tempstr.txt,p[loadpageid.val].b[loadcmpid.val].vvs1,0
input.txt+=tempstr.txt
inputlenth.val=24
}else
{
input.txt=p[loadpageid.val].b[loadcmpid.val].txt
inputlenth.val=p[loadpageid.val].b[loadcmpid.val].txt_maxl
if(p[loadpageid.val].b[loadcmpid.val].type==116)
{
show.pw=p[loadpageid.val].b[loadcmpid.val].pw
}
}
show.txt=input.txt
下面的代码为键盘页面的OK按键的弹起事件
//调用此页之前,先对此页的loadpageid.val和loadcmpid.val赋值就可以了,其他的逻辑本页会自动实现
//loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID
if(p[loadpageid.val].b[loadcmpid.val].type==54)
{
covx input.txt,p[loadpageid.val].b[loadcmpid.val].val,0,0
}else if(p[loadpageid.val].b[loadcmpid.val].type==59)
{
covx input.txt,temp.val,0,0
if(temp.val<0)
{
temp.val*=-1
}
for(temp2.val=0;temp2.val<p[loadpageid.val].b[loadcmpid.val].vvs1;temp2.val++)
{
temp.val*=10
}
p[loadpageid.val].b[loadcmpid.val].val=temp.val
strlen input.txt,temp.val
temp.val--
while(temp.val>=0)
{
substr input.txt,tempstr.txt,temp.val,1
if(tempstr.txt==".")
{
substr input.txt,tempstr.txt,temp.val+1,p[loadpageid.val].b[loadcmpid.val].vvs1
covx tempstr.txt,temp2.val,0,0
strlen tempstr.txt,temp.val
while(temp.val<p[loadpageid.val].b[loadcmpid.val].vvs1)
{
temp2.val*=10
temp.val++
}
p[loadpageid.val].b[loadcmpid.val].val+=temp2.val
temp.val=-1
}
temp.val--
}
substr input.txt,tempstr.txt,0,1
if(tempstr.txt=="-")
{
p[loadpageid.val].b[loadcmpid.val].val*=-1
}
}else
{
p[loadpageid.val].b[loadcmpid.val].txt=input.txt
}
page loadpageid.val
可以看到输入完成后赋值给原始控件分为3个步骤
通过p[loadpageid.val].b[loadcmpid.val].type判断触发控件的类型是数字控件、虚拟浮点数或者其他,
loadpageid.val和loadcmpid.val是如何传进来可以参考 其他跳转到键盘页面的方法
根据不同的控件类型,将input.txt赋值给原始控件
返回 loadpageid.val所记录的页面id

文本控件-属性详解
控件属性解析
提示
绿色属性可以通过上位机或者串口屏指令进行修改,黑色属性只能在上位机中修改或者不可修改,可通过上位机进行修改指“选中控件后通过属性栏修改控件的属性”
type属性 -控件类型,固定值,不同类型的控件type值不同,相同类型的控件type值相同,可读,不可通过上位机修改,不可通过指令修改。参考: 控件属性-控件id对照表
id属性 -控件ID,可通过上位机左上角的上下箭头置顶或置底,可读,可通过上位机修改左上角的箭头置顶或置地间接修改,不可通过指令修改。参考: 如何更改控件的前后图层关系
objname属性 -控件名称。不可读,可通过上位机进行修改,不可通过指令更改。
vscope属性 -内存占用(私有占用只能在当前页面被访问,全局占用可以在所有页面被访问),当设置为私有时,跳转页面后,该控件占用的内存会被释放,重新返回该页面后该控件会恢复到最初的设置。可读,可通过上位机进行修改,不可通过指令更改。参考:跨页面赋值,全局变量操作
drag属性 -是否支持拖动:0-否;1-是。仅x系列支持。可读,可通过上位机修改,可通过指令修改。
aph属性 -不透明度(0-127),0为完全透明,127为完全不透明。仅x系列支持。可读,可通过上位机修改,可通过指令修改。
effect属性 -加载特效:0-立即加载;1-上边飞入;2-下边飞入;3-左边飞入;4-右边飞入;5-左上角飞入;6-右上角飞入;7-左下角飞入;8-右下角飞入。仅x系列支持,在上位机中设置为立即加载时,无法通过指令变为其他特效,当在上位机中设置为非立即加载的特效时,可以变为立即加载,也可以再改为其他特效
sta属性 -背景填充方式:0-切图;1-单色;2-图片;3-透明(仅x系列支持透明)。可读,可通过上位机修改,不可通过指令修改。
picc属性 -切图背景(必须是全屏图片),sta为切图时才有这个属性。可读,可通过上位机修改,可通过指令修改。
bco属性 -背景色,sta为单色时才有这个属性。可读,可通过上位机修改,可通过指令修改。
style属性 -显示风格:0-平面;1-边框;2-3D_Down;3-3D_Up;4-3D_Auto,sta为单色时才有这个属性。可读,可通过上位机修改,不可通过指令修改。
borderc属性 -边框颜色。当style设置为边框时可用。可读,可通过上位机修改,x系列可通过指令修改,其他系列不可通过指令修改。
borderw属性 边框粗细。当style设置为边框时可用。最大值:255。可读,可通过上位机修改,x系列可通过指令修改,其他系列不可通过指令修改。
pic属性 -背景图片,sta为图片时才有这个属性。可读,可通过上位机修改,可通过指令修改。
pco属性 -字体色。可读,可通过上位机修改,可通过指令修改。
key属性 -绑定键盘。可读,可通过上位机修改,不可通过指令修改。
font属性 -控件调用的字库id,调用不同的字库会显示不同的字体或字号。可读,可通过上位机修改,可通过指令修改。参考:1、 创建字库和导入字库 2、 指定字库
xcen属性 -水平对齐:0-靠左;1-居中;2-靠右。可读,可通过上位机修改,可通过指令修改。
ycen属性 -垂直对齐:0-靠上;1-居中;2-靠下。可读,可通过上位机修改,可通过指令修改。
pw属性 -是否显示为密码(内容仍为实际内容,仅仅显示出来为*):0-否;1-是。可读,可通过上位机修改,可通过指令修改。
txt属性 -字符内容。可读,可通过上位机修改,可通过指令修改。
txt_maxl属性 -字符最大长度(即分配内存空间)。可读,可通过上位机修改,不可通过指令修改。
isbr属性 -是否自动换行:0-否;1-是。可读,可通过上位机修改,可通过指令修改。
spax属性 -字符横向间距(最小0,最大255)。可读,可通过上位机修改,x系列可通过指令修改,其他系列不可通过指令修改。
spay属性 -字符纵向间距(最小0,最大255)。可读,可通过上位机修改,x系列可通过指令修改,其他系列不可通过指令修改。
x属性 -控件的X坐标。可读,可通过上位机修改,x系列可通过指令修改,其他系列不可通过指令修改。
y属性 -控件的Y坐标。可读,可通过上位机修改,x系列可通过指令修改,其他系列不可通过指令修改。
w属性 -控件的宽度。可读,可通过上位机修改,不可通过指令修改。
h属性 -控件的高度。可读,可通过上位机修改,不可通过指令修改。

//调用此页之前,先对此页的loadpageid.val和loadcmpid.val赋值就可以了,其他的逻辑本页会自动实现
//loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID
if(p[loadpageid.val].b[loadcmpid.val].type==54)//数字控件类型
{
covx input.txt,p[loadpageid.val].b[loadcmpid.val].val,0,0
}else if(p[loadpageid.val].b[loadcmpid.val].type==59)//浮点数类型控件
{
covx input.txt,temp.val,0,0//input.txt转换成字符串复制给temp.val
if(temp.val<0)
{
temp.val*=-1
}
for(temp2.val=0;temp2.val<p[loadpageid.val].b[loadcmpid.val].vvs1;temp2.val++)
{
temp.val*=10
}
p[loadpageid.val].b[loadcmpid.val].val=temp.val//
strlen input.txt,temp.val// //把字符串变量input.txt的实际字符长度赋值给temp.val
temp.val--
while(temp.val>=0)
{//从input.txt中的temp.val位置开始截取l个字符赋值给tempstr.txt
substr input.txt,tempstr.txt,temp.val,1//
if(tempstr.txt==".")//
{
substr input.txt,tempstr.txt,temp.val+1,p[loadpageid.val].b[loadcmpid.val].vvs1
covx tempstr.txt,temp2.val,0,0//
strlen tempstr.txt,temp.val//
while(temp.val<p[loadpageid.val].b[loadcmpid.val].vvs1)
{
temp2.val*=10
temp.val++
}
p[loadpageid.val].b[loadcmpid.val].val+=temp2.val
temp.val=-1
}
temp.val--
}
substr input.txt,tempstr.txt,0,1//
if(tempstr.txt=="-")
{
p[loadpageid.val].b[loadcmpid.val].val*=-1
}
}else
{//调用页控件=input.txt
p[loadpageid.val].b[loadcmpid.val].txt=input.txt
}
page loadpageid.val

/********************************/
bp1
if(b241.txt=="英")
{
btlen input.txt,temp.val
temp.val++ //以保证比最大字符限制小2个字节
if(temp.val<inputlenth.val)
{
input.txt+='&txt&'
show.txt=input.txt
}
pastr0.txt=""
}
/********************************/
bp2
if(b241.txt=="英")
{
btlen input.txt,temp.val
temp.val++ //以保证比最大字符限制小2个字节
if(temp.val<inputlenth.val)
{
input.txt+='&txt&'
show.txt=input.txt
}
pastr0.txt=""
}
/********************************/
bp3
if(b241.txt=="英")
{
btlen input.txt,temp.val
temp.val++ //以保证比最大字符限制小2个字节
if(temp.val<inputlenth.val)
{
input.txt+='&txt&'
show.txt=input.txt
}
pastr0.txt=""
}

if(b241.txt=="英") //拼音上翻
{
pa_d.val-=18
if(pa_d.val<0)
{
pa_d.val=0
}
for(temp.val=bp1.id;temp.val<=bp18.id;temp.val++)
{
pa_txt pastr1.txt,b[temp.val].txt,pa_d.val+temp.val-bp1.id,1
}
}
if(b241.txt=="英") //拼音下翻
{
pa_d.val+=18
if(pa_d.val>=pa_z.val)
{
pa_d.val=pa_z.val-1
}
if(pa_d.val>-1)
{
for(temp.val=bp1.id;temp.val<=bp18.id;temp.val++)
{
pa_txt pastr1.txt,b[temp.val].txt,pa_d.val+temp.val-bp1.id,1
}
}
}

获取控件自身的属性»串口屏高级应用详解 »获取控件自身的属性
在其他语言,例如java中,this是自身的一个对象,代表对象本身。
可以使用this来获取到对象自身的属性。
例如
public Date(int year, int month, int day){ this.year = year; this.month = month; this.day = day; }
某些情况下需要在当前的控件中获取到当前控件的属性
例如获取b0的txt属性进行判断
if(b0.txt=="开始"){ b0.txt="停止"}else{ b0.txt="开始"}
如果有多个类似的按钮进行判断,修改起来就相对麻烦,那么就可以用下面这种方法来获取到自身的属性进行判断。
if('&txt&'=="开始"){ '&txt&'="停止"}else{ '&txt&'="开始"}
也可以通过’&val&’来获取自身的val属性或者其他属性‘

if(t0.txt!="")
{
wepo t0.txt,0 //写入密码到eeprom
t1.txt="密码已修改化为"+t0.txt
}else
{
t1.txt="请输入密码"
}
repo va0.txt,0 //读出密码
if(va0.txt==t0.txt) //判断密码
{
t1.txt="密码正确"
}else
{
t1.txt="密码错误,请重新输入"
}

f(Flag==1)
{
Flag=0 //复位文本更新标志
strlen t0.txt,n0.val //检测字符串长度
intput.txt=t0.txt //复制拷贝到缓存
t0.txt="" //清除文本内容
n0.val+=n1.val //字符长度加首行长度
va1.val=n0.val/n1.val //行数
for(Number=0;Number<va1.val;Number++)//行数循环
{
substr intput.txt,tempstr.txt,va0.val,n1.val//截取缓存文本 位置 长度
t0.txt+=tempstr.txt //当前行内容
t0.txt+="\r" //换行
delay=1000 //延时观察
va0.val+=n1.val//已经截取地址值加一//截取位置累加
}
}

这篇关于串口触摸屏的键盘控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1068952

相关文章

普洛菲斯手持式触摸屏 GP2401H-TC41-24V

触摸屏 分类 根据传感器的类型,触摸屏大致被分为红外线式、电阻式、表面声波式和电容式触摸屏四种。红外线技术触摸屏价格低廉,但其外框易碎,容易产生光干扰,曲面情况下失真;电容技术触摸屏设计构思合理,但其图像失真问题很难得到根本解决;电阻技术触摸屏的定位准确,但其价格颇高,且怕刮易损;表面声波触摸屏解决了以往触摸屏的各种缺陷,清晰不容易被损坏,适于各种场合,缺点是屏幕表面如果有水滴和尘土会使触摸屏变得

Java研学-RBAC权限控制(八)

九 登录登出 1 登录作用   判断员工是否有权限访问,首先得知道现在操作的人是谁,所以必须先实现登录功能 2 登录流程   ① 提供登录页面,可输入用户名与密码信息,并添加执行登录的按钮。(登录页面不能被拦截)   ② 给按钮绑定点击事件(异步操作,POST请求)   ③ 事件中发送登录请求,使用 AJAX 方式提交。(使用 AJAX 原因:用户体验更好,既可保留用户刚输入的用户名和密码

通知中心设置一个键盘的捕捉事件

//通知中心监听键盘的frame发生改变

ROS2从入门到精通4-4:局部控制插件开发案例(以PID算法为例)

目录 0 专栏介绍1 控制插件编写模板1.1 构造控制插件类1.2 注册并导出插件1.3 编译与使用插件 2 基于PID的路径跟踪原理3 控制插件开发案例(PID算法)常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 🚀详情:《ROS2从入门到精通》 1 控制插

407串口01发送

实验一: 工程。 链接:https://pan.baidu.com/s/1g8DV4yZWOix0BbcZ08LYDQ?pwd=2176 提取码:2176 串口1的使用。发送功能。 单片机发送信息到电脑。 通过串口进行通信。 首先单片机这边。 单片机这边,需要对单片机的串口模块进行使能初始化,设置串口的格式。 单片机和电脑的串口收发格式要配置一致。不然A和B肯定通信不成功,鸡和鸭讲,

MQTT之CONNECT控制报文详解

目录 1.  MQTT协议规范 2.  名词解释 3.  CONNECT控制报文详解 3.1  固定报头 Fixed header 3.2  可变报头 Variable header 3.2.1  协议名 Protocol Name 3.2.2  协议级别 Protocol Level 3.2.3  连接标志 Connect Flags 3.2.4  保持连接 Keep

STM32单片机PWR电源控制详解

文章目录 1. PWR概述 2. 电源结构框图 3. 上电复位和掉电复位 4. 可编程电压监测器 5. 低功耗模式 6. 模式选择 6.1 睡眠模式 6.2 停止模式 6.3 待机模式 7. 代码示例 1. PWR概述 PWR(Power Control)电源控制,负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能。 可编程电压监测器

xilinx FPGA 串口设计笔记

xilinx FPGA  串口设计笔记 在设计中,需要用 FPGA 读取 GPS 内部的信息,GPS 的通信方式为串口,所以在 FPGA 中移植了串口程序。 本次移植的程序源代码是特权的串口程序,本以为移植应该很快就能完成, 但其中还是 出了一写小问题,耽误了不少的时间,下面将问题进行一个总结! 以下是串口的时序: 在设计中,耽误时间最长的问题就是数据老是出错,为了找出问题

langtj牌子的机械键盘关闭闪光灯

问题描述(langtj牌子的键盘): 机械键盘确实是挺好用的,但是背景灯有时候确实有点刺眼,于是萌生了关闭背景灯的想法,刚开始以为没有快捷键,想从硬件上下手,后来想了一下,还是先看一下说明书,查下资料再说,于是把度娘请了出来,问题也就解决了。 解决方法: FN+菜单键+↑或者↓即可调节背景灯。

飞行堡垒系列_键盘灯开关

飞行堡垒系列键盘灯可以通过键盘上的"Fn + 方向键"控制 演示机型品牌型号:飞行堡垒8 系统版本:Windows 11         飞行堡垒键盘灯可通过键盘上的"Fn+方向键"控制。         " Fn + 下方向键 "为减弱键盘灯光,多按几次键盘灯就可关闭。         " Fn + 上方向键 "可增强键盘灯光。除此此外,FN+F7/F8还可以调节屏幕的亮度。