S3C2440 触摸屏应用

发布者:ziyunting最新更新时间:2016-04-18 来源: eefocus关键字:S3C2440  触摸屏  驱动代码 手机看文章 扫描二维码
随时随地手机看文章
         s3c2440集成了4线制电阻式的触摸屏接口,触点坐标的检测是通过A/D转换来实现的。s3c2440一共有4种触摸屏接口模式,其中,自动(连续)XY坐标转换模式和等待中断模式应用地比较常见。等待中断模式是在触笔落下时产生一个中断,在这种模式下,A/D触摸屏控制寄存器ADCTSC的值应为0xD3,在系统响应中断后,XY坐标的测量模式必须为无操作模式,即寄存器ADCTSC的低两位必须清零。自动(连续)XY坐标转换模式是系统依次转换触点的X轴坐标和Y轴坐标,其中X轴坐标值写入寄存器ADCDAT0的低10位中,Y轴坐标写入寄存器ADCDAT1的低10位中,在这种模式下,系统同样会产生中断信号。在一般情况下,为实现触摸屏功能,先是设置为等待中断模式,在产生中断后,再设置为自动(连续)XY坐标转换模式,依次读取触点的坐标值。在实现触摸屏功能的过程中,除了上面介绍的几个寄存器外,还会用到以下寄存器。寄存器ADCTSC的第8位能够实现是触笔落下中断还是触笔抬起中断,如果写过基于视窗应用程序的人对这一点会很熟悉,它就好像单击鼠标操作一样,一次单击操作包括两个动作:按下和释放,这两个动作可以完成不同的命令。寄存器ADCTSC的第3位可以选择上拉电阻的使能,在等待中断模式下,上拉电阻要有效,在触发中断后,上拉电阻要无效。寄存器ADCTSC的第2位用于选择自动(连续)XY坐标转换模式。触笔抬起/落下中断状态寄存器ADCUPDN的低2位能够判断触笔在何种状态下引起的中断。A/D延时寄存器ADCDLY可以设置开始中断到真正开始A/D转换这段时间的延时长度,它的时钟源频率为3.68MHz。

   在开始实现触摸屏功能之前,还需要解决一个问题,那就是触摸屏的校正。触摸屏和LCD是两种不同的物理器件。对于一个分辨率为320×240的LCD,它的宽度为320个像素,高度为240个像素。而触摸屏处理的数据是点的物理坐标,该坐标是通过触摸屏控制器采集得到的。要想实现触摸屏上的物理坐标与LCD上的像素点坐标一一对应上,两者之间就需要一定的转换,即校正。而且电阻式触摸屏由于自身的原因参数会发生变化,因此需要经常性的校正。比较常见的校正方法是三点校正法,它的原理是:

 

       设LCD上每个点PD的坐标为[XD,YD],触摸屏上每个点PT的坐标为[XT,YT]。要实现触摸屏上的坐标转换为LCD上的坐标,需要下列公式进行转换:

XD=A×XT+B×YT+C

YD=D×XT+E×YT+F

因为其中一共有六个参数(A,B,C,D,E,F),因此只需要三个取样点就可以求得这六个参数。这六个参数一旦确定下来,只要给出任意触摸屏上的坐标点PT,代入这个公式,就可以得到它所对应的LCD上像素点的坐标PD。具体的求解过程就不细讲,只给出最终的结果。已知LCD上的三个取样点为:PD0,PD1,PD2,它们所对应的触摸屏上的三个点为:PT0,PT1,PT2。A,B,C,D,E,F这六个参数最终的结果都是一个分式,而且都有一个共同的分母,为:

              K=(XT0-XT2)×(YT1-YT2)-(XT1-XT2)×(YT0-YT2)

