热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

单片机触摸屏校准

触摸屏就是显示屏加触摸贴膜第一种情况假设显示屏假设触摸贴膜如果把这张膜贴到显示屏上,,那就不需要校准了,,,,,,,,,,触摸得到的X轴和Y轴的数字量正好与显示屏相等了..只能说想的美第二种

触摸屏就是显示屏加触摸贴膜

第一种情况

假设显示屏

 

假设触摸贴膜

如果把这张膜贴到显示屏上,,那就不需要校准了,,,,,,,,,,触摸得到的X轴和Y轴的数字量正好与显示屏相等了.....只能说想的美

 

第二种情况

 显示屏不变

  

 

触摸贴膜呢

 

 

 有没有发现   1100 - 300 = 800 

                  700 - 100 = 600

坐标之间的差值只好等于显示屏的长和宽,,只是触摸贴膜向左偏移了300,向上偏移了100,,,,,,,

假设显示屏上有这么一个红色的区域

要求是如果触摸到了这块区域那么就执行一些事情

如果按照上面的触摸的X轴与Y轴就是

if(Touch_X>=300 && Touch_X<=300+250 && Touch_Y>=100 && Touch_Y<=100+150)

{

  //执行相应的操作

}

这样也能实现所要的功能,,但是呢,这比较麻烦,考虑的事情太多,最好还是先把触摸的坐标转换为显示屏的坐标

那么如果触摸了一个点(Touch_X,Touch_Y)就要需要转换为显示屏的对应的点(Screen_X,Screen_Y),这样的话方便

对于上面那样就是

Screen_X = (Touch_X - 300)*800/(1100 - 300);

 

800/(1100-300)   就是每一个触摸点的距离对应显示屏的距离值

Touch_X - 300    是因为本身触摸向左偏移了300,,,也可以想成显示屏向右偏移了300

这样的话点击了301  就对应了显示屏的1

Screen_Y = (Touch_Y - 100)*600/(700 - 100);

假设(Touch_X,Touch_Y) = (300+250,100+150)

那么换算为显示屏的坐标就为

Screen_X =  (300+250- 300)*800/(1100 - 300) = 250;

Screen_Y = (100+150- 100)*600/(700 - 100) = 150;

那么

if(Screen_X >=0&& Screen_X <=250 && Screen_Y >=0&& Screen_Y <=150)

{

  //执行相应的操作

}

 但是呢我们怎么会事先知道屏幕到底偏移了多少呢??我们可以点击屏幕的角点(四个角)获得

但是呢,,,凭自己的感觉感觉感觉,,,如果屏幕的角点遮挡住了怎么办,,,再者说,角点哪有这么好点的,其实我也能看到角在哪,但是我却不确信自己点的是不是角

那就另一种方式

事先在显示屏上显示三个点()

 

这三个点的坐标(显示屏的)我是知道的

    假设设置的是(x1,y1) = (80,80)

                     (x2,y2) = (800-80,600-80)

                     (x3,y3) = (80,600-80)

然后呢我点击第一个点,会得到一个触摸的

Touch_X1,Touch_Y1

点击第二个会得到   Touch_X2,Touch_Y2

点击第三个会得到   Touch_X3,Touch_Y3

 

第一步咱们要算出偏移量 Offset_X,就是说触摸贴膜对应显示屏偏移了多少

                                       

 (x2 - x1)/(Touch_X2 - Touch_X1) = x1/TouchLength_X 

那么偏移的距离 Offset_X = Touch_X1 - TouchLength_X ;

 

同理

(Y3 - Y1)/(Touch_Y3 - Touch_Y1) = Y1/TouchLength_Y 

那么偏移的距离 Offset_Y = Touch_Y1- TouchLength_Y ;

 

 那么对应到显示屏上

Screen_X = (Touch_X - Offset_X)*(x2 - x1)/(Touch_X2 - Touch_X1);

Screen_Y = (Touch_Y - Offset_Y)*(Y3 - x1)/(Touch_Y3 - Touch_Y1);

 


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 三星W799在2011年的表现堪称经典,以其独特的双屏设计和强大的功能引领了双模手机的潮流。本文详细介绍其配置、功能及锁屏设置。 ... [详细]
  • VSCode与Gitee集成:项目提交的高效实践
    本文介绍如何利用VSCode内置的Git工具将项目提交到Gitee,简化Git命令的使用,提升代码管理效率。同时分享一些常见的踩坑经验和解决方案。 ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • 本文详细探讨了如何在Docker环境中实现单机部署Redis集群的方法,提供了详细的步骤和配置示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 非授权维修导致iPhone 8屏幕失灵:苹果新固件策略解析
    设备制造商通常希望用户通过官方或授权服务中心进行维修,以确保质量并保障收入。然而,对于消费者而言,价格更低、服务更便捷的非授权维修商更具吸引力。本文将探讨使用非授权服务商更换iPhone 8屏幕可能带来的问题及其背后的技术原因。 ... [详细]
  • 本文旨在提供一套高效的面试方法,帮助企业在短时间内找到合适的产品经理。虽然观点较为直接,但其方法已被实践证明有效,尤其适用于初创公司和新项目的需求。 ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 在本教程中,我们将深入探讨如何使用 Python 构建游戏的主程序模块。通过逐步实现各个关键组件,最终完成一个功能完善的游戏界面。 ... [详细]
  • Appium + Java 自动化测试中处理页面空白区域点击问题
    在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ... [详细]
  • 本文回顾了2017年的转型和2018年的收获,分享了几家知名互联网公司提供的工作机会及面试体验。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
author-avatar
大爱小哇先森_991
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有