|
感謝,謝謝大家!我是第一次發(fā)帖,沒有表訴清楚。我用的是輝芒微FT62F211芯片,使用VisualTouchTL選中PA3做為觸摸腳,然后調(diào)試生成代碼,在IDE中讀取TSC_GetSingle(); 但是返回值一直為零,沒有反應(yīng)出現(xiàn),在VisualTouchTL中調(diào)試和運(yùn)行界面都是正常,所以不知道是什么原因。非常感謝大家,麻煩幫助指點(diǎn)下。
main.c
/**********************************************************************************
* @芯片資源
* 1. Device: FT62F21X
* 2. Memory: Flash 1KX14b, SRAM:64X8b EEPROM 256X8b
*
* 3. 文件名:main.c
*
//*********************************************************************************/
#include "Touch.h"
#include "Led.h"
#include "uart.h"
volatile unsigned char ucKeySingle = 0;
#ifdef _DEF_LOW_POWER
unsigned int uiSleepTime = 0;
#endif
void Get_Key_Demo(void);
void SleepProcess(void);
void Debug_Func(void);
/*-------------------------------------------------
* 函數(shù)名稱:DelayUs
* 功能: 短延時(shí)函數(shù) --16M-2T--大概快1%左右.
* 輸入?yún)?shù):Time 延時(shí)時(shí)間長(zhǎng)度 延時(shí)時(shí)長(zhǎng)Time Us
* 返回參數(shù):無(wú)
-------------------------------------------------*/
void DelayUs(unsigned char Time)
{
unsigned char a;
for(a=0;a<Time;a++)
{
_nop();
}
}
/*-------------------------------------------------
* 函數(shù)名稱:interrupt ISR
* 功能: 短延時(shí)函數(shù) --16M-2T--大概快1%左右.
* 輸入?yún)?shù):Time 延時(shí)時(shí)間長(zhǎng)度 延時(shí)時(shí)長(zhǎng)Time Us
* 返回參數(shù):無(wú)
-------------------------------------------------*/
void interrupt ISR(void)//PIC_HI-TECH使用
{
}
/*-------------------------------------------------
* 函數(shù)名:SYS_INITIAL
* 功能: 上電系統(tǒng)初始化
* 輸入: 無(wú)
* 輸出: 無(wú)
--------------------------------------------------*/
void SYS_INITIAL (void)
{
//時(shí)鐘先8M 寫完P(guān)CON (bit7),OPTION(all bit),LVDCON(bit2),后換回16M
OSCCON = 0B01100000;
//WDT 32KHZ IRCF=110=8MHZ/4=4MHZ,0.25US/T
//Bit0=1,系統(tǒng)時(shí)鐘為內(nèi)部振蕩器
//Bit0=0,時(shí)鐘源由FOSC<2:0>決定即編譯選項(xiàng)時(shí)選擇
OPTION = 0B00000100;
//Bit5 T0CS Timer0時(shí)鐘源選擇
//1-外部引腳電平變化T0CKI 0-內(nèi)部時(shí)鐘(FOSC/2)
//Bit4 T0CKI引腳觸發(fā)方式 1-下降沿 0-上升沿
//Bit3 PSA 預(yù)分頻器分配位 0-Timer0 1-WDT
//Bit2:0 PS2 8個(gè)預(yù)分頻比 100 - 1:32
LVDCON = 0x03;
//bit2 0:不經(jīng)過去抖電路 bit[1:0] 00:vdd 01:pa5 10:pa4 11:touch
PCON = 0x88;
//開LVD bit3 低電壓偵測(cè)使能 bit[7:4]=1xxx 1.2v
OSCCON = SYS_OSCCON;
//WDT 32KHZ IRCF=110=16MHZ/4=4MHZ,0.25US/T
T0CON0 = 0;
//復(fù)位上T0ON默認(rèn)為1,所以需要清0
MSCON = 0;
//軟件關(guān)閉LVREN不然低功耗電流會(huì)變大(Options下必須選擇LVREN=SLVREN)
INTCON = 0;
//暫禁止所有中斷
PORTA = 0;
///////////特別注意與TKCAP合打線的PIN//////////////////////////
//對(duì)于6pin 封裝, TKCAP 與PA2 共用引腳3。
//對(duì)于DFN8 封裝, TKCAP 與PA4 共用引腳2。
//引腳用作TKCAP 功能時(shí),則PA2/PA4 必須相應(yīng)地設(shè)置為輸入;
//當(dāng)關(guān)閉Touch模塊功能時(shí),則PA2/PA4 為通用IO功能。
TRISA = TRISA_CONFIG;
// 0-輸出 1-輸入
///////////特別注意與TKCAP合打線的PIN//////////////////////////
WPUA = 0B00000000;
//PA端口上拉控制 1-開上拉 0-關(guān)上拉
PSRCA = 0B00000000;
//PA4,PA5源電流能力設(shè)置為0
}
/*-------------------------------------------------
* 函數(shù)名稱:WDT_INITIAL
* 功能: 初始化設(shè)置看門128MS時(shí)間復(fù)位
-------------------------------------------------*/
void WDT_INITIAL (void)
{
/* 清看門狗 */
CLRWDT();
/* 時(shí)鐘分頻分給WDT */
PSA = 0;
//WDTPS=0111=1:4096,PS=000=1:1
//定時(shí)時(shí)間=(4096*1)/32000=128ms
WDTCON = 0B00001111;
}
#ifdef _DEF_LOW_POWER
/**********************************************************************************
* @brief Sleep_Enable program.
* @param None
* @note 進(jìn)出睡眠的相關(guān)處理
* @retval None
*********************************************************************************
*/
void Sleep_Enable(void)
{
if(bSleepMode==1)
{
uiSleepTime = 0;
IO_Out_Low();
//PORTA &= ~ucAllKeyMap;
//TRISA &= ~ucAllKeyMap;
LVDEN = 0;
LVDCON = 0;
TKCON = 0x10;//TKEN使能
SLEEP();
LVDCON = 0x03;
LVDEN = 1;
}
}
#endif
/*------------------------------------------------------------------------------------------
* 函數(shù)名: TSC_Scan
* 功能:
* 輸入: 無(wú)
* 輸出: 無(wú)
----------------------------------------------------------------------------------------------*/
void TSC_Scan(void)
{
#ifndef TOUCH_DEBUG
TSC_Start();
#else
TSC_Start_Test();
ConmunicateToPc();
#endif
}
/*------------------------------------------------------------------------------------------
* 函數(shù)名: main
* 功能: 主函數(shù)
* 輸入: 無(wú)
* 輸出: 無(wú)
----------------------------------------------------------------------------------------------*/
void main(void)
{
/* 系統(tǒng)初始化 */
SYS_INITIAL();
/* WDT初始化 */
WDT_INITIAL();
/* 按鍵初始化 */
TOUCH_INITIAL();
/* Demo led 初始化 */
// LED();
while(1)
{
CLRWDT();
/* 掃鍵 */
TSC_Scan();
if(TSC_DataProcessing()==1)
{
/* 生成有效按鍵 */
ucKeySingle = TSC_GetSingle();
if(ucKeySingle == 0x01)
{
PA4=1;
}
// else
// {
// PA4=1;
// }
/* 獲取按鍵值并處理 */
// Get_Key_Demo();
/* 低功耗處理函數(shù),不需要低功耗時(shí)可以刪除 */
// SleepProcess();
/* 和上位機(jī)通信時(shí)需要的函數(shù),正常使用時(shí)可以刪除 */
// Debug_Func();
}
}
}
/******************************************************************************
* @brief Debug_Func program
* @Description 觸摸調(diào)試使用的函數(shù)
* @param None
* @note
* @retval None
*****************************************************************************
*/
void Debug_Func(void)
{
#ifdef TOUCH_DEBUG
//上位機(jī)工具調(diào)試時(shí)上傳數(shù)據(jù)
_ucSendGapCnt++;
if(_ucSendGapCnt > SEND_GAP)
{
_ucSendGapCnt = 0;
TX_Flag = 1;
}
#endif
}
/******************************************************************************
* @brief SleepProcess program
* @Description 低功耗處理函數(shù)
* @param None
* @note
* @retval None
*****************************************************************************
*/
void SleepProcess(void)
{
#ifdef _DEF_LOW_POWER
if(ucKeySingle==0)
{
/* 無(wú)有按鍵按下 */
uiSleepTime++;
/* 5s無(wú)按鍵則進(jìn)入低功耗 */
if(uiSleepTime>500)
{
uiSleepTime = 0;
bSleepMode = 1;
}
/* 無(wú)按鍵按下 */
}
else
{
/* 有按鍵按下 */
uiSleepTime = 0;
/* 退出低功lhao */
bSleepMode = 0;
/* 有按鍵按下 */
}
/* 進(jìn)入低功耗 */
Sleep_Enable();
#endif
}
/******************************************************************************
* @brief Get_Key_Demo program
* @Description 獲取觸摸按鍵示例,用戶參考實(shí)現(xiàn)自己的功能
* @param None
* @note
* @retval None
*****************************************************************************
*/
void Get_Key_Demo(void)
{
/* 生成有效按鍵 */
ucKeySingle = TSC_GetSingle();
/* Demo led 有效按鍵提示 */
// LED_Scan();
}
touch.c
/**
*********************************************************************************
* @file touch.h
* @author FMD AE
* @brief 庫(kù)頭文件
* @version V1.0.0
* @date 2023-07-13
*********************************************************************************
* @attention
* COPYRIGHT (C) 2021 Fremont Micro Devices Corporation All rights reserved.
* This software is provided by the copyright holders and contributors,and the
*software is believed to be accurate and reliable. However, Fremont Micro Devices
*Corporation assumes no responsibility for the consequences of use of such
*software or for any infringement of patents of other rights of third parties,
*which may result from its use. No license is granted by implication or otherwise
*under any patent rights of Fremont Micro Devices Corporation.
**********************************************************************************
*/
/**********************************************************************************
* @芯片資源
* 1. Device: FT62F21X
* 2. Memory: Flash 1KX14b, SRAM:64X8b EEPROM 256X8b
* 3. Code size:
* 4. SRAM指定地址:
* 指定地址 中間變量應(yīng)用定義:0x50 ~0x56
* 指定地址 按鍵數(shù)據(jù)保存區(qū): 0x40
**********************************************************************************
*/
#ifndef _TOUCH_H
#define _TOUCH_H
#include "syscfg.h"
#include <string.h>
#define TOUCH_LIB_VERSION V1.0.0 //庫(kù)版本 V1.0.0;
//{{VERSION_DEFINE
//}}VERSION_DEFINE
//{{CONST_DEFINE
#define TOUCH_TOOL_VERSION V2.0.3.1
//#define TOUCH_DEBUG
//#define _DEF_LOW_POWER
//#define TOUCH_CS
#define TX PA1
#define RX PC6
/////////系統(tǒng)時(shí)鐘定義//////////////////////////////////////
#define SYS_OSCCON 0B01110001 //16M
#ifdef TOUCH_DEBUG
#define TRISA_CONFIG 0B11111101
#else
#define TRISA_CONFIG 0B00000000
#endif
//}}CONST_DEFINE
//{{KEY_DEFINE
/////////按鍵對(duì)應(yīng)芯片KEYIO映射定義//////////////////////////
#define KEY0_INDEX_MAP 3
#define KEY_NUMBER 1 //按鍵數(shù)
//}}KEY_DEFINE
//{{KEY_ONOFF_VALUE
/////////////按鍵有效閥值////////////////////////////////////
#define KEY0_ON 153
///////////按鍵無(wú)效閥值//////////////////////////////////////
#define KEY0_OFF 102
//}}KEY_ONOFF_VALUE
unsigned char stTkData[KEY_NUMBER][4]@ 0x40;
const unsigned char ucKeyNumberMax = KEY_NUMBER;
#ifdef TOUCH_DEBUG
unsigned char UART_TX_Buff[21] @0x57;
#endif
//{{KEY_MAP
////////按鍵對(duì)應(yīng)KEYIO映射表/////////////////////////////////////////////
const unsigned char ucKeyIndexMapArray[KEY_NUMBER]=
{
KEY0_INDEX_MAP,
};
const unsigned char ucAllKeyMap =1<< KEY0_INDEX_MAP;
//}}KEY_MAP
//{{KEY_ONOFF_ARRARY
const unsigned char ucActiveSensorDeltaArray[KEY_NUMBER]=
{
KEY0_ON
};
const unsigned char ucInActiveSensorDeltaArray[KEY_NUMBER]=
{
KEY0_OFF
};
//}}KEY_ONOFF_ARRARY
//////////采集數(shù)據(jù)處理相關(guān)定義////////////////////////////
#define SINGLE_FILTER_1 4 //濾波次數(shù)
#define BASE_LINE_UP_SPEED_1 100 //向上更新速度
#define BASE_LINE_DOWN_SPEED_1 100 //向下更新速度
#define BASE_LINE_EQUAL_UP_SPEED_1 200 //100 //向上快速更新
#define BASE_LINE_EQUAL_DOWN_SPEED_1 200 //100 //向下快速更新
#define BASE_UPDATA_FILTER_1 4 //快速更新條件
const unsigned char ucSingleFilter = SINGLE_FILTER_1;
const unsigned char ucBaselineDownSpeed = BASE_LINE_DOWN_SPEED_1;
const unsigned char ucBaselineUpSpeed = BASE_LINE_UP_SPEED_1;
const unsigned char ucBaselineEqualUpSpeed = BASE_LINE_EQUAL_UP_SPEED_1;
const unsigned char ucBaselineEqualDownSpeed = BASE_LINE_EQUAL_DOWN_SPEED_1;
const unsigned char ucBaseUpdataFilter = BASE_UPDATA_FILTER_1;
/////////////////////低功耗使用變量////////////////////////////////////////
extern volatile bit bSleepMode;//進(jìn)入低功耗標(biāo)志位
///////////功能函數(shù)定義/////////////////////////////////////
void IO_Out_Low(void);
void TOUCH_INITIAL(void); //觸摸按鍵配置初始化
void TSC_Start(void); //按鍵掃描結(jié)果處理,每次只做一個(gè)按鍵的一次掃描處理
void TSC_Reset(void); //復(fù)位觸摸. 長(zhǎng)按保護(hù)可使用
unsigned char TSC_DataProcessing(void);//所有按鍵數(shù)據(jù)處理狀態(tài): 1表示所有按鍵數(shù)據(jù)處理完成 0表示未處理按鍵數(shù)據(jù)
unsigned char TSC_GetSingle(void); //獲取按鍵有效標(biāo)志,每bit表示一個(gè)鍵,1為有按鍵按下,0為無(wú)按鍵按下
#ifdef TOUCH_DEBUG
void TSC_Start_Test(void);
unsigned int TSC_GetPrevData(unsigned char num);
#endif
#endif
///////////////////////////////////////////////////////
//CONST_ROM_TOTAL 1024
//CONST_RAM_TOTAL 64
//CONST_ROM_TOUCH 575+3*KEY_NUMBER
//CONST_ROM_CS_TOUCH 0
//CONST_ROM_LP_TOUCH 631+3*KEY_NUMBER
//CONST_ROM_CS_LPTOUCH 0
//CONST_RAM_TOUCH 23+4*KEY_NUMBER
//CONST_RAM_CS_TOUCH 0
//CONST_RAM_LP_TOUCH 26+4*KEY_NUMBER
//CONST_RAM_CS_LPTOUCH 0
//CONST_TIMER_TOTAL 0
//CONST_TIMER_USED 0
//CONST_TIMER 0
|
|