这是一款辉芒微的触摸芯片,现在在官方的调试软件里,导出到工程,现在不会操作了,怎么样写:触摸一下,LED1亮,触摸5秒,LED2亮,
/**
*********************************************************************************
* @file main.c
* @author FMD AE
* @brief Device: FT62F28X
* Memory: Flash 8KX14b, EEPROM 128X8b, SRAM 616X8b
* 主函数,touch库的使用示例
* @version V1.0.0
* @data 2023-4-19
*/
//===========================================================
//include definition
//===========================================================
#include "SYSCFG.h";
#include "touch.h";
#include "led.h";
#include "uart.h"
//===========================================================
//Variable definition
//===========================================================
unsigned char strongest = 0; //demo_test
unsigned char Sav_strongest = 0; //demo_test
unsigned long Sav_single,single;
unsigned char temp = 0;
void ConmunicateToPc(void);
void TSC_Scan(void);
void SleepProcess(void);
void Get_Key_Demo(void);
/******************************************************************************
* @brief DelayUs program
* @Description 延时函数
* @param time
* @note
* @retval None
*****************************************************************************
*/
void DelayUs(unsigned int Time)
{
unsigned int a;
for(a=0;a<Time;a++)
{
NOP();
}
}
/*-------------------------------------------------
* 函数名称:DelayMs
* 功能: 短延时函数
* 输入参数:Time延时时间长度 延时时长Time ms
* 返回参数:无
-------------------------------------------------*/
void DelayMs(unsigned char Time)
{
unsigned char a,b;
for(a=0;a<Time;a++)
{
for(b=0;b<5;b++)
{
DelayUs(197); //快1%
}
}
}
/******************************************************************************
* @brief interrupt ISR program
* @Description 中断入口函数 ,注意BANK的切换
* @param None
* @note
* @retval None
*****************************************************************************
*/
void interrupt ISR(void)
{
//进中断时bank保护
if(AUXPGE==0) //BANK0-3
{
temp = 0;
}
else
{
AUXPGE = 0;
temp = 1;
}
//进中断时bank保护恢复
if(AUXPGE==0)//BANK0-3
{
AUXPGE = temp ;
}
else
{
AUXPGE = 0;
AUXPGE = temp ;
}
}
/******************************************************************************
* @brief Initialize_Communication program
* @Description 应用程序应在系统初始化时必须把它们写为合适的值,
* 特别是各种使能位,以免产生不必要的中断及额外功耗。
* @param None
* @note
* @retval None
*****************************************************************************
*/
void Initialize_Communication(void)
{
//I2C 模块
I2CCR1 = 0;
I2CCR2 = 0;
I2CADDR = 0;
I2CCCR = 0;
I2CDAT = 0;
I2CISR = 0;
//SPI 模块
SPIDAT = 0;
SPICR0 = 0;
SPICFG = 0;
SPISCR = 0;
SPICRCP = 0;
SPITXCRC = 0;
SPIRXCRC = 0;
SPIIER = 0;
SPICR1 = 0;
SPISTAT = 0;
//UART 模块
UR0DATL = 0;
UR0DATH = 0;
UR0CR1 = 0;
UR0CR2 = 0;
UR0BRRL = 0;
UR0STAT = 0;
UR1DATL = 0;
UR1DATH = 0;
UR1CR1 = 0;
UR1CR2 = 0;
UR1BRRL = 0;
UR1STAT = 0;
}
/******************************************************************************
* @brief SYS_INITIAL program
* @Description 系统时钟、IO初始化
* @param None
* @note
* @retval None
*****************************************************************************
*/
///*
void SYS_INITIAL(void)
{
OSCCON = SYS_OSCCON;//0B01110001; //WDT 32KHZ IRCF=110=16MHZ/4=4MHZ,0.25US/T
//Bit0=1,系统时钟为内部振荡器
//Bit0=0,时钟源由FOSC<2:0>决定即编译选项时选择
OPTION = 0B00001000; //Bit3 PSA 预分频器分配位 0= 预分频器分配给Timer0模块 1:分配给WDT
//Bit2:0:预分频比选择位 000: 1:2
DelayMs(40); //为进入debug模式延时大于20ms
INTCON = 0; //暂禁止所有中断
PORTA = 0;
PORTB = 0b00000010;
PORTD = 0;
PORTC = 0;
//**********特别注意*********************************************************//
//PC1:由于F283B,F285B的PB7与PC1打在一起,如果用PB6PB7做debug模式那么PC1需要设为输入
//PC6:当需要用PC6做debug模式时,需要设为输入
//PC7:由于F283B,F285B的PC7与PD5打在一起, PD5与PC7要配置相同,设为输入
//PD3:由于F283X,F285B,F286A,F287A的PD3与GND打在一起则禁止输出高或使能内部上拉,设为输入
// 由于F287C的PD3与VDD打在一起则禁止输出低或使能内部下拉,设为输入
TRISA = TRISA_CONFIG; // 0-输出 1-输入 RA4 - //0B00000000
TRISB = TRISB_CONFIG; // B4-B7 TK5-TK2 PB7--touch //0B00000000
TRISC = TRISC_CONFIG; // 0B00000000
TRISD = TRISD_CONFIG; // TKCAP_PD5设为输入 //0B00101000
//**********特别注意*********************************************************//
ANSEL1 = 0B10000000; //TKCAP_PD5_AN15设为模拟输入脚
BANKSEL4_7;
WPUA = 0B00000000; //PA端口上拉控制 1-开上拉 0-关上拉
WPUB = 0B00000000;
WPUC = 0B00000000;
WPUD = 0B00000000;
WPDA = 0B00000000; //PA端口上拉控制 1-开上拉 0-关上拉
WPDB = 0B00000000;
WPDC = 0B00000000;
WPDD = 0B00000000;
BANKSEL0_3;
}
/******************************************************************************
* @brief WDT_INITIAL program
* @Description 初始化设置看门狗为16位计数器,用于SLEEP模式的128ms唤醒
* @param None
* @note
* @retval None
*****************************************************************************
*/
void WDT_INITIAL(void)
{
CLRWDT(); //清看门狗
WDTCON = 0B00001111; //bit[6:5]WCKSRC=00=LIRC(32K)
//bit[4:1]WDTPS=0110=1:4096,预分频1:1 定时时间=(4096*1)/32000=128ms
//bit[0]SWDTEN= 1 开启
}
/******************************************************************************
* @brief main program
* @Description 主函数
* @param None
* @note
* @retval None
*****************************************************************************
*/
void main(void )
{
Initialize_Communication();//必做,上电复位值
SYS_INITIAL();//系统时钟、IO初始化
//touch库资源使用详情请看touch.h说明
TSC_INITIAL();//触摸按键初始化
//低功耗定时,请勿关闭
WDT_INITIAL(); //看门狗初始化
PEIE = 1; //使能外设中断
GIE = 1; //使能全局中断
// LED(); //led.c demo_test
while(1)
{
//清看门狗
CLRWDT();
//按键扫描
TSC_Scan();
if(TSC_DataProcessing()== 1) //返回1表示所有按键处理完成一次。
{
Get_Key_Demo();
}
}
}
/******************************************************************************
* @brief SleepProcess program
* @Description 低功耗处理函数,若未选择低功耗功能,SleepProcess() 在实际工程中可以删除,
虽然已通过宏裁剪,但是函数也会编译占用4byte rom和 占用cpu执行时间。
1. bSleepEnable用于使能低功耗功能,如程序满足休眠条件之后,请将bSleepEnable置1;
2. bSleepMode为触摸库标志,用户不允许操作。
* @param None
* @note
* @retval None
*****************************************************************************
*/
void SleepProcess(void)
{
#ifndef TOUCH_DEBUG
#ifdef _DEF_LOW_POWER
// if(PB7 == 0)//检测到PB7低电平进入休眠
// {
bSleepEnable = 1;
// }
if(bSleepMode) //满足此条件,说明程序将立即进入低功耗,请将GPIO及其它耗电外设关闭,以达到最低功耗
{
}
while(bSleepMode)
{
TSC_SleepPrcoessing();
CLRWDT();
TSC_Sleep();
// if(PB7 == 1)//检测到PB7高电平退出休眠
// {
// bSleepEnable = 0;
// }
}
#endif
#endif
}
/******************************************************************************
* @brief TSC_Scan program
* @Description 请勿删除此函数
* @param None
* @note
* @retval None
*****************************************************************************
*/
void TSC_Scan(void)
{
#ifndef TOUCH_DEBUG
TSC_Start();
#else
TSC_Start_Test();
ConmunicateToPc();
#endif
}
/******************************************************************************
* @brief Get_Key_Demo program
* @Description 获取触摸按键示例,用户参考实现自己的功能
* @param None
* @note
* @retval None
*****************************************************************************
*/
void Get_Key_Demo(void)
{
/*只有调用CS库才能获取cs按键 TSC_GetCsKey();获取当前按下的一个按键*/
strongest = TSC_GetCsKey();
if(Sav_strongest != strongest)
{
// LED_Scan();
}
Sav_strongest = strongest;
/*获取多个按键,可以用来实现组合按键功能*/
single = TSC_GetLocalKey();
if(Sav_single != single)
{
// LED_Local_Scan();
}
Sav_single = single;
}
//===========================================================
|