//************************************************************
//  Copyright (c) 深圳市赛元微电子有限公司
//	文件名称	: main.c
//	作者		: 
//	模块功能	: 触控DEMO
//  最后更正日期:
// 	版本		: 
//              :  
//*************************************************************
#include "h\SC95F8X6X_C.H"	
#include "h\data_type.h"
#include "lib\SensorMethod.h"

#include <intrins.h>
INT32U xdata exKeyValueFlag = 0;		//按键标志
INT32U xdata exKeyValue = 0;

INT32U xdata LastexKeyValueFlag = 0;
bit Fingerflag =0;

#define  LED0   P14
#define  LED1   P15
#define  LED2   P16
#define  LED3   P17
#define  LED4   P27

#define  LED_ON    0
#define  LED_OFF   1

							  
INT16U  xdata NOKEYCount = 0;

/**************************************************
*函数名称：void ChangeTouchKeyvalue(void) 
*函数功能：转换TK键值
*入口参数：void
*出口参数：void
**************************************************/
void ChangeTouchKeyvalue(void)
{
	
    if(exKeyValueFlag != 0)
    {
        LastexKeyValueFlag = exKeyValueFlag;            
        switch(LastexKeyValueFlag)
    	{		
    		//不同间距不同大小的按键
           	case 0x00000001:exKeyValue = 1;break;	
    		case 0x00000002:exKeyValue = 2;break; 
    		case 0x00000004:exKeyValue = 3;break;
            case 0x00000008:exKeyValue = 4;break;
            case 0x00000010:exKeyValue = 5;break;	
    		case 0x00000020:exKeyValue = 6;break; 
    		case 0x00000040:exKeyValue = 7;break;
            case 0x00000080:exKeyValue = 8;break;
            case 0x00000400:exKeyValue = 9;break;	
    		case 0x00000800:exKeyValue = 10;break; 
    		case 0x00001000:exKeyValue = 11;break;
            case 0x00002000:exKeyValue = 12;break;
    	    default:exKeyValue = 0xff;break; 			
    	}
        if(exKeyValue !=0xff && Fingerflag ==0)
        {
            Fingerflag = 1;
            LED0 = !LED0;  
        }
        
    }
    else
    {
        Fingerflag = 0;
    }

    
    	

}


 /**************************************************
*函数名称：void  Sys_Init(void) 
*函数功能：系统初始化
*入口参数：void
*出口参数：void  
**************************************************/
void  Sys_Init(void)
{	 
    WDTCON  = 0x10;	

	P0CON = 0xff;
	P1CON = 0xff;
	P2CON = 0xff;
	P3CON = 0xff;
	P4CON = 0xff;
	P5CON = 0xff;
    
	P0PH = 0xff;
	P1PH = 0xff;
	P2PH = 0xff;
	P3PH = 0xff;
	P4PH = 0xff;	
	P5PH = 0xff;
    
	P0 = 0x7F;//CMOD脚默认设定为推挽输出0
	P1 = 0xFF;
	P2 = 0xFF;
	P3 = 0xFF;
	P4 = 0xFF;
    P5 = 0X03;				
	
}
/**************************************************
*函数名称：void  Sys_Scan(void) 
*函数功能：扫描TK和显示
*入口参数：void
*出口参数：void  
**************************************************/
void Sys_Scan(void)
{      				
    if(SOCAPI_TouchKeyStatus&0x40)		//当按键个数大于8个时，要判断半轮标志是否被置起，然后启动下半轮
	{
		SOCAPI_TouchKeyStatus &= 0xBf;	// 清除标志位， 需要外部清除。
		TouchKeyRestart();				//启动下一轮转换
	}
	if(SOCAPI_TouchKeyStatus&0x80)	    //重要步骤2:  触摸键扫描一轮标志，是否调用TouchKeyScan()一定要根据此标志位置起后
	 {	   																	
		SOCAPI_TouchKeyStatus &= 0x7f;	//清除标志位																	    
        exKeyValueFlag = TouchKeyScan();//按键数据处理函数	 
        ChangeTouchKeyvalue();   		//转换键值

		//这里设置进入低功耗扫描模式条件是：100轮没有检测到按键。也可以是其他，比如按下某个按键后多少S进入低功耗模式等          
        if(exKeyValueFlag == 0)
        {
            NOKEYCount++;
            if(NOKEYCount>1000) 
            {
                NOKEYCount = 0;
                if(TouchKey_IntoLowPowerMode())
				{
					return; //成功进入低功耗模式
				}
				else
				{
					TouchKeyRestart(); //启动下一轮转换
					return;
				}
                
            }
        } 
        else
        {
            NOKEYCount = 0;
        }  
		/////////////////////////////////////////////////
		
		TouchKeyRestart();				//启动下一轮转换		   
	}		  	   
}


