#include "my.h" #include "main.h" #include "stm32f4xx_hal.h" #include "struct.h" #include "ssd1306.h" extern UserData_TypeDef currentData; extern uint16_t correctedKu[13]; extern float kNormToDAC; static int pulseTime; static bool isHiden; char pString[16] = {0}; //Нужна для FloatToASCII void setDAC(void); void sh_applysetting(UserData_TypeDef * currentData){ sh_SetOutGain(currentData->IKU); sh_SetFvch(currentData->IFV); sh_SetFnch(currentData->IFN); sh_SetPlavZeml(currentData->IPZ); setDAC(); } void sh_SetOutGain(uint16_t IKU){ switch (IKU){ case Ku0_1: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET); break; case Ku0_2: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET); break; case Ku0_5: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET); break; case Ku1: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin,GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET); break; /*HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET);//варик для проверки HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET);*/ case Ku2: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET); break; case Ku5: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_RESET); break; case Ku10: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET); /*HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET);*/ break; case Ku20: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET); break; case Ku50: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET); break; case Ku100: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET); /* HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin,GPIO_PIN_RESET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin,GPIO_PIN_RESET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET); */ break; case Ku200: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET); break; case Ku500: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET); break; case Ku1000: HAL_GPIO_WritePin(A0_GPIO_Port, A0_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A1_GPIO_Port, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A4_GPIO_Port, A4_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A5_GPIO_Port, A5_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(K10_GPIO_Port, K10_Pin, GPIO_PIN_SET); break; } }; void sh_SetFvch(uint16_t IFV){ //DA9 IA2 IA3 switch (IFV){ case Hp0_2: HAL_GPIO_WritePin(A2_GPIO_Port, A2_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A3_GPIO_Port, A3_Pin, GPIO_PIN_RESET); break; case Hp1: HAL_GPIO_WritePin(A2_GPIO_Port, A2_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A3_GPIO_Port, A3_Pin, GPIO_PIN_RESET); break; case Hp2: HAL_GPIO_WritePin(A2_GPIO_Port, A2_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A3_GPIO_Port, A3_Pin, GPIO_PIN_SET); break; case Hp10: HAL_GPIO_WritePin(A2_GPIO_Port, A2_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A3_GPIO_Port, A3_Pin, GPIO_PIN_SET); break; } }; void sh_SetFnch(uint16_t IFN){ // IA6 IA7 IA8 //{0.1, 0.3, 1, 3, 10, 30, 100}; //Lp100, Lp300, Lp1000, Lp3000, Lp10000, Lp30000, Lp100000 switch (IFN){ case Lp100: HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_RESET); break; case Lp300: HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_RESET); break; case Lp1000: HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_RESET); break; case Lp3000: HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_RESET); break; case Lp10000: HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_SET); break; case Lp30000: HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_SET); break; case Lp100000: HAL_GPIO_WritePin(A6_GPIO_Port, A6_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(A7_GPIO_Port, A7_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(A8_GPIO_Port, A8_Pin, GPIO_PIN_SET); break; } }; void sh_SetPlavZeml(uint16_t IPZ){ if(IPZ==1){ HAL_GPIO_WritePin(PZ_GPIO_Port, PZ_Pin, GPIO_PIN_RESET);} else if(IPZ==0){ HAL_GPIO_WritePin(PZ_GPIO_Port, PZ_Pin, GPIO_PIN_SET);} }; void setDAC(void){ uint16_t DVD=0; setOffsetKuDisplay(); //todo:Костыль!! нужно поработать над архитектурой, а не считать как придется DVD = correctedKu[currentData.IKU]/kNormToDAC; // Делим кореектированный множитель на коэфициент WRDAC(DVD); //todo: делим uint на float - надеюсь заработает } void WRDAC(uint16_t DVD) { uint8_t i; uint16_t dvd = DVD; dvd <<= 4; for(i = 0; i < 12; i++) { if(dvd & 0x8000) HAL_GPIO_WritePin(STD_GPIO_Port, STD_Pin, GPIO_PIN_SET); else HAL_GPIO_WritePin(STD_GPIO_Port, STD_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(SCK_GPIO_Port, SCK_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(SCK_GPIO_Port, SCK_Pin, GPIO_PIN_SET); dvd <<= 1; } HAL_GPIO_WritePin(FL_GPIO_Port, FL_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(FL_GPIO_Port, FL_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(STD_GPIO_Port, STD_Pin, GPIO_PIN_SET); } void DrawSome(int16_t some, uint8_t x, uint8_t y, uint8_t mode){ //отрисовываем int или char if (some<10) OLED_DrawNum(some, x, y, mode); // else if(some>=10&&some<=15) OLED_DrawChar((some+55), x, y, mode); //отображаем как HEX todo: проверь else OLED_DrawChar(some, x, y, mode); } void PulseDrawSome(int16_t some, uint8_t x, uint8_t y, uint8_t mode){ //Моргаем надписью //static int pulseTime; //static bool isHiden; if(!pulseTime) pulseTime=HAL_GetTick()+10; //ты у именя первый if(pulseTime0; i--){;} /// пока что вместо антидребезга ////// } while((dreb > 0) && (dreb < 3)); if(!key) //если кнопки отпущены { first = 1; //достоверно кнопки отпущены return 0; //вернуть 0 } else //иначе { if(first) //определить кнопку { //только один раз first = 0; //за нажатие repeat = rep = 32; return key; //вернуть в главную функцию состояние клавиатуры } else { if(repeat) return 0; //имитация свободной клавиатуры else { if(rep > 0) rep >>= 1; else rep = 32; repeat = rep; //if(key == KEY_RESET_Pin) return 0; return key; } } } } char* FloatToASCII(float Val, int32_t RoundTo) { uint8_t idx = 0; int32_t i; float value, F, I; uint32_t rnd = 0; uint32_t Tmp32 = 0; uint32_t Int32 = 0; uint32_t Frac32 = 0; uint32_t _I32 = 0; uint32_t _F32 = 0; uint32_t d = 0, dd = 0; char tmparray[32]; volatile bool minus = false; memset(tmparray, 0, 32); memset(pString, 0, 16); value = Val; if(value < 0) minus = true; if((Val >= 10000.00000f)/* || (Val <= 0)*/) { if(Val <= 0) { pString[0] = '0'; pString[1] = '~'; pString[2] = '0'; pString[3] = '\0'; } else { pString[0] = '1'; pString[1] = '0'; pString[2] = '0'; pString[3] = '0'; pString[4] = '0'; pString[5] = '\0'; } return pString; } value = ABS(Val); rnd = ABS(RoundTo); if(RoundTo < 0) { F = modff(value, &I); while(rnd) { F *= 10.0f; rnd--; d++; } F = roundf(F); dd = 1; for(i = 0; i < d; i++) dd *= 10; if((uint32_t) F == dd) { F = 0; I += 1; } } else { I = roundf(value); F = 0.0f; } Int32 = (uint32_t) I; Frac32 = (uint32_t) F; _I32 = Int32; _F32 = Frac32; idx = 0; tmparray[idx++] = '\0'; if((Int32 == 0) && (Frac32 == 0)) { if(RoundTo < 0) { for(i = 0; i < abs(RoundTo); i++) tmparray[idx++] = '0'; tmparray[idx++] = '~'; } tmparray[idx++] = '0'; } else { if(RoundTo < 0) { for(i = 0; i < abs(RoundTo); i++) { Tmp32 = Frac32; Frac32 /= 10; Tmp32 = Tmp32 - Frac32 * 10; tmparray[idx++] = '0' + Tmp32; } tmparray[idx++] = '~'; } if(Int32 != 0) { while(Int32) { Tmp32 = Int32; Int32 /= 10; Tmp32 = Tmp32 - Int32 * 10; tmparray[idx++] = '0' + Tmp32; } } else tmparray[idx++] = '0'; if(minus) { if((_I32 != 0) || (_F32 != 0)) tmparray[idx++] = '-'; } } for(i = 0; i < idx; i++) pString[i] = tmparray[idx - i - 1]; return pString; }