感謝,謝謝大家!我是第一次發帖,沒有表訴清楚。我用的是輝芒微FT62F211芯片,使用VisualTouchTL選中PA3做為觸摸腳,然后調試生成代碼,在IDE中讀取TSC_GetSingle(); 但是返回值一直為零,沒有反應出現,在VisualTouchTL中調試和運行界面都是正常,所以不知道是什么原因。非常感謝大家,麻煩幫助指點下。
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);
/*-------------------------------------------------
* 函數名稱:DelayUs
* 功能: 短延時函數 --16M-2T--大概快1%左右.
* 輸入參數:Time 延時時間長度 延時時長Time Us
* 返回參數:無
-------------------------------------------------*/
void DelayUs(unsigned char Time)
{
unsigned char a;
for(a=0;a<Time;a++)
{
_nop();
}
}
/*-------------------------------------------------
* 函數名稱:interrupt ISR
* 功能: 短延時函數 --16M-2T--大概快1%左右.
* 輸入參數:Time 延時時間長度 延時時長Time Us
* 返回參數:無
-------------------------------------------------*/
void interrupt ISR(void)//PIC_HI-TECH使用
{
}
/*-------------------------------------------------
* 函數名:SYS_INITIAL
* 功能: 上電系統初始化
* 輸入: 無
* 輸出: 無
--------------------------------------------------*/
void SYS_INITIAL (void)
{
//時鐘先8M 寫完PCON (bit7),OPTION(all bit),LVDCON(bit2),后換回16M
OSCCON = 0B01100000;
//WDT 32KHZ IRCF=110=8MHZ/4=4MHZ,0.25US/T
//Bit0=1,系統時鐘為內部振蕩器
//Bit0=0,時鐘源由FOSC<2:0>決定即編譯選項時選擇
OPTION = 0B00000100;
//Bit5 T0CS Timer0時鐘源選擇
//1-外部引腳電平變化T0CKI 0-內部時鐘(FOSC/2)
//Bit4 T0CKI引腳觸發方式 1-下降沿 0-上升沿
//Bit3 PSA 預分頻器分配位 0-Timer0 1-WDT
//Bit2:0 PS2 8個預分頻比 100 - 1:32
LVDCON = 0x03;
//bit2 0:不經過去抖電路 bit[1:0] 00:vdd 01:pa5 10:pa4 11:touch
PCON = 0x88;
//開LVD bit3 低電壓偵測使能 bit[7:4]=1xxx 1.2v
OSCCON = SYS_OSCCON;
//WDT 32KHZ IRCF=110=16MHZ/4=4MHZ,0.25US/T
T0CON0 = 0;
//復位上T0ON默認為1,所以需要清0
MSCON = 0;
//軟件關閉LVREN不然低功耗電流會變大(Options下必須選擇LVREN=SLVREN)
INTCON = 0;
//暫禁止所有中斷
PORTA = 0;
///////////特別注意與TKCAP合打線的PIN//////////////////////////
//對于6pin 封裝, TKCAP 與PA2 共用引腳3。
//對于DFN8 封裝, TKCAP 與PA4 共用引腳2。
//引腳用作TKCAP 功能時,則PA2/PA4 必須相應地設置為輸入;
//當關閉Touch模塊功能時,則PA2/PA4 為通用IO功能。
TRISA = TRISA_CONFIG;
// 0-輸出 1-輸入
///////////特別注意與TKCAP合打線的PIN//////////////////////////
WPUA = 0B00000000;
//PA端口上拉控制 1-開上拉 0-關上拉
PSRCA = 0B00000000;
//PA4,PA5源電流能力設置為0
}
/*-------------------------------------------------
* 函數名稱:WDT_INITIAL
* 功能: 初始化設置看門128MS時間復位
-------------------------------------------------*/
void WDT_INITIAL (void)
{
/* 清看門狗 */
CLRWDT();
/* 時鐘分頻分給WDT */
PSA = 0;
//WDTPS=0111=1:4096,PS=000=1:1
//定時時間=(4096*1)/32000=128ms
WDTCON = 0B00001111;
}
#ifdef _DEF_LOW_POWER
/**********************************************************************************
* @brief Sleep_Enable program.
* @param None
* @note 進出睡眠的相關處理
* @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
/*------------------------------------------------------------------------------------------
* 函數名: TSC_Scan
* 功能:
* 輸入: 無
* 輸出: 無
----------------------------------------------------------------------------------------------*/
void TSC_Scan(void)
{
#ifndef TOUCH_DEBUG
TSC_Start();
#else
TSC_Start_Test();
ConmunicateToPc();
#endif
}
/*------------------------------------------------------------------------------------------
* 函數名: main
* 功能: 主函數
* 輸入: 無
* 輸出: 無
----------------------------------------------------------------------------------------------*/
void main(void)
{
/* 系統初始化 */
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();
/* 低功耗處理函數,不需要低功耗時可以刪除 */
// SleepProcess();
/* 和上位機通信時需要的函數,正常使用時可以刪除 */
// Debug_Func();
}
}
}
/******************************************************************************
* @brief Debug_Func program
* @Description 觸摸調試使用的函數
* @param None
* @note
* @retval None
*****************************************************************************
*/
void Debug_Func(void)
{
#ifdef TOUCH_DEBUG
//上位機工具調試時上傳數據
_ucSendGapCnt++;
if(_ucSendGapCnt > SEND_GAP)
{
_ucSendGapCnt = 0;
TX_Flag = 1;
}
#endif
}
/******************************************************************************
* @brief SleepProcess program
* @Description 低功耗處理函數
* @param None
* @note
* @retval None
*****************************************************************************
*/
void SleepProcess(void)
{
#ifdef _DEF_LOW_POWER
if(ucKeySingle==0)
{
/* 無有按鍵按下 */
uiSleepTime++;
/* 5s無按鍵則進入低功耗 */
if(uiSleepTime>500)
{
uiSleepTime = 0;
bSleepMode = 1;
}
/* 無按鍵按下 */
}
else
{
/* 有按鍵按下 */
uiSleepTime = 0;
/* 退出低功lhao */
bSleepMode = 0;
/* 有按鍵按下 */
}
/* 進入低功耗 */
Sleep_Enable();
#endif
}
/******************************************************************************
* @brief Get_Key_Demo program
* @Description 獲取觸摸按鍵示例,用戶參考實現自己的功能
* @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 庫頭文件
* @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指定地址:
* 指定地址 中間變量應用定義:0x50 ~0x56
* 指定地址 按鍵數據保存區: 0x40
**********************************************************************************
*/
#ifndef _TOUCH_H
#define _TOUCH_H
#include "syscfg.h"
#include <string.h>
#define TOUCH_LIB_VERSION V1.0.0 //庫版本 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
/////////系統時鐘定義//////////////////////////////////////
#define SYS_OSCCON 0B01110001 //16M
#ifdef TOUCH_DEBUG
#define TRISA_CONFIG 0B11111101
#else
#define TRISA_CONFIG 0B00000000
#endif
//}}CONST_DEFINE
//{{KEY_DEFINE
/////////按鍵對應芯片KEYIO映射定義//////////////////////////
#define KEY0_INDEX_MAP 3
#define KEY_NUMBER 1 //按鍵數
//}}KEY_DEFINE
//{{KEY_ONOFF_VALUE
/////////////按鍵有效閥值////////////////////////////////////
#define KEY0_ON 153
///////////按鍵無效閥值//////////////////////////////////////
#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
////////按鍵對應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
//////////采集數據處理相關定義////////////////////////////
#define SINGLE_FILTER_1 4 //濾波次數
#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;//進入低功耗標志位
///////////功能函數定義/////////////////////////////////////
void IO_Out_Low(void);
void TOUCH_INITIAL(void); //觸摸按鍵配置初始化
void TSC_Start(void); //按鍵掃描結果處理,每次只做一個按鍵的一次掃描處理
void TSC_Reset(void); //復位觸摸. 長按保護可使用
unsigned char TSC_DataProcessing(void);//所有按鍵數據處理狀態: 1表示所有按鍵數據處理完成 0表示未處理按鍵數據
unsigned char TSC_GetSingle(void); //獲取按鍵有效標志,每bit表示一個鍵,1為有按鍵按下,0為無按鍵按下
#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
|