/**************************************************
*函数名称：void Customer_IntoLowPowerMode_Init(void)
*函数功能：用户进入低功耗模式前的的初始化
*入口参数：void
*出口参数：void  
*备注说明：在进入低功耗前，用户需要关闭外围耗电的电路，使电流最低
 * 		   该函数已在S_TouchKeyCFG.C文件TouchKey_IntoLowPowerMode()函数中调用,用户无需调用
**************************************************/
void Customer_IntoLowPowerMode_Init(void)
{
    /*进入低功耗前设置*/

	//该函数已在TouchKey_IntoLowPowerMode()里调用
	
	//用户无需调用该函数！！！
	
	//用户需要自己编写该函数实体！！！

	//关闭耗电的外设，保持最低功耗  如果程序中有使用中断资源，也请及时关闭对应中断使能，以防应用程序逻辑上不严谨导致功能异常。
	LED0 = 1;
    LED1 = 1;
    LED2 = 1;
    LED3 = 1;
    LED4 = 1;
}
/**************************************************
*函数名称：void Customer_QuitLowPowerMode_Init(void)
*函数功能：用户退出低功耗模式后的的初始化
*入口参数：void
*出口参数：void
*备注说明：在退出低功耗前，用户进行的必要操作
*		   该函数已在S_TouchKeyCFG.c文件TouchKey_QuitLowPowerMode()函数中调用，用户无需调用
**************************************************/
void Customer_QuitLowPowerMode_Init(void)
{
   /*退出低功耗前设置*/
   
   //该函数已在低功耗下满足TK唤醒退出低功耗时调用，即在TouchKey_QuitLowPowerMode()中调用

   //用户无需调用该函数！！！
 
   //用户需要自己编写该函数实体！！！
	
   //恢复必要的外设 同时也需使能之前所关闭的对应中断。

}
/**************************************************
*函数名称：void Custom   er_BTM_Dispose(void)
*函数功能：用户BTM唤醒后自己的处理函数
*入口参数：void
*出口参数：void  
*备注说明：低功耗实现利用了BTM资源，用户需要在BTM中实现的内容在此函数实现
 		   该函数已在S_TouchKeyCFG.c文件LowPower_Touchkey_Scan()函数中调用
**************************************************/
void Customer_BTM_Dispose(void)
{
   //该函数已在低功耗模式扫描函数中调用

   //此函数为BTM定时唤醒后，用户的处理函数

   //低功耗模式下，用户需在BTM中实现的功能可在此函数实现   

   //比如查询某个IO，电平发生变化等条件成立，(TK唤醒除外)需退出低功耗模式可在此函数中调用TouchKey_QuitLowPowerMode()

   /*
   if(TEST_IO == 0)
   {
	 //do someing
	 TouchKey_QuitLowPowerMode();
   }
   */

}


/**************************************************
*函数名称：void main(void)								  
*函数功能：主函数
*入口参数：void
*出口参数：void  
**************************************************/
void main(void)
{			
	Sys_Init();		  //系统初始化	
    
	TouchKeyInit();	  //触控按键初始化
	
	while(1)
	{   	   	   
    	WDTCON |= 0x10; 
		if(GetLowPowerScanFlag() == 0)	//正常运行模式  
		{
			
		    Sys_Scan();
			//原主程序非低功耗模式执行内容
			//用户在此处增加自己的处理代码
			
		   //原主程序非低功耗模式执行内容
		} 
		else						//低功耗运行模式
		{
			
		    LowPower_Touchkey_Scan();
   
		}       
		
		
	} 
}