串口触摸屏键盘工作机理

news2024/10/7 8:19:41

一:键盘的实现原理

PW  是否显示为密码(内容仍为实际内容,仅仅显示出来为*):0-否;1-是。
可读,可通过上位机修改,可通过指令修改。
covx-变量类型转换?
串口屏上仅有两种数据类型,即数值和字符串类型,当需要将字符串类型转换为数字类型或者将数字类型转换为字符串类型时,才使用covx指令

目前仅有txt、path、dir、filter这4个属性属性是字符串型属性,其他属性一般都是数值型属性。

covx att1,att2,lenth,format

att1:源变量

att2:目标变量

lenth:字符串的长度(0为自动长度,非0为固定长度)

format:申明数值类型(0-数字;1-货币;2-Hex)

 //把滑块h0的val数值变量转换成10进制数字字符串并赋值给文本t0的txt变量,长度为自动

 covx h0.val,t0.txt,0,0

(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)//整数  控件 n0
//        页面ID p(age0)     控件ID(2)TYPE 54
{

  covx p[loadpageid.val].b[loadcmpid.val].val,input.txt,0,0
//源变量                                    目标变量  0为自动长度 0-数字
  inputlenth.val=24//

}else if(p[loadpageid.val].b[loadcmpid.val].type==59)//虚拟浮点数   控件 x0
//        页面ID p(age0)     控件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)//文本控件 设置PW属性是 密码格式

  {

    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
/****************************************************/
/****************************************************/
/****************************************************/
/****************************************************/
完成键
//调用此页之前,先对此页的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
{
  Flag=1                                            //完成输入标志置一
  p[loadpageid.val].b[loadcmpid.val].txt=input.txt
}
page loadpageid.val

二:键盘解析

 OK KEY

可以看到输入完成后赋值给原始控件分为3个步骤

    通过p[loadpageid.val].b[loadcmpid.val].type判断触发控件的类型是数字控件、
虚拟浮点数或者其他,loadpageid.val和loadcmpid.val是如何传进来可以参考 其他跳转到键盘页面的方法

    根据不同的控件类型,将input.txt赋值给原始控件

    返回 loadpageid.val所记录的页面id

//调用此页之前,先对此页的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//input.txt转换成字符串复制给调用页控件
}else if(p[loadpageid.val].b[loadcmpid.val].type==59)//浮点数控件
{
covx-变量类型转换?
covx att1,att2,lenth,format att1:源变量 att2:目标变量lenth:字符串的长度(0为自动长度.非0为固定长度)
format:申明数值类型(0-数字;1-货币;2-Hex)
covx-示例1?

//把滑块h0的val数值变量转换成10进制数字字符串并赋值给文本t0的txt变量,长度为自动
//covx h0.val,t0.txt,0,0
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//temp临时
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

keybdB.loadpageid.val=dp
keybdB.loadcmpid.val=n0.id
page keybdB

OK键跳转之前
print input.txt,0


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

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

相关文章

UE5 UE4 快速定位节点位置

在材质面板中&#xff0c;找到之前写的一个节点&#xff0c;想要修改&#xff0c;但是当时写的比较多&#xff0c;想要快速定位到节点位置. 在面板下方的 Find Results面板中&#xff0c;输入所需节点&#xff0c;找结果后双击&#xff0c;就定位到该节点处。 同理&#xff0c;…

APM2.8如何做加速度校准

加速度的校准建议准备一个六面平整&#xff0c;边角整齐的方形硬纸盒或者塑料盒&#xff0c;如下图所示&#xff0c;我们将以它作为APM校准时的水平垂直姿态参考&#xff0c;另外当然还需要一块水平的桌面或者地面 首先用双面泡沫胶或者螺丝将APM主板正面向上固定于方形盒子上&…

每天五分钟深度学习:如何使用计算图来反向计算参数的导数?

本文重点 在上一个课程中&#xff0c;我们使用一个例子来计算函数J&#xff0c;也就相当于前向传播的过程&#xff0c;本节课程我们将学习如何使用计算图计算函数J的导数。相当于反向传播的过程。 计算J对v的导数&#xff0c;dJ/dv3 计算J对a的导数&#xff0c;dJ/da&#xf…

计算机组成原理----移码

在网上搜索移码是什么,大概率会搜到一个结论:移码是补码符号位取反,可是真的是这样吗? 传统的有符号整数是将二进制数的首位作为符号位,0表示正数,1表示负数。 但在移码中,我们不再使用单独的符号位来表示正负。而是通过一个固定的偏置量来将所有可能的指数值映射到一个无符…

[书生·浦语大模型实战营]——在茴香豆 Web 版中创建自己领域的知识问答助手

茴香豆是一个基于LLM的领域知识助手&#xff0c;可以用于解答群聊中的问题。接下来是创建过程。 1.打开茴香豆Web版&#xff0c;创建自己的领域库。 地址&#xff1a;茴香豆Web版 这里类似于注册账号&#xff0c;你输入知识库的名称以及密码&#xff0c;然后它就会创建一个知识…

计算机体系结构-2024期末考试

前言 最后一个字落笔&#xff0c;虽然知道并没有发挥到最好&#xff0c;内心还是感慨良多。 真正意义上本科阶段的课程考试&#xff0c;到此就结束了。 正如青春总有不完美的地方&#xff0c;此刻思绪竟飘到了三年前的盛夏&#xff0c;那个骄傲的少年。 扯远了&#xff0c;…

MFC里的工具栏按钮图标如何使用外部图片?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Spring和Servlet的整合

Servlet对象是谁创建的&#xff1f; 由服务器端创建的 程序启动调用加载spring配置文件代码 Web应用程序启动也需要加载Spring配置文件 Web开发中有三大组件&#xff1a; 1、servlet 2、filter 3、listener&#xff08;request&#xff0c;session&#xff0c;application&…

语音控制系统的安全挑战与防御策略(上)

语音控制系统&#xff08;VCS&#xff09;提供了便捷的用户界面&#xff0c;涉及智能家居、自动驾驶汽车、智能客服等众多应用场景&#xff0c;已成为现代智能设备不可或缺的一部分。其市场规模预计到2023年达到70亿美元&#xff0c;这种扩张带来了重大的安全挑战&#xff0c;如…

【校园网网络维修】当前用户使用的IP与设备重定向地址中IP不一致,请重新认证

出现的网络问题&#xff1a;当前用户使用的IP与设备重定向地址中IP不一致&#xff0c;请重新认证 可能的原因&#xff1a; 把之前登录的网页收藏到浏览器&#xff0c;然后直接通过这个链接进行登录认证。可能是收藏网址导致的ip地址请求参数不一致。 解决方法&#xff1a; 方法…

LCD屏入门(基于ESP32)

主要参考资料&#xff1a; B站【乐鑫全球开发者大会】DevCon23 #17 &#xff5c;HMI 智能屏解决方案 目录 1.LCD屏幕硬件层2.LVGL驱动层 1.LCD屏幕硬件层 MCU常用的驱动接口在下面&#xff0c;大致可以划分为串口屏和并口屏。 串口屏相较于并行屏优势是占用IO少&#xff0c;相…

pcdn服务器应该怎么配?

要配置PCDN&#xff08;Private Content Delivery Network&#xff09;服务器&#xff0c;可以按照以下步骤进行&#xff1a; 需求分析&#xff1a;明确业务需求&#xff0c;确定所需的CDN功能和性能参数。这包括预期的流量、负载、内容类型、目标用户群体等。 硬件选择&#…

Xunsearch:实现拼音搜索和中文分词功能

首先我们需要安装xunsearch扩展库&#xff0c;参考 1、设置分词器和拼音搜索功能 在创建Xunsearch对象后&#xff0c;可以设置相应的分词器和拼音搜索功能。以下代码示例演示了如何设置分词器和拼音搜索功能&#xff1a; $index $xunsearch->index; $index->setToken…

[ue5]建模场景学习笔记(1)——混合材质

卷首&#xff1a;这部分会记录建模场景等相关学习内容&#xff0c;与ue引擎学习笔记不同的是&#xff0c;可能会略过一些基础内容&#xff0c;因为部分知识在blender中已经学习过了&#xff0c;不再继续记录。 1.需求分析&#xff1a; 想构建一个山地的场景&#xff0c;在ue5中…

10款AI工具,让工作生活学习更高效

我看大家都推荐的差不多了&#xff0c;常见好用的PC软件就那些&#xff0c;我不想反复“咀嚼”了&#xff0c;我想另辟蹊径推荐点不一样的&#xff0c;比如10款PC端的AI网站。AI已经全方位“侵入”我们的生活&#xff0c;从AI写作到AI绘画&#xff0c;从AI视频到AI语音&#xf…

详解makefile中addprefix

在 Makefile 中&#xff0c;$(addprefix prefix,names…) 是一个函数&#xff0c;用于将指定的前缀添加到一组空格分隔的文件名中。这个函数通常用于将相同的前缀添加到一组文件名或路径中&#xff0c;非常适合在 Makefile 中进行路径拼接操作。 语法&#xff1a; makefile C…

【小呆的力学笔记】连续介质力学的知识点回顾二:应变度量

文章目录 3. 格林应变与阿尔曼西应变 3. 格林应变与阿尔曼西应变 变形体在变形前的线元 O A → \overrightarrow{OA} OA &#xff0c;在变形后变成 o a → \overrightarrow{oa} oa &#xff0c;那么应变应该度量这种线元变形前后的差别。 ∣ o a → ∣ 2 − ∣ O A → ∣ 2 …

linux学习(六)

1.网络管理 (1)查看 ifconfig: root用户可以查看网卡状态, 普通用户: /sbin/ifconfig(需要加上命令的完整路径) (2)修改网络配置 通过命令修改网络配置 设置网卡的ip地址;禁用网卡和启用网卡了。 添加网关: (3)网络故障查询 ①ping 检测当前主机和目标主机是…

allure测试报告用例数和 pytest执行用例数不相同问题

我出现的奇怪问题: pytest执行了9条用例,但是测试报告确只显示3条用例 我将其中的一个代码删除后,发现allure测试报告又正常了 我觉得很奇怪这个代码只是删除了二维数组的第一列,我检查了半天都找不到问题,只有降低版本了。导致原因:allure-pytest版本使用的是最新版本,…

【Game】Powerful

文章目录 【小伙伴】隐藏小伙伴 【百趣集】【人物属性点】【宠物打造】【奇遇】【钓鱼】 【小伙伴】 刷新位置 小伙伴等级详情 克制关系 隐藏小伙伴 1、仙缘小伙伴&#xff08;6种&#xff09; 遇到仙缘驭宠师然后进入战斗抓取 107、七彩仙凤 108、小青兔 109、小布 110、黑腹蛛…