uint8_t gui_draw_list() { if(gui_CurList == 0) return 0; SSD1306_DrawFilledRectangle(gui_CurList->x, gui_CurList->y, gui_CurList->w, gui_CurList->h, 0); SSD1306_DrawRectangle(gui_CurList->x, gui_CurList->y, gui_CurList->w, gui_CurList->h, 1); uint8_t ry = gui_CurList->y + 2; if(gui_CurList->header != 0) { gui_text(gui_CurList->header, gui_CurList->x + 1, gui_CurList->y, 1); ry += GUI_DefFont.FontHeight; } uint8_t maxC = ((gui_CurList->h - 3) / GUI_DefFont.FontHeight) - (gui_CurList->header != 0); uint16_t i; if(maxC >= gui_CurList->ItemsCount) { for(i = 0; i < gui_CurList->ItemsCount; i++) { if(i != gui_CurList->selectedItem) gui_lable(gui_CurList->items[i].text, gui_CurList->x + 1, ry + i*GUI_DefFont.FontHeight, gui_CurList->w - 3, GUI_DefFont.FontHeight, 0, 0); else { gui_lable(gui_CurList->items[i].getScrollOffset(), gui_CurList->x +1 , ry + i*GUI_DefFont.FontHeight, gui_CurList->w - 3, GUI_DefFont.FontHeight, 1, 0); } } } else { if(gui_CurList->ItemsCount - 1 - gui_CurList->selectedItem < maxC / 2) { for(i = gui_CurList->ItemsCount - maxC; i < gui_CurList->ItemsCount; i++) { if(i != gui_CurList->selectedItem) gui_lable(gui_CurList->items[i].text, gui_CurList->x + 1, ry + (i - gui_CurList->ItemsCount + maxC)*GUI_DefFont.FontHeight, gui_CurList->w - 3, GUI_DefFont.FontHeight, 0, 0); else gui_lable(gui_CurList->items[i].getScrollOffset(), gui_CurList->x + 1, ry + (i - gui_CurList->ItemsCount + maxC)*GUI_DefFont.FontHeight, gui_CurList->w - 3, GUI_DefFont.FontHeight, 1, 0); } } else if(gui_CurList->selectedItem < maxC / 2) { for(i = 0; i < maxC; i++) { if(i != gui_CurList->selectedItem) gui_lable(gui_CurList->items[i].text, gui_CurList->x + 1, ry + i*GUI_DefFont.FontHeight, gui_CurList->w - 3, GUI_DefFont.FontHeight, 0, 0); else gui_lable(gui_CurList->items[i].getScrollOffset(), gui_CurList->x + 1, ry + i*GUI_DefFont.FontHeight, gui_CurList->w - 3, GUI_DefFont.FontHeight, 1, 0); } } else { for(i = gui_CurList->selectedItem - maxC/2; i < gui_CurList->selectedItem - maxC/2 + maxC; i++) { if(i != gui_CurList->selectedItem) gui_lable(gui_CurList->items[i].text, gui_CurList->x + 1, ry + (i - gui_CurList->selectedItem + maxC/2)*GUI_DefFont.FontHeight, gui_CurList->w - 3, GUI_DefFont.FontHeight, 0, 0); else gui_lable(gui_CurList->items[i].getScrollOffset(), gui_CurList->x + 1, ry + (i - gui_CurList->selectedItem + maxC/2)*GUI_DefFont.FontHeight, gui_CurList->w - 3, GUI_DefFont.FontHeight, 1, 0); } } } uint8_t sli_h = gui_CurList->h / gui_CurList->ItemsCount; if(sli_h < 10) sli_h = 10; uint8_t yy = ((gui_CurList->h) * gui_CurList->selectedItem) / gui_CurList->ItemsCount; SSD1306_DrawLine(gui_CurList->x, ry - 2, gui_CurList->x + gui_CurList->w, ry - 2, 1); SSD1306_DrawLine(gui_CurList->x + gui_CurList->w - 1, gui_CurList->y + yy, gui_CurList->x + gui_CurList->w - 1, gui_CurList->y + yy + sli_h, 1); return 0; }
int main(void) { /* USER CODE BEGIN 1 */ /* 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_I2C1_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ uint8_t res = SSD1306_Init(); printf("OLED init: %d\n", res); SSD1306_GotoXY(10,27); SSD1306_Puts("OLED inited", &Font_7x10, 1); SSD1306_GotoXY(10,52); SSD1306_Puts("Lutsai Alexander", &Font_7x10, 1); SSD1306_UpdateScreen(); //display HAL_Delay(1000); SSD1306_Fill(0); //clear oled int y1 = 64, y2 = 0; while(y1 > 0) { SSD1306_DrawLine(0, y1, 128, y2, 1); SSD1306_UpdateScreen(); y1 -= 2; y2 += 2; } HAL_Delay(1000); SSD1306_Fill(1); //clear oled SSD1306_UpdateScreen(); SSD1306_DrawCircle(64, 32, 25, 0); SSD1306_UpdateScreen(); SSD1306_DrawCircle(128, 32, 25, 0); SSD1306_UpdateScreen(); SSD1306_DrawCircle(0, 32, 25, 0); SSD1306_UpdateScreen(); SSD1306_DrawCircle(32, 32, 25, 0); SSD1306_UpdateScreen(); SSD1306_DrawCircle(96, 32, 25, 0); SSD1306_UpdateScreen(); HAL_Delay(1000); SSD1306_Fill(0); //clear oled SSD1306_UpdateScreen(); int32_t i = -100; char buf[10]; while(i<=100) { memset(&buf[0], 0, sizeof(buf)); sprintf(buf, "%d", i); SSD1306_GotoXY(50,27); SSD1306_Puts(buf, &Font_7x10, 1); SSD1306_DrawLine(64, 10, (i+100)*128/200, (i+100)*64/200, 1); SSD1306_UpdateScreen(); SSD1306_Fill(0); //clear oled i++; } SSD1306_GotoXY(50,27); sprintf(buf, "END"); SSD1306_Puts(buf, &Font_7x10, 1); SSD1306_GotoXY(10,52); SSD1306_Puts("Lutsai Alexander", &Font_7x10, 1); SSD1306_UpdateScreen(); SSD1306_Fill(0); //clear oled HAL_Delay(1000); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ uint32_t lst = 0, cu; while (1) { /* USER CODE END WHILE */ cu = HAL_GetTick(); SSD1306_GotoXY(30,27); sprintf(buf, "fps: %f", 1000.0 / (double)(cu - lst)); SSD1306_Puts(buf, &Font_7x10, 1); SSD1306_GotoXY(7,52); SSD1306_Puts("Lutsai Alexander", &Font_7x10, 1); SSD1306_UpdateScreen(); SSD1306_Fill(0); //clear oled lst = cu; /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }