這是一款輝芒微的觸摸芯片,現在在官方的調試軟件里,導出到工程,現在不會操作了,怎么樣寫:觸摸一下,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;
}
//===========================================================
|