/* * DMK-S301-77.c * * Created on: Apr 21, 2017 * Author: Administrator */ #include "DMK-BC316-77.h" unsigned char Ad_cal_Loop; unsigned int Bat_power_Data; unsigned int Bat_Values[4]; unsigned int Bat_power_Error_count; unsigned char Bat_power_Error_Flag; unsigned char Sig_LI0_DI_KL_58xs_run; unsigned char InitButtonCode=0xF0; //调光信号、15电信号、调光使能信号 unsigned char Sig_LI0_DI_KL_58xs,Sig_LI0_Klemme_15_MFL,Sig_LI0_Dimmung_01_gueltig; //按键信号 unsigned char Sig_LI0_MFL_Toggle,Sig_LI0_MFL_ButtonRight_err=0,Sig_LI0_MFL_ButtonLeft_err=0; unsigned char Sig_LI0_MFL_Tastencode_1,Sig_LI0_MFL_Tastencode_2; unsigned char Sig_LI0_MFL_Eventcode_1,Sig_LI0_MFL_Eventcode_2; extern unsigned char lin_Signal_HORN; extern l_u8 MFS_RollingCounter; unsigned char outputdelay1,outputdelay2; unsigned char Toggle_start; unsigned char Toggle_1s; static unsigned char last1,last2,elast1,elast2; void Apply_Task(void) { if(app_base_2mStick == 1) { app_base_2mStick = 0; AD_Data_Deal(); } if(app_base_5mStick == 1) { app_base_5mStick=0; if(Sig_LI0_Klemme_15_MFL==1) { Button_Scan(); } else { Sig_LI0_MFL_Tastencode_1=0; Sig_LI0_MFL_Tastencode_2=0; } Eventcode_deal(Sig_LI0_MFL_Tastencode_1,Sig_LI0_MFL_Tastencode_2); if(last1 != Sig_LI0_MFL_Tastencode_1 || last2 != Sig_LI0_MFL_Tastencode_2) { if(Toggle_start == 1 && Toggle_1s%20 == 0) { } else { Toggle_1s = 0; Sig_LI0_MFL_Toggle=!Sig_LI0_MFL_Toggle; Toggle_start=1; } last1 = Sig_LI0_MFL_Tastencode_1; last2 = Sig_LI0_MFL_Tastencode_2; elast1 = Sig_LI0_MFL_Eventcode_1; elast2 = Sig_LI0_MFL_Eventcode_2; } else if(elast1 != Sig_LI0_MFL_Eventcode_1 || elast2 != Sig_LI0_MFL_Eventcode_2) { if(Toggle_start == 1 && Toggle_1s%20 == 0) { } else { Toggle_1s = 0; Sig_LI0_MFL_Toggle=!Sig_LI0_MFL_Toggle; Toggle_start=1; } elast1 = Sig_LI0_MFL_Eventcode_1; elast2 = Sig_LI0_MFL_Eventcode_2; last1 = Sig_LI0_MFL_Tastencode_1; last2 = Sig_LI0_MFL_Tastencode_2; } if(Sig_LI0_MFL_Tastencode_1!=0 || Sig_LI0_MFL_Tastencode_2!=0) { } else { if(Toggle_start==1) { Toggle_start=2; Toggle_1s=0; } last1 = 0; last2 = 0; } } if(app_base_10mStick == 1) { app_base_10mStick=0; Sleep_Command_Rece(); if(outputdelay1 > 0) { outputdelay1--; } if(outputdelay2 > 0) { outputdelay2--; } } if(app_base_50mStick == 1) { app_base_50mStick=0; Toggle_bit_deal(Sig_LI0_MFL_Tastencode_1,Sig_LI0_MFL_Tastencode_2); LIN_Short_to_12v_Protect(); if((Sig_LI0_Dimmung_01_gueltig==1) && (Sig_LI0_DI_KL_58xs <= 100) && (Sig_LI0_DI_KL_58xs >= 0)) { Sig_LI0_DI_KL_58xs_run=Sig_LI0_DI_KL_58xs; } //PWM1_SetRatio16(Sig_LI0_DI_KL_58xs_run*65535/100); } } void AD_Data_Deal(void) { if(ADC_convert_over_flag == 1)//AD转换完成标志 { ADC_convert_over_flag=0;//AD转换完成标志位清零 Bat_Values[Ad_cal_Loop]=AD1_OutV[0]; Ad_cal_Loop++; if(Ad_cal_Loop>=4) { Ad_cal_Loop=0; Bat_power_Data=AD_Average_Calculate(Bat_Values,4); if(Bat_power_Data>657) //>16.7v { Bat_power_Error_count++; if(Bat_power_Error_count>=500)//125为一秒,也就是4秒 { Bat_power_Error_Flag=1; Bat_power_Error_count=0; } } else if(Bat_power_Data>342 && Bat_power_Data<638)//>8.7v,<16.2v { Bat_power_Error_count=0; Bat_power_Error_Flag=0; } else if(Bat_power_Data<323)//<8.2v { Bat_power_Error_count++; if(Bat_power_Error_count>=500)//125为一秒,也就是4秒 { Bat_power_Error_Flag=1; Bat_power_Error_count=0; } } else { } } } } void Lin_Task(void) { l_bool_wr_LI0_void(1);//1-lin_pFrameBuf[0]=0x80 0-lin_pFrameBuf[0]=0x00 l_u8_wr_LI0_MFL_Variante(4);//lin_pFrameBuf[4]=0x40 l_bool_wr_LI0_MFL_Signalhorn(lin_Signal_HORN);//1-lin_pFrameBuf[7]=0x01 0-lin_pFrameBuf[7]=0x00 l_bool_wr_LI0_MFL_Toggle(Sig_LI0_MFL_Toggle);//1-lin_pFrameBuf[0]=0x90 0-lin_pFrameBuf[0]=0x80 l_bool_wr_LI0_MFL_Taste_links_Err(Sig_LI0_MFL_ButtonLeft_err); l_bool_wr_LI0_MFL_Taste_rechts_Err(Sig_LI0_MFL_ButtonRight_err); if(InitButtonCode != 0) { l_u8_wr_LI0_MFL_Tastencode_1(InitButtonCode); } else { l_u8_wr_LI0_MFL_Tastencode_1(Sig_LI0_MFL_Tastencode_1); } l_u8_wr_LI0_MFL_Tastencode_2(Sig_LI0_MFL_Tastencode_2); l_u8_wr_LI0_MFL_Eventcode_1(Sig_LI0_MFL_Eventcode_1);//Sig_LI0_MFL_Eventcode_1 l_u8_wr_LI0_MFL_Eventcode_2(Sig_LI0_MFL_Eventcode_2);//Sig_LI0_MFL_Eventcode_2 Sig_LI0_DI_KL_58xs=l_u8_rd_LI0_DI_KL_58xs(); Sig_LI0_Klemme_15_MFL=l_bool_rd_LI0_Klemme_15_MFL(); Sig_LI0_Dimmung_01_gueltig=l_bool_rd_LI0_Dimmung_01_gueltig(); l_u8_wr_LI0_MFL_Zaehler(MFS_RollingCounter); } void Sleep_Command_Rece(void) { if ((M_ASK_S_Sleep==1 || NO_DATA_Sleep==1) && (Sig_LI0_DI_KL_58xs==0X7e || Sig_LI0_DI_KL_58xs==0X7f || Sig_LI0_DI_KL_58xs==0 || Sig_LI0_DI_KL_58xs==1)) { V_12_Ctrl=0; FLAG_GO_TO_Sleep=1; //关闭中断 SCI0CR2_RE=0; SCI0CR2_TE=0; SCI0CR2_RIE=0; //开启中断 SCI0CR2_RE=1; SCI0CR2_TE=1; SCI0CR2_RIE=1; PWM1_SetRatio16(0); PTJ_PTJ1=0; PTP_PTP7=0; clrReg8Bits(PWME, 0x80U); /* Run counter */ CPU_ENTER_STOP_MODE(); } } void Eventcode_deal(unsigned char Sig_LI0_MFL_Tastencode_1_E,unsigned char Sig_LI0_MFL_Tastencode_2_E) { // 静态变量,用于记录按键时长计数 static unsigned int Event_code1_count,Event_code2_count; if(Sig_LI0_MFL_Tastencode_1_E!=0) { Sig_LI0_MFL_Eventcode_1=1; if(Event_code1_count<=600) { Event_code1_count++; } if(Event_code1_count>=160 && Event_code1_count<400) { Sig_LI0_MFL_Eventcode_1=4; } else if(Event_code1_count>=400 && Event_code1_count<600) { Sig_LI0_MFL_Eventcode_1=5; } else if(Event_code1_count>=600) { Sig_LI0_MFL_Eventcode_1=6; } } else { Sig_LI0_MFL_Eventcode_1=0; Event_code1_count=0; } if(Sig_LI0_MFL_Tastencode_2_E!=0) { Sig_LI0_MFL_Eventcode_2=1; if(Event_code2_count<=600) { Event_code2_count++; } if(Event_code2_count>=160 && Event_code2_count<400) { Sig_LI0_MFL_Eventcode_2=4; } else if(Event_code2_count>=400 && Event_code2_count<600) { Sig_LI0_MFL_Eventcode_2=5; } else if(Event_code2_count>=600) { Sig_LI0_MFL_Eventcode_2=6; } } else { Sig_LI0_MFL_Eventcode_2=0; Event_code2_count=0; } } void Toggle_bit_deal(unsigned char Sig_LI0_MFL_Tastencode_1_E,unsigned char Sig_LI0_MFL_Tastencode_2_E) { if(Toggle_start==1) { Toggle_1s++; if(Toggle_1s%20==0) { Sig_LI0_MFL_Toggle=!Sig_LI0_MFL_Toggle; if(Toggle_1s==80) { Toggle_1s=0; } } } if(Toggle_start==2) { Toggle_1s++; if(Toggle_1s%20==0) { Sig_LI0_MFL_Toggle=!Sig_LI0_MFL_Toggle; if(Toggle_1s==100) { Toggle_1s=0; Toggle_start=0; } } } } void LIN_Short_to_12v_Protect(void) { static unsigned char LIN_Short_count,LIN_Short_recover_count; if(LP0IF_LPOCIF==1) { if(LIN_Short_count<=60) { LIN_Short_count++; LP0IF_LPOCIF=1; } } else { LIN_Short_recover_count++; if(LIN_Short_recover_count>=20) { LIN_Short_recover_count=0; LIN_Short_count=0; } } } //睡眠lin唤醒使能位 void LIN_STANDBY_Mode_wakeup_enable(void) { LP0CR_LPWUE=1;//在stop mode下,若lin接收到数据,则会在LPRXD产生一个上升沿 LP0CR_LPPUE=1;//选择上拉方式 } //进入停止模式 void CPU_ENTER_STOP_MODE(void) { asm ANDCC #0x7F; //clear S bit - enable the stop mode. If the S bit is not //cleared then STOP instruction has no effect and is //executed as a dummy instruction NOP. asm STOP; }