#include "key.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
#include "Timer.h"
#include "ADS129x.h"



//按键及电源控制初始化
void KEY_Init(void) //IO初始化
{ 
		GPIO_InitTypeDef GPIO_InitStructure;
		
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTA,PORTE时钟		
	
		//PWR_CTRL A4
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;				 
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;	
		GPIO_Init(GPIOA, &GPIO_InitStructure);				
		//KEY PWR  A1 	
		GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_1;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
		GPIO_Init(GPIOA, &GPIO_InitStructure);

}


void KE_IO_Init(void) //拨码开关
{
		GPIO_InitTypeDef GPIO_InitStructure;
		
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);//使能PORTA,PORTE时钟		
	
		//KE 1 2 3 4
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_8;				 
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
		GPIO_Init(GPIOA, &GPIO_InitStructure);				

		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_5;				 
		GPIO_Init(GPIOB, &GPIO_InitStructure);				
	
}






//开机检测
u8 Power_ON(void)
{
		u8 ret=0;
		if (KEYPWR == 0)//按键按下
		{		
				LED1=LED_ON;//使能供电
				while( KEYPWR == 0)
				{
						delay_ms(10);
						ret++;
						if ( ret > 150 )//1.5s
						{
								POWER_ON;
								LED2=LED_ON;
								while( KEYPWR == 0);
								LED2=LED_OFF;
								return 0;//开机成功
						}
				}
				delay_ms(100);			
				LED1=LED_OFF;
		}
		return 1;	//开机失败
}


volatile u8 KEY_TYPE=0;//按键标志
volatile u8 KEY_STATE=0;//按键状态
volatile u8 KEY_Mark=0;//标记

void Key_Scan(void)
{
		//按键没按下过
		if(TIM2_FLAG==0 && KEY_STATE==0 && KEYPWR==0)
		{
				
				TIM_Cmd(TIM2, ENABLE);		
				if(KEYPWR == 0)
				{
						LED_2=LED_ON;
						KEY_STATE |= KEY_PWR;
				}
		}
}

void Change_Mode(void)
{
		if(KEY_TYPE)
		{
				//__disable_irq(); 
				delay_s(2);
				LED_2=LED_OFF;
			
				if(KEY_TYPE == KEY_PWR)
				{
						EXTI->IMR &= ~(ADS129X_DRDY_LINE);//屏蔽外部中断		

						work_state++;
						if(work_state == 4)
							work_state=1;
						
						//printf("切换工作模式\r\n");
				}
				KEY_TYPE=0;
		}		
}



//void Key_Scan(void)
//{
//	if ( KEY1 == 0 )//KEY1按下
//	{		
//			if(KeyDat & 0x01)//检查按键按下标志位
//			{
//					if(TIM3->CNT >= KEYDOWNMINTIME)//延时大于1s（按键有效）
//					{
//							if(TIM3->CNT >= KEYDOWNLONGTIME)//延时大于2s（长按键）
//							{		
//									KeyMask=KEYLONGDOWN;																	
//							}								
//							else//短按键事件	
//							{								
//									KeyMask=KEYSHORTDOWN; 								
//							}
//							DS2=0;//按键有效
//					}	
//			}
//			else//按键按下瞬间
//			{			
//					TIM_Cmd(TIM3, ENABLE);  //使能TIM			
//					printf("按键1按下\r\n");				
//				
//					DS2=0;//按键按下瞬间
//					
//					KeyDat |= 0x01;	//首次按键标记
//					KeyMask=KEYUNKNOW ;//瞬间按下为无效状态				
//			}
//	}	
//	else//无按下按下，或者按键弹起
//	{
//			if(KeyDat & 0x01)	//按键按下后弹起
//			{	
//					KeyDat &= ~0x01;//清按键标志
//					TIM_Cmd(TIM3, DISABLE);//关定时器
//					TIM3->CNT=0;//清空定时器计数器	
//				
//							
//					if(KeyMask==KEYSHORTDOWN )//短按键事件
//					{
//							KeyMask=KEYUNKNOW;//清变量		
//							printf("短按键\r\n");				

//					}					
//					else if(KeyMask==KEYLONGDOWN)//长按键事件
//					{								
//							KeyMask=KEYUNKNOW;//清变量
//							printf("长按键\r\n");		
//						
//					}
//				
//			}		
//	}
//}
							    