那么这六个参数分别为:

              A=[(XD0-XD2)×(YT1-YT2)-(XD1-XD2)×(YT0-YT2)] / K

              B=[(XT0-XT2)×(XD1-XD2)-(XD0-XD2)×(XT1-XT2)] / K

              C=[YT0×(XT2×XD1-XT1×XD2)+YT1×(XT0×XD2-XT2×XD0)+YT2×(XT1×XD0-XT0×XD1)] / K

              D=[(YD0-YD2)×(YT1-YT2)-(YD1-YD2)×(YT0-YT2)] / K

              E=[(XT0-XT2)×(YD1-YD2)-(YD0-YD2)×(XT1-XT2)] / K

              F=[YT0×(XT2×YD1-XT1×YD2)+YT1×(XT0×YD2-XT2×YD0)+YT2×(XT1×YD0-XT0×YD1)] / K

 

       下面的程序是实现触摸屏功能的简单实例——以触点为中心,绘制出一个红色的边长为10个像素的正方形。触点的坐标是用下面方法得到的:当触笔落下时,进入中断,然后读取触点处的坐标,直到触笔的抬起,才退出该次中断。由于触摸屏需要校正,因此在使用之前需要进行校正处理。但并不是每次使用都要校正,只要坐标没有发生漂移,就不需要再次校正。所以在进行一次校正后,只要把那几个参数保存起来,下次需要时直接使用上次保存下来的参数即可。在这里,我们利用EEPROM来保存这几个参数,即A,B,C,D,E,F,K分别保存在以0x20,0x30,0x40,0x50,0x60,0x70,0x80为首地址内存的连续4个字节空间内,另外内存地址0x1F保存一个标识信息,当为0x6A时,表示这几个参数已计算并保存好了,只需从上述内存地址中读取参数就行,而当为其他值时,就需要进行校正。校正时,需要三个取样点,在这里我们选取LCD上的(32,24),(160,216),(288,120)为这三个取样点,我们在这三个取样点上画一个十字(如下图所示),只需要依次点击这三个点,即可完成触摸屏的校正。

   以上文字从网上摘录。觉得写得不错,当做笔记记下,我下面贴出的方法为裸奔三部曲中的方法,我验证了一下,不错,误差很小了,不到4个像素点。下面只贴出触摸屏初始化函数和中断函数的代码

[cpp] view plain copy
 
  1. void Touch_Init(void)  
  2. {  
  3.     rADCDLY = 50000;    //正常转换模式下延时  
  4.     rADCCON = (1<<14)|(ADCPRS<<6);  //使能AD转换预分频器   
  5.       
  6.     rADCTSC = 0xd3; //等待中断模式,正常AD转换,XP上拉使能,XP,XM,YP输出禁止,YM输出使能  
  7.       
  8.     if(rSRCPND &BIT_ADC) rSRCPND |= BIT_ADC;  
  9.     if(rINTPND & BIT_ADC) rINTPND |= BIT_ADC;  
  10.     if(rSUBSRCPND & BIT_SUB_TC) rSUBSRCPND|= BIT_SUB_TC;  
  11.     if(rSUBSRCPND & BIT_SUB_ADC)rSUBSRCPND |= BIT_SUB_ADC;  //清除中断标志  
  12.       
  13.     rINTMSK &=~BIT_ADC;  
  14.     rINTSUBMSK &=~(BIT_SUB_TC);     //使能中断  
  15.     pISR_ADC =(unsigned)AdcTsAuto;  //中断服务程序入口  
  16. }  


 

[cpp] view plain copy
 
  1. void __irq AdcTsAuto(void)  
  2. {  
  3.     unsigned int i;  
  4.     U32 PtX[6], PtY[6];  
  5.     short temp;  
  6.       
  7.       
  8.     if(rADCDAT0&0x8000)   
  9.     {  
  10.         rADCTSC&=0xff;  // Set stylus down interrupt bit  
  11.     }  
  12.       
  13.     rADCTSC =(1<<3)|(1<<2); //XP上拉禁止,自动顺序X,Y测量  
  14.     //rADCDLY = 50000;  
  15.     rADCCON |=0x1;  //使能AD转换  
  16.       
  17.     for(i=0;i<5;i++)  
  18.     {  
  19.         while(rADCCON & 0x1); //判断使能ADC转换后被清零  
  20.         while(!(rADCCON &0x8000)); //等待转换结束  
  21.         while(!(rSRCPND &(BIT_ADC)));   //check if ADC is finished with interrupt bit  
  22.       
  23.         PtX[i]=(rADCDAT0&0x3ff);  
  24.         PtY[i]=(rADCDAT1&0x3ff);  
  25.     }  
  26.     PtX[5]=(PtX[0]+PtX[1]+PtX[2]+PtX[3]+PtX[4])/5;  
  27.     PtY[5]=(PtY[0]+PtY[1]+PtY[2]+PtY[3]+PtY[4])/5;  
  28.     xdata=PtX[5];  
  29.     ydata=PtY[5];  
  30.       
  31.     xdata*=0.272;  
  32.     ydata*=0.480;  
  33.     ydata=480-ydata;  
  34.     temp=ydata;  
  35.     ydata=xdata;                      
  36.     xdata=temp;  
  37.     xdata=(xdata-20.0303)/0.8972;  
  38.     ydata=(ydata-37.86667)/0.7486;  //将触摸屏的AD转换值转换为LCD像素点的值  
  39.           
  40.     //check Stylus Up Interrupt.  
  41.     rSUBSRCPND|=BIT_SUB_TC;  
  42.     ClearPending(BIT_ADC);  
  43.     rINTSUBMSK=~(BIT_SUB_TC);  
  44.     rINTMSK=~(BIT_ADC);         //清中断标志,再次使能中断  
  45.       
  46.     rADCTSC =0xd3;    //再次设置等待中断模式,这一次是判断触笔的抬起  
  47.     rADCTSC=rADCTSC|(1<<8); // 检测笔尖抬起中断信号  
  48.       
  49.   
  50.     while(1)        //to check Pen-up state  
  51.     {  
  52.         if(rSUBSRCPND & (BIT_SUB_TC))   //check if ADC is finished with interrupt bit  
  53.         {  
  54.             break;  //if Stylus is up(1) state  
  55.         }  
  56.     }     
  57.   
  58.     Uart_Printf("count=%03d  XP=%04d, YP=%04d\n", count++, xdata, ydata);    //X-position Conversion data              
  59.     //rADCDLY = 50000;  
  60.     rADCTSC=rADCTSC&~(1<<8); // Detect stylus Down interrupt signal.  
  61.     rSUBSRCPND|=BIT_SUB_TC;  
  62.     rINTSUBMSK=~(BIT_SUB_TC);   // Unmask sub interrupt (TC)       
  63.     ClearPending(BIT_ADC);        //再次清A/D中断  
  64. }  
  65.  

