新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > S3C2440之觸摸屏

        S3C2440之觸摸屏

        作者: 時間:2016-11-27 來源:網絡 收藏
        觸摸屏附著在顯示器表面,根據觸摸點在顯示屏上對應坐標點的顯示內容或圖形符號進行相應操作。

        其坐標識別原理如下圖:

        本文引用地址:http://www.104case.com/article/201611/322378.htm

        當手指觸摸屏幕時,兩個相互絕緣的導電層在觸摸點處連接,頂層的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. }
          上一頁 1 2 下一頁

        關鍵詞: S3C2440觸摸

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 翁牛特旗| 宝兴县| 佛山市| 石台县| 鹿邑县| 马鞍山市| 临江市| 镇远县| 蛟河市| 包头市| 南雄市| 馆陶县| 湖北省| 勐海县| 新兴县| 吉首市| 松潘县| 梅州市| 兴安县| 武陟县| 宿迁市| 平定县| 昌宁县| 微山县| 和顺县| 泸定县| 宁武县| 渝中区| 永新县| 灵台县| 张家港市| 弥渡县| 鹤岗市| 澄迈县| 彭水| 淮安市| 隆昌县| 阿坝县| 赤水市| 武强县| 中牟县|