引 言:
人机对话的界面种类有很多,比如显示器、LED、LCD及带触摸屏的LCD等。其中后者是最近几年刚发展起来的一项新技术,它通过计算机技术处理声音、图像、视频、文字、动画等信息,并在这些信息间建立一定的逻辑关系,使之成为能交互地进行信息存取和输出的集成系统。换而言之,它能综合信息发布者的意愿和接受者对信息的需求及接受习惯,对信息进行收集、加工、整合并双向式传播。触摸屏系统符合简便、经济、高效的原则,具有人机交互性好、操作简单灵活、输入速度快等特点。它与迅猛发展的计算机网络和多媒体技术相结合,使用者仅仅用手指触摸屏幕,就能进行信息检索、数据分析,甚至可以做出身临其境、栩栩如生的效果;较键盘输入简单、直观、快捷,具有丰富多采的表现能力,比以往任何传媒更具亲合力。
触摸屏和51单片机接口,可以使一些小系统的操作更加方便、快捷。使用触摸屏时最重要的问题是确定坐标位置,即确定触点位置是否在该键的有效区域之内。由于51系列单片机的汇编语言不具备其它高级语言所具有的丰富库函数及逻辑运算能力,所以如何用51单片机简捷准确地完成这一任务,便成为应用中迫切需要解决的问题。
在实际应用中,我们采用了ADS7843作为触摸屏的控制器。关于ADS7843的原理及工作方式,已经有很多文章发表,而如何确认坐标位置却很少提及。本文仅就坐标确定问题做如下分析。
1 转换模式
ADS7843的转换精度有8位和12位两种,可以精确到X或Y方向上的1/256和1/4096。我们采用清华蓬远公司的PDA240160触摸显示屏,外形尺寸是61.6mm×42.4mm,所以没必要采用12位A/D转换,而只需要8位A/D转换就足以达到所需精度,即最小分度是X、Y长度方向的 1/256。
2 坐标确定
PDA240160触摸显示屏的坐标如图1。
其中,(X,Y)是一个图表按键的中心坐标,(X’,Y’)是右下角坐标,(X”,Y”)是其左上角的坐标。在触及屏幕时,触点只要在(X’,Y’)和(X”,Y”)矩形区域内均认为是触摸该键有效。假设一个32×32点阵的图标按键中心坐标(X,Y)为(50,50),那么(X’,Y’)就是(35,40),(X”,Y”)就是(65,60)。在触摸时只要得到的键坐标在(X’,Y’)和(X”,Y”)之间,即认为是触摸到了该键。而在该键坐标范围内的值又是如此之多,如何来处理得到的坐标呢?最初我们采取散转方式,结果是程序太冗长、可读性差且可移植性不好,不能作为子程序来调用。经过探讨分析,我们最后采取了查表的方式。
首先,制作如下所示的坐标表(包含当前屏幕上的所有键的两个角坐标):
表中每一行均代表一个键值的两个角坐标(需要放置完图标按键后调用相关程序确定两个角的坐标值),最后的字符001~n是每个键值的标志(简写A)。这个标志很有用,在以后的程序中会看到。
3 程序流程图与程序清单
程序流程图如图2 :
子程序清单见本刊网络补充版(www.dpj.com.cn)。其中XA、YA存储的是A/D转换后的坐标值。程序已经调试通过,敬请读者验证。
结 语
经过反复测试后得出:每个触摸键的反应都很灵敏,而且在每个图标键的有效区域内都能反应。证明这个思路简捷、易懂、可移植性好,在确定触摸按键位置坐标时是非常具有实际应用价值的。
参考文献
1 Burr-Brown公司. ADS7843 Data Book. 1998
2 何立民. 单片机应用技术选编(5). 北京:北京航空航天大学出版社,1997
3 万福君, 潘松峰,等. 单片微机原理系统设计与应用. 合肥: 中国科学技术大学出版社, 2001
4 胡冰,吴升艳,等. ADS7843触摸屏接口. 国外电子元器件. 2002(7):27~29
关键字:51单片机 触摸屏 坐标算法
引用地址:
51单片机系统中的触摸屏坐标算法
推荐阅读最新更新时间:2024-03-16 12:55
PC机与多MCS-51单片机间的串行通信设计
【摘 要】 主要讲解了IBM-PC机与MCS-51单片机多机系统的通信原理,给出了其硬件接口框图,并详细地分析了系统的多机通信软件设计。 关键词:单片机,分布式系统,串行通信 1 引 言 在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。它们大多由IBM-PC微机和MCS-51单片机组成。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机
[工业控制]
51单片机基础之GPIO输出
代码: #include reg52.h //引用51单片机的头文件,包含寄存器等操作 sbit LED=P2^0; //定义P2^0引脚,这属于位操作,等下用于输出高低电平,以便于点亮LED灯 void delay(unsigned int u16) //unsigned是无符号类型,也就是非负数,这个函数可以实现0.6秒内的延时,本质上就是让CPU等待 { while(u16--); } void main(void) //主函数,程序都是从主函数开始执行的。 { while(1) //循环操作,一直执行程序 {
[单片机]
51单片机控制+MAX7219+DS1302 电子钟
/************************************************** *程序名称: MAX7219 C语言控制程序 *程序功能: 3线串行控制8位共阴数码管 *3线定义:DIN 串行数据输入 * LOAD 数据锁存 * CLK 时钟输入 ***************************************************/ #in
[单片机]
51单片机-温度传感器代码解析Ⅱ
1.小于0度的转换 我们知道当测量的实际温度为0度以下时,temp没转换时的情况为下图所示 我们已经知道高5位为1表示的是负数,那么-0.5度的时候为什么是1111 1111 1111 1000。 负数的计算涉及到补码的知识。首先0xFFF8,除去高5位那就是 111 1111 1000 反码为 000 0000 0111 而补码就是反码加1,也就是补码为000 0000 1000 这样0.5就是由补码(十进制的8)乘以0.0625得来。 我们要知道,负数的时候需要关注的是temp的低11位,补码其实就是2的11次方(2048)减去temp的低11位的数值。 -55度的时候,补码为2048-0x0490=880。
[单片机]
基于51单片机之触控调光台灯实验
****************************** Copyright(C) CaKe ************************************ =================================== ==============**版权信息 : CaKen工作室 ============== ==============**文件名 : main.c ============== ==============**作者 : CaKen ============== =
[单片机]
MCS-51单片机之液晶显示
用MCS-51单片机来驱动液晶显示本已不属于单片机本身的知识了,我所用到的液晶是1602液晶屏,主要是要自已去查看相关芯片的文档,所以自然对英语阅读能力是一个不小的挑战.在看文档的时候,我们也只需要注意几个相对重要的问题,而不用面对大篇的文档而不知何去何从,第一重要当然是液晶的时序图了,只有掌握了时序图后我们才能写出合理正确的程序,除此之外,还有相关引角的作用也是必不可少的. 在编写相关程序时,首先是将相关位进行设置,将RW接地即可,还有就是要合理设置RS位和EN位了,它们分别是读写选择位,命令数据先择位,使能位了,在操作时序的时候,我们主要也是来操作EN位来以时序进行控制的所以,她是极其重要的.接下来,我们就可以向芯片写
[单片机]
51单片机学习笔记,4*4矩阵键盘
今天学习了下矩阵键盘, 4*4, 分别代表0~F这16个数字 我们按了哪个键就显示到数码管上 看完郭老师讲解原理后就自己动手写了,郁闷的是 在keil软件中,我在switch-case语句中 少了个冒号,竟然编译通过! 结果当然不正确了,然后我再keil中调试代码,那更郁闷了,P3口在扫描到第2行键盘时就 会复位成0xff,怎么赋值都没用,其实是没写冒号啊! 调了半天都不行,最后不得不将STC89C52RC换上仿真芯片SST89E516,在线调试后才发现的错误, 然后参考书上的代码才调试成功的,表示无语~~~ mark下 C代码 #include reg52.h #include MY51.H
[单片机]
51单片机的精确延时程序一
51单片机的精确延时程序分析(C语言和汇编语言程序) 一、C51程序 在晶振为11.0592的情况下,如下程序能实现ms级的比较精确的延时: 1 void Delayms(unsigned int n) 2 { 3 unsigned int i,j; 4 for(j=n;j 0;j--) 5 for(i=112;i 0;i--); 6 } 用keil可以看出这个延时的时间,我们先延时1ms,即Delayms(1)。 进入Delayms前,sec=0.00042209s 延时后,sec=0.00142253s 可以知道Delayms(1)实际延时
[单片机]