<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 光電顯示 > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)的液晶顯示觸摸屏控制設(shè)計(jì)

          基于單片機(jī)的液晶顯示觸摸屏控制設(shè)計(jì)

          作者: 時(shí)間:2012-06-25 來(lái)源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/167868.htm

          2. 2 ADS7846

          ADS7846 是Burr2Brown 公司的一款專用器,其內(nèi)部結(jié)構(gòu)如圖2 所示。

          圖2  ADS7846 內(nèi)部結(jié)構(gòu)圖

          圖2 ADS7846 內(nèi)部結(jié)構(gòu)圖。

          ADS7846 內(nèi)部由一個(gè)多路選擇器和一個(gè)12位的A/ D 轉(zhuǎn)換器構(gòu)成,根據(jù)串行口的控制字控制多路選擇開(kāi)關(guān)的工作狀態(tài),控制工作面的工作電壓,并把相應(yīng)電極上的觸點(diǎn)坐標(biāo)位置對(duì)應(yīng)的工作電壓送到A/ D 轉(zhuǎn)換器,變成數(shù)字量通過(guò)串行口再傳遞給CPU ,經(jīng)過(guò)計(jì)算得到觸點(diǎn)的X 、Y 方向的坐標(biāo),確定觸點(diǎn)位置,程序根據(jù)觸點(diǎn)坐標(biāo)位置顯示的信息執(zhí)行相應(yīng)的功能。

          則P 點(diǎn)的二進(jìn)制輸出代碼為:

          其中:V ref_full為加在ADS7846 內(nèi)部A/ D 轉(zhuǎn)換器上的參考電壓。

          ADS7846 控制字見(jiàn)表1 所示,S 為數(shù)據(jù)傳輸?shù)钠鹗紭?biāo)志位,改為必須為1;A2、A1、A0 用于通道選擇控制,坐標(biāo)與通道選擇之間的關(guān)系見(jiàn)表2 所示。MODE用于控制A/ D轉(zhuǎn)換的精度, 1選擇8位, 0選擇12 位。SER/ DFR 選擇輸入?yún)⒖茧妷耗J? 1為單端模式, 0為差分模式。PD1、PD0選擇省電模式:00為省電模式允許,在兩次A/ D轉(zhuǎn)換之間掉電,且中斷允許;01與00相似,但不允許中斷;10保留;11禁止省電模式。

          表1 ADS7846 的控制字

          表1  ADS7846 的控制字

          表2 ADS7846 的坐標(biāo)與通道選擇之間的關(guān)系

          表2  ADS7846 的坐標(biāo)與通道選擇之間的關(guān)系

          ADS7846 與MCU 之間通過(guò)標(biāo)準(zhǔn)的SPI 接口相連接,如圖3 所示。當(dāng)檢測(cè)到有觸摸動(dòng)作時(shí),ADS7846 的筆中斷請(qǐng)求端( PENIRQ) 輸出一個(gè)低電平信號(hào)向MCU 發(fā)出測(cè)量觸點(diǎn)坐標(biāo)的中斷請(qǐng)求。MCU 通過(guò)SPI 接口,選中ADS7846 ,發(fā)出坐標(biāo)測(cè)量控制字,然后讀取ADS7846A/ D 轉(zhuǎn)換結(jié)果數(shù)據(jù),經(jīng)過(guò)兩次控制即可分別得到觸點(diǎn)位置的X 、Y 坐標(biāo)。ADS7846 工作時(shí)序如圖4 所示。

          圖3  ADS7846 與MCU 之間SPI 接口

          圖3 ADS7846 與MCU 之間SPI 接口。

          圖4  ADS7846 與MCU 通信時(shí)序

          圖4 ADS7846 與MCU 通信時(shí)序。

          3 觸點(diǎn)坐標(biāo)與屏控制功能對(duì)應(yīng)定位的確定

          本例中ADS7846 采用差動(dòng)參考電壓方式,以減小測(cè)量誤差,由于存在著個(gè)體差異,不同邊沿的測(cè)量值不同,測(cè)量值達(dá)不到0 或者滿量程(4096) ,而屏具有較為準(zhǔn)確的定位數(shù)值,很難實(shí)現(xiàn)觸摸屏與屏的點(diǎn)與點(diǎn)一一對(duì)應(yīng),給編程調(diào)試帶來(lái)很大麻煩,只能實(shí)現(xiàn)觸摸屏與液晶顯示屏之間的區(qū)域?qū)?yīng),不影響液晶顯示屏的顯示功能和觸摸屏的控制功能。

          觸摸屏控制器ADS7846 通過(guò)SPI 接口連接到微控制器A T89S51 上。當(dāng)發(fā)生觸摸時(shí), 由ADS7846 向A T89S51 提出中斷請(qǐng)求, 接著A T89S51 就會(huì)響應(yīng)該中斷請(qǐng)求,通過(guò)SPI 讀取ADS7846 的轉(zhuǎn)換結(jié)果,得到觸摸點(diǎn)的坐標(biāo)。圖5為中斷服務(wù)子程序與ADS7846 測(cè)量子程序流程圖。

          圖5  中斷服務(wù)子程序與ADS7846 測(cè)量子程序流程圖

          圖5 中斷服務(wù)子程序與ADS7846 測(cè)量子程序流程圖。

          為了有效地找到觸摸屏觸摸點(diǎn)與點(diǎn)陣式液晶顯示屏對(duì)應(yīng)區(qū)域坐標(biāo)范圍,按照液晶顯示屏的顯示功能區(qū)域的點(diǎn)陣坐標(biāo),按照液晶屏上顯示的控制信息字符格式,合理選擇水平線和豎直線,按照液晶顯示和觸摸屏控制功能區(qū)域進(jìn)行觸摸點(diǎn)數(shù)值測(cè)量,找到與液晶顯示屏對(duì)應(yīng)的觸摸屏控制區(qū)域的觸摸點(diǎn)數(shù)值范圍。根據(jù)觸摸屏觸摸點(diǎn)坐標(biāo)實(shí)測(cè)數(shù)據(jù)分析可以得到對(duì)應(yīng)的液晶屏上像素點(diǎn)坐標(biāo)。

          液晶屏像素點(diǎn)坐標(biāo)與觸摸屏觸摸點(diǎn)實(shí)測(cè)數(shù)值之間的關(guān)系可以表示為:

          式中: X 、Y 為觸點(diǎn)測(cè)量值; ( Xmin , Ymin ) 和( Xmax ,Xmax ) 分別為觸摸屏上的最大值和最小值坐標(biāo)觸點(diǎn)測(cè)量; ( X1 , Y1 ) 為觸點(diǎn)在液晶屏上的像素坐標(biāo),表3 、表4 中數(shù)據(jù)為實(shí)測(cè)數(shù)據(jù)。

          表3 實(shí)測(cè)豎直直線上等距離測(cè)量坐標(biāo)值

          表3  實(shí)測(cè)豎直直線上等距離測(cè)量坐標(biāo)值

          表4 實(shí)測(cè)水平直線上等距離測(cè)量坐標(biāo)值

          表4  實(shí)測(cè)水平直線上等距離測(cè)量坐標(biāo)值

          值得注意的是,經(jīng)測(cè)量觸摸屏X 方向的轉(zhuǎn)換值為從大到小, Y 方向的轉(zhuǎn)換值為從小到大,坐標(biāo)值在一定范圍內(nèi)基本是成線性變化的。但是在觸摸屏的邊緣地帶X 方向輸出電阻和Y 方向輸出電阻的變化較大,是非線性關(guān)系,因此為了比較準(zhǔn)確地標(biāo)定觸摸屏坐標(biāo),在大范圍內(nèi)采用線性變化的規(guī)律,而在邊緣地帶需采用查表的方式。

          tcp/ip相關(guān)文章:tcp/ip是什么




          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();