串口触摸屏的键盘控制

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

相关文章

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求