新聞中心

S3C2440之觸摸屏

作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
觸摸屏附著在顯示器表面,根據(jù)觸摸點(diǎn)在顯示屏上對(duì)應(yīng)坐標(biāo)點(diǎn)的顯示內(nèi)容或圖形符號(hào)進(jìn)行相應(yīng)操作。

其坐標(biāo)識(shí)別原理如下圖:

本文引用地址:http://2s4d.com/article/201611/322378.htm

當(dāng)手指觸摸屏幕時(shí),兩個(gè)相互絕緣的導(dǎo)電層在觸摸點(diǎn)處連接,頂層的5伏電壓就會(huì)加到底層觸摸點(diǎn)處,底層該點(diǎn)的電壓會(huì)發(fā)生改變,控制器檢測(cè)到該點(diǎn)的變化后,將該點(diǎn)的電壓進(jìn)行A/D轉(zhuǎn)換,得到的值與5伏相比,再乘以該軸總長(zhǎng)度即可得觸摸點(diǎn)靠地那一端的坐標(biāo):X=L*V(I)/5

也就是說(shuō)我們要得到觸點(diǎn)坐標(biāo)的話(huà),只需要將觸點(diǎn)的電壓進(jìn)行A/D轉(zhuǎn)換再用公式計(jì)算一下便可。那么觸摸屏驅(qū)動(dòng)的重點(diǎn)應(yīng)該是在什么時(shí)候,對(duì)什么地點(diǎn)的電壓進(jìn)行A/D轉(zhuǎn)換。S3C2440中的A/D轉(zhuǎn)換器便有這種功能:

如圖所示為S3C2440中ADC與觸摸屏的接口框架圖。

我們從上面的結(jié)構(gòu)圖和數(shù) 據(jù)手冊(cè)可以知道,該ADC模塊總共有8個(gè)通道可以進(jìn)行模擬信號(hào)的輸入,分別是AIN0、AIN1、AIN2、AIN3、YM、YP、XM、XP。那么 ADC是怎么實(shí)現(xiàn)模擬信號(hào)到數(shù)字信號(hào)的轉(zhuǎn)換呢?首先模擬信號(hào)從任一通道輸入,然后設(shè)定寄存器中預(yù)分頻器的值來(lái)確定AD轉(zhuǎn)換器頻率,最后ADC將模擬信號(hào)轉(zhuǎn) 換為數(shù)字信號(hào)保存到ADC數(shù)據(jù)寄存器0中(ADCDAT0),然后ADCDAT0中的數(shù)據(jù)可以通過(guò)中斷或查詢(xún)的方式來(lái)訪(fǎng)問(wèn)。


從下面的程序中可以看到這些信號(hào)是如何別控制的:

中斷模式用到的寄存器:

SUBSRCPND:次級(jí)源掛起寄存器

INTSUBMSK:中斷次級(jí)屏蔽寄存器

SRCPND:源掛起寄存器

INTPND:中斷掛起寄存器

INTMSK:中斷屏蔽寄存器

ADCCON:AD控制寄存器

ADCDAT0:AD轉(zhuǎn)換數(shù)據(jù)寄存器

1,初始化ADC。

設(shè)置觸摸屏接口為等待中斷模式:

寄存器ADCTSC的第2位用于選擇自動(dòng)(連續(xù))XY坐標(biāo)轉(zhuǎn)換模式

寄存器ADCTSC的第3位可以選擇上拉電阻的使能,在等待中斷模式下,上拉電阻要有效

  1. rADCTSC=0xd3;//[0:7]Wfait,XP_PU(在等待中斷模式下,上拉電阻要有效),XP_Dis,XM_Dis,YP_Dis,YM_En

A/D延時(shí)寄存器ADCDLY可以設(shè)置開(kāi)始中斷到真正開(kāi)始A/D轉(zhuǎn)換這段時(shí)間的延時(shí)長(zhǎng)度,它的時(shí)鐘源頻率為3.68MHz。

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

當(dāng)然還要開(kāi)中斷,注意INT_TC為子中斷:

  1. rINTMSK=~BIT_ADC;//ADCTouchScreenMaskbitclear,enableADCint
  2. rINTSUBMSK=~(BIT_SUB_TC);//enablesubADCint
2,編寫(xiě)中斷函數(shù)。

如果INT_TC發(fā)生,選擇XY轉(zhuǎn)換模式,啟動(dòng)A/D轉(zhuǎn)換:

  1. rADCTSC=(1<<3)|(1<<2);//Pull-updisable,(在觸發(fā)中斷后,上拉電阻要無(wú)效)Seq.X,Ypostionmeasure.
  2. saveAdcdly=rADCDLY;//saveADCDLY(啟動(dòng)延時(shí))
  3. rADCDLY=40000;//Normalconversionmodedelayabout(1/50M)*40000=0.8ms
  4. rADCCON|=0x1;//startADC
要等待轉(zhuǎn)換開(kāi)啟結(jié)束和轉(zhuǎn)換結(jié)束
  1. while(rADCCON&0x1);//checkifEnable_startislow,轉(zhuǎn)換開(kāi)啟結(jié)束
  2. while(!(rADCCON&0x8000));//checkifEC(EndofConversion)flagishigh,Thislineisnecessary~!!

通過(guò)INT_ADC檢查AD轉(zhuǎn)換是否完成:

  1. while(!(rSRCPND&(BIT_ADC)));//checkifADCisfinishedwithinterruptbit
其中,x軸坐標(biāo)值放入ADCDAT0[9..0],y軸坐標(biāo)值放入ADCDAT1[9..0]
  1. xdata=(rADCDAT0&0x3ff);
  2. ydata=(rADCDAT1&0x3ff);//讀取轉(zhuǎn)換結(jié)果,x軸坐標(biāo)值放入rADCDAT0,y軸坐標(biāo)值放入ADCDAT1

設(shè)置觸摸屏為等待中斷模式

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

等待觸筆抬起后,恢復(fù)現(xiàn)場(chǎng),結(jié)束中斷函數(shù)。

  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. }
    上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: S3C2440觸摸

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