Arduino STM32F103C8+ST7735 1.8’'3D矢量图形demo  
  📌开源项目地址:https://github.com/cbm80amiga/ST7735_3d_filled_vector 🔧所需库:https://github.com/cbm80amiga/Arduino_ST7735_STM 🔖本开源工程基于Arduino开发平台,stm32f103C8T6,跑3D矢量图形。 ⚡例程和库是基于rogerclarkmelbourne固件平台使用的: https://github.com/rogerclarkmelbourne/arduino_stm32 📺显示效果: 🌿个人所使用的ST7735 1.8’’ 128X160屏幕:合宙1.8寸TFTLCD 分辨率128*160 驱动IC ST7735S SPI串口 🔰再次强调说明一次:本例程是基于rogerclarkmelbourne固件平台: https://github.com/rogerclarkmelbourne/arduino_stm32,如果使用https://github.com/stm32duino固件平台是无法通过编译的,依赖库是基于前者固件平台编写的。 LCD pin LCD pin name STM32 #01 LED/BL 3.3V #02 SCK PA5/SCK #03 SCA PA7/MOSI #04 A0/DC PA1 or any digital #05 RESET PA0 or any digital #06 CS PA2 or any digital #07 GND GND #08 VCC 3.3V 
 
 
   
# define  SCR_WD   128 # define  SCR_HT   160 # define  WD_3D    128 # define  HT_3D    128 # include  <SPI.h> # include  <Adafruit_GFX.h> # if  ( __STM32F1__)  # define  TFT_CS   PA2 # define  TFT_DC   PA1 # define  TFT_RST  PA0 # include  <Arduino_ST7735_STM.h> # else # define  TFT_CS  10 # define  TFT_DC   8 # define  TFT_RST  9 # endif =  Arduino_ST7735 ( TFT_DC,  TFT_RST,  TFT_CS) ; 
# define  BUTTON  PB9 int  buttonState; 
int  prevState =  HIGH; 
long  btDebounce    =  30 ; 
long  btMultiClick  =  600 ; 
long  btLongClick   =  500 ; 
long  btLongerClick =  2000 ; 
long  btTime =  0 ,  btTime2 =  0 ; 
int  clickCnt =  1 ; 
int  checkButton ( ) 
{ 
  int  state =  digitalRead ( BUTTON) ; 
  if (  state ==  LOW &&  prevState ==  HIGH )  {  btTime =  millis ( ) ;  prevState =  state;  return  0 ;  }  
  if (  state ==  HIGH &&  prevState ==  LOW )  {  
    prevState =  state; 
    if (  millis ( ) - btTime >=  btDebounce &&  millis ( ) - btTime <  btLongClick )  {  
      if (  millis ( ) - btTime2< btMultiClick )  clickCnt++ ;  else  clickCnt= 1 ; 
      btTime2 =  millis ( ) ; 
      return  clickCnt;  
    }  
  } 
  if (  state ==  LOW &&  millis ( ) - btTime >=  btLongerClick )  {  prevState =  state;  return  - 2 ;  } 
  if (  state ==  LOW &&  millis ( ) - btTime >=  btLongClick )  {  prevState =  state;  return  - 1 ;  } 
  return  0 ; 
} 
int  prevButtonState= 0 ; 
int  handleButton ( ) 
{ 
  prevButtonState =  buttonState; 
  buttonState =  checkButton ( ) ; 
  return  buttonState; 
} 
int  bgMode= 3 ; 
int  object= 1 ; 
int  bfCull= 1 ; 
# include  "pat2.h" # include  "pat7.h" # include  "pat8.h" # include  "gfx3d.h" void  setup ( )  
{ 
  Serial. begin ( 115200 ) ; 
  pinMode ( BUTTON,  INPUT_PULLUP) ; 
  lcd. init ( ) ; 
  lcd. fillScreen ( BLACK) ; 
  lcd. setTextColor ( YELLOW, BLACK) ; 
  initStars ( ) ; 
} 
unsigned  int  ms, msMin= 1000 , msMax= 0 ; 
char  txt[ 30 ] ; 
void  loop ( ) 
{ 
  handleButton ( ) ; 
  if ( buttonState< 0  &&  prevButtonState>= 0  &&  ++ bgMode> 4 )  bgMode= 0 ; 
  if ( buttonState> 0 )  { 
    if ( ++ object> 3 )  object= 0 ; 
    msMin= 1000 ; 
    msMax= 0 ; 
  } 
  switch ( object)  { 
    case  0 : 
      numVerts  =  numVerts1; 
      verts     =  ( int16_t * ) verts1; 
      numQuads  =  numQuads1; 
      quads     =  ( int16_t * ) quads1; 
      quadColor =  ( uint16_t * ) quadColor1; 
      bfCull    =  1 ; 
      break ; 
   case  1 : 
      numVerts  =  numVerts2; 
      verts     =  ( int16_t * ) verts2; 
      numQuads  =  numQuads2; 
      quads     =  ( int16_t * ) quads2; 
      quadColor =  ( uint16_t * ) quadColor2; 
      bfCull    =  1 ; 
      break ; 
   case  2 : 
   default : 
      numVerts  =  numVerts3; 
      verts     =  ( int16_t * ) verts3; 
      numQuads  =  numQuads3; 
      quads     =  ( int16_t * ) quads3; 
      quadColor =  ( uint16_t * ) quadColor3; 
      bfCull    =  1 ; 
      break ; 
   case  3 : 
      numVerts  =  numVerts4; 
      verts     =  ( int16_t * ) verts4; 
      numQuads  =  numQuads4; 
      quads     =  ( int16_t * ) quads4; 
      quadColor =  ( uint16_t * ) quadColor4; 
      bfCull    =  0 ; 
      break ; 
  } 
  ms= millis ( ) ; 
  render3D ( ) ; 
  ms= millis ( ) - ms; 
  if ( ms< msMin)  msMin= ms; 
  if ( ms> msMax)  msMax= ms; 
  snprintf ( txt, 30 , "%d ms     %d fps " , ms, 1000 / ms) ; 
  lcd. setTextColor ( YELLOW, BLACK) ;  lcd. setCursor ( 0 , SCR_HT- 28 ) ;  lcd. print ( txt) ; 
  snprintf ( txt, 30 , "%d-%d ms  %d-%d fps   " , msMin, msMax, 1000 / msMax, 1000 / msMin) ; 
  lcd. setTextColor ( GREEN, BLACK) ;  lcd. setCursor ( 0 , SCR_HT- 18 ) ;  lcd. print ( txt) ; 
  snprintf ( txt, 30 , "total/vis %d / %d   " , numQuads, numVisible) ; 
  lcd. setTextColor ( MAGENTA, BLACK) ;  lcd. setCursor ( 0 , SCR_HT- 8 ) ;  lcd. print ( txt) ; 
} 
🔖需要自行安装rogerclarkmelbourne固件平台: https://github.com/rogerclarkmelbourne/arduino_stm32 链接:https: 
提取码:0 h0t