关键字:S3C2440  触摸屏  驱动代码 引用地址:S3C2440 触摸屏应用

上一篇:S3C2440看门狗定时器
下一篇:S3C2440 LCD字符显示

推荐阅读最新更新时间:2024-03-16 14:50

LCD驱动HT1621的PIC单片机源代码
STATUS EQU 3H FSR EQU 4H RB EQU 6H RC EQU 7H OPTIONA EQU 81H TRISB EQU 86H TRISC EQU 87H GENR0 EQU 053H GENR1 EQU 054H WD_RG EQU 055H DA_AG0 EQU 056H ;SEG0 SEG1 DA_AG8 EQU 05EH ;SEG16 SEG17 ;............................. C EQU 0 Z EQU 2 RP0 EQU 5 RP1 EQU 6 CS
[单片机]
基于S3C2440的嵌入式IPv6防火墙设计
  1 引言   在众多的网络安全设施中,防火墙是行之有效的重要网络安全设备,通过对网络通信进行筛选屏蔽以防未经授权的访问进出计算机网络。防火墙是位于可信网络和不可信网络之间的一道安全屏障,其最核心的任务就是管理和控制进出网络的通信量,它可以截获中途传输的数据包并进行处理,然后与事先定义好的安全策略规则相比较,并最终决定转发或丢弃该数据包。传统的防火墙通常位于一段网络的边界,它可以很好的过滤外界用户对内部网络的访问,但对内部网络的攻击却无能为力。针对此问题近年来关于新型防火墙的研究有很多,如分布式防火墙系统,嵌入式防火墙系统等。这些系统的目的是将防火墙的边界延伸,使其能够遍布网络的每一个终端设备,构建全方位的安全防护网络。  
