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

          新聞中心

          EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 采用飛思卡爾Freedom開(kāi)發(fā)平臺(tái)的觸摸界面(3)

          采用飛思卡爾Freedom開(kāi)發(fā)平臺(tái)的觸摸界面(3)

          作者:TomThompson 時(shí)間:2013-02-28 來(lái)源:電子產(chǎn)品世界 收藏

            接觸掃描

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

            這可以完成TSI的設(shè)置。因?yàn)檐浖顔?dòng)測(cè)量掃描,它必須讓我們具備掃描功能:

            01 void ScanTSI(void)
            02 {
            03 short delta;
            04 unsigned short conversionCount[2];
            05
            06 TSI0_DATA |= TSI_DATA_SWTS_MASK; // 發(fā)布掃描
            07
            08 while(!(TSI0_GENCS & TSI_GENCS_EOSF_MASK)); // 等待完成
            09 TSI0_GENCS |= TSI_GENCS_EOSF_MASK; // 清除掃描結(jié)束標(biāo)志
            10
            11 // 屏蔽的電流采樣計(jì)數(shù)數(shù)據(jù),并且保存
            12 conversionCount[currentElectrode] = (TSI0_DATA & TSI_DATA_TSICNT_MASK);
            13 // 利用校準(zhǔn)基準(zhǔn)計(jì)數(shù)計(jì)算增量
            14 delta = conversionCount[currentElectrode] - baselineValue[currentElectrode];
            15
            16 // 處理下溢
            17 if( delta < 0)
            18 deltaResult[currentElectrode] = 0;
            19 else
            20 deltaResult[currentElectrode] = delta;
            21
            22 SwapElectrode(); // 切換至其他電極
            23
            24 } // 結(jié)束ScanTSI()

            該功能簡(jiǎn)單明了。對(duì)于當(dāng)前選定的電極而言,代碼開(kāi)始掃描,以循環(huán)方式旋轉(zhuǎn)直到掃描完成,然后清除掃描結(jié)束標(biāo)志。它可以通過(guò)TSIx_Data檢索電容測(cè)量值,并從中減去基準(zhǔn)值,獲得校準(zhǔn)測(cè)量值。這個(gè)值被稱為delta,經(jīng)過(guò)正確檢查之后會(huì)將它插入全局陣列deltaResult[]之中,就像基準(zhǔn)測(cè)量值一樣。最后,調(diào)用SwapElectrode()將隨后的測(cè)量值切換至其他TSI通道。

            以下為SwapElectrode()功能:

            01 void SwapElectrode(void)
            02 {
            03 // 與其他電極交換
            04 if(currentElectrode == 0) {
            05 currentElectrode = 1; // 更改標(biāo)志
            06 // 選擇掃描的電極
            07 TSI0_DATA = (TSI10 << TSI_DATA_TSICH_SHIFT);
            08 } else {
            09 currentElectrode = 0;
            10 TSI0_DATA = (TSI9 << TSI_DATA_TSICH_SHIFT);
            11 }
            12 } // 結(jié)束SwapElectrode()

            它所做的工作就是更改TSIx_DATA適合的通道位,將采樣切換至其他電極。

            因此,為了掃描觸摸板,你需要重復(fù)調(diào)用ScanTSI()以便觸發(fā)掃描,并將測(cè)量值累積到deltaResult[]陣列。為了從這個(gè)陣列中“讀取”電流測(cè)量值,并將其轉(zhuǎn)換為實(shí)際讀數(shù),你需要調(diào)用ReadTSI():

            01 #define NO_TOUCH
            02 #define THRESHOLD
            03
            04 unsigned short sliderPercentagePosition[2] = {NO_TOUCH,NO_TOUCH};
            05 unsigned short absolutePercentagePosition = NO_TOUCH;
            06
            07 unsigned char ReadTSI(void)
            08 {
            09 // 如果存在接觸,計(jì)算其滑動(dòng)的位置
            10 if((deltaResult[0] > THRESHOLD) || (deltaResult[1] > THRESHOLD)){
            11
            12 sliderPercentagePosition[0] = (deltaResult[0]*100)/(deltaResult[0]+deltaResult[1]);
            13 sliderPercentagePosition[1] = (deltaResult[1]*100)/(deltaResult[0]+deltaResult[1]);
            14
            15 absolutePercentagePosition = ((100 - sliderPercentagePosition[0]) + sliderPercentagePosition[1])/2;
            16
            17 } else { // 無(wú)接觸,清理變量,以防止發(fā)生虛擬事件
            18 sliderPercentagePosition[0] = NO_TOUCH;
            19 sliderPercentagePosition[1] = NO_TOUCH;
            20 absolutePercentagePosition = NO_TOUCH;
            21 } // 否則結(jié)束
            22
            23 return ((unsigned char)absolutePercentagePosition);
            24
            25 } // 結(jié)束ReadTSI()



          關(guān)鍵詞: 飛思卡爾 寄存器

          評(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); })();