您的位置 首页 电子

S3C2440之触摸屏

触摸屏附着在显示器表面,根据触摸点在显示屏上对应坐标点的显示内容或图形符号进行相应操作。其坐标识别原理如下图:当手指触摸屏幕时,两

接触屏附着在显现器外表,依据接触点在显现屏上对应坐标点的显现内容或图形符号进行相应操作。

其坐标辨认原理如下图:

当手指接触屏幕时,两个彼此绝缘的导电层在接触点处衔接,顶层的5伏电压就会加到底层接触点处,底层该点的电压会产生改动,操控器检测到该点的改变后,将该点的电压进行A/D转化,得到的值与5伏比较,再乘以该轴总长度即可得接触点靠地那一端的坐标:X=L*V(I)/5

也就是说咱们要得到触点坐标的话,只需要将触点的电压进行A/D转化再用公式核算一下便可。那么接触屏驱动的要点应该是在什么时候,对什么地址的电压进行A/D转化。S3C2440中的A/D转化器便有这种功用:

如图所示为S3C2440中ADC与接触屏的接口结构图。

咱们从上面的结构图和数 据手册能够知道,该ADC模块总共有8个通道能够进行模拟信号的输入,分别是AIN0、AIN1、AIN2、AIN3、YM、YP、XM、XP。那么 ADC是怎样完结模拟信号到数字信号的转化呢?首要模拟信号从任一通道输入,然后设定寄存器中预分频器的值来确认AD转化器频率,最终ADC将模拟信号转 换为数字信号保存到ADC数据寄存器0中(ADCDAT0),然后ADCDAT0中的数据能够经过中止或查询的方法来访问。

从下面的程序中能够看到这些信号是怎么别操控的:

中止形式用到的寄存器:

SUBSRCPND:次级源挂起寄存器

INTSUBMSK:中止次级屏蔽寄存器

SRCPND:源挂起寄存器

INTPND:中止挂起寄存器

INTMSK:中止屏蔽寄存器

ADCCON:AD操控寄存器

ADCDAT0:AD转化数据寄存器

1,初始化ADC。

设置接触屏接口为等候中止形式:

寄存器ADCTSC的第2位用于挑选主动(接连)XY坐标转化形式

寄存器ADCTSC的第3位能够挑选上拉电阻的使能,在等候中止形式下,上拉电阻要有用

  1. rADCTSC=0xd3;//[0:7]Wfait,XP_PU(在等候中止形式下,上拉电阻要有用),XP_Dis,XM_Dis,YP_Dis,YM_En

A/D延时寄存器ADCDLY能够设置开端中止到真实开端A/D转化这段时刻的延时长度,它的时钟源频率为3.68MHz。

  1. rADCDLY=50000;//Normalconversionmodedelayabout(1/3.6864M)*50000=13.56ms

当然还要开中止,留意INT_TC为子中止:

  1. rINTMSK=~BIT_ADC;//ADCTouchScreenMaskbitclear,enableADCint
  2. rINTSUBMSK=~(BIT_SUB_TC);//enablesubADCint

2,编写中止函数。

假如INT_TC产生,挑选XY转化形式,发动A/D转化:

  1. rADCTSC=(1<<3)|(1<<2);//Pull-updisable,(在触发中止后,上拉电阻要无效)Seq.X,Ypostionmeasure.
  2. saveAdcdly=rADCDLY;//saveADCDLY(发动延时)
  3. rADCDLY=40000;//Normalconversionmodedelayabout(1/50M)*40000=0.8ms
  4. rADCCON|=0x1;//startADC

要等候转化敞开完毕和转化完毕

  1. while(rADCCON&0x1);//checkifEnable_startislow,转化敞开完毕
  2. while(!(rADCCON&0x8000));//checkifEC(EndofConversion)flagishigh,Thislineisnecessary~!!

经过INT_ADC查看AD转化是否完结:

  1. while(!(rSRCPND&(BIT_ADC)));//checkifADCisfinishedwithinterruptbit

其间,x轴坐标值放入ADCDAT0[9..0],y轴坐标值放入ADCDAT1[9..0]

  1. xdata=(rADCDAT0&0x3ff);
  2. ydata=(rADCDAT1&0x3ff);//读取转化成果,x轴坐标值放入rADCDAT0,y轴坐标值放入ADCDAT1

设置接触屏为等候中止形式

  1. rADCTSC=0xd3;//Waitingforinterrupt//[0:7]Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En

等候触笔抬起后,康复现场,完毕中止函数。

  1. rADCTSC=rADCTSC|(1<<8);//Detecttylusupsinterruptsignal.查看触笔抬起中止
  2. while(1)//tocheckPen-upstate
  3. {
  4. if(rSUBSRCPND&(BIT_SUB_TC))//checkifADCisfinishedwithinterruptbit
  5. {
  6. //Uart_Printf(“StylusUpInterrupt~!”);//触笔抬起!
  7. break;//ifStylusisup(1)state
  8. }
  9. }
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/257378.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部