[单片机]
基于<font color='red'>S3C2440</font>的嵌入式IPv6防火墙设计
S3C2440在MDK开发环境下的相关配置
我的TQ2440开发板是在大学时候买的,已经有两三年没碰了。现在翻出来重新开始学,主要是想学习ucos ii,然后进一步的linux。对于裸机,其实没必要花太多时间去琢磨。如果项目不上操作系统,我觉得cortex-m3的性能足以应付绝大部分项目。stm32裸机已经玩了有一段时间,都是直接操作寄存器,所以没必要做重复的事情了。 开发板光盘上的资料和工程都是基于ADS开发环境的,但本人从学51单片机一来,都是使用keil,所以我觉得利用keil开发S3C2440会比较熟手一点,但事实是我纠结了好长时间,可能是我太菜:    1)建立工程。类似stm32的工程,使用MDK提供的启动代码即可。 2)对于芯片存储地址的配置。如果是要
[单片机]
<font color='red'>S3C2440</font>在MDK开发环境下的相关配置
mini2440裸机试炼之—计算器(LCD显示,触摸屏中断)
关于Pait_Bmp(x0, y0, x, y, BMPaddr);函数 像素图在屏幕左上角为(0,0),Pait_Bmp中的x0,y0分别像素点初始位置,x,y为BMP图片的X,Y的大小,BMPaddr为BMP图片转换的数组地址 基于T35 TFT LCD屏实现功能: 1. 在屏幕上画一个计算器界面,包括0-9,+,-,*,/; 2. 实现触摸选择界面上的数字和运算符, 3. 并计算出结果显示在显示框内。 注意,只实现整数功能,没涉及小数,只实现一次运算,不保存上次运算结果。 实现界面: 实现过程: 开启LCD电源,初始化LCD LCD填充界面图片 开启触摸屏中断 获取键值 区分数字和
[单片机]
mini2440裸机试炼之—计算器(LCD显示,<font color='red'>触摸屏</font>中断)
触摸屏和plc在造纸机械方面的应用设计
  枕式包装机三驱动控制系统,采用先进的运动控制技术将weinview触摸屏、和利时PLC、伺服驱动集成一体,实现了无轴传动、自动偏心调整、色标追踪、多路温控等功能。替代了传统包装机的机械偏心、无级变速箱、差速箱等主要部件,使整机的自动化水平大幅度提高。适用于高端的枕式包装机。   这项技术同样也适用于纺织、印刷、包装等机械。   系统特点   1.三轴独立、无轴传动   包装机的三个关键轴,刀、膜、料分别独立驱动,采用电子轴实现同步传动,省略了繁琐的齿轮链条结构,减少了机械振动和磨损,使机械转速得以提高。   2.自动偏心调整   采用伺服电机直接驱动横封刀,系统根据袋长自动计算偏心量 www.cechina.cn ,根据包装物厚
[嵌入式]
基于S3C2440处理器的嵌入式视频采集系统
随着通信网络技术的迅速发展,基于网络的高质量视频传输已逐步取代传统的文字语音交互模式,成为当今数字通信的主要研究领域之一。而随着嵌入式操作系统和集成电路设计水平的不断提高,嵌入式技术与通信网络以及多媒体技术的融合将成为未来数字视频通信领域的主流发展趋势。 一直以来,针对网络传输实时视频对嵌入式软硬件都有较高要求。本文利用基于ARM920T内核的S3C2440嵌入式微处理器,采用压缩比更高的H.264视频压缩标准和开源嵌入式Linux系统,设计了一款基于嵌入式视频服务器的远程实时视频采集系统。 1 采集系统平台搭建 1.1 系统硬件平台 该采集系统以PC作为客户端,以广东友善之臂计算机科技有限公司研发的ARM9开发板Min
[单片机]
基于<font color='red'>S3C2440</font>处理器的嵌入式视频采集系统
冲孔打桩机的自动控制系统设计
0 引言 冲孔打桩机主要由桩锤、支架、卷扬机以及其他辅助设备组成,其工作原理是利用冲孔打桩机的卷扬机构,将电动机输出动力的回转运动转变为往复运动,通过钢丝绳来带动桩锤的提升,并在一定高度时使桩锤自由下落,利用桩锤的冲击作用冲挤土层或破碎岩石,同时钻渣随泥浆(或用取渣桶)排出,最后在地基土中形成桩孔。施工人员在桩孔内放置钢筋笼,灌注混凝土而制成桩。 目前,冲孔打桩机的打桩作业均由人工手动机械式操纵来完成。操作人员在工作过程中需要频繁对离合装置、刹车装置等控制部件进行操纵,劳动强度很大。随着微电子技术和自动控制理论的发展,将自动控制技术应用于冲孔打桩机,实现打桩的全自动化或半自动化,使操作人员从繁琐重复的体力劳动中解放出来成为
[单片机]
冲孔打桩机的自动控制系统设计
55%的智能手机采用触摸屏 出货量涨138%
  据国外媒体报道,调研公司Canalys数据显示,2009年第四季度,55%的智能手机采用触摸屏。      Canalys称,2009年第四季度,触摸屏智能手机出货量为3000万部,同比增长138%。与此同时,整体智能手机市场出货量涨幅为41%。      2009全年,触摸屏智能手机出货量为7500万部,相当于2008年出货量的2倍多。而2009年整体智能手机出货量为1.66亿部。      整个2009年,苹果iPhone领跑触摸屏智能手机市场,诺基亚位居第二,宏达电和三星分居三、四名。
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved