int main(void) { /* USER CODE BEGIN 1 */ uint8_t damogranlabs_logo[]={ 0x0F, 0x13, 0x11, 0x11, 0x0e, 0x00, 0x00 }; /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ LCD_Init(2, 20); LCD_CreateChar(0, damogranlabs_logo); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ LCD_PrintString(2, 1, "n: "); LCD_PrintNumber(2, 4, -10); LCD_PrintString(2, 10, "f: "); LCD_PrintFloat(2, 13, -326.5635, 5); while (1) { LCD_PrintStringWindow(1, 3, 14, 350, "Find us on github and www.damogranlabs.com"); LCD_Clear(); LCD_PrintString(1, 1, "www.damogranlabs.com"); LCD_PutCustom(2, 10, 0); LCD_ClearArea(1, 5, 12); HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin); HAL_Delay(2000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }
/** * @brief Draw_Menu * @param Menu pointer for draw * @retval None */ void Draw_Menu(Menu_Struct_TypeDef *Menu) { uint8_t i; /* если для меню нужно установить ограничение по отрисовке */ if(Menu->Clip == ENABLE) { /* устанавливаем ограничения для отрисовки */ Set_New_ClipObject(Menu->Coord[0], Menu->Coord[1], Menu->Coord[2], Menu->Coord[3], IN_OBJECT, Menu->ClipObjIndx); LCD_ClearArea(Menu->Coord[0] + 2, Menu->Coord[1] + 2, Menu->Coord[2] - 2, Menu->Coord[3] - 2, Active_BackColor); Update_Oscillogram(); /* обновлем осциллограммы, для того что бы они "обрезались" по размерам отсечения */ } /* If not (void*)0 */ if(Menu->MenuCallBack != (void*)0) Menu->MenuCallBack(DRAW); /* отрисовываем кнопки */ for(i = 0; i <= Menu->MaxButton; i++) { LCD_DrawButton(Menu->Buttons[i], NO_activeButton); } if(Menu == pMenu) // если отрисовываемое меню активно тогда отрисовываем активной стартовую кнопку { setActiveButton(Menu->Buttons[Menu->Indx]); LCD_DrawButton(btn, activeButton); } }
/******************************************************************************* * Function Name : ShowMessage * Description : * Input : *Text * Return : None *******************************************************************************/ void Show_Message(char *Text) { /* */ if(TriggShowInfo.Status == DISABLE){ gMessage.Coord[1] = 206; gMessage.Coord[3] = 220; } else{ gMessage.Coord[1] = 186; gMessage.Coord[3] = 200; } /* Clear if another message now displayed */ if(gMessage.Visible == TRUE) Clear_Message(); /* Reset X1 coordinate */ gMessage.Coord[2] = gMessage.Coord[0]; memcpy(&chMessage[0], Text, strlen(Text)); /* Width message text */ LCD_Strig_PointsWidht((uint16_t*)&gMessage.Coord[2], gMessage.Text); /* устанавливаем ограничения для отрисовки */ Set_New_ClipObject(leftLimit + 1, gMessage.Coord[1], gMessage.Coord[2], gMessage.Coord[3], IN_OBJECT, Message_ClipObj); Update_Oscillogram(); // обновлем осциллограммы, для того что бы они "обрезались" по размерам отсечения /* Print message */ LCD_ClearArea(leftLimit + 1, gMessage.Coord[1], gMessage.Coord[2] + 5, gMessage.Coord[3], Active_BackColor); LCD_PutColorStrig(gMessage.Coord[0], gMessage.Coord[1], 1, gMessage.Text, gMessage.Color); gMessage.TimeOFF = RTC_GetCounter(); gMessage.TimeOFF += gMessage.TimeShow; gMessage.Visible = TRUE; }
/******************************************************************************* * Function Name : FrequencyMeas_Draw * Description : * Input : * Return : None *******************************************************************************/ void FrequencyMeas_Draw(Boolean NewState) { uint16_t X0 = rightLimit - 61, Y0 = upperLimit - 33; uint16_t X1 = rightLimit - 1, Y1 = upperLimit - 6; if(gOSC_MODE.autoMeasurments != OFF) return; if((NewState == TRUE) && (ActiveMode != &IntMIN_MAX)) { /* устанавливаем ограничения для отрисовки */ if(Set_New_ClipObject(X0 - 1, Y0, X1, Y1 + 1, IN_OBJECT, ShowFreq_ClipObj) != ERROR) { Update_Oscillogram(); // обновлем осциллограммы, для того что бы они "обрезались" по размерам отсечения Reset_Calc_Show_Freq(); LCD_SetGraphicsColor(StillBlue); LCD_DrawFillRect(X0, Y0, X1, Y1, 0, 0); } } else { /* Clear */ if(Clear_ClipObject(ShowFreq_ClipObj) != ERROR) { LCD_ClearArea(X0, Y0, X1, Y1, Active_BackColor); LCD_DrawGrid(&activeAreaGrid, DRAW); /* перерисовываем сетку в области осциллограмм */ Update_Oscillogram(); /* обновлем осциллограммы */ } } gShowFFTFreq = NewState; }
/******************************************************************************* * Function Name : ShowMessage * Description : * Input : *Text * Return : None *******************************************************************************/ void Clear_Message(void) { /* Clear */ LCD_ClearArea(leftLimit + 1, gMessage.Coord[1], gMessage.Coord[2] + 5, gMessage.Coord[3], Active_BackColor); Clear_ClipObject(Message_ClipObj); /* убираем ограничения для отрисовки */ LCD_DrawGrid(&activeAreaGrid, DRAW); /* перерисовываем сетку в области осциллограмм */ Update_Oscillogram(); /* обновлем осциллограммы */ memset(&chMessage[0], 0, 50); gMessage.TimeOFF = 0; gMessage.Visible = FALSE; }
/******************************************************************************* * Function Name : Draw_Quick_Menu_Buttons * Description : Функция включения/выключения меню * Input : DRAW/CLEAR - нарисовать/очистить * Return : None *******************************************************************************/ void Clear_Menu(Menu_Struct_TypeDef *Menu) { /* Clear menu clip object and other */ if(Menu->Clip == ENABLE) { LCD_ClearArea(Menu->Coord[0], Menu->Coord[1], Menu->Coord[2], Menu->Coord[3], Active_BackColor); Clear_ClipObject(Menu->ClipObjIndx); LCD_DrawGrid(&activeAreaGrid, DRAW); Update_Oscillogram(); } if(Menu->MenuCallBack != (void*)0) Menu->MenuCallBack(CLEAR); }