• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

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

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

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

      接觸掃描

    本文引用地址:http://www.czjhyjcfj.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()



    關鍵詞: 飛思卡爾 寄存器

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 定日县| 德安县| 察隅县| 宿松县| 尚志市| 高碑店市| 宁海县| 高清| 乌兰浩特市| 保康县| 松桃| 柳州市| 洛宁县| 孟津县| 旌德县| 枣强县| 柳林县| 岳池县| 马尔康县| 大渡口区| 尼玛县| 霞浦县| 平顺县| 公安县| 柳江县| 吉安市| 梅河口市| 宣城市| 当涂县| 政和县| 浦东新区| 通辽市| 泽普县| 花莲县| 辉县市| 通辽市| 拉孜县| 白玉县| 延寿县| 射洪县| 双柏县|