<address id="9993j"><address id="9993j"><listing id="9993j"></listing></address></address><form id="9993j"><nobr id="9993j"><meter id="9993j"></meter></nobr></form>

    <output id="9993j"><nobr id="9993j"></nobr></output>

    <noframes id="9993j">
        <address id="9993j"><address id="9993j"></address></address>

          <noframes id="9993j"><address id="9993j"><th id="9993j"></th></address>

          <noframes id="9993j">

            <em id="9993j"><form id="9993j"><nobr id="9993j"></nobr></form></em>

            新聞中心

            EEPW首頁 > 模擬技術 > 設計應用 > 采用飛思卡爾Freedom開發平臺的觸摸界面(3)

            采用飛思卡爾Freedom開發平臺的觸摸界面(3)

            作者:TomThompson時間:2013-02-28來源:電子產品世界收藏

              接觸掃描

            本文引用地址:http://www.snowlakeshores.com/article/142533.htm

              這可以完成TSI的設置。因為軟件命令啟動測量掃描,它必須讓我們具備掃描功能:

              01 void ScanTSI(void)
              02 {
              03 short delta;
              04 unsigned short conversionCount[2];
              05
              06 TSI0_DATA |= TSI_DATA_SWTS_MASK; // 發布掃描
              07
              08 while(!(TSI0_GENCS & TSI_GENCS_EOSF_MASK)); // 等待完成
              09 TSI0_GENCS |= TSI_GENCS_EOSF_MASK; // 清除掃描結束標志
              10
              11 // 屏蔽的電流采樣計數數據,并且保存
              12 conversionCount[currentElectrode] = (TSI0_DATA & TSI_DATA_TSICNT_MASK);
              13 // 利用校準基準計數計算增量
              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 } // 結束ScanTSI()

              該功能簡單明了。對于當前選定的電極而言,代碼開始掃描,以循環方式旋轉直到掃描完成,然后清除掃描結束標志。它可以通過TSIx_Data檢索電容測量值,并從中減去基準值,獲得校準測量值。這個值被稱為delta,經過正確檢查之后會將它插入全局陣列deltaResult[]之中,就像基準測量值一樣。最后,調用SwapElectrode()將隨后的測量值切換至其他TSI通道。

              以下為SwapElectrode()功能:

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

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

              因此,為了掃描觸摸板,你需要重復調用ScanTSI()以便觸發掃描,并將測量值累積到deltaResult[]陣列。為了從這個陣列中“讀取”電流測量值,并將其轉換為實際讀數,你需要調用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 // 如果存在接觸,計算其滑動的位置
              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 { // 無接觸,清理變量,以防止發生虛擬事件
              18 sliderPercentagePosition[0] = NO_TOUCH;
              19 sliderPercentagePosition[1] = NO_TOUCH;
              20 absolutePercentagePosition = NO_TOUCH;
              21 } // 否則結束
              22
              23 return ((unsigned char)absolutePercentagePosition);
              24
              25 } // 結束ReadTSI()



            關鍵詞: 飛思卡爾 寄存器

            評論


            相關推薦

            技術專區

            關閉
            五月天国产成人AV免费观看
            <address id="9993j"><address id="9993j"><listing id="9993j"></listing></address></address><form id="9993j"><nobr id="9993j"><meter id="9993j"></meter></nobr></form>

              <output id="9993j"><nobr id="9993j"></nobr></output>

              <noframes id="9993j">
                  <address id="9993j"><address id="9993j"></address></address>

                    <noframes id="9993j"><address id="9993j"><th id="9993j"></th></address>

                    <noframes id="9993j">

                      <em id="9993j"><form id="9993j"><nobr id="9993j"></nobr></form></em>