#include #include #include #include #include "Nano100Series.h" #include "adc.h" #include "gpio.h" #include "pwm.h" #include "timer.h" #include "uart.h" #include "sys.h" #include "clk.h" #include "EEPROM_Emulate.h" #include "My_define.h" void Initial_Signal(); void Disp_Segdata(uint8_t Sel, uint8_t digit4, uint8_t digit3, uint8_t digit2, uint8_t digit1); void Led_OnOff(uint8_t kind, uint8_t onoff); uint8_t Font_Data[18]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67,\ 0x80, 0x58, 0x79, 0x40, 0x00, 0x50, 0x77, 0x5E }; // . , c , E , - , ' ' , r , A , d uint8_t seg_data[4][14]; #define A_DATA PA4 #define A_CLK PA3 #define A_STB PA2 #define B_DATA PA13 #define B_CLK PA14 #define B_STB PA15 #define C_DATA PC9 #define C_CLK PC10 #define C_STB PC11 #define D_DATA PD15 #define D_CLK PD14 #define D_STB PD7 void Initial_Signal() { uint8_t i; A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1; A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1; for(i=0; i<8; i++) //command 1 (#0000_0001B) -> 5grid 8seg { A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0; A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0; if(i==0) { A_DATA = 1;B_DATA = 1;C_DATA = 1;D_DATA = 1; } else { A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0; } A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1; } A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1; for(i=0; i<8; i++) //command 2 (#0100_0000B) { A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0; A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0; if(i==6) { A_DATA = 1;B_DATA = 1;C_DATA = 1;D_DATA = 1; } else { A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0; } A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1; } A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1; for(i=0; i<8; i++) //command 3 (#1100_0000B) { A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0; A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0; if(i==6 || i==7) { A_DATA = 1;B_DATA = 1;C_DATA = 1;D_DATA = 1; } else { A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0; } A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1; } // A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1; for(i=0; i<112; i++) //data { A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0; A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0; A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0; A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1; } A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1; for(i=0; i<8; i++) //command 4 (#1000_0100B) { A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0; A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0; if(i==3 || i==7) { A_DATA = 1;B_DATA = 1;C_DATA = 1;D_DATA = 1; } else { A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0; } A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1; } A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1; } uint16_t one_sec = 0; extern uint8_t Tmperature_Error; void Disp_Segdata(uint8_t Sel, uint8_t digit4, uint8_t digit3, uint8_t digit2, uint8_t digit1) { seg_data[Sel][0] = Font_Data[digit4]; seg_data[Sel][1] = Font_Data[digit4]>>3; seg_data[Sel][2] = Font_Data[digit3]; seg_data[Sel][3] = Font_Data[digit3]>>3; seg_data[Sel][4] = Font_Data[digit2]; seg_data[Sel][5] = Font_Data[digit2]>>3; seg_data[Sel][6] = Font_Data[digit1]; seg_data[Sel][7] = Font_Data[digit1]>>3; } enum{ K_VENT, K_AUTO, K_AIR, K_WIND1, K_WIND2, K_WIND3, K_WIND4, K_WIND5, K_PM25_1, K_PM25_2, K_PM25_4, K_PM25_3, K_PM10_1, K_PM10_2, K_PM10_4, K_PM10_3, K_TIME_1, K_TIME_4, K_TIME_8, K_LOCK, K_JUMKEOM, K_FILTER_CLEAN, K_FILTER_CHANGE, K_EXTRA1, K_CO2_1, K_CO2_2, K_CO2_4, K_CO2_3, K_SOJA_CLEAN, K_SOJA_CHANGE, K_IOT, K_EXTRA2, }; void Led_OnOff(uint8_t kind, uint8_t onoff) { if(onoff == 1) { if(kind < 6) { seg_data[3][0] |= 0x01<= 1)&&(Test_Mode_Step <= 5)) // vent { Led_OnOff(K_VENT, 1); Tmp_Speed = Test_Mode_Step-1; if(Test_Mode_Sa_Ea_Sel == 0) { Disp_Segdata(0, 14, 5, 16, 14); // " SA " Num_10 = Ventilation_SA[Tmp_Speed]%100/10; Num_1 = Ventilation_SA[Tmp_Speed]%10; Disp_Segdata(1, 14, 14, Num_10, Num_1); Num_1000 = (uint8_t)(SA_rpm%10000/1000); Num_100 = (uint8_t)(SA_rpm%1000/100); Num_10 = (uint8_t)(SA_rpm%100/10); Num_1 = (uint8_t)(SA_rpm%10); Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1); } else { Disp_Segdata(0, 14, 12, 16, 14); // " EA " Num_10 = Ventilation_EA[Tmp_Speed]%100/10; Num_1 = Ventilation_EA[Tmp_Speed]%10; Disp_Segdata(1, 14, 14, Num_10, Num_1); Num_1000 = (uint8_t)(EA_rpm%10000/1000); Num_100 = (uint8_t)(EA_rpm%1000/100); Num_10 = (uint8_t)(EA_rpm%100/10); Num_1 = (uint8_t)(EA_rpm%10); Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1); } } else if((Test_Mode_Step >= 6)&&(Test_Mode_Step <= 10)) // air { Led_OnOff(K_AIR, 1); Tmp_Speed = Test_Mode_Step-6; if(Test_Mode_Sa_Ea_Sel == 0) { Disp_Segdata(0, 14, 5, 16, 14); // " SA " Num_10 = AirClean_SA[Tmp_Speed]%100/10; Num_1 = AirClean_SA[Tmp_Speed]%10; Disp_Segdata(1, 14, 14, Num_10, Num_1); Num_1000 = (uint8_t)(SA_rpm%10000/1000); Num_100 = (uint8_t)(SA_rpm%1000/100); Num_10 = (uint8_t)(SA_rpm%100/10); Num_1 = (uint8_t)(SA_rpm%10); Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1); } else { Disp_Segdata(0, 14, 12, 16, 14); // " EA " Num_10 = AirClean_EA[Tmp_Speed]%100/10; Num_1 = AirClean_EA[Tmp_Speed]%10; Disp_Segdata(1, 14, 14, Num_10, Num_1); Num_1000 = (uint8_t)(EA_rpm%10000/1000); Num_100 = (uint8_t)(EA_rpm%1000/100); Num_10 = (uint8_t)(EA_rpm%100/10); Num_1 = (uint8_t)(EA_rpm%10); Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1); } } switch(Test_Mode_Step) { case 1: case 6: case 11: Led_OnOff(K_WIND1, 1); break; case 2: case 7: case 12: Led_OnOff(K_WIND2, 1); break; case 3: case 8: case 13: Led_OnOff(K_WIND3, 1); break; case 4: case 9: case 14: Led_OnOff(K_WIND4, 1); break; case 5: case 10: case 15: Led_OnOff(K_WIND5, 1); break; case 16: Disp_Segdata(0, 14, 1, 17, 14); // " Id " Num_10 = Main_Modbus_ID%100/10; Num_1 = Main_Modbus_ID%10; Disp_Segdata(1, 14, 14, Num_10, Num_1); break; case 0x11: if(Main_BxD_FW_Version[1] == 'J')Num_1000 = 18; //J else if(Main_BxD_FW_Version[1] == 'I')Num_1000 = 1; //I else Num_1000 = 13; //- Num_10 = Main_BxD_FW_Version[2]/10; Num_1 = Main_BxD_FW_Version[2]%10; Disp_Segdata(0, Num_1000, 13, Num_10, Num_1); // " J- " 메인 버전 Num_10 = ROOMCON_FW_VERSION/10; Num_1 = ROOMCON_FW_VERSION%10; Disp_Segdata(1, 1, 13, Num_10, Num_1); // " I- " 룸콘 버전 Num_10 = Sensor_BxD_Version/10; Num_1 = Sensor_BxD_Version%10; Disp_Segdata(2, 5, 13, Num_10, Num_1); // " S- " 센서보드 버전 break; default: break; } return; } //////////////////////////////////////////////////////////////// Led_OnOff(100, 0); // all off if(Wifi_Status == 1) // connect { Led_OnOff(K_IOT, 1); } else if(Wifi_Status == 2) // wait slow { Led_OnOff(K_IOT, Blink_Toggle); } else if(Wifi_Status == 3) // fast { Led_OnOff(K_IOT, FastBlink_Toggle); } else // dis connect { Led_OnOff(K_IOT, 0); } Err = Main_Err_Code&(ERROR_FILTER_CLEAN|ERROR_FILTER_CHANGE|ERROR_SOJA_CHANGE|ERROR_SA|ERROR_EA|ERROR_TEMP|ERROR_CO2|ERROR_DUST|ERROR_IN_COM); if(Err)Led_OnOff(K_JUMKEOM, 1); //////////////////////////////////////////////////////////////// if(Power_On == 0) { Disp_Segdata(0, 14, 14, 14, 14); // ALL OFF Disp_Segdata(1, 14, 14, 14, 14); // ALL OFF Disp_Segdata(2, 14, 14, 14, 14); // ALL OFF if(Main_Err_Code)Led_OnOff(K_JUMKEOM, 1); if(Main_Err_Code&ERROR_FILTER_CLEAN) { Led_OnOff(K_FILTER_CLEAN, 1); Led_OnOff(K_SOJA_CLEAN, 1); } else if(Main_Err_Code&ERROR_FILTER_CHANGE) { Led_OnOff(K_FILTER_CHANGE, 1); } else if(Main_Err_Code&ERROR_SOJA_CHANGE) { Led_OnOff(K_SOJA_CHANGE, 1); } else if(Main_Err_Code&ERROR_SA) { Disp_Segdata(1, 12, 13, 0, 9); // E-09 } else if(Main_Err_Code&ERROR_EA) { Disp_Segdata(1, 12, 13, 1, 0); // E-10 } else if(Main_Err_Code&ERROR_TEMP) { Disp_Segdata(1, 12, 13, 0, 2); // E-02 } else if(Main_Err_Code&ERROR_HUMI) { ; } else if(Main_Err_Code&ERROR_TVOC) { ; } else if(Main_Err_Code&ERROR_CO2) { Disp_Segdata(1, 12, 13, 0, 6); // E-06 } else if(Main_Err_Code&ERROR_DUST) { Disp_Segdata(1, 12, 13, 1, 8); // E-08 } else if(Main_Err_Code&ERROR_IN_COM) { Disp_Segdata(1, 12, 13, 0, 7); // E-07 } return; } Num_1000= Num_100= Num_10= Num_1= 14; // blank if(CO2_Value>=1000)Num_1000 = CO2_Value%10000/1000; if(CO2_Value>=100)Num_100 = CO2_Value%1000/100; if(CO2_Value>=10)Num_10 = CO2_Value%100/10; Num_1 = CO2_Value%10; Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1); Num_1000= Num_100= Num_10= Num_1= 14; // blank if(Pm_10_value>=1000)Num_1000 = Pm_10_value%10000/1000; if(Pm_10_value>=100)Num_100 = Pm_10_value%1000/100; if(Pm_10_value>=10)Num_10 = Pm_10_value%100/10; Num_1 = Pm_10_value%10; Disp_Segdata(1, Num_1000, Num_100, Num_10, Num_1); Num_1000= Num_100= Num_10= Num_1= 14; // blank if(Pm_2_5_value>=1000)Num_1000 = Pm_2_5_value%10000/1000; if(Pm_2_5_value>=100)Num_100 = Pm_2_5_value%1000/100; if(Pm_2_5_value>=10)Num_10 = Pm_2_5_value%100/10; Num_1 = Pm_2_5_value%10; Disp_Segdata(0, Num_1000, Num_100, Num_10, Num_1); switch(CO2_quality) { case 0x00: Led_OnOff(K_CO2_1, 1);break; case 0x01: Led_OnOff(K_CO2_2, 1);break; case 0x02: Led_OnOff(K_CO2_3, 1);break; case 0x04: default: Led_OnOff(K_CO2_3, 1); Led_OnOff(K_CO2_4, 1); break; } switch(PM2_5_quality) { case 0x00: Led_OnOff(K_PM25_1, 1);break; case 0x01: Led_OnOff(K_PM25_2, 1); break; case 0x02: Led_OnOff(K_PM25_3, 1); break; case 0x04: default: Led_OnOff(K_PM25_3, 1); Led_OnOff(K_PM25_4, 1); break; } switch(PM10_quality) { case 0: Led_OnOff(K_PM10_1, 1); break; case 0x01: Led_OnOff(K_PM10_2, 1); break; case 0x02: Led_OnOff(K_PM10_3, 1); break; case 0x04: default: Led_OnOff(K_PM10_3, 1); Led_OnOff(K_PM10_4, 1); break; } switch(Tx_Run_Mode) { case MODE_VENT: Led_OnOff(K_VENT, 1); break; case MODE_AUTO: Led_OnOff(K_AUTO, 1);break; case MODE_AIR_CLEAN: Led_OnOff(K_AIR, 1); break; default: break; } switch(Tx_Fan_Speed) { case 1: Led_OnOff(K_WIND1, 1);break; case 2: Led_OnOff(K_WIND2, 1);break; case 3: Led_OnOff(K_WIND3, 1);break; case 4: Led_OnOff(K_WIND4, 1);break; case 5: Led_OnOff(K_WIND5, 1);break; default: break; } switch(Tx_Reservation_Hour) { case 1: case 2: case 3: Led_OnOff(K_TIME_1, 1); break; case 4: case 5: case 6: case 7: Led_OnOff(K_TIME_4, 1); break; case 8: Led_OnOff(K_TIME_8, 1); break; default: break; } Led_OnOff(K_LOCK, Kids_Lock); } uint8_t Sel_Pos = 0; void Display_process(void) { switch(Sel_Pos) { case 0: Make_A(); Sel_Pos++; break; case 1: Make_B(); Sel_Pos++; break; case 2: Make_C(); Sel_Pos++; break; case 3: default: Make_D(); Sel_Pos = 0; break; } }