#include "fpc.h" #include #include "public.h" #include "ST7735S.h" #include "sim_eeprom.h" #include "adc_anychannel_continuousscan_interrupt.h" void FPC_Init(void) { EXTI_InitTypeDef EXTI_InitStruct; GPIO_InitTypeDef GPIO_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOB, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = FPC_KEY_GPIO_Pin ;//KEY GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_FLOATING; GPIO_Init(FPC_KEY_GPIO_Port, &GPIO_InitStruct); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = FPC_IR_TX_GPIO_Pin ;//IR_TX GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(FPC_IR_TX_GPIO_Port, &GPIO_InitStruct); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = FPC_IR_RX_GPIO_Pin ;//IR_RX GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_FLOATING; GPIO_Init(FPC_IR_RX_GPIO_Port, &GPIO_InitStruct); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = FPC_Touch_GPIO_Pin ;//TOUCH GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_FLOATING; GPIO_Init(FPC_Touch_GPIO_Port, &GPIO_InitStruct); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = CHARGE_5V_GPIO_Pin ;//5v_test GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_FLOATING; GPIO_Init(CHARGE_5V_GPIO_Port, &GPIO_InitStruct); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = STB_GPIO_Pin ;//STANBY GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(STB_GPIO_Port, &GPIO_InitStruct); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = CHARGE_CON_GPIO_Pin ;//charge_con GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(CHARGE_CON_GPIO_Port, &GPIO_InitStruct); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = BEEP_GPIO_Pin ;//beep GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(BEEP_GPIO_Port, &GPIO_InitStruct); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource0);//KEY SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource5);//TOUCH SYSCFG_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);//5V充电 EXTI_StructInit(&EXTI_InitStruct); EXTI_InitStruct.EXTI_Line = EXTI_Line0; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); EXTI_StructInit(&EXTI_InitStruct); EXTI_InitStruct.EXTI_Line = EXTI_Line5; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); EXTI_StructInit(&EXTI_InitStruct); EXTI_InitStruct.EXTI_Line = EXTI_Line3; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); NVIC_InitStruct.NVIC_IRQChannel = EXTI0_1_IRQn; NVIC_InitStruct.NVIC_IRQChannelPriority = 0x01; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); NVIC_InitStruct.NVIC_IRQChannel = EXTI2_3_IRQn; NVIC_InitStruct.NVIC_IRQChannelPriority = 0x01; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); NVIC_InitStruct.NVIC_IRQChannel = EXTI4_15_IRQn; NVIC_InitStruct.NVIC_IRQChannelPriority = 0x01; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); } static void EXTI_Config(void) { EXTI_InitTypeDef EXTI_InitStruct; EXTI_StructInit(&EXTI_InitStruct); //External interrupt Mode SYSCFG_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); // 按键 //Interrupt threads where pins are located EXTI_InitStruct.EXTI_Line = EXTI_Line0; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; //rising trigger EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); SYSCFG_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3); // 5V充电 //Interrupt threads where pins are located EXTI_InitStruct.EXTI_Line = EXTI_Line3; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; //rising trigger EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); SYSCFG_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource5); // 触摸 //Interrupt threads where pins are located EXTI_InitStruct.EXTI_Line = EXTI_Line5; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; //rising trigger EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); } void EXTI0_1_IRQHandler(void) { /* K1 */ if (RESET != EXTI_GetITStatus(EXTI_Line0)) { OFF_delay_time = 5000; EXTI_ClearITPendingBit(EXTI_Line0); } } void EXTI2_3_IRQHandler(void) { /* TOUCH */ if (RESET != EXTI_GetITStatus(EXTI_Line3)) { OFF_delay_time = 5000; EXTI_ClearITPendingBit(EXTI_Line3); } } void EXTI4_15_IRQHandler(void) { /* TOUCH */ if (RESET != EXTI_GetITStatus(EXTI_Line5)) { OFF_delay_time = 5000; EXTI_ClearITPendingBit(EXTI_Line5); } } void FPC_Scan(void) { static bool key_down_flag = 0; u8 v_buffer; v_buffer = V_Condition_new(); if(bat_v_delay >0) { if(v_buffer>=4) { v_buffer -= 4;//简易加热后电压补偿 } } g_work.m_conditon.m_conditon.V_conditon = v_buffer; #ifdef IR_ENABLE if(Key_READ == 0)//开盖 { OFF_delay_time = 5000; if(GPIO_ReadOutputDataBit(FPC_IR_TX_GPIO_Port,FPC_IR_TX_GPIO_Pin) == 1)//如果没开,打开红外管 { IR_ON(); IR_delay = 10;//红外发送到接收时延10ms } if(IR_READ == 1 && IR_delay == 0 && g_work.m_conditon.m_conditon.V_conditon <15)//插入烟 { work_mode = 2;//加热状态 } else { work_mode = 1; } } else { if(OFF_delay_time>0) { work_mode = 1; } else { work_mode = 0 ; } } #else if(TOUCH_READ == 1)//长按不进睡眠 { OFF_delay_time = 5000; } if(Key_READ == 0)//按键防抖时延50ms { OFF_delay_time = 5000; if(key_down_flag == 0) { key_delay = 50; key_down_flag = 1; } } else { if(key_down_flag == 1) { key_down_flag = 0; } } if( key_down_flag == 1&& key_delay == 0 && g_work.m_conditon.m_conditon.V_conditon <15 )//插入烟支,开始加热 { work_mode = 2; } else { if(OFF_delay_time>0) { work_mode = 1; } else { work_mode = 0 ; } } #endif if(CHARGE5V_READ == 1)//有5V接入,需要根据工作状态判断是否充电 { OFF_delay_time = 5000;//只要插入充电线就不熄屏,保持开机 if(work_mode==2)//加热流程中 { is_charging = 0;//加热不允许充电 if(GPIO_ReadOutputDataBit(CHARGE_CON_GPIO_Port,CHARGE_CON_GPIO_Pin)==0) { Charge_OFF(); } } else { is_charging = 1;//加热不允许充电 if(GPIO_ReadOutputDataBit(CHARGE_CON_GPIO_Port,CHARGE_CON_GPIO_Pin)==1) { Charge_ON(); } } } else { is_charging = 0; } }