感谢,谢谢大家!我是第一次发帖,没有表诉清楚。我用的是辉芒微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
|