• stm32 st7735驱动 详解


    初始化指令

    1. void LCD_Init(void)
    2. {
    3. #if USE_SIM_SPI
    4. LCD_SIM_SPI_GPIO_Init();
    5. #endif
    6. LCD_RES_0();//复位
    7. HAL_Delay(100);
    8. LCD_RES_1();
    9. HAL_Delay(100);
    10. LCD_BLK_1();//打开背光
    11. HAL_Delay(100);
    12. //************* Start Initial Sequence **********//
    13. LCD_SPI_Send_Cmd(0x11); //Sleep out
    14. HAL_Delay(120); //Delay 120ms
    15. //------------------------------------ST7735S 帧率设置-----------------------------------------//
    16. LCD_SPI_Send_Cmd(0xB1);
    17. LCD_SPI_Send_Data_8(0x01);
    18. LCD_SPI_Send_Data_8(0x2C);
    19. LCD_SPI_Send_Data_8(0x2D);
    20. LCD_SPI_Send_Cmd(0xB2);
    21. LCD_SPI_Send_Data_8(0x01);
    22. LCD_SPI_Send_Data_8(0x2C);
    23. LCD_SPI_Send_Data_8(0x2D);
    24. LCD_SPI_Send_Cmd(0xB3);
    25. LCD_SPI_Send_Data_8(0x01);
    26. LCD_SPI_Send_Data_8(0x2C);
    27. LCD_SPI_Send_Data_8(0x2D);
    28. LCD_SPI_Send_Data_8(0x01);
    29. LCD_SPI_Send_Data_8(0x2C);
    30. LCD_SPI_Send_Data_8(0x2D);
    31. //------------------------------------End ST7735S Frame Rate---------------------------------//
    32. LCD_SPI_Send_Cmd(0xB4); //Dot inversion
    33. LCD_SPI_Send_Data_8(0x07);
    34. //------------------------------------ST7735S 功率设置---------------------------------//
    35. LCD_SPI_Send_Cmd(0xC0);
    36. LCD_SPI_Send_Data_8(0xA2);
    37. LCD_SPI_Send_Data_8(0x02);
    38. LCD_SPI_Send_Data_8(0x84);
    39. LCD_SPI_Send_Cmd(0xC1);
    40. LCD_SPI_Send_Data_8(0xC5);
    41. LCD_SPI_Send_Cmd(0xC2);
    42. LCD_SPI_Send_Data_8(0x0A);
    43. LCD_SPI_Send_Data_8(0x00);
    44. LCD_SPI_Send_Cmd(0xC3);
    45. LCD_SPI_Send_Data_8(0x8A);
    46. LCD_SPI_Send_Data_8(0x2A);
    47. LCD_SPI_Send_Cmd(0xC4);
    48. LCD_SPI_Send_Data_8(0x8A);
    49. LCD_SPI_Send_Data_8(0xEE);
    50. //---------------------------------End ST7735S Power Sequence-------------------------------------//
    51. LCD_SPI_Send_Cmd(0xC5); //VCOM
    52. LCD_SPI_Send_Data_8(0x0E);
    53. LCD_SPI_Send_Cmd(0x36);//0x00 0x80 0x40 0xc0 0x20 0xA0 0x60 0xE0;
    54. LCD_SPI_Send_Data_8(0x00);
    55. //------------------------------------ST7735S Gamma Sequence---------------------------------//
    56. LCD_SPI_Send_Cmd(0xE0);
    57. LCD_SPI_Send_Data_8(0x04);
    58. LCD_SPI_Send_Data_8(0x22);
    59. LCD_SPI_Send_Data_8(0x07);
    60. LCD_SPI_Send_Data_8(0x0A);
    61. LCD_SPI_Send_Data_8(0x2E);
    62. LCD_SPI_Send_Data_8(0x30);
    63. LCD_SPI_Send_Data_8(0x25);
    64. LCD_SPI_Send_Data_8(0x2A);
    65. LCD_SPI_Send_Data_8(0x28);
    66. LCD_SPI_Send_Data_8(0x26);
    67. LCD_SPI_Send_Data_8(0x2E);
    68. LCD_SPI_Send_Data_8(0x3A);
    69. LCD_SPI_Send_Data_8(0x00);
    70. LCD_SPI_Send_Data_8(0x01);
    71. LCD_SPI_Send_Data_8(0x03);
    72. LCD_SPI_Send_Data_8(0x13);
    73. LCD_SPI_Send_Cmd(0xE1);
    74. LCD_SPI_Send_Data_8(0x04);
    75. LCD_SPI_Send_Data_8(0x16);
    76. LCD_SPI_Send_Data_8(0x06);
    77. LCD_SPI_Send_Data_8(0x0D);
    78. LCD_SPI_Send_Data_8(0x2D);
    79. LCD_SPI_Send_Data_8(0x26);
    80. LCD_SPI_Send_Data_8(0x23);
    81. LCD_SPI_Send_Data_8(0x27);
    82. LCD_SPI_Send_Data_8(0x27);
    83. LCD_SPI_Send_Data_8(0x25);
    84. LCD_SPI_Send_Data_8(0x2D);
    85. LCD_SPI_Send_Data_8(0x3B);
    86. LCD_SPI_Send_Data_8(0x00);
    87. LCD_SPI_Send_Data_8(0x01);
    88. LCD_SPI_Send_Data_8(0x04);
    89. LCD_SPI_Send_Data_8(0x13);
    90. //------------------------------------End ST7735S Gamma Sequence-----------------------------//
    91. LCD_SPI_Send_Cmd(0x3A); //65k mode
    92. LCD_SPI_Send_Data_8(0x05);
    93. LCD_SPI_Send_Cmd(0x29); //Display on
    94. }

    上传一个稳定运行的代码

    1. /* vim: set ai et ts=4 sw=4: */
    2. #ifndef __FONTS_H__
    3. #define __FONTS_H__
    4. #include <stdint.h>
    5. typedef struct {
    6. const uint8_t width;
    7. uint8_t height;
    8. const uint16_t *data;
    9. } FontDef;
    10. extern FontDef Font_7x10;
    11. extern FontDef Font_11x18;
    12. extern FontDef Font_16x26;
    13. #endif // __FONTS_H__
    1. /* vim: set ai et ts=4 sw=4: */
    2. #include "fonts.h"
    3. static const uint16_t Font7x10 [] = {
    4. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // sp
    5. 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x1000, 0x0000, 0x0000, // !
    6. 0x2800, 0x2800, 0x2800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // "
    7. 0x2400, 0x2400, 0x7C00, 0x2400, 0x4800, 0x7C00, 0x4800, 0x4800, 0x0000, 0x0000, // #
    8. 0x3800, 0x5400, 0x5000, 0x3800, 0x1400, 0x5400, 0x5400, 0x3800, 0x1000, 0x0000, // $
    9. 0x2000, 0x5400, 0x5800, 0x3000, 0x2800, 0x5400, 0x1400, 0x0800, 0x0000, 0x0000, // %
    10. 0x1000, 0x2800, 0x2800, 0x1000, 0x3400, 0x4800, 0x4800, 0x3400, 0x0000, 0x0000, // &
    11. 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // '
    12. 0x0800, 0x1000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x1000, 0x0800, // (
    13. 0x2000, 0x1000, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x1000, 0x2000, // )
    14. 0x1000, 0x3800, 0x1000, 0x2800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // *
    15. 0x0000, 0x0000, 0x1000, 0x1000, 0x7C00, 0x1000, 0x1000, 0x0000, 0x0000, 0x0000, // +
    16. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x1000, 0x1000, // ,
    17. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3800, 0x0000, 0x0000, 0x0000, 0x0000, // -
    18. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, // .
    19. 0x0800, 0x0800, 0x1000, 0x1000, 0x1000, 0x1000, 0x2000, 0x2000, 0x0000, 0x0000, // /
    20. 0x3800, 0x4400, 0x4400, 0x5400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // 0
    21. 0x1000, 0x3000, 0x5000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // 1
    22. 0x3800, 0x4400, 0x4400, 0x0400, 0x0800, 0x1000, 0x2000, 0x7C00, 0x0000, 0x0000, // 2
    23. 0x3800, 0x4400, 0x0400, 0x1800, 0x0400, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // 3
    24. 0x0800, 0x1800, 0x2800, 0x2800, 0x4800, 0x7C00, 0x0800, 0x0800, 0x0000, 0x0000, // 4
    25. 0x7C00, 0x4000, 0x4000, 0x7800, 0x0400, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // 5
    26. 0x3800, 0x4400, 0x4000, 0x7800, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // 6
    27. 0x7C00, 0x0400, 0x0800, 0x1000, 0x1000, 0x2000, 0x2000, 0x2000, 0x0000, 0x0000, // 7
    28. 0x3800, 0x4400, 0x4400, 0x3800, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // 8
    29. 0x3800, 0x4400, 0x4400, 0x4400, 0x3C00, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // 9
    30. 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, // :
    31. 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, 0x0000, 0x1000, 0x1000, 0x1000, // ;
    32. 0x0000, 0x0000, 0x0C00, 0x3000, 0x4000, 0x3000, 0x0C00, 0x0000, 0x0000, 0x0000, // <
    33. 0x0000, 0x0000, 0x0000, 0x7C00, 0x0000, 0x7C00, 0x0000, 0x0000, 0x0000, 0x0000, // =
    34. 0x0000, 0x0000, 0x6000, 0x1800, 0x0400, 0x1800, 0x6000, 0x0000, 0x0000, 0x0000, // >
    35. 0x3800, 0x4400, 0x0400, 0x0800, 0x1000, 0x1000, 0x0000, 0x1000, 0x0000, 0x0000, // ?
    36. 0x3800, 0x4400, 0x4C00, 0x5400, 0x5C00, 0x4000, 0x4000, 0x3800, 0x0000, 0x0000, // @
    37. 0x1000, 0x2800, 0x2800, 0x2800, 0x2800, 0x7C00, 0x4400, 0x4400, 0x0000, 0x0000, // A
    38. 0x7800, 0x4400, 0x4400, 0x7800, 0x4400, 0x4400, 0x4400, 0x7800, 0x0000, 0x0000, // B
    39. 0x3800, 0x4400, 0x4000, 0x4000, 0x4000, 0x4000, 0x4400, 0x3800, 0x0000, 0x0000, // C
    40. 0x7000, 0x4800, 0x4400, 0x4400, 0x4400, 0x4400, 0x4800, 0x7000, 0x0000, 0x0000, // D
    41. 0x7C00, 0x4000, 0x4000, 0x7C00, 0x4000, 0x4000, 0x4000, 0x7C00, 0x0000, 0x0000, // E
    42. 0x7C00, 0x4000, 0x4000, 0x7800, 0x4000, 0x4000, 0x4000, 0x4000, 0x0000, 0x0000, // F
    43. 0x3800, 0x4400, 0x4000, 0x4000, 0x5C00, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // G
    44. 0x4400, 0x4400, 0x4400, 0x7C00, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000, // H
    45. 0x3800, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x3800, 0x0000, 0x0000, // I
    46. 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // J
    47. 0x4400, 0x4800, 0x5000, 0x6000, 0x5000, 0x4800, 0x4800, 0x4400, 0x0000, 0x0000, // K
    48. 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x7C00, 0x0000, 0x0000, // L
    49. 0x4400, 0x6C00, 0x6C00, 0x5400, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000, // M
    50. 0x4400, 0x6400, 0x6400, 0x5400, 0x5400, 0x4C00, 0x4C00, 0x4400, 0x0000, 0x0000, // N
    51. 0x3800, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // O
    52. 0x7800, 0x4400, 0x4400, 0x4400, 0x7800, 0x4000, 0x4000, 0x4000, 0x0000, 0x0000, // P
    53. 0x3800, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x5400, 0x3800, 0x0400, 0x0000, // Q
    54. 0x7800, 0x4400, 0x4400, 0x4400, 0x7800, 0x4800, 0x4800, 0x4400, 0x0000, 0x0000, // R
    55. 0x3800, 0x4400, 0x4000, 0x3000, 0x0800, 0x0400, 0x4400, 0x3800, 0x0000, 0x0000, // S
    56. 0x7C00, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // T
    57. 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // U
    58. 0x4400, 0x4400, 0x4400, 0x2800, 0x2800, 0x2800, 0x1000, 0x1000, 0x0000, 0x0000, // V
    59. 0x4400, 0x4400, 0x5400, 0x5400, 0x5400, 0x6C00, 0x2800, 0x2800, 0x0000, 0x0000, // W
    60. 0x4400, 0x2800, 0x2800, 0x1000, 0x1000, 0x2800, 0x2800, 0x4400, 0x0000, 0x0000, // X
    61. 0x4400, 0x4400, 0x2800, 0x2800, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // Y
    62. 0x7C00, 0x0400, 0x0800, 0x1000, 0x1000, 0x2000, 0x4000, 0x7C00, 0x0000, 0x0000, // Z
    63. 0x1800, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1800, // [
    64. 0x2000, 0x2000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0800, 0x0800, 0x0000, 0x0000, /* \ */
    65. 0x3000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x3000, // ]
    66. 0x1000, 0x2800, 0x2800, 0x4400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ^
    67. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFE00, // _
    68. 0x2000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // `
    69. 0x0000, 0x0000, 0x3800, 0x4400, 0x3C00, 0x4400, 0x4C00, 0x3400, 0x0000, 0x0000, // a
    70. 0x4000, 0x4000, 0x5800, 0x6400, 0x4400, 0x4400, 0x6400, 0x5800, 0x0000, 0x0000, // b
    71. 0x0000, 0x0000, 0x3800, 0x4400, 0x4000, 0x4000, 0x4400, 0x3800, 0x0000, 0x0000, // c
    72. 0x0400, 0x0400, 0x3400, 0x4C00, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0000, 0x0000, // d
    73. 0x0000, 0x0000, 0x3800, 0x4400, 0x7C00, 0x4000, 0x4400, 0x3800, 0x0000, 0x0000, // e
    74. 0x0C00, 0x1000, 0x7C00, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // f
    75. 0x0000, 0x0000, 0x3400, 0x4C00, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0400, 0x7800, // g
    76. 0x4000, 0x4000, 0x5800, 0x6400, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000, // h
    77. 0x1000, 0x0000, 0x7000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // i
    78. 0x1000, 0x0000, 0x7000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0xE000, // j
    79. 0x4000, 0x4000, 0x4800, 0x5000, 0x6000, 0x5000, 0x4800, 0x4400, 0x0000, 0x0000, // k
    80. 0x7000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 0x0000, // l
    81. 0x0000, 0x0000, 0x7800, 0x5400, 0x5400, 0x5400, 0x5400, 0x5400, 0x0000, 0x0000, // m
    82. 0x0000, 0x0000, 0x5800, 0x6400, 0x4400, 0x4400, 0x4400, 0x4400, 0x0000, 0x0000, // n
    83. 0x0000, 0x0000, 0x3800, 0x4400, 0x4400, 0x4400, 0x4400, 0x3800, 0x0000, 0x0000, // o
    84. 0x0000, 0x0000, 0x5800, 0x6400, 0x4400, 0x4400, 0x6400, 0x5800, 0x4000, 0x4000, // p
    85. 0x0000, 0x0000, 0x3400, 0x4C00, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0400, 0x0400, // q
    86. 0x0000, 0x0000, 0x5800, 0x6400, 0x4000, 0x4000, 0x4000, 0x4000, 0x0000, 0x0000, // r
    87. 0x0000, 0x0000, 0x3800, 0x4400, 0x3000, 0x0800, 0x4400, 0x3800, 0x0000, 0x0000, // s
    88. 0x2000, 0x2000, 0x7800, 0x2000, 0x2000, 0x2000, 0x2000, 0x1800, 0x0000, 0x0000, // t
    89. 0x0000, 0x0000, 0x4400, 0x4400, 0x4400, 0x4400, 0x4C00, 0x3400, 0x0000, 0x0000, // u
    90. 0x0000, 0x0000, 0x4400, 0x4400, 0x2800, 0x2800, 0x2800, 0x1000, 0x0000, 0x0000, // v
    91. 0x0000, 0x0000, 0x5400, 0x5400, 0x5400, 0x6C00, 0x2800, 0x2800, 0x0000, 0x0000, // w
    92. 0x0000, 0x0000, 0x4400, 0x2800, 0x1000, 0x1000, 0x2800, 0x4400, 0x0000, 0x0000, // x
    93. 0x0000, 0x0000, 0x4400, 0x4400, 0x2800, 0x2800, 0x1000, 0x1000, 0x1000, 0x6000, // y
    94. 0x0000, 0x0000, 0x7C00, 0x0800, 0x1000, 0x2000, 0x4000, 0x7C00, 0x0000, 0x0000, // z
    95. 0x1800, 0x1000, 0x1000, 0x1000, 0x2000, 0x2000, 0x1000, 0x1000, 0x1000, 0x1800, // {
    96. 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, // |
    97. 0x3000, 0x1000, 0x1000, 0x1000, 0x0800, 0x0800, 0x1000, 0x1000, 0x1000, 0x3000, // }
    98. 0x0000, 0x0000, 0x0000, 0x7400, 0x4C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ~
    99. };
    100. static const uint16_t Font11x18 [] = {
    101. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // sp
    102. 0x0000, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // !
    103. 0x0000, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // "
    104. 0x0000, 0x1980, 0x1980, 0x1980, 0x1980, 0x7FC0, 0x7FC0, 0x1980, 0x3300, 0x7FC0, 0x7FC0, 0x3300, 0x3300, 0x3300, 0x3300, 0x0000, 0x0000, 0x0000, // #
    105. 0x0000, 0x1E00, 0x3F00, 0x7580, 0x6580, 0x7400, 0x3C00, 0x1E00, 0x0700, 0x0580, 0x6580, 0x6580, 0x7580, 0x3F00, 0x1E00, 0x0400, 0x0400, 0x0000, // $
    106. 0x0000, 0x7000, 0xD800, 0xD840, 0xD8C0, 0xD980, 0x7300, 0x0600, 0x0C00, 0x1B80, 0x36C0, 0x66C0, 0x46C0, 0x06C0, 0x0380, 0x0000, 0x0000, 0x0000, // %
    107. 0x0000, 0x1E00, 0x3F00, 0x3300, 0x3300, 0x3300, 0x1E00, 0x0C00, 0x3CC0, 0x66C0, 0x6380, 0x6180, 0x6380, 0x3EC0, 0x1C80, 0x0000, 0x0000, 0x0000, // &
    108. 0x0000, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // '
    109. 0x0080, 0x0100, 0x0300, 0x0600, 0x0600, 0x0400, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0400, 0x0600, 0x0600, 0x0300, 0x0100, 0x0080, // (
    110. 0x2000, 0x1000, 0x1800, 0x0C00, 0x0C00, 0x0400, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0400, 0x0C00, 0x0C00, 0x1800, 0x1000, 0x2000, // )
    111. 0x0000, 0x0C00, 0x2D00, 0x3F00, 0x1E00, 0x3300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // *
    112. 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0xFFC0, 0xFFC0, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // +
    113. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0400, 0x0400, 0x0800, // ,
    114. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x1E00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // -
    115. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // .
    116. 0x0000, 0x0300, 0x0300, 0x0300, 0x0600, 0x0600, 0x0600, 0x0600, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x1800, 0x1800, 0x1800, 0x0000, 0x0000, 0x0000, // /
    117. 0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6D80, 0x6D80, 0x6180, 0x6180, 0x6180, 0x3300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 0
    118. 0x0000, 0x0600, 0x0E00, 0x1E00, 0x3600, 0x2600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, // 1
    119. 0x0000, 0x1E00, 0x3F00, 0x7380, 0x6180, 0x6180, 0x0180, 0x0300, 0x0600, 0x0C00, 0x1800, 0x3000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, // 2
    120. 0x0000, 0x1C00, 0x3E00, 0x6300, 0x6300, 0x0300, 0x0E00, 0x0E00, 0x0300, 0x0180, 0x0180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 3
    121. 0x0000, 0x0600, 0x0E00, 0x0E00, 0x1E00, 0x1E00, 0x1600, 0x3600, 0x3600, 0x6600, 0x7F80, 0x7F80, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, // 4
    122. 0x0000, 0x7F00, 0x7F00, 0x6000, 0x6000, 0x6000, 0x6E00, 0x7F00, 0x6380, 0x0180, 0x0180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 5
    123. 0x0000, 0x1E00, 0x3F00, 0x3380, 0x6180, 0x6000, 0x6E00, 0x7F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x3380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 6
    124. 0x0000, 0x7F80, 0x7F80, 0x0180, 0x0300, 0x0300, 0x0600, 0x0600, 0x0C00, 0x0C00, 0x0C00, 0x0800, 0x1800, 0x1800, 0x1800, 0x0000, 0x0000, 0x0000, // 7
    125. 0x0000, 0x1E00, 0x3F00, 0x6380, 0x6180, 0x6180, 0x2100, 0x1E00, 0x3F00, 0x6180, 0x6180, 0x6180, 0x6180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 8
    126. 0x0000, 0x1E00, 0x3F00, 0x7300, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0180, 0x6180, 0x7300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 9
    127. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // :
    128. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C00, 0x0C00, 0x0400, 0x0400, 0x0800, // ;
    129. 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0380, 0x0E00, 0x3800, 0x6000, 0x3800, 0x0E00, 0x0380, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // <
    130. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // =
    131. 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x7000, 0x1C00, 0x0700, 0x0180, 0x0700, 0x1C00, 0x7000, 0x4000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // >
    132. 0x0000, 0x1F00, 0x3F80, 0x71C0, 0x60C0, 0x00C0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x0C00, 0x0C00, 0x0000, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // ?
    133. 0x0000, 0x1E00, 0x3F00, 0x3180, 0x7180, 0x6380, 0x6F80, 0x6D80, 0x6D80, 0x6F80, 0x6780, 0x6000, 0x3200, 0x3E00, 0x1C00, 0x0000, 0x0000, 0x0000, // @
    134. 0x0000, 0x0E00, 0x0E00, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x3180, 0x3180, 0x3F80, 0x3F80, 0x3180, 0x60C0, 0x60C0, 0x60C0, 0x0000, 0x0000, 0x0000, // A
    135. 0x0000, 0x7C00, 0x7E00, 0x6300, 0x6300, 0x6300, 0x6300, 0x7E00, 0x7E00, 0x6300, 0x6180, 0x6180, 0x6380, 0x7F00, 0x7E00, 0x0000, 0x0000, 0x0000, // B
    136. 0x0000, 0x1E00, 0x3F00, 0x3180, 0x6180, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6180, 0x3180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // C
    137. 0x0000, 0x7C00, 0x7F00, 0x6300, 0x6380, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6300, 0x6300, 0x7E00, 0x7C00, 0x0000, 0x0000, 0x0000, // D
    138. 0x0000, 0x7F80, 0x7F80, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F00, 0x7F00, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, // E
    139. 0x0000, 0x7F80, 0x7F80, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F00, 0x7F00, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x0000, 0x0000, 0x0000, // F
    140. 0x0000, 0x1E00, 0x3F00, 0x3180, 0x6180, 0x6000, 0x6000, 0x6000, 0x6380, 0x6380, 0x6180, 0x6180, 0x3180, 0x3F80, 0x1E00, 0x0000, 0x0000, 0x0000, // G
    141. 0x0000, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x7F80, 0x7F80, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, // H
    142. 0x0000, 0x3F00, 0x3F00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x3F00, 0x3F00, 0x0000, 0x0000, 0x0000, // I
    143. 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x6180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // J
    144. 0x0000, 0x60C0, 0x6180, 0x6300, 0x6600, 0x6600, 0x6C00, 0x7800, 0x7C00, 0x6600, 0x6600, 0x6300, 0x6180, 0x6180, 0x60C0, 0x0000, 0x0000, 0x0000, // K
    145. 0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, // L
    146. 0x0000, 0x71C0, 0x71C0, 0x7BC0, 0x7AC0, 0x6AC0, 0x6AC0, 0x6EC0, 0x64C0, 0x60C0, 0x60C0, 0x60C0, 0x60C0, 0x60C0, 0x60C0, 0x0000, 0x0000, 0x0000, // M
    147. 0x0000, 0x7180, 0x7180, 0x7980, 0x7980, 0x7980, 0x6D80, 0x6D80, 0x6D80, 0x6580, 0x6780, 0x6780, 0x6780, 0x6380, 0x6380, 0x0000, 0x0000, 0x0000, // N
    148. 0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x3300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // O
    149. 0x0000, 0x7E00, 0x7F00, 0x6380, 0x6180, 0x6180, 0x6180, 0x6380, 0x7F00, 0x7E00, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x0000, 0x0000, 0x0000, // P
    150. 0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6580, 0x6780, 0x3300, 0x3F80, 0x1E40, 0x0000, 0x0000, 0x0000, // Q
    151. 0x0000, 0x7E00, 0x7F00, 0x6380, 0x6180, 0x6180, 0x6380, 0x7F00, 0x7E00, 0x6600, 0x6300, 0x6300, 0x6180, 0x6180, 0x60C0, 0x0000, 0x0000, 0x0000, // R
    152. 0x0000, 0x0E00, 0x1F00, 0x3180, 0x3180, 0x3000, 0x3800, 0x1E00, 0x0700, 0x0380, 0x6180, 0x6180, 0x3180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // S
    153. 0x0000, 0xFFC0, 0xFFC0, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // T
    154. 0x0000, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // U
    155. 0x0000, 0x60C0, 0x60C0, 0x60C0, 0x3180, 0x3180, 0x3180, 0x1B00, 0x1B00, 0x1B00, 0x1B00, 0x0E00, 0x0E00, 0x0E00, 0x0400, 0x0000, 0x0000, 0x0000, // V
    156. 0x0000, 0xC0C0, 0xC0C0, 0xC0C0, 0xC0C0, 0xC0C0, 0xCCC0, 0x4C80, 0x4C80, 0x5E80, 0x5280, 0x5280, 0x7380, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, // W
    157. 0x0000, 0xC0C0, 0x6080, 0x6180, 0x3300, 0x3B00, 0x1E00, 0x0C00, 0x0C00, 0x1E00, 0x1F00, 0x3B00, 0x7180, 0x6180, 0xC0C0, 0x0000, 0x0000, 0x0000, // X
    158. 0x0000, 0xC0C0, 0x6180, 0x6180, 0x3300, 0x3300, 0x1E00, 0x1E00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // Y
    159. 0x0000, 0x3F80, 0x3F80, 0x0180, 0x0300, 0x0300, 0x0600, 0x0C00, 0x0C00, 0x1800, 0x1800, 0x3000, 0x6000, 0x7F80, 0x7F80, 0x0000, 0x0000, 0x0000, // Z
    160. 0x0F00, 0x0F00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0F00, 0x0F00, // [
    161. 0x0000, 0x1800, 0x1800, 0x1800, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0300, 0x0300, 0x0300, 0x0000, 0x0000, 0x0000, /* \ */
    162. 0x1E00, 0x1E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x1E00, 0x1E00, // ]
    163. 0x0000, 0x0C00, 0x0C00, 0x1E00, 0x1200, 0x3300, 0x3300, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ^
    164. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFE0, 0x0000, // _
    165. 0x0000, 0x3800, 0x1800, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // `
    166. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1F00, 0x3F80, 0x6180, 0x0180, 0x1F80, 0x3F80, 0x6180, 0x6380, 0x7F80, 0x38C0, 0x0000, 0x0000, 0x0000, // a
    167. 0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6E00, 0x7F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x7F00, 0x6E00, 0x0000, 0x0000, 0x0000, // b
    168. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F00, 0x7380, 0x6180, 0x6000, 0x6000, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // c
    169. 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x1D80, 0x3F80, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0000, 0x0000, 0x0000, // d
    170. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F00, 0x7300, 0x6180, 0x7F80, 0x7F80, 0x6000, 0x7180, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // e
    171. 0x0000, 0x07C0, 0x0FC0, 0x0C00, 0x0C00, 0x7F80, 0x7F80, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, // f
    172. 0x0000, 0x0000, 0x0000, 0x0000, 0x1D80, 0x3F80, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0180, 0x6380, 0x7F00, 0x3E00, // g
    173. 0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6F00, 0x7F80, 0x7180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, // h
    174. 0x0000, 0x0600, 0x0600, 0x0000, 0x0000, 0x3E00, 0x3E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, // i
    175. 0x0600, 0x0600, 0x0000, 0x0000, 0x3E00, 0x3E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x4600, 0x7E00, 0x3C00, // j
    176. 0x0000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6180, 0x6300, 0x6600, 0x6C00, 0x7C00, 0x7600, 0x6300, 0x6300, 0x6180, 0x60C0, 0x0000, 0x0000, 0x0000, // k
    177. 0x0000, 0x3E00, 0x3E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0000, 0x0000, 0x0000, // l
    178. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDD80, 0xFFC0, 0xCEC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0xCCC0, 0x0000, 0x0000, 0x0000, // m
    179. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6F00, 0x7F80, 0x7180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x0000, 0x0000, 0x0000, // n
    180. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // o
    181. 0x0000, 0x0000, 0x0000, 0x0000, 0x6E00, 0x7F00, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x7F00, 0x6E00, 0x6000, 0x6000, 0x6000, 0x6000, // p
    182. 0x0000, 0x0000, 0x0000, 0x0000, 0x1D80, 0x3F80, 0x7380, 0x6180, 0x6180, 0x6180, 0x6180, 0x7380, 0x3F80, 0x1D80, 0x0180, 0x0180, 0x0180, 0x0180, // q
    183. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6700, 0x3F80, 0x3900, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x0000, 0x0000, 0x0000, // r
    184. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E00, 0x3F80, 0x6180, 0x6000, 0x7F00, 0x3F80, 0x0180, 0x6180, 0x7F00, 0x1E00, 0x0000, 0x0000, 0x0000, // s
    185. 0x0000, 0x0000, 0x0800, 0x1800, 0x1800, 0x7F00, 0x7F00, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1F80, 0x0F80, 0x0000, 0x0000, 0x0000, // t
    186. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6180, 0x6380, 0x7F80, 0x3D80, 0x0000, 0x0000, 0x0000, // u
    187. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x60C0, 0x3180, 0x3180, 0x3180, 0x1B00, 0x1B00, 0x1B00, 0x0E00, 0x0E00, 0x0600, 0x0000, 0x0000, 0x0000, // v
    188. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDD80, 0xDD80, 0xDD80, 0x5500, 0x5500, 0x5500, 0x7700, 0x7700, 0x2200, 0x2200, 0x0000, 0x0000, 0x0000, // w
    189. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6180, 0x3300, 0x3300, 0x1E00, 0x0C00, 0x0C00, 0x1E00, 0x3300, 0x3300, 0x6180, 0x0000, 0x0000, 0x0000, // x
    190. 0x0000, 0x0000, 0x0000, 0x0000, 0x6180, 0x6180, 0x3180, 0x3300, 0x3300, 0x1B00, 0x1B00, 0x1B00, 0x0E00, 0x0E00, 0x0E00, 0x1C00, 0x7C00, 0x7000, // y
    191. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7FC0, 0x7FC0, 0x0180, 0x0300, 0x0600, 0x0C00, 0x1800, 0x3000, 0x7FC0, 0x7FC0, 0x0000, 0x0000, 0x0000, // z
    192. 0x0380, 0x0780, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0E00, 0x1C00, 0x1C00, 0x0E00, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0780, 0x0380, // {
    193. 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, // |
    194. 0x3800, 0x3C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0E00, 0x0700, 0x0700, 0x0E00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x0C00, 0x3C00, 0x3800, // }
    195. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3880, 0x7F80, 0x4700, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ~
    196. };
    197. static const uint16_t Font16x26 [] = {
    198. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [ ]
    199. 0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03C0,0x03C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [!]
    200. 0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x1E3C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = ["]
    201. 0x01CE,0x03CE,0x03DE,0x039E,0x039C,0x079C,0x3FFF,0x7FFF,0x0738,0x0F38,0x0F78,0x0F78,0x0E78,0xFFFF,0xFFFF,0x1EF0,0x1CF0,0x1CE0,0x3CE0,0x3DE0,0x39E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [#]
    202. 0x03FC,0x0FFE,0x1FEE,0x1EE0,0x1EE0,0x1EE0,0x1EE0,0x1FE0,0x0FE0,0x07E0,0x03F0,0x01FC,0x01FE,0x01FE,0x01FE,0x01FE,0x01FE,0x01FE,0x3DFE,0x3FFC,0x0FF0,0x01E0,0x01E0,0x0000,0x0000,0x0000, // Ascii = [$]
    203. 0x3E03,0xF707,0xE78F,0xE78E,0xE39E,0xE3BC,0xE7B8,0xE7F8,0xF7F0,0x3FE0,0x01C0,0x03FF,0x07FF,0x07F3,0x0FF3,0x1EF3,0x3CF3,0x38F3,0x78F3,0xF07F,0xE03F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [%]
    204. 0x07E0,0x0FF8,0x0F78,0x1F78,0x1F78,0x1F78,0x0F78,0x0FF0,0x0FE0,0x1F80,0x7FC3,0xFBC3,0xF3E7,0xF1F7,0xF0F7,0xF0FF,0xF07F,0xF83E,0x7C7F,0x3FFF,0x1FEF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [&]
    205. 0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03C0,0x01C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [']
    206. 0x003F,0x007C,0x01F0,0x01E0,0x03C0,0x07C0,0x0780,0x0780,0x0F80,0x0F00,0x0F00,0x0F00,0x0F00,0x0F00,0x0F00,0x0F80,0x0780,0x0780,0x07C0,0x03C0,0x01E0,0x01F0,0x007C,0x003F,0x000F,0x0000, // Ascii = [(]
    207. 0x7E00,0x1F00,0x07C0,0x03C0,0x01E0,0x01F0,0x00F0,0x00F0,0x00F8,0x0078,0x0078,0x0078,0x0078,0x0078,0x0078,0x00F8,0x00F0,0x00F0,0x01F0,0x01E0,0x03C0,0x07C0,0x1F00,0x7E00,0x7800,0x0000, // Ascii = [)]
    208. 0x03E0,0x03C0,0x01C0,0x39CE,0x3FFF,0x3F7F,0x0320,0x0370,0x07F8,0x0F78,0x1F3C,0x0638,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [*]
    209. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0xFFFF,0xFFFF,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [+]
    210. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x01E0,0x01E0,0x01E0,0x01C0,0x0380, // Ascii = [,]
    211. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3FFE,0x3FFE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [-]
    212. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [.]
    213. 0x000F,0x000F,0x001E,0x001E,0x003C,0x003C,0x0078,0x0078,0x00F0,0x00F0,0x01E0,0x01E0,0x03C0,0x03C0,0x0780,0x0780,0x0F00,0x0F00,0x1E00,0x1E00,0x3C00,0x3C00,0x7800,0x7800,0xF000,0x0000, // Ascii = [/]
    214. 0x07F0,0x0FF8,0x1F7C,0x3E3E,0x3C1E,0x7C1F,0x7C1F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x7C1F,0x7C1F,0x3C1E,0x3E3E,0x1F7C,0x0FF8,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [0]
    215. 0x00F0,0x07F0,0x3FF0,0x3FF0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [1]
    216. 0x0FE0,0x3FF8,0x3C7C,0x003C,0x003E,0x003E,0x003E,0x003C,0x003C,0x007C,0x00F8,0x01F0,0x03E0,0x07C0,0x0780,0x0F00,0x1E00,0x3E00,0x3C00,0x3FFE,0x3FFE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [2]
    217. 0x0FF0,0x1FF8,0x1C7C,0x003E,0x003E,0x003E,0x003C,0x003C,0x00F8,0x0FF0,0x0FF8,0x007C,0x003E,0x001E,0x001E,0x001E,0x001E,0x003E,0x1C7C,0x1FF8,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [3]
    218. 0x0078,0x00F8,0x00F8,0x01F8,0x03F8,0x07F8,0x07F8,0x0F78,0x1E78,0x1E78,0x3C78,0x7878,0x7878,0xFFFF,0xFFFF,0x0078,0x0078,0x0078,0x0078,0x0078,0x0078,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [4]
    219. 0x1FFC,0x1FFC,0x1FFC,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1FE0,0x1FF8,0x00FC,0x007C,0x003E,0x003E,0x001E,0x003E,0x003E,0x003C,0x1C7C,0x1FF8,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [5]
    220. 0x01FC,0x07FE,0x0F8E,0x1F00,0x1E00,0x3E00,0x3C00,0x3C00,0x3DF8,0x3FFC,0x7F3E,0x7E1F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3E0F,0x1E1F,0x1F3E,0x0FFC,0x03F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [6]
    221. 0x3FFF,0x3FFF,0x3FFF,0x000F,0x001E,0x001E,0x003C,0x0038,0x0078,0x00F0,0x00F0,0x01E0,0x01E0,0x03C0,0x03C0,0x0780,0x0F80,0x0F80,0x0F00,0x1F00,0x1F00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [7]
    222. 0x07F8,0x0FFC,0x1F3E,0x1E1E,0x3E1E,0x3E1E,0x1E1E,0x1F3C,0x0FF8,0x07F0,0x0FF8,0x1EFC,0x3E3E,0x3C1F,0x7C1F,0x7C0F,0x7C0F,0x3C1F,0x3F3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [8]
    223. 0x07F0,0x0FF8,0x1E7C,0x3C3E,0x3C1E,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x3C1F,0x3E3F,0x1FFF,0x07EF,0x001F,0x001E,0x001E,0x003E,0x003C,0x38F8,0x3FF0,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [9]
    224. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [:]
    225. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03E0,0x03E0,0x03E0,0x03E0,0x01E0,0x01E0,0x01E0,0x03C0,0x0380, // Ascii = [;]
    226. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0003,0x000F,0x003F,0x00FC,0x03F0,0x0FC0,0x3F00,0xFE00,0x3F00,0x0FC0,0x03F0,0x00FC,0x003F,0x000F,0x0003,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [<]
    227. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [=]
    228. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xE000,0xF800,0x7E00,0x1F80,0x07E0,0x01F8,0x007E,0x001F,0x007E,0x01F8,0x07E0,0x1F80,0x7E00,0xF800,0xE000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [>]
    229. 0x1FF0,0x3FFC,0x383E,0x381F,0x381F,0x001E,0x001E,0x003C,0x0078,0x00F0,0x01E0,0x03C0,0x03C0,0x07C0,0x07C0,0x0000,0x0000,0x0000,0x07C0,0x07C0,0x07C0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [?]
    230. 0x03F8,0x0FFE,0x1F1E,0x3E0F,0x3C7F,0x78FF,0x79EF,0x73C7,0xF3C7,0xF38F,0xF38F,0xF38F,0xF39F,0xF39F,0x73FF,0x7BFF,0x79F7,0x3C00,0x1F1C,0x0FFC,0x03F8,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [@]
    231. 0x0000,0x0000,0x0000,0x03E0,0x03E0,0x07F0,0x07F0,0x07F0,0x0F78,0x0F78,0x0E7C,0x1E3C,0x1E3C,0x3C3E,0x3FFE,0x3FFF,0x781F,0x780F,0xF00F,0xF007,0xF007,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [A]
    232. 0x0000,0x0000,0x0000,0x3FF8,0x3FFC,0x3C3E,0x3C1E,0x3C1E,0x3C1E,0x3C3E,0x3C7C,0x3FF0,0x3FF8,0x3C7E,0x3C1F,0x3C1F,0x3C0F,0x3C0F,0x3C1F,0x3FFE,0x3FF8,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [B]
    233. 0x0000,0x0000,0x0000,0x01FF,0x07FF,0x1F87,0x3E00,0x3C00,0x7C00,0x7800,0x7800,0x7800,0x7800,0x7800,0x7C00,0x7C00,0x3E00,0x3F00,0x1F83,0x07FF,0x01FF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [C]
    234. 0x0000,0x0000,0x0000,0x7FF0,0x7FFC,0x787E,0x781F,0x781F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x780F,0x781F,0x781E,0x787E,0x7FF8,0x7FE0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [D]
    235. 0x0000,0x0000,0x0000,0x3FFF,0x3FFF,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3FFE,0x3FFE,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [E]
    236. 0x0000,0x0000,0x0000,0x1FFF,0x1FFF,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1FFF,0x1FFF,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x1E00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [F]
    237. 0x0000,0x0000,0x0000,0x03FE,0x0FFF,0x1F87,0x3E00,0x7C00,0x7C00,0x7800,0xF800,0xF800,0xF87F,0xF87F,0x780F,0x7C0F,0x7C0F,0x3E0F,0x1F8F,0x0FFF,0x03FE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [G]
    238. 0x0000,0x0000,0x0000,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7FFF,0x7FFF,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x7C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [H]
    239. 0x0000,0x0000,0x0000,0x3FFF,0x3FFF,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [I]
    240. 0x0000,0x0000,0x0000,0x1FFC,0x1FFC,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x007C,0x0078,0x0078,0x38F8,0x3FF0,0x3FC0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [J]
    241. 0x0000,0x0000,0x0000,0x3C1F,0x3C1E,0x3C3C,0x3C78,0x3CF0,0x3DE0,0x3FE0,0x3FC0,0x3F80,0x3FC0,0x3FE0,0x3DF0,0x3CF0,0x3C78,0x3C7C,0x3C3E,0x3C1F,0x3C0F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [K]
    242. 0x0000,0x0000,0x0000,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3FFF,0x3FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [L]
    243. 0x0000,0x0000,0x0000,0xF81F,0xFC1F,0xFC1F,0xFE3F,0xFE3F,0xFE3F,0xFF7F,0xFF77,0xFF77,0xF7F7,0xF7E7,0xF3E7,0xF3E7,0xF3C7,0xF007,0xF007,0xF007,0xF007,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [M]
    244. 0x0000,0x0000,0x0000,0x7C0F,0x7C0F,0x7E0F,0x7F0F,0x7F0F,0x7F8F,0x7F8F,0x7FCF,0x7BEF,0x79EF,0x79FF,0x78FF,0x78FF,0x787F,0x783F,0x783F,0x781F,0x781F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [N]
    245. 0x0000,0x0000,0x0000,0x07F0,0x1FFC,0x3E3E,0x7C1F,0x780F,0x780F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0x780F,0x780F,0x7C1F,0x3E3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [O]
    246. 0x0000,0x0000,0x0000,0x3FFC,0x3FFF,0x3E1F,0x3E0F,0x3E0F,0x3E0F,0x3E0F,0x3E1F,0x3E3F,0x3FFC,0x3FF0,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x3E00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [P]
    247. 0x0000,0x0000,0x0000,0x07F0,0x1FFC,0x3E3E,0x7C1F,0x780F,0x780F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0xF80F,0x780F,0x780F,0x7C1F,0x3E3E,0x1FFC,0x07F8,0x007C,0x003F,0x000F,0x0003,0x0000, // Ascii = [Q]
    248. 0x0000,0x0000,0x0000,0x3FF0,0x3FFC,0x3C7E,0x3C3E,0x3C1E,0x3C1E,0x3C3E,0x3C3C,0x3CFC,0x3FF0,0x3FE0,0x3DF0,0x3CF8,0x3C7C,0x3C3E,0x3C1E,0x3C1F,0x3C0F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [R]
    249. 0x0000,0x0000,0x0000,0x07FC,0x1FFE,0x3E0E,0x3C00,0x3C00,0x3C00,0x3E00,0x1FC0,0x0FF8,0x03FE,0x007F,0x001F,0x000F,0x000F,0x201F,0x3C3E,0x3FFC,0x1FF0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [S]
    250. 0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [T]
    251. 0x0000,0x0000,0x0000,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x7C0F,0x3C1E,0x3C1E,0x3E3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [U]
    252. 0x0000,0x0000,0x0000,0xF007,0xF007,0xF807,0x780F,0x7C0F,0x3C1E,0x3C1E,0x3E1E,0x1E3C,0x1F3C,0x1F78,0x0F78,0x0FF8,0x07F0,0x07F0,0x07F0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [V]
    253. 0x0000,0x0000,0x0000,0xE003,0xF003,0xF003,0xF007,0xF3E7,0xF3E7,0xF3E7,0x73E7,0x7BF7,0x7FF7,0x7FFF,0x7F7F,0x7F7F,0x7F7E,0x3F7E,0x3E3E,0x3E3E,0x3E3E,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [W]
    254. 0x0000,0x0000,0x0000,0xF807,0x7C0F,0x3E1E,0x3E3E,0x1F3C,0x0FF8,0x07F0,0x07E0,0x03E0,0x03E0,0x07F0,0x0FF8,0x0F7C,0x1E7C,0x3C3E,0x781F,0x780F,0xF00F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [X]
    255. 0x0000,0x0000,0x0000,0xF807,0x7807,0x7C0F,0x3C1E,0x3E1E,0x1F3C,0x0F78,0x0FF8,0x07F0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [Y]
    256. 0x0000,0x0000,0x0000,0x7FFF,0x7FFF,0x000F,0x001F,0x003E,0x007C,0x00F8,0x00F0,0x01E0,0x03E0,0x07C0,0x0F80,0x0F00,0x1E00,0x3E00,0x7C00,0x7FFF,0x7FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [Z]
    257. 0x07FF,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x07FF,0x07FF,0x0000, // Ascii = [[]
    258. 0x7800,0x7800,0x3C00,0x3C00,0x1E00,0x1E00,0x0F00,0x0F00,0x0780,0x0780,0x03C0,0x03C0,0x01E0,0x01E0,0x00F0,0x00F0,0x0078,0x0078,0x003C,0x003C,0x001E,0x001E,0x000F,0x000F,0x0007,0x0000, // Ascii = [\]
    259. 0x7FF0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x00F0,0x7FF0,0x7FF0,0x0000, // Ascii = []]
    260. 0x00C0,0x01C0,0x01C0,0x03E0,0x03E0,0x07F0,0x07F0,0x0778,0x0F78,0x0F38,0x1E3C,0x1E3C,0x3C1E,0x3C1E,0x380F,0x780F,0x7807,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [^]
    261. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x0000,0x0000,0x0000, // Ascii = [_]
    262. 0x00F0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [`]
    263. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0FF8,0x3FFC,0x3C7C,0x003E,0x003E,0x003E,0x07FE,0x1FFE,0x3E3E,0x7C3E,0x783E,0x7C3E,0x7C7E,0x3FFF,0x1FCF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [a]
    264. 0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3DF8,0x3FFE,0x3F3E,0x3E1F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C1F,0x3C1E,0x3F3E,0x3FFC,0x3BF0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [b]
    265. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03FE,0x0FFF,0x1F87,0x3E00,0x3E00,0x3C00,0x7C00,0x7C00,0x7C00,0x3C00,0x3E00,0x3E00,0x1F87,0x0FFF,0x03FE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [c]
    266. 0x001F,0x001F,0x001F,0x001F,0x001F,0x001F,0x07FF,0x1FFF,0x3E3F,0x3C1F,0x7C1F,0x7C1F,0x7C1F,0x781F,0x781F,0x7C1F,0x7C1F,0x3C3F,0x3E7F,0x1FFF,0x0FDF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [d]
    267. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03F8,0x0FFC,0x1F3E,0x3E1E,0x3C1F,0x7C1F,0x7FFF,0x7FFF,0x7C00,0x7C00,0x3C00,0x3E00,0x1F07,0x0FFF,0x03FE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [e]
    268. 0x01FF,0x03E1,0x03C0,0x07C0,0x07C0,0x07C0,0x7FFF,0x7FFF,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x07C0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [f]
    269. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07EF,0x1FFF,0x3E7F,0x3C1F,0x7C1F,0x7C1F,0x781F,0x781F,0x781F,0x7C1F,0x7C1F,0x3C3F,0x3E7F,0x1FFF,0x0FDF,0x001E,0x001E,0x001E,0x387C,0x3FF8, // Ascii = [g]
    270. 0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3DFC,0x3FFE,0x3F9E,0x3F1F,0x3E1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [h]
    271. 0x01F0,0x01F0,0x0000,0x0000,0x0000,0x0000,0x7FE0,0x7FE0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [i]
    272. 0x00F8,0x00F8,0x0000,0x0000,0x0000,0x0000,0x3FF8,0x3FF8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F8,0x00F0,0x71F0,0x7FE0, // Ascii = [j]
    273. 0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00,0x3C1F,0x3C3E,0x3C7C,0x3CF8,0x3DF0,0x3DE0,0x3FC0,0x3FC0,0x3FE0,0x3DF0,0x3CF8,0x3C7C,0x3C3E,0x3C1F,0x3C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [k]
    274. 0x7FF0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x01F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [l]
    275. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF79E,0xFFFF,0xFFFF,0xFFFF,0xFBE7,0xF9E7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0xF1C7,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [m]
    276. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3DFC,0x3FFE,0x3F9E,0x3F1F,0x3E1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x3C1F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [n]
    277. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07F0,0x1FFC,0x3E3E,0x3C1F,0x7C1F,0x780F,0x780F,0x780F,0x780F,0x780F,0x7C1F,0x3C1F,0x3E3E,0x1FFC,0x07F0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [o]
    278. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3DF8,0x3FFE,0x3F3E,0x3E1F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C0F,0x3C1F,0x3E1E,0x3F3E,0x3FFC,0x3FF8,0x3C00,0x3C00,0x3C00,0x3C00,0x3C00, // Ascii = [p]
    279. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07EE,0x1FFE,0x3E7E,0x3C1E,0x7C1E,0x781E,0x781E,0x781E,0x781E,0x781E,0x7C1E,0x7C3E,0x3E7E,0x1FFE,0x0FDE,0x001E,0x001E,0x001E,0x001E,0x001E, // Ascii = [q]
    280. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1F7F,0x1FFF,0x1FE7,0x1FC7,0x1F87,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x1F00,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [r]
    281. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07FC,0x1FFE,0x1E0E,0x3E00,0x3E00,0x3F00,0x1FE0,0x07FC,0x00FE,0x003E,0x001E,0x001E,0x3C3E,0x3FFC,0x1FF0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [s]
    282. 0x0000,0x0000,0x0000,0x0780,0x0780,0x0780,0x7FFF,0x7FFF,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x0780,0x07C0,0x03FF,0x01FF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [t]
    283. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C1E,0x3C3E,0x3C7E,0x3EFE,0x1FFE,0x0FDE,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [u]
    284. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF007,0x780F,0x780F,0x3C1E,0x3C1E,0x3E1E,0x1E3C,0x1E3C,0x0F78,0x0F78,0x0FF0,0x07F0,0x07F0,0x03E0,0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [v]
    285. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF003,0xF1E3,0xF3E3,0xF3E7,0xF3F7,0xF3F7,0x7FF7,0x7F77,0x7F7F,0x7F7F,0x7F7F,0x3E3E,0x3E3E,0x3E3E,0x3E3E,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [w]
    286. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7C0F,0x3E1E,0x3E3C,0x1F3C,0x0FF8,0x07F0,0x07F0,0x03E0,0x07F0,0x07F8,0x0FF8,0x1E7C,0x3E3E,0x3C1F,0x781F,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [x]
    287. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xF807,0x780F,0x7C0F,0x3C1E,0x3C1E,0x1E3C,0x1E3C,0x1F3C,0x0F78,0x0FF8,0x07F0,0x07F0,0x03E0,0x03E0,0x03C0,0x03C0,0x03C0,0x0780,0x0F80,0x7F00, // Ascii = [y]
    288. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3FFF,0x3FFF,0x001F,0x003E,0x007C,0x00F8,0x01F0,0x03E0,0x07C0,0x0F80,0x1F00,0x1E00,0x3C00,0x7FFF,0x7FFF,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [z]
    289. 0x01FE,0x03E0,0x03C0,0x03C0,0x03C0,0x03C0,0x01E0,0x01E0,0x01E0,0x01C0,0x03C0,0x3F80,0x3F80,0x03C0,0x01C0,0x01E0,0x01E0,0x01E0,0x03C0,0x03C0,0x03C0,0x03C0,0x03E0,0x01FE,0x007E,0x0000, // Ascii = [{]
    290. 0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x0000, // Ascii = [|]
    291. 0x3FC0,0x03E0,0x01E0,0x01E0,0x01E0,0x01E0,0x01C0,0x03C0,0x03C0,0x01C0,0x01E0,0x00FE,0x00FE,0x01E0,0x01C0,0x03C0,0x03C0,0x01C0,0x01E0,0x01E0,0x01E0,0x01E0,0x03E0,0x3FC0,0x3F00,0x0000, // Ascii = [}]
    292. 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3F07,0x7FC7,0x73E7,0xF1FF,0xF07E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // Ascii = [~]
    293. };
    294. FontDef Font_7x10 = {7,10,Font7x10};
    295. FontDef Font_11x18 = {11,18,Font11x18};
    296. FontDef Font_16x26 = {16,26,Font16x26};
    1. /* vim: set ai et ts=4 sw=4: */
    2. #ifndef __ST7735_H__
    3. #define __ST7735_H__
    4. #include "fonts.h"
    5. #include <stdbool.h>
    6. #define ST7735_MADCTL_MY 0x80
    7. #define ST7735_MADCTL_MX 0x40
    8. #define ST7735_MADCTL_MV 0x20
    9. #define ST7735_MADCTL_ML 0x10
    10. #define ST7735_MADCTL_RGB 0x00
    11. #define ST7735_MADCTL_BGR 0x08
    12. #define ST7735_MADCTL_MH 0x04
    13. /*** Redefine if necessary ***/
    14. #define ST7735_SPI_PORT hspi1
    15. extern SPI_HandleTypeDef ST7735_SPI_PORT;
    16. //#define LCD_RST_Pin GPIO_PIN_3
    17. //#define LCD_RST_GPIO_Port GPIOB
    18. //#define LCD_DC_Pin GPIO_PIN_4
    19. //#define LCD_DC_GPIO_Port GPIOB
    20. //#define LCD_CS_Pin GPIO_PIN_5
    21. //#define LCD_CS_GPIO_Port GPIOB
    22. #define ST7735_RES_Pin GPIO_PIN_3
    23. #define ST7735_RES_GPIO_Port GPIOB
    24. #define ST7735_CS_Pin GPIO_PIN_5
    25. #define ST7735_CS_GPIO_Port GPIOB
    26. #define ST7735_DC_Pin GPIO_PIN_4
    27. #define ST7735_DC_GPIO_Port GPIOB
    28. // AliExpress/eBay 1.8" display, default orientation
    29. #define ST7735_IS_160X128 1
    30. #define ST7735_WIDTH 128
    31. #define ST7735_HEIGHT 160
    32. #define ST7735_XSTART 0
    33. #define ST7735_YSTART 0
    34. #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MY)
    35. // AliExpress/eBay 1.8" display, rotate right
    36. /*
    37. #define ST7735_IS_160X128 1
    38. #define ST7735_WIDTH 160
    39. #define ST7735_HEIGHT 128
    40. #define ST7735_XSTART 0
    41. #define ST7735_YSTART 0
    42. #define ST7735_ROTATION (ST7735_MADCTL_MY | ST7735_MADCTL_MV)
    43. */
    44. // AliExpress/eBay 1.8" display, rotate left
    45. /*
    46. #define ST7735_IS_160X128 1
    47. #define ST7735_WIDTH 160
    48. #define ST7735_HEIGHT 128
    49. #define ST7735_XSTART 0
    50. #define ST7735_YSTART 0
    51. #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MV)
    52. */
    53. // AliExpress/eBay 1.8" display, upside down
    54. /*
    55. #define ST7735_IS_160X128 1
    56. #define ST7735_WIDTH 128
    57. #define ST7735_HEIGHT 160
    58. #define ST7735_XSTART 0
    59. #define ST7735_YSTART 0
    60. #define ST7735_ROTATION (0)
    61. */
    62. // WaveShare ST7735S-based 1.8" display, default orientation
    63. /*
    64. #define ST7735_IS_160X128 1
    65. #define ST7735_WIDTH 128
    66. #define ST7735_HEIGHT 160
    67. #define ST7735_XSTART 2
    68. #define ST7735_YSTART 1
    69. #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MY | ST7735_MADCTL_RGB)
    70. */
    71. // WaveShare ST7735S-based 1.8" display, rotate right
    72. /*
    73. #define ST7735_IS_160X128 1
    74. #define ST7735_WIDTH 160
    75. #define ST7735_HEIGHT 128
    76. #define ST7735_XSTART 1
    77. #define ST7735_YSTART 2
    78. #define ST7735_ROTATION (ST7735_MADCTL_MY | ST7735_MADCTL_MV | ST7735_MADCTL_RGB)
    79. */
    80. // WaveShare ST7735S-based 1.8" display, rotate left
    81. /*
    82. #define ST7735_IS_160X128 1
    83. #define ST7735_WIDTH 160
    84. #define ST7735_HEIGHT 128
    85. #define ST7735_XSTART 1
    86. #define ST7735_YSTART 2
    87. #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MV | ST7735_MADCTL_RGB)
    88. */
    89. // WaveShare ST7735S-based 1.8" display, upside down
    90. /*
    91. #define ST7735_IS_160X128 1
    92. #define ST7735_WIDTH 128
    93. #define ST7735_HEIGHT 160
    94. #define ST7735_XSTART 2
    95. #define ST7735_YSTART 1
    96. #define ST7735_ROTATION (ST7735_MADCTL_RGB)
    97. */
    98. // 1.44" display, default orientation
    99. //#define ST7735_IS_128X128 1
    100. //#define ST7735_WIDTH 128
    101. //#define ST7735_HEIGHT 128
    102. //#define ST7735_XSTART 2
    103. //#define ST7735_YSTART 3
    104. //#define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MY | ST7735_MADCTL_BGR)
    105. // 1.44" display, rotate right
    106. /*
    107. #define ST7735_IS_128X128 1
    108. #define ST7735_WIDTH 128
    109. #define ST7735_HEIGHT 128
    110. #define ST7735_XSTART 3
    111. #define ST7735_YSTART 2
    112. #define ST7735_ROTATION (ST7735_MADCTL_MY | ST7735_MADCTL_MV | ST7735_MADCTL_BGR)
    113. */
    114. // 1.44" display, rotate left
    115. /*
    116. #define ST7735_IS_128X128 1
    117. #define ST7735_WIDTH 128
    118. #define ST7735_HEIGHT 128
    119. #define ST7735_XSTART 1
    120. #define ST7735_YSTART 2
    121. #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MV | ST7735_MADCTL_BGR)
    122. */
    123. // 1.44" display, upside down
    124. /*
    125. #define ST7735_IS_128X128 1
    126. #define ST7735_WIDTH 128
    127. #define ST7735_HEIGHT 128
    128. #define ST7735_XSTART 2
    129. #define ST7735_YSTART 1
    130. #define ST7735_ROTATION (ST7735_MADCTL_BGR)
    131. */
    132. // mini 160x80 display (it's unlikely you want the default orientation)
    133. /*
    134. #define ST7735_IS_160X80 1
    135. #define ST7735_XSTART 26
    136. #define ST7735_YSTART 1
    137. #define ST7735_WIDTH 80
    138. #define ST7735_HEIGHT 160
    139. #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MY | ST7735_MADCTL_BGR)
    140. */
    141. // mini 160x80, rotate left
    142. /*
    143. #define ST7735_IS_160X80 1
    144. #define ST7735_XSTART 1
    145. #define ST7735_YSTART 26
    146. #define ST7735_WIDTH 160
    147. #define ST7735_HEIGHT 80
    148. #define ST7735_ROTATION (ST7735_MADCTL_MX | ST7735_MADCTL_MV | ST7735_MADCTL_BGR)
    149. */
    150. // mini 160x80, rotate right
    151. /*
    152. #define ST7735_IS_160X80 1
    153. #define ST7735_XSTART 1
    154. #define ST7735_YSTART 26
    155. #define ST7735_WIDTH 160
    156. #define ST7735_HEIGHT 80
    157. #define ST7735_ROTATION (ST7735_MADCTL_MY | ST7735_MADCTL_MV | ST7735_MADCTL_BGR)
    158. */
    159. /****************************/
    160. #define ST7735_NOP 0x00
    161. #define ST7735_SWRESET 0x01
    162. #define ST7735_RDDID 0x04
    163. #define ST7735_RDDST 0x09
    164. #define ST7735_SLPIN 0x10
    165. #define ST7735_SLPOUT 0x11
    166. #define ST7735_PTLON 0x12
    167. #define ST7735_NORON 0x13
    168. #define ST7735_INVOFF 0x20
    169. #define ST7735_INVON 0x21
    170. #define ST7735_GAMSET 0x26
    171. #define ST7735_DISPOFF 0x28
    172. #define ST7735_DISPON 0x29
    173. #define ST7735_CASET 0x2A
    174. #define ST7735_RASET 0x2B
    175. #define ST7735_RAMWR 0x2C
    176. #define ST7735_RAMRD 0x2E
    177. #define ST7735_PTLAR 0x30
    178. #define ST7735_COLMOD 0x3A
    179. #define ST7735_MADCTL 0x36
    180. #define ST7735_FRMCTR1 0xB1
    181. #define ST7735_FRMCTR2 0xB2
    182. #define ST7735_FRMCTR3 0xB3
    183. #define ST7735_INVCTR 0xB4
    184. #define ST7735_DISSET5 0xB6
    185. #define ST7735_PWCTR1 0xC0
    186. #define ST7735_PWCTR2 0xC1
    187. #define ST7735_PWCTR3 0xC2
    188. #define ST7735_PWCTR4 0xC3
    189. #define ST7735_PWCTR5 0xC4
    190. #define ST7735_VMCTR1 0xC5
    191. #define ST7735_RDID1 0xDA
    192. #define ST7735_RDID2 0xDB
    193. #define ST7735_RDID3 0xDC
    194. #define ST7735_RDID4 0xDD
    195. #define ST7735_PWCTR6 0xFC
    196. #define ST7735_GMCTRP1 0xE0
    197. #define ST7735_GMCTRN1 0xE1
    198. // Color definitions
    199. #define ST7735_BLACK 0x0000
    200. #define ST7735_BLUE 0x001F
    201. #define ST7735_RED 0xF800
    202. #define ST7735_GREEN 0x07E0
    203. #define ST7735_CYAN 0x07FF
    204. #define ST7735_MAGENTA 0xF81F
    205. #define ST7735_YELLOW 0xFFE0
    206. #define ST7735_WHITE 0xFFFF
    207. #define ST7735_COLOR565(r, g, b) (((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3))
    208. typedef enum {
    209. GAMMA_10 = 0x01,
    210. GAMMA_25 = 0x02,
    211. GAMMA_22 = 0x04,
    212. GAMMA_18 = 0x08
    213. } GammaDef;
    214. #ifdef __cplusplus
    215. extern "C" {
    216. #endif
    217. // call before initializing any SPI devices
    218. void ST7735_Unselect();
    219. void ST7735_Init(void);
    220. void ST7735_DrawPixel(uint16_t x, uint16_t y, uint16_t color);
    221. void ST7735_WriteString(uint16_t x, uint16_t y, const char* str, FontDef font, uint16_t color, uint16_t bgcolor);
    222. void ST7735_FillRectangle(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color);
    223. void ST7735_FillRectangleFast(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color);
    224. void ST7735_FillScreen(uint16_t color);
    225. void ST7735_FillScreenFast(uint16_t color);
    226. void ST7735_DrawImage(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint16_t* data);
    227. void ST7735_InvertColors(bool invert);
    228. void ST7735_SetGamma(GammaDef gamma);
    229. #ifdef __cplusplus
    230. }
    231. #endif
    232. #endif // __ST7735_H__
    1. /* vim: set ai et ts=4 sw=4: */
    2. #include "stm32f4xx_hal.h"
    3. #include "st7735.h"
    4. #include "malloc.h"
    5. #include "string.h"
    6. #define DELAY 0x80
    7. // based on Adafruit ST7735 library for Arduino
    8. static const uint8_t
    9. init_cmds1[] = { // Init for 7735R, part 1 (red or green tab)
    10. 15, // 15 commands in list:
    11. ST7735_SWRESET, DELAY, // 1: Software reset, 0 args, w/delay
    12. 150, // 150 ms delay
    13. ST7735_SLPOUT , DELAY, // 2: Out of sleep mode, 0 args, w/delay
    14. 255, // 500 ms delay
    15. ST7735_FRMCTR1, 3 , // 3: Frame rate ctrl - normal mode, 3 args:
    16. 0x01, 0x2C, 0x2D, // Rate = fosc/(1x2+40) * (LINE+2C+2D)
    17. ST7735_FRMCTR2, 3 , // 4: Frame rate control - idle mode, 3 args:
    18. 0x01, 0x2C, 0x2D, // Rate = fosc/(1x2+40) * (LINE+2C+2D)
    19. ST7735_FRMCTR3, 6 , // 5: Frame rate ctrl - partial mode, 6 args:
    20. 0x01, 0x2C, 0x2D, // Dot inversion mode
    21. 0x01, 0x2C, 0x2D, // Line inversion mode
    22. ST7735_INVCTR , 1 , // 6: Display inversion ctrl, 1 arg, no delay:
    23. 0x07, // No inversion
    24. ST7735_PWCTR1 , 3 , // 7: Power control, 3 args, no delay:
    25. 0xA2,
    26. 0x02, // -4.6V
    27. 0x84, // AUTO mode
    28. ST7735_PWCTR2 , 1 , // 8: Power control, 1 arg, no delay:
    29. 0xC5, // VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD
    30. ST7735_PWCTR3 , 2 , // 9: Power control, 2 args, no delay:
    31. 0x0A, // Opamp current small
    32. 0x00, // Boost frequency
    33. ST7735_PWCTR4 , 2 , // 10: Power control, 2 args, no delay:
    34. 0x8A, // BCLK/2, Opamp current small & Medium low
    35. 0x2A,
    36. ST7735_PWCTR5 , 2 , // 11: Power control, 2 args, no delay:
    37. 0x8A, 0xEE,
    38. ST7735_VMCTR1 , 1 , // 12: Power control, 1 arg, no delay:
    39. 0x0E,
    40. ST7735_INVOFF , 0 , // 13: Don't invert display, no args, no delay
    41. ST7735_MADCTL , 1 , // 14: Memory access control (directions), 1 arg:
    42. ST7735_ROTATION, // row addr/col addr, bottom to top refresh
    43. ST7735_COLMOD , 1 , // 15: set color mode, 1 arg, no delay:
    44. 0x05 }, // 16-bit color
    45. #if (defined(ST7735_IS_128X128) || defined(ST7735_IS_160X128))
    46. init_cmds2[] = { // Init for 7735R, part 2 (1.44" display)
    47. 2, // 2 commands in list:
    48. ST7735_CASET , 4 , // 1: Column addr set, 4 args, no delay:
    49. 0x00, 0x00, // XSTART = 0
    50. 0x00, 0x7F, // XEND = 127
    51. ST7735_RASET , 4 , // 2: Row addr set, 4 args, no delay:
    52. 0x00, 0x00, // XSTART = 0
    53. 0x00, 0x7F }, // XEND = 127
    54. #endif // ST7735_IS_128X128
    55. #ifdef ST7735_IS_160X80
    56. init_cmds2[] = { // Init for 7735S, part 2 (160x80 display)
    57. 3, // 3 commands in list:
    58. ST7735_CASET , 4 , // 1: Column addr set, 4 args, no delay:
    59. 0x00, 0x00, // XSTART = 0
    60. 0x00, 0x4F, // XEND = 79
    61. ST7735_RASET , 4 , // 2: Row addr set, 4 args, no delay:
    62. 0x00, 0x00, // XSTART = 0
    63. 0x00, 0x9F , // XEND = 159
    64. ST7735_INVON, 0 }, // 3: Invert colors
    65. #endif
    66. init_cmds3[] = { // Init for 7735R, part 3 (red or green tab)
    67. 4, // 4 commands in list:
    68. ST7735_GMCTRP1, 16 , // 1: Gamma Adjustments (pos. polarity), 16 args, no delay:
    69. 0x02, 0x1c, 0x07, 0x12,
    70. 0x37, 0x32, 0x29, 0x2d,
    71. 0x29, 0x25, 0x2B, 0x39,
    72. 0x00, 0x01, 0x03, 0x10,
    73. ST7735_GMCTRN1, 16 , // 2: Gamma Adjustments (neg. polarity), 16 args, no delay:
    74. 0x03, 0x1d, 0x07, 0x06,
    75. 0x2E, 0x2C, 0x29, 0x2D,
    76. 0x2E, 0x2E, 0x37, 0x3F,
    77. 0x00, 0x00, 0x02, 0x10,
    78. ST7735_NORON , DELAY, // 3: Normal display on, no args, w/delay
    79. 10, // 10 ms delay
    80. ST7735_DISPON , DELAY, // 4: Main screen turn on, no args w/delay
    81. 100 }; // 100 ms delay
    82. static void ST7735_Select() {
    83. HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_RESET);
    84. }
    85. void ST7735_Unselect() {
    86. HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET);
    87. }
    88. static void ST7735_Reset() {
    89. HAL_GPIO_WritePin(ST7735_RES_GPIO_Port, ST7735_RES_Pin, GPIO_PIN_RESET);
    90. HAL_Delay(5);
    91. HAL_GPIO_WritePin(ST7735_RES_GPIO_Port, ST7735_RES_Pin, GPIO_PIN_SET);
    92. }
    93. static void ST7735_WriteCommand(uint8_t cmd) {
    94. HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_RESET);
    95. HAL_SPI_Transmit(&ST7735_SPI_PORT, &cmd, sizeof(cmd), HAL_MAX_DELAY);
    96. }
    97. static void ST7735_WriteData(uint8_t* buff, size_t buff_size) {
    98. HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_SET);
    99. HAL_SPI_Transmit(&ST7735_SPI_PORT, buff, buff_size, HAL_MAX_DELAY);
    100. }
    101. static void ST7735_ExecuteCommandList(const uint8_t *addr) {
    102. uint8_t numCommands, numArgs;
    103. uint16_t ms;
    104. numCommands = *addr++;
    105. while(numCommands--) {
    106. uint8_t cmd = *addr++;
    107. ST7735_WriteCommand(cmd);
    108. numArgs = *addr++;
    109. // If high bit set, delay follows args
    110. ms = numArgs & DELAY;
    111. numArgs &= ~DELAY;
    112. if(numArgs) {
    113. ST7735_WriteData((uint8_t*)addr, numArgs);
    114. addr += numArgs;
    115. }
    116. if(ms) {
    117. ms = *addr++;
    118. if(ms == 255) ms = 500;
    119. HAL_Delay(ms);
    120. }
    121. }
    122. }
    123. static void ST7735_SetAddressWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1) {
    124. // column address set
    125. ST7735_WriteCommand(ST7735_CASET);
    126. uint8_t data[] = { 0x00, x0 + ST7735_XSTART, 0x00, x1 + ST7735_XSTART };
    127. ST7735_WriteData(data, sizeof(data));
    128. // row address set
    129. ST7735_WriteCommand(ST7735_RASET);
    130. data[1] = y0 + ST7735_YSTART;
    131. data[3] = y1 + ST7735_YSTART;
    132. ST7735_WriteData(data, sizeof(data));
    133. // write to RAM
    134. ST7735_WriteCommand(ST7735_RAMWR);
    135. }
    136. void ST7735_Init() {
    137. ST7735_Select();
    138. ST7735_Reset();
    139. ST7735_ExecuteCommandList(init_cmds1);
    140. ST7735_ExecuteCommandList(init_cmds2);
    141. ST7735_ExecuteCommandList(init_cmds3);
    142. ST7735_Unselect();
    143. }
    144. void ST7735_DrawPixel(uint16_t x, uint16_t y, uint16_t color) {
    145. if((x >= ST7735_WIDTH) || (y >= ST7735_HEIGHT))
    146. return;
    147. ST7735_Select();
    148. ST7735_SetAddressWindow(x, y, x+1, y+1);
    149. uint8_t data[] = { color >> 8, color & 0xFF };
    150. ST7735_WriteData(data, sizeof(data));
    151. ST7735_Unselect();
    152. }
    153. static void ST7735_WriteChar(uint16_t x, uint16_t y, char ch, FontDef font, uint16_t color, uint16_t bgcolor) {
    154. uint32_t i, b, j;
    155. ST7735_SetAddressWindow(x, y, x+font.width-1, y+font.height-1);
    156. for(i = 0; i < font.height; i++) {
    157. b = font.data[(ch - 32) * font.height + i];
    158. for(j = 0; j < font.width; j++) {
    159. if((b << j) & 0x8000) {
    160. uint8_t data[] = { color >> 8, color & 0xFF };
    161. ST7735_WriteData(data, sizeof(data));
    162. } else {
    163. uint8_t data[] = { bgcolor >> 8, bgcolor & 0xFF };
    164. ST7735_WriteData(data, sizeof(data));
    165. }
    166. }
    167. }
    168. }
    169. /*
    170. Simpler (and probably slower) implementation:
    171. static void ST7735_WriteChar(uint16_t x, uint16_t y, char ch, FontDef font, uint16_t color) {
    172. uint32_t i, b, j;
    173. for(i = 0; i < font.height; i++) {
    174. b = font.data[(ch - 32) * font.height + i];
    175. for(j = 0; j < font.width; j++) {
    176. if((b << j) & 0x8000) {
    177. ST7735_DrawPixel(x + j, y + i, color);
    178. }
    179. }
    180. }
    181. }
    182. */
    183. void ST7735_WriteString(uint16_t x, uint16_t y, const char* str, FontDef font, uint16_t color, uint16_t bgcolor) {
    184. ST7735_Select();
    185. while(*str) {
    186. if(x + font.width >= ST7735_WIDTH) {
    187. x = 0;
    188. y += font.height;
    189. if(y + font.height >= ST7735_HEIGHT) {
    190. break;
    191. }
    192. if(*str == ' ') {
    193. // skip spaces in the beginning of the new line
    194. str++;
    195. continue;
    196. }
    197. }
    198. ST7735_WriteChar(x, y, *str, font, color, bgcolor);
    199. x += font.width;
    200. str++;
    201. }
    202. ST7735_Unselect();
    203. }
    204. void ST7735_FillRectangle(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color) {
    205. // clipping
    206. if((x >= ST7735_WIDTH) || (y >= ST7735_HEIGHT)) return;
    207. if((x + w - 1) >= ST7735_WIDTH) w = ST7735_WIDTH - x;
    208. if((y + h - 1) >= ST7735_HEIGHT) h = ST7735_HEIGHT - y;
    209. ST7735_Select();
    210. ST7735_SetAddressWindow(x, y, x+w-1, y+h-1);
    211. uint8_t data[] = { color >> 8, color & 0xFF };
    212. HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_SET);
    213. for(y = h; y > 0; y--) {
    214. for(x = w; x > 0; x--) {
    215. HAL_SPI_Transmit(&ST7735_SPI_PORT, data, sizeof(data), HAL_MAX_DELAY);
    216. }
    217. }
    218. ST7735_Unselect();
    219. }
    220. void ST7735_FillRectangleFast(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color) {
    221. // clipping
    222. if((x >= ST7735_WIDTH) || (y >= ST7735_HEIGHT)) return;
    223. if((x + w - 1) >= ST7735_WIDTH) w = ST7735_WIDTH - x;
    224. if((y + h - 1) >= ST7735_HEIGHT) h = ST7735_HEIGHT - y;
    225. ST7735_Select();
    226. ST7735_SetAddressWindow(x, y, x+w-1, y+h-1);
    227. // Prepare whole line in a single buffer
    228. uint8_t pixel[] = { color >> 8, color & 0xFF };
    229. uint8_t *line = malloc(w * sizeof(pixel));
    230. for(x = 0; x < w; ++x)
    231. memcpy(line + x * sizeof(pixel), pixel, sizeof(pixel));
    232. HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_SET);
    233. for(y = h; y > 0; y--)
    234. HAL_SPI_Transmit(&ST7735_SPI_PORT, line, w * sizeof(pixel), HAL_MAX_DELAY);
    235. free(line);
    236. ST7735_Unselect();
    237. }
    238. void ST7735_FillScreen(uint16_t color) {
    239. ST7735_FillRectangle(0, 0, ST7735_WIDTH, ST7735_HEIGHT, color);
    240. }
    241. void ST7735_FillScreenFast(uint16_t color) {
    242. ST7735_FillRectangleFast(0, 0, ST7735_WIDTH, ST7735_HEIGHT, color);
    243. }
    244. void ST7735_DrawImage(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint16_t* data) {
    245. if((x >= ST7735_WIDTH) || (y >= ST7735_HEIGHT)) return;
    246. if((x + w - 1) >= ST7735_WIDTH) return;
    247. if((y + h - 1) >= ST7735_HEIGHT) return;
    248. ST7735_Select();
    249. ST7735_SetAddressWindow(x, y, x+w-1, y+h-1);
    250. ST7735_WriteData((uint8_t*)data, sizeof(uint16_t)*w*h);
    251. ST7735_Unselect();
    252. }
    253. void ST7735_InvertColors(bool invert) {
    254. ST7735_Select();
    255. ST7735_WriteCommand(invert ? ST7735_INVON : ST7735_INVOFF);
    256. ST7735_Unselect();
    257. }
    258. void ST7735_SetGamma(GammaDef gamma)
    259. {
    260. ST7735_Select();
    261. ST7735_WriteCommand(ST7735_GAMSET);
    262. ST7735_WriteData((uint8_t *) &gamma, sizeof(gamma));
    263. ST7735_Unselect();
    264. }
    1. /* USER CODE BEGIN Header */
    2. /**
    3. ******************************************************************************
    4. * @file : main.c
    5. * @brief : Main program body
    6. ******************************************************************************
    7. * @attention
    8. *
    9. * Copyright (c) 2024 STMicroelectronics.
    10. * All rights reserved.
    11. *
    12. * This software is licensed under terms that can be found in the LICENSE file
    13. * in the root directory of this software component.
    14. * If no LICENSE file comes with this software, it is provided AS-IS.
    15. *
    16. ******************************************************************************
    17. */
    18. /* USER CODE END Header */
    19. /* Includes ------------------------------------------------------------------*/
    20. #include "main.h"
    21. #include "spi.h"
    22. #include "usart.h"
    23. #include "gpio.h"
    24. #include "st7735.h"
    25. #include "testimg.h"
    26. /* Private includes ----------------------------------------------------------*/
    27. /* USER CODE BEGIN Includes */
    28. /* USER CODE END Includes */
    29. /* Private typedef -----------------------------------------------------------*/
    30. /* USER CODE BEGIN PTD */
    31. /* USER CODE END PTD */
    32. /* Private define ------------------------------------------------------------*/
    33. /* USER CODE BEGIN PD */
    34. /* USER CODE END PD */
    35. /* Private macro -------------------------------------------------------------*/
    36. /* USER CODE BEGIN PM */
    37. /* USER CODE END PM */
    38. /* Private variables ---------------------------------------------------------*/
    39. /* USER CODE BEGIN PV */
    40. /* USER CODE END PV */
    41. /* Private function prototypes -----------------------------------------------*/
    42. void SystemClock_Config(void);
    43. /* USER CODE BEGIN PFP */
    44. /* USER CODE END PFP */
    45. /* Private user code ---------------------------------------------------------*/
    46. /* USER CODE BEGIN 0 */
    47. /* USER CODE END 0 */
    48. /**
    49. * @brief The application entry point.
    50. * @retval int
    51. */
    52. int main(void)
    53. {
    54. /* USER CODE BEGIN 1 */
    55. /* USER CODE END 1 */
    56. /* MCU Configuration--------------------------------------------------------*/
    57. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    58. HAL_Init();
    59. /* USER CODE BEGIN Init */
    60. /* USER CODE END Init */
    61. /* Configure the system clock */
    62. SystemClock_Config();
    63. /* USER CODE BEGIN SysInit */
    64. /* USER CODE END SysInit */
    65. /* Initialize all configured peripherals */
    66. MX_GPIO_Init();
    67. MX_SPI1_Init();
    68. MX_USART2_UART_Init();
    69. /* USER CODE BEGIN 2 */
    70. ST7735_Init();
    71. // ST7735_FillScreen(ST7735_RED);
    72. // HAL_Delay(500);
    73. // ST7735_FillScreen(ST7735_GREEN);
    74. // HAL_Delay(500);
    75. // ST7735_FillScreen(ST7735_BLUE);
    76. // HAL_Delay(500);
    77. /* USER CODE END 2 */
    78. /* Infinite loop */
    79. /* USER CODE BEGIN WHILE */
    80. while (1)
    81. {
    82. ST7735_FillScreen(ST7735_BLACK);
    83. for(int x = 0; x < ST7735_WIDTH; x++) {
    84. ST7735_DrawPixel(x, 0, ST7735_RED);
    85. ST7735_DrawPixel(x, ST7735_HEIGHT-1, ST7735_RED);
    86. }
    87. for(int y = 0; y < ST7735_HEIGHT; y++) {
    88. ST7735_DrawPixel(0, y, ST7735_RED);
    89. ST7735_DrawPixel(ST7735_WIDTH-1, y, ST7735_RED);
    90. }
    91. HAL_Delay(300);
    92. // Check fonts
    93. ST7735_FillScreen(ST7735_BLACK);
    94. ST7735_WriteString(0, 0, "Font_7x10, red on black, lorem ipsum dolor sit amet", Font_7x10, ST7735_RED, ST7735_BLACK);
    95. ST7735_WriteString(0, 3*10, "Font_11x18, green, lorem ipsum", Font_11x18, ST7735_GREEN, ST7735_BLACK);
    96. ST7735_WriteString(0, 3*10+3*18, "Font_16x26", Font_16x26, ST7735_BLUE, ST7735_BLACK);
    97. HAL_Delay(200);
    98. // Check colors
    99. ST7735_FillScreen(ST7735_BLACK);
    100. ST7735_WriteString(0, 0, "BLACK", Font_11x18, ST7735_WHITE, ST7735_BLACK);
    101. HAL_Delay(50);
    102. ST7735_FillScreen(ST7735_BLUE);
    103. ST7735_WriteString(0, 0, "BLUE", Font_11x18, ST7735_BLACK, ST7735_BLUE);
    104. HAL_Delay(50);
    105. ST7735_FillScreen(ST7735_RED);
    106. ST7735_WriteString(0, 0, "RED", Font_11x18, ST7735_BLACK, ST7735_RED);
    107. HAL_Delay(50);
    108. ST7735_FillScreen(ST7735_GREEN);
    109. ST7735_WriteString(0, 0, "GREEN", Font_11x18, ST7735_BLACK, ST7735_GREEN);
    110. HAL_Delay(50);
    111. ST7735_FillScreen(ST7735_CYAN);
    112. ST7735_WriteString(0, 0, "CYAN", Font_11x18, ST7735_BLACK, ST7735_CYAN);
    113. HAL_Delay(50);
    114. ST7735_FillScreen(ST7735_MAGENTA);
    115. ST7735_WriteString(0, 0, "MAGENTA", Font_11x18, ST7735_BLACK, ST7735_MAGENTA);
    116. HAL_Delay(50);
    117. ST7735_FillScreen(ST7735_YELLOW);
    118. ST7735_WriteString(0, 0, "YELLOW", Font_11x18, ST7735_BLACK, ST7735_YELLOW);
    119. HAL_Delay(200);
    120. // ST7735_DrawImage(0, 0, ST7735_WIDTH, ST7735_HEIGHT, (uint16_t*)test_img_128x128);
    121. HAL_Delay(2000);
    122. /* USER CODE END WHILE */
    123. /* USER CODE BEGIN 3 */
    124. }
    125. /* USER CODE END 3 */
    126. }
    127. /**
    128. * @brief System Clock Configuration
    129. * @retval None
    130. */
    131. void SystemClock_Config(void)
    132. {
    133. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    134. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    135. /** Configure the main internal regulator output voltage
    136. */
    137. __HAL_RCC_PWR_CLK_ENABLE();
    138. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
    139. /** Initializes the RCC Oscillators according to the specified parameters
    140. * in the RCC_OscInitTypeDef structure.
    141. */
    142. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    143. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
    144. RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
    145. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    146. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
    147. RCC_OscInitStruct.PLL.PLLM = 8;
    148. RCC_OscInitStruct.PLL.PLLN = 100;
    149. RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
    150. RCC_OscInitStruct.PLL.PLLQ = 4;
    151. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    152. {
    153. Error_Handler();
    154. }
    155. /** Initializes the CPU, AHB and APB buses clocks
    156. */
    157. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    158. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    159. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    160. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    161. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
    162. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    163. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
    164. {
    165. Error_Handler();
    166. }
    167. }
    168. /* USER CODE BEGIN 4 */
    169. /* USER CODE END 4 */
    170. /**
    171. * @brief This function is executed in case of error occurrence.
    172. * @retval None
    173. */
    174. void Error_Handler(void)
    175. {
    176. /* USER CODE BEGIN Error_Handler_Debug */
    177. /* User can add his own implementation to report the HAL error return state */
    178. __disable_irq();
    179. while (1)
    180. {
    181. }
    182. /* USER CODE END Error_Handler_Debug */
    183. }
    184. #ifdef USE_FULL_ASSERT
    185. /**
    186. * @brief Reports the name of the source file and the source line number
    187. * where the assert_param error has occurred.
    188. * @param file: pointer to the source file name
    189. * @param line: assert_param error line source number
    190. * @retval None
    191. */
    192. void assert_failed(uint8_t *file, uint32_t line)
    193. {
    194. /* USER CODE BEGIN 6 */
    195. /* User can add his own implementation to report the file name and line number,
    196. ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
    197. /* USER CODE END 6 */
    198. }
    199. #endif /* USE_FULL_ASSERT */

  • 相关阅读:
    python--手机步数----微信运动--支付宝运动等步数刷新
    cuda和cudnn和tensorrt的理解
    QCN6274 vs QCA9880: Comparison of SOC and wireless communication chips
    HTML/CSS 基础 2
    语文课内外杂志语文课内外杂志社语文课内外杂志社2022年第14期目录
    Redis的安装教程(Windows+Linux)【超详细】
    9月15日作业
    go-zero微服务实战系列(四、CRUD热热身)
    DevOps 环境预测测试中的机器学习
    基于sass模式Java语言+MySQL + MyCat开发的his系统源码 HIS系统住院业务流程 HIS系统住院流程化管理
  • 原文地址:https://blog.csdn.net/zb313982521/article/details/138574642