示例#1
0
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;
}
示例#2
0
文件: main.c 项目: RaJah86/stm32libs
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 */

}