上期我们简单的焊接好了我们的样板之后,当然现在还少了一个开关和PMOS,不过整体已经能用了,但是还还只是非常简陋的界面。

本期呢,我们移植U8g2图像库,话不多说看看效果,当然本期的源码也可以直接使用,在STM32F103C8T6

U8G2是一个用于嵌入式系统的图形库,特别适用于微控制器和单片机。这个库支持大量的显示屏,如OLED、LCD和ePaper显示屏,并且以其高效、易用和广泛兼容性而闻名。

  • 广泛的硬件支持
  • U8G2支持众多不同型号的显示屏,如SSD1306、SH1106、ST7920、UC1701等。这使得它在硬件选择上非常灵活。
  • 多种接口支持
  • U8G2可以通过I2C、SPI和并行接口与显示屏通信,兼容性极高。
  • 多种字体和图形功能
  • 提供了丰富的字体库,包括多种比例字体和符号字符。
  • 支持基本图形绘制功能,如点、线、矩形、圆形、多边形等。
  • 高效的内存管理
  • U8G2具有两种绘图模式:全缓冲和页面缓冲。全缓冲模式适用于内存充足的情况,而页面缓冲模式则适用于内存有限的嵌入式系统。
  • 广泛的微控制器支持
  • U8G2可以在各种微控制器平台上运行,如Arduino、STM32、ESP8266、ESP32、AVR等。
  • 开放源代码
  • U8G2是一个开源项目,可以自由获取和修改源代码,以适应特定项目需求。

本期我们主要的内容如下:

  • 移植OPT3001光强传感器的内容
  • 移植U8G2图像库
  • 精简化U8G2
  • 编写GUI代码

移植和精简化U8g2,这里不详细赘述了,网上有很多的教程 。

接着就是编写我们的GUI代码。


//进度条显示
void testDrawProcess(u8g2_t *u8g2)
{
  for(int i=10;i<=80;i=i+2)
  {
    u8g2_ClearBuffer(u8g2); 
      
    char buff[20];
    sprintf(buff,"%d%%",(int)(i/80.0*100));
    
    u8g2_SetFont(u8g2,u8g2_font_ncenB12_tf);
    u8g2_DrawStr(u8g2,16,32,"Lux meter");//字符显示
    
    u8g2_SetFont(u8g2,u8g2_font_ncenB08_tf);
    u8g2_DrawStr(u8g2,100,49,buff);//当前进度显示
    
    u8g2_DrawRBox(u8g2,16,40,i,10,4);//圆角填充框矩形框
    u8g2_DrawRFrame(u8g2,16,40,80,10,4);//圆角矩形
    if(i%10==0)
    {
      HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0<<(i/10-1));
    }
    u8g2_SendBuffer(u8g2);

  }
  HAL_Delay(250);
  HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_All);
  HAL_Delay(250);
  HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_All);
  HAL_Delay(250);
  HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_All);
}

首当其冲的是初始化界面,虽然这段内容是冗余的没有用,但是帅就完事了。


uint32_t Lux;

void MainGUI(u8g2_t *u8g2)
{
  
  int t = 1000;
  int x = 16;
  int y = 32;
  int w = 50;
  int h = 20;
  char buff[20];
  u8g2_SetFont(u8g2,u8g2_font_ncenB08_tf);
  u8g2_ClearBuffer(u8g2);
  u8g2_DrawStr(u8g2,5, 15, "Light Intensity");
  u8g2_DrawStr(u8g2,95, 15, "High");
  u8g2_DrawStr(u8g2,95, 60, "Low");
  u8g2_DrawRFrame(u8g2, 0, 0, 92, 23,6);
  B_LUX_40_GetLux(&Lux);
  u8g2_SetFont(u8g2, u8g2_font_ncenB12_tr); // 设置字体为 ncenB14


if(Lux<1000)
  {
    Level = 1;
  }
  else if(Lux < 7000)
  {
    Level = 2;
  }
  else if(Lux < 15000)
  {
    Level = 3;
  }
  else if(Lux <33000)
  {
    Level = 4;
  }
  else if(Lux <78000)
  {
    Level = 5;
  }


 else if(Lux <170000)
  {
    Level = 6;
  }
  else if(Lux <290000)
  {
    Level = 7;
  }
  else
  {
    Level = 8;
  }


   sprintf(buff,"%6.0luLux",(long)Lux);
  u8g2_DrawStr(u8g2,0,40,buff);
  sprintf(buff,"LeveL:%d",Level);
  u8g2_DrawStr(u8g2,7,60,buff);
  
  if(Level>=8)
  {
    u8g2_DrawBox(u8g2, 104, 21, 8, 5);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,1);
  
  }
  else
  {
    u8g2_DrawFrame(u8g2, 104, 21, 8, 5);
  }


 if(Level>=7 &&Level<8)
  {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,0);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6,1);
    u8g2_DrawBox(u8g2, 95, 24, 8, 5);  
  }
  else
  {
      u8g2_DrawFrame(u8g2, 95, 24, 8, 5);

  }
    if(Level>=6&&Level<7)
  {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7|GPIO_PIN_6,0);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5,1);
  u8g2_DrawBox(u8g2, 95, 29, 8, 5);  
  }


 else
  {
    
      u8g2_DrawFrame(u8g2, 95, 29, 8, 5);

  }
    if(Level>=5&&Level<6)
  {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4,1);
  u8g2_DrawBox(u8g2, 104, 32, 8, 5);  
  }
  else
  {
    
      u8g2_DrawFrame(u8g2, 104, 32, 8, 5);

  }


    if(Level>=4&&Level<5)
  {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,1);
      u8g2_DrawBox(u8g2, 113, 35, 8, 5);
  }
  else
  {
      u8g2_DrawFrame(u8g2, 113, 35, 8, 5);

  }


   if(Level>=3&&Level<4)
  {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7|GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3,0);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2,1);
      u8g2_DrawBox(u8g2, 113, 40, 8, 5);
  }
  else
  {
      u8g2_DrawFrame(u8g2, 113, 40, 8, 5);

  }
    if(Level>=2&&Level<3)
  {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0);
      HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0|GPIO_PIN_1,1);
    u8g2_DrawBox(u8g2, 104, 43, 8, 5);
  }
  else
  {
    u8g2_DrawFrame(u8g2, 104, 43, 8, 5);
  }


   if(Level>=1&&Level<2)
  {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6,0);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,1);
    u8g2_DrawBox(u8g2, 95, 45, 8, 5);
  }
  else
  {
    u8g2_DrawFrame(u8g2, 95, 45, 8, 5);
  }
}
















嘉立创PCB

还没有评论,抢个沙发!