广州网站建设阿里云/精准营销系统价值
stm32cubemx新建工程代码,并生成工程
设置gpio
设置SPI
其他的参考stm32默认设置
然后编辑驱动代码 ili9341.h
#ifndef ILI9341_H
#define ILI9341_H#include <stdbool.h>
#include <stdint.h>#include "glcdfont.h"
#include "stm32f4xx_hal.h"#define ILI9341_TFTWIDTH 240
#define ILI9341_TFTHEIGHT 320#define ILI9341_NOP 0x00
#define ILI9341_SWRESET 0x01
#define ILI9341_RDDID 0x04
#define ILI9341_RDDST 0x09#define ILI9341_SLPIN 0x10
#define ILI9341_SLPOUT 0x11
#define ILI9341_PTLON 0x12
#define ILI9341_NORON 0x13#define ILI9341_RDMODE 0x0A
#define ILI9341_RDMADCTL 0x0B
#define ILI9341_RDPIXFMT 0x0C
#define ILI9341_RDIMGFMT 0x0D
#define ILI9341_RDSELFDIAG 0x0F#define ILI9341_INVOFF 0x20
#define ILI9341_INVON 0x21
#define ILI9341_GAMMASET 0x26
#define ILI9341_DISPOFF 0x28
#define ILI9341_DISPON 0x29#define ILI9341_CASET 0x2A
#define ILI9341_PASET 0x2B
#define ILI9341_RAMWR 0x2C
#define ILI9341_RAMRD 0x2E#define ILI9341_PTLAR 0x30
#define ILI9341_MADCTL 0x36
#define ILI9341_PIXFMT 0x3A#define ILI9341_FRMCTR1 0xB1
#define ILI9341_FRMCTR2 0xB2
#define ILI9341_FRMCTR3 0xB3
#define ILI9341_INVCTR 0xB4
#define ILI9341_DFUNCTR 0xB6#define ILI9341_PWCTR1 0xC0
#define ILI9341_PWCTR2 0xC1
#define ILI9341_PWCTR3 0xC2
#define ILI9341_PWCTR4 0xC3
#define ILI9341_PWCTR5 0xC4
#define ILI9341_VMCTR1 0xC5
#define ILI9341_VMCTR2 0xC7#define ILI9341_RDID1 0xDA
#define ILI9341_RDID2 0xDB
#define ILI9341_RDID3 0xDC
#define ILI9341_RDID4 0xDD#define ILI9341_GMCTRP1 0xE0
#define ILI9341_GMCTRN1 0xE1
/*
#define ILI9341_PWCTR6 0xFC*/// Color definitions
#define ILI9341_BLACK 0x0000 /* 0, 0, 0 */
#define ILI9341_NAVY 0x000F /* 0, 0, 128 */
#define ILI9341_DARKGREEN 0x03E0 /* 0, 128, 0 */
#define ILI9341_DARKCYAN 0x03EF /* 0, 128, 128 */
#define ILI9341_MAROON 0x7800 /* 128, 0, 0 */
#define ILI9341_PURPLE 0x780F /* 128, 0, 128 */
#define ILI9341_OLIVE 0x7BE0 /* 128, 128, 0 */
#define ILI9341_LIGHTGREY 0xC618 /* 192, 192, 192 */
#define ILI9341_DARKGREY 0x7BEF /* 128, 128, 128 */
#define ILI9341_BLUE 0x001F /* 0, 0, 255 */
#define ILI9341_GREEN 0x07E0 /* 0, 255, 0 */
#define ILI9341_CYAN 0x07FF /* 0, 255, 255 */
#define ILI9341_RED 0xF800 /* 255, 0, 0 */
#define ILI9341_MAGENTA 0xF81F /* 255, 0, 255 */
#define ILI9341_YELLOW 0xFFE0 /* 255, 255, 0 */
#define ILI9341_WHITE 0xFFFF /* 255, 255, 255 */
#define ILI9341_ORANGE 0xFD20 /* 255, 165, 0 */
#define ILI9341_GREENYELLOW 0xAFE5 /* 173, 255, 47 */
#define ILI9341_PINK 0xF81Fvoid ILI9341_begin(SPI_HandleTypeDef *hSpi);
void ILI9341_drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
void ILI9341_fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
void ILI9341_drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
void ILI9341_drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
void ILI9341_fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
void ILI9341_fillScreen(uint16_t color);
void ILI9341_invertDisplay(bool i);
void ILI9341_drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color);
void ILI9341_fillRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color);
void ILI9341_drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
void ILI9341_fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
void ILI9341_setTextSize(uint8_t s);
void ILI9341_setTextColor(uint16_t c);
void ILI9341_setTextBgColor(uint16_t c);
void ILI9341_setTextWrap(bool w);
void ILI9341_setCursor(int16_t x, int16_t y);
uint16_t ILI9341_getCursorX(void);
uint16_t ILI9341_getCursorY(void);
void ILI9341_write(uint8_t c);
void ILI9341_getTextBounds(char *str, int16_t x, int16_t y, int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h);
void ILI9341_cp437(bool x);
uint16_t ILI9341_width(void);
uint16_t ILI9341_height(void);
void ILI9341_pushColor(uint16_t color);
void ILI9341_drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
void ILI9341_drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
uint16_t ILI9341_color565(uint8_t r, uint8_t g, uint8_t b);
void ILI9341_setRotation(uint8_t m);
uint16_t ILI9341_getRotation(void);#endif
glcdfont.h
#ifndef GLCDFONT_H
#define GLCDFONT_Hstatic const unsigned char font[] = {0x00, 0x00, 0x00, 0x00, 0x00,0x3E, 0x5B, 0x4F, 0x5B, 0x3E,0x3E, 0x6B, 0x4F, 0x6B, 0x3E,0x1C, 0x3E, 0x7C, 0x3E, 0x1C,0x18, 0x3C, 0x7E, 0x3C, 0x18,0x1C, 0x57, 0x7D, 0x57, 0x1C,0x1C, 0x5E, 0x7F, 0x5E, 0x1C,0x00, 0x18, 0x3C, 0x18, 0x00,0xFF, 0xE7, 0xC3, 0xE7, 0xFF,0x00, 0x18, 0x24, 0x18, 0x00,0xFF, 0xE7, 0xDB, 0xE7, 0xFF,0x30, 0x48, 0x3A, 0x06, 0x0E,0x26, 0x29, 0x79, 0x29, 0x26,0x40, 0x7F, 0x05, 0x05, 0x07,0x40, 0x7F, 0x05, 0x25, 0x3F,0x5A, 0x3C, 0xE7, 0x3C, 0x5A,0x7F, 0x3E, 0x1C, 0x1C, 0x08,0x08, 0x1C, 0x1C, 0x3E, 0x7F,0x14, 0x22, 0x7F, 0x22, 0x14,0x5F, 0x5F, 0x00, 0x5F, 0x5F,0x06, 0x09, 0x7F, 0x01, 0x7F,0x00, 0x66, 0x89, 0x95, 0x6A,0x60, 0x60, 0x60, 0x60, 0x60,0x94, 0xA2, 0xFF, 0xA2, 0x94,0x08, 0x04, 0x7E, 0x04, 0x08,0x10, 0x20, 0x7E, 0x20, 0x10,0x08, 0x08, 0x2A, 0x1C, 0x08,0x08, 0x1C, 0x2A, 0x08, 0x08,0x1E, 0x10, 0x10, 0x10, 0x10,0x0C, 0x1E, 0x0C, 0x1E, 0x0C,0x30, 0x38, 0x3E, 0x38, 0x30,0x06, 0x0E, 0x3E, 0x0E, 0x06,0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x5F, 0x00, 0x00,0x00, 0x07, 0x00, 0x07, 0x00,0x14, 0x7F, 0x14, 0x7F, 0x14,0x24, 0x2A, 0x7F, 0x2A, 0x12,0x23, 0x13, 0x08, 0x64, 0x62,0x36, 0x49, 0x56, 0x20, 0x50,0x00, 0x08, 0x07, 0x03, 0x00,0x00, 0x1C, 0x22, 0x41, 0x00,0x00, 0x41, 0x22, 0x1C, 0x00,0x2A, 0x1C, 0x7F, 0x1C, 0x2A,0x08, 0x08, 0x3E, 0x08, 0x08,0x00, 0x80, 0x70, 0x30, 0x00,0x08, 0x08, 0x08, 0x08, 0x08,0x00, 0x00, 0x60, 0x60, 0x00,0x20, 0x10, 0x08, 0x04, 0x02,0x3E, 0x51, 0x49, 0x45, 0x3E,0x00, 0x42, 0x7F, 0x40, 0x00,0x72, 0x49, 0x49, 0x49, 0x46,0x21, 0x41, 0x49, 0x4D, 0x33,0x18, 0x14, 0x12, 0x7F, 0x10,0x27, 0x45, 0x45, 0x45, 0x39,0x3C, 0x4A, 0x49, 0x49, 0x31,0x41, 0x21, 0x11, 0x09, 0x07,0x36, 0x49, 0x49, 0x49, 0x36,0x46, 0x49, 0x49, 0x29, 0x1E,0x00, 0x00, 0x14, 0x00, 0x00,0x00, 0x40, 0x34, 0x00, 0x00,0x00, 0x08, 0x14, 0x22, 0x41,0x14, 0x14, 0x14, 0x14, 0x14,0x00, 0x41, 0x22, 0x14, 0x08,0x02, 0x01, 0x59, 0x09, 0x06,0x3E, 0x41, 0x5D, 0x59, 0x4E,0x7C, 0x12, 0x11, 0x12, 0x7C,0x7F, 0x49, 0x49, 0x49, 0x36,0x3E, 0x41, 0x41, 0x41, 0x22,0x7F, 0x41, 0x41, 0x41, 0x3E,0x7F, 0x49, 0x49, 0x49, 0x41,0x7F, 0x09, 0x09, 0x09, 0x01,0x3E, 0x41, 0x41, 0x51, 0x73,0x7F, 0x08, 0x08, 0x08, 0x7F,0x00, 0x41, 0x7F, 0x41, 0x00,0x20, 0x40, 0x41, 0x3F, 0x01,0x7F, 0x08, 0x14, 0x22, 0x41,0x7F, 0x40, 0x40, 0x40, 0x40,0x7F, 0x02, 0x1C, 0x02, 0x7F,0x7F, 0x04, 0x08, 0x10, 0x7F,0x3E, 0x41, 0x41, 0x41, 0x3E,0x7F, 0x09, 0x09, 0x09, 0x06,0x3E, 0x41, 0x51, 0x21, 0x5E,0x7F, 0x09, 0x19, 0x29, 0x46,0x26, 0x49, 0x49, 0x49, 0x32,0x03, 0x01, 0x7F, 0x01, 0x03,0x3F, 0x40, 0x40, 0x40, 0x3F,0x1F, 0x20, 0x40, 0x20, 0x1F,0x3F, 0x40, 0x38, 0x40, 0x3F,0x63, 0x14, 0x08, 0x14, 0x63,0x03, 0x04, 0x78, 0x04, 0x03,0x61, 0x59, 0x49, 0x4D, 0x43,0x00, 0x7F, 0x41, 0x41, 0x41,0x02, 0x04, 0x08, 0x10, 0x20,0x00, 0x41, 0x41, 0x41, 0x7F,0x04, 0x02, 0x01, 0x02, 0x04,0x40, 0x40, 0x40, 0x40, 0x40,0x00, 0x03, 0x07, 0x08, 0x00,0x20, 0x54, 0x54, 0x78, 0x40,0x7F, 0x28, 0x44, 0x44, 0x38,0x38, 0x44, 0x44, 0x44, 0x28,0x38, 0x44, 0x44, 0x28, 0x7F,0x38, 0x54, 0x54, 0x54, 0x18,0x00, 0x08, 0x7E, 0x09, 0x02,0x18, 0xA4, 0xA4, 0x9C, 0x78,0x7F, 0x08, 0x04, 0x04, 0x78,0x00, 0x44, 0x7D, 0x40, 0x00,0x20, 0x40, 0x40, 0x3D, 0x00,0x7F, 0x10, 0x28, 0x44, 0x00,0x00, 0x41, 0x7F, 0x40, 0x00,0x7C, 0x04, 0x78, 0x04, 0x78,0x7C, 0x08, 0x04, 0x04, 0x78,0x38, 0x44, 0x44, 0x44, 0x38,0xFC, 0x18, 0x24, 0x24, 0x18,0x18, 0x24, 0x24, 0x18, 0xFC,0x7C, 0x08, 0x04, 0x04, 0x08,0x48, 0x54, 0x54, 0x54, 0x24,0x04, 0x04, 0x3F, 0x44, 0x24,0x3C, 0x40, 0x40, 0x20, 0x7C,0x1C, 0x20, 0x40, 0x20, 0x1C,0x3C, 0x40, 0x30, 0x40, 0x3C,0x44, 0x28, 0x10, 0x28, 0x44,0x4C, 0x90, 0x90, 0x90, 0x7C,0x44, 0x64, 0x54, 0x4C, 0x44,0x00, 0x08, 0x36, 0x41, 0x00,0x00, 0x00, 0x77, 0x00, 0x00,0x00, 0x41, 0x36, 0x08, 0x00,0x02, 0x01, 0x02, 0x04, 0x02,0x3C, 0x26, 0x23, 0x26, 0x3C,0x1E, 0xA1, 0xA1, 0x61, 0x12,0x3A, 0x40, 0x40, 0x20, 0x7A,0x38, 0x54, 0x54, 0x55, 0x59,0x21, 0x55, 0x55, 0x79, 0x41,0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut0x21, 0x55, 0x54, 0x78, 0x40,0x20, 0x54, 0x55, 0x79, 0x40,0x0C, 0x1E, 0x52, 0x72, 0x12,0x39, 0x55, 0x55, 0x55, 0x59,0x39, 0x54, 0x54, 0x54, 0x59,0x39, 0x55, 0x54, 0x54, 0x58,0x00, 0x00, 0x45, 0x7C, 0x41,0x00, 0x02, 0x45, 0x7D, 0x42,0x00, 0x01, 0x45, 0x7C, 0x40,0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut0xF0, 0x28, 0x25, 0x28, 0xF0,0x7C, 0x54, 0x55, 0x45, 0x00,0x20, 0x54, 0x54, 0x7C, 0x54,0x7C, 0x0A, 0x09, 0x7F, 0x49,0x32, 0x49, 0x49, 0x49, 0x32,0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut0x32, 0x4A, 0x48, 0x48, 0x30,0x3A, 0x41, 0x41, 0x21, 0x7A,0x3A, 0x42, 0x40, 0x20, 0x78,0x00, 0x9D, 0xA0, 0xA0, 0x7D,0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut0x3D, 0x40, 0x40, 0x40, 0x3D,0x3C, 0x24, 0xFF, 0x24, 0x24,0x48, 0x7E, 0x49, 0x43, 0x66,0x2B, 0x2F, 0xFC, 0x2F, 0x2B,0xFF, 0x09, 0x29, 0xF6, 0x20,0xC0, 0x88, 0x7E, 0x09, 0x03,0x20, 0x54, 0x54, 0x79, 0x41,0x00, 0x00, 0x44, 0x7D, 0x41,0x30, 0x48, 0x48, 0x4A, 0x32,0x38, 0x40, 0x40, 0x22, 0x7A,0x00, 0x7A, 0x0A, 0x0A, 0x72,0x7D, 0x0D, 0x19, 0x31, 0x7D,0x26, 0x29, 0x29, 0x2F, 0x28,0x26, 0x29, 0x29, 0x29, 0x26,0x30, 0x48, 0x4D, 0x40, 0x20,0x38, 0x08, 0x08, 0x08, 0x08,0x08, 0x08, 0x08, 0x08, 0x38,0x2F, 0x10, 0xC8, 0xAC, 0xBA,0x2F, 0x10, 0x28, 0x34, 0xFA,0x00, 0x00, 0x7B, 0x00, 0x00,0x08, 0x14, 0x2A, 0x14, 0x22,0x22, 0x14, 0x2A, 0x14, 0x08,0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block0x00, 0x00, 0x00, 0xFF, 0x00,0x10, 0x10, 0x10, 0xFF, 0x00,0x14, 0x14, 0x14, 0xFF, 0x00,0x10, 0x10, 0xFF, 0x00, 0xFF,0x10, 0x10, 0xF0, 0x10, 0xF0,0x14, 0x14, 0x14, 0xFC, 0x00,0x14, 0x14, 0xF7, 0x00, 0xFF,0x00, 0x00, 0xFF, 0x00, 0xFF,0x14, 0x14, 0xF4, 0x04, 0xFC,0x14, 0x14, 0x17, 0x10, 0x1F,0x10, 0x10, 0x1F, 0x10, 0x1F,0x14, 0x14, 0x14, 0x1F, 0x00,0x10, 0x10, 0x10, 0xF0, 0x00,0x00, 0x00, 0x00, 0x1F, 0x10,0x10, 0x10, 0x10, 0x1F, 0x10,0x10, 0x10, 0x10, 0xF0, 0x10,0x00, 0x00, 0x00, 0xFF, 0x10,0x10, 0x10, 0x10, 0x10, 0x10,0x10, 0x10, 0x10, 0xFF, 0x10,0x00, 0x00, 0x00, 0xFF, 0x14,0x00, 0x00, 0xFF, 0x00, 0xFF,0x00, 0x00, 0x1F, 0x10, 0x17,0x00, 0x00, 0xFC, 0x04, 0xF4,0x14, 0x14, 0x17, 0x10, 0x17,0x14, 0x14, 0xF4, 0x04, 0xF4,0x00, 0x00, 0xFF, 0x00, 0xF7,0x14, 0x14, 0x14, 0x14, 0x14,0x14, 0x14, 0xF7, 0x00, 0xF7,0x14, 0x14, 0x14, 0x17, 0x14,0x10, 0x10, 0x1F, 0x10, 0x1F,0x14, 0x14, 0x14, 0xF4, 0x14,0x10, 0x10, 0xF0, 0x10, 0xF0,0x00, 0x00, 0x1F, 0x10, 0x1F,0x00, 0x00, 0x00, 0x1F, 0x14,0x00, 0x00, 0x00, 0xFC, 0x14,0x00, 0x00, 0xF0, 0x10, 0xF0,0x10, 0x10, 0xFF, 0x10, 0xFF,0x14, 0x14, 0x14, 0xFF, 0x14,0x10, 0x10, 0x10, 0x1F, 0x00,0x00, 0x00, 0x00, 0xF0, 0x10,0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xF0, 0xF0, 0xF0, 0xF0, 0xF0,0xFF, 0xFF, 0xFF, 0x00, 0x00,0x00, 0x00, 0x00, 0xFF, 0xFF,0x0F, 0x0F, 0x0F, 0x0F, 0x0F,0x38, 0x44, 0x44, 0x38, 0x44,0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta0x7E, 0x02, 0x02, 0x06, 0x06,0x02, 0x7E, 0x02, 0x7E, 0x02,0x63, 0x55, 0x49, 0x41, 0x63,0x38, 0x44, 0x44, 0x3C, 0x04,0x40, 0x7E, 0x20, 0x1E, 0x20,0x06, 0x02, 0x7E, 0x02, 0x02,0x99, 0xA5, 0xE7, 0xA5, 0x99,0x1C, 0x2A, 0x49, 0x2A, 0x1C,0x4C, 0x72, 0x01, 0x72, 0x4C,0x30, 0x4A, 0x4D, 0x4D, 0x30,0x30, 0x48, 0x78, 0x48, 0x30,0xBC, 0x62, 0x5A, 0x46, 0x3D,0x3E, 0x49, 0x49, 0x49, 0x00,0x7E, 0x01, 0x01, 0x01, 0x7E,0x2A, 0x2A, 0x2A, 0x2A, 0x2A,0x44, 0x44, 0x5F, 0x44, 0x44,0x40, 0x51, 0x4A, 0x44, 0x40,0x40, 0x44, 0x4A, 0x51, 0x40,0x00, 0x00, 0xFF, 0x01, 0x03,0xE0, 0x80, 0xFF, 0x00, 0x00,0x08, 0x08, 0x6B, 0x6B, 0x08,0x36, 0x12, 0x36, 0x24, 0x36,0x06, 0x0F, 0x09, 0x0F, 0x06,0x00, 0x00, 0x18, 0x18, 0x00,0x00, 0x00, 0x10, 0x10, 0x00,0x30, 0x40, 0xFF, 0x01, 0x01,0x00, 0x1F, 0x01, 0x01, 0x1E,0x00, 0x19, 0x1D, 0x17, 0x12,0x00, 0x3C, 0x3C, 0x3C, 0x3C,0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP
};#endif
ILI9341.c
#include "ILI9341.h"
#include "main.h"
#include "stm32f4xx_hal.h"#define pgm_read_byte(addr) (*(const unsigned char *)(addr))#ifndef abs#define abs(a) ((a) < 0 ? -(a) : (a))
#endif#ifndef _swap_int16_t#define _swap_int16_t(a, b) { int16_t t = a; a = b; b = t; }
#endifstatic SPI_HandleTypeDef *_hSpi;
static uint16_t _width = ILI9341_TFTWIDTH;
static uint32_t _height = ILI9341_TFTHEIGHT;
static uint16_t _rotation = 0;
static uint16_t _cursor_x = 0;
static uint16_t _cursor_y = 0;
static uint16_t _textsize = 1;
static uint16_t _textColor = 0xFFFF;
static uint16_t _textBgColor = 0xFFFF;
static bool _wrap = true;
static bool _cp437 = false;static void spiWrite(uint8_t c);
static void writeCommand(uint8_t c);
static void writeData(uint8_t c);
static void setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1);
static void drawPixel(int16_t x, int16_t y, uint16_t color);
static void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color);
static void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color);
static void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size);/* private (static) functions */#define LCD_DC_GPIO_Port GPIOA
#define LCD_CS_GPIO_Port GPIOA
#define LCD_DC_Pin GPIO_PIN_9
#define LCD_CS_Pin GPIO_PIN_8void spiWrite(uint8_t c) {HAL_SPI_Transmit(_hSpi, &c, 1, 10);
}void writeCommand(uint8_t c) {HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_RESET);spiWrite(c);HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_SET);
}void writeData(uint8_t c) {HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_RESET);spiWrite(c);HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_SET);
}void setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {writeCommand(ILI9341_CASET); // Column addr setwriteData(x0 >> 8);writeData(x0 & 0xFF); // XSTARTwriteData(x1 >> 8);writeData(x1 & 0xFF); // XENDwriteCommand(ILI9341_PASET); // Row addr setwriteData(y0>>8);writeData(y0); // YSTARTwriteData(y1>>8);writeData(y1); // YENDwriteCommand(ILI9341_RAMWR); // write to RAM
}void drawPixel(int16_t x, int16_t y, uint16_t color) {if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) return;setAddrWindow(x,y,x+1,y+1);HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_RESET);spiWrite(color >> 8);spiWrite(color);HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_SET);
}void fillCircleHelper(int16_t x0, int16_t y0, int16_t r,uint8_t cornername, int16_t delta, uint16_t color) {int16_t f = 1 - r;int16_t ddF_x = 1;int16_t ddF_y = -2 * r;int16_t x = 0;int16_t y = r;while (x<y) {if (f >= 0) {y--;ddF_y += 2;f += ddF_y;}x++;ddF_x += 2;f += ddF_x;if (cornername & 0x1) {ILI9341_drawFastVLine(x0+x, y0-y, 2*y+1+delta, color);ILI9341_drawFastVLine(x0+y, y0-x, 2*x+1+delta, color);}if (cornername & 0x2) {ILI9341_drawFastVLine(x0-x, y0-y, 2*y+1+delta, color);ILI9341_drawFastVLine(x0-y, y0-x, 2*x+1+delta, color);}}
}void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color) {int16_t f = 1 - r;int16_t ddF_x = 1;int16_t ddF_y = -2 * r;int16_t x = 0;int16_t y = r;while (x<y) {if (f >= 0) {y--;ddF_y += 2;f += ddF_y;}x++;ddF_x += 2;f += ddF_x;if (cornername & 0x4) {drawPixel(x0 + x, y0 + y, color);drawPixel(x0 + y, y0 + x, color);}if (cornername & 0x2) {drawPixel(x0 + x, y0 - y, color);drawPixel(x0 + y, y0 - x, color);}if (cornername & 0x8) {drawPixel(x0 - y, y0 + x, color);drawPixel(x0 - x, y0 + y, color);}if (cornername & 0x1) {drawPixel(x0 - y, y0 - x, color);drawPixel(x0 - x, y0 - y, color);}}
}void drawChar(int16_t x, int16_t y, unsigned char c,uint16_t color, uint16_t bg, uint8_t size) {if((x >= _width) || // Clip right(y >= _height) || // Clip bottom((x + 6 * size - 1) < 0) || // Clip left((y + 8 * size - 1) < 0)) // Clip topreturn;if(!_cp437 && (c >= 176)) c++; // Handle 'classic' charset behaviorfor(int8_t i=0; i<6; i++ ) {uint8_t line;if(i < 5) line = pgm_read_byte(font+(c*5)+i);else line = 0x0;for(int8_t j=0; j<8; j++, line >>= 1) {if(line & 0x1) {if(size == 1) drawPixel(x+i, y+j, color);else ILI9341_fillRect(x+(i*size), y+(j*size), size, size, color);} else if(bg != color) {if(size == 1) drawPixel(x+i, y+j, bg);else ILI9341_fillRect(x+i*size, y+j*size, size, size, bg);}}}
}/* end private (static) functions *//* public functions */void ILI9341_begin(SPI_HandleTypeDef *hSpi) {_hSpi = hSpi;writeCommand(0xEF);writeData(0x03);writeData(0x80);writeData(0x02);writeCommand(0xCF);writeData(0x00);writeData(0XC1);writeData(0X30);writeCommand(0xED);writeData(0x64);writeData(0x03);writeData(0X12);writeData(0X81);writeCommand(0xE8);writeData(0x85);writeData(0x00);writeData(0x78);writeCommand(0xCB);writeData(0x39);writeData(0x2C);writeData(0x00);writeData(0x34);writeData(0x02);writeCommand(0xF7);writeData(0x20);writeCommand(0xEA);writeData(0x00);writeData(0x00);writeCommand(ILI9341_PWCTR1); //Power controlwriteData(0x23); //VRH[5:0]writeCommand(ILI9341_PWCTR2); //Power controlwriteData(0x10); //SAP[2:0];BT[3:0]writeCommand(ILI9341_VMCTR1); //VCM controlwriteData(0x3e); //¶Ô±È¶Èµ÷½ÚwriteData(0x28);writeCommand(ILI9341_VMCTR2); //VCM control2writeData(0x86); //--writeCommand(ILI9341_MADCTL); // Memory Access ControlwriteData(0x48);writeCommand(ILI9341_PIXFMT);writeData(0x55);writeCommand(ILI9341_FRMCTR1);writeData(0x00);writeData(0x18);writeCommand(ILI9341_DFUNCTR); // Display Function ControlwriteData(0x08);writeData(0x82);writeData(0x27);writeCommand(0xF2); // 3Gamma Function DisablewriteData(0x00);writeCommand(ILI9341_GAMMASET); //Gamma curve selectedwriteData(0x01);writeCommand(ILI9341_GMCTRP1); //Set GammawriteData(0x0F);writeData(0x31);writeData(0x2B);writeData(0x0C);writeData(0x0E);writeData(0x08);writeData(0x4E);writeData(0xF1);writeData(0x37);writeData(0x07);writeData(0x10);writeData(0x03);writeData(0x0E);writeData(0x09);writeData(0x00);writeCommand(ILI9341_GMCTRN1); //Set GammawriteData(0x00);writeData(0x0E);writeData(0x14);writeData(0x03);writeData(0x11);writeData(0x07);writeData(0x31);writeData(0xC1);writeData(0x48);writeData(0x08);writeData(0x0F);writeData(0x0C);writeData(0x31);writeData(0x36);writeData(0x0F);writeCommand(ILI9341_SLPOUT); //Exit SleepwriteCommand(ILI9341_DISPON); //Display on
}void ILI9341_drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color) {int16_t f = 1 - r;int16_t ddF_x = 1;int16_t ddF_y = -2 * r;int16_t x = 0;int16_t y = r;drawPixel(x0 , y0+r, color);drawPixel(x0 , y0-r, color);drawPixel(x0+r, y0 , color);drawPixel(x0-r, y0 , color);while (x<y) {if (f >= 0) {y--;ddF_y += 2;f += ddF_y;}x++;ddF_x += 2;f += ddF_x;drawPixel(x0 + x, y0 + y, color);drawPixel(x0 - x, y0 + y, color);drawPixel(x0 + x, y0 - y, color);drawPixel(x0 - x, y0 - y, color);drawPixel(x0 + y, y0 + x, color);drawPixel(x0 - y, y0 + x, color);drawPixel(x0 + y, y0 - x, color);drawPixel(x0 - y, y0 - x, color);}
}void ILI9341_fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color) {ILI9341_drawFastVLine(x0, y0-r, 2*r+1, color);fillCircleHelper(x0, y0, r, 3, 0, color);
}void ILI9341_drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color) {int16_t steep = abs(y1 - y0) > abs(x1 - x0);if (steep) {_swap_int16_t(x0, y0);_swap_int16_t(x1, y1);}if (x0 > x1) {_swap_int16_t(x0, x1);_swap_int16_t(y0, y1);}int16_t dx, dy;dx = x1 - x0;dy = abs(y1 - y0);int16_t err = dx / 2;int16_t ystep;if (y0 < y1) {ystep = 1;} else {ystep = -1;}for (; x0<=x1; x0++) {if (steep) {drawPixel(y0, x0, color);} else {drawPixel(x0, y0, color);}err -= dy;if (err < 0) {y0 += ystep;err += dx;}}
}void ILI9341_drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {ILI9341_drawFastHLine(x, y, w, color);ILI9341_drawFastHLine(x, y+h-1, w, color);ILI9341_drawFastVLine(x, y, h, color);ILI9341_drawFastVLine(x+w-1, y, h, color);
}// fill a rectangle
void ILI9341_fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {// rudimentary clipping (drawChar w/big text requires this)if((x >= _width) || (y >= _height)) return;if((x + w - 1) >= _width) w = _width - x;if((y + h - 1) >= _height) h = _height - y;setAddrWindow(x, y, x+w-1, y+h-1);uint8_t hi = color >> 8, lo = color;HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_RESET);for(y=h; y>0; y--) {for(x=w; x>0; x--) {spiWrite(hi);spiWrite(lo);}}HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_SET);
}void ILI9341_fillScreen(uint16_t color) {ILI9341_fillRect(0, 0, _width, _height, color);
}void ILI9341_invertDisplay(bool i) {writeCommand(i ? ILI9341_INVON : ILI9341_INVOFF);
}void ILI9341_drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color) {// smarter versionILI9341_drawFastHLine(x+r , y , w-2*r, color); // TopILI9341_drawFastHLine(x+r , y+h-1, w-2*r, color); // BottomILI9341_drawFastVLine(x , y+r , h-2*r, color); // LeftILI9341_drawFastVLine(x+w-1, y+r , h-2*r, color); // Right// draw four cornersdrawCircleHelper(x+r , y+r , r, 1, color);drawCircleHelper(x+w-r-1, y+r , r, 2, color);drawCircleHelper(x+w-r-1, y+h-r-1, r, 4, color);drawCircleHelper(x+r , y+h-r-1, r, 8, color);
}void ILI9341_fillRoundRect(int16_t x, int16_t y, int16_t w,int16_t h, int16_t r, uint16_t color) {// smarter versionILI9341_fillRect(x+r, y, w-2*r, h, color);// draw four cornersfillCircleHelper(x+w-r-1, y+r, r, 1, h-2*r-1, color);fillCircleHelper(x+r , y+r, r, 2, h-2*r-1, color);
}void ILI9341_drawTriangle(int16_t x0, int16_t y0,int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color) {ILI9341_drawLine(x0, y0, x1, y1, color);ILI9341_drawLine(x1, y1, x2, y2, color);ILI9341_drawLine(x2, y2, x0, y0, color);
}void ILI9341_fillTriangle(int16_t x0, int16_t y0,int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color) {int16_t a, b, y, last;// Sort coordinates by Y order (y2 >= y1 >= y0)if (y0 > y1) {_swap_int16_t(y0, y1); _swap_int16_t(x0, x1);}if (y1 > y2) {_swap_int16_t(y2, y1); _swap_int16_t(x2, x1);}if (y0 > y1) {_swap_int16_t(y0, y1); _swap_int16_t(x0, x1);}if(y0 == y2) { // Handle awkward all-on-same-line case as its own thinga = b = x0;if(x1 < a) a = x1;else if(x1 > b) b = x1;if(x2 < a) a = x2;else if(x2 > b) b = x2;ILI9341_drawFastHLine(a, y0, b-a+1, color);return;}int16_tdx01 = x1 - x0,dy01 = y1 - y0,dx02 = x2 - x0,dy02 = y2 - y0,dx12 = x2 - x1,dy12 = y2 - y1;int32_tsa = 0,sb = 0;// For upper part of triangle, find scanline crossings for segments// 0-1 and 0-2. If y1=y2 (flat-bottomed triangle), the scanline y1// is included here (and second loop will be skipped, avoiding a /0// error there), otherwise scanline y1 is skipped here and handled// in the second loop...which also avoids a /0 error here if y0=y1// (flat-topped triangle).if(y1 == y2) last = y1; // Include y1 scanlineelse last = y1-1; // Skip itfor(y=y0; y<=last; y++) {a = x0 + sa / dy01;b = x0 + sb / dy02;sa += dx01;sb += dx02;/* longhand:a = x0 + (x1 - x0) * (y - y0) / (y1 - y0);b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);*/if(a > b) _swap_int16_t(a,b);ILI9341_drawFastHLine(a, y, b-a+1, color);}// For lower part of triangle, find scanline crossings for segments// 0-2 and 1-2. This loop is skipped if y1=y2.sa = dx12 * (y - y1);sb = dx02 * (y - y0);for(; y<=y2; y++) {a = x1 + sa / dy12;b = x0 + sb / dy02;sa += dx12;sb += dx02;/* longhand:a = x1 + (x2 - x1) * (y - y1) / (y2 - y1);b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);*/if(a > b) _swap_int16_t(a,b);ILI9341_drawFastHLine(a, y, b-a+1, color);}
}void ILI9341_setTextSize(uint8_t s) {_textsize = (s > 0) ? s : 1;
}void ILI9341_setTextColor(uint16_t c) {// For 'transparent' background, we'll set the bg// to the same as fg instead of using a flag_textColor = c;
}void ILI9341_setTextBgColor(uint16_t c) {// For 'transparent' background, we'll set the bg// to the same as fg instead of using a flag_textBgColor = c;
}void ILI9341_setTextWrap(bool w) {_wrap = w;
}void ILI9341_setCursor(int16_t x, int16_t y) {_cursor_x = x;_cursor_y = y;
}uint16_t ILI9341_getCursorX(void) {return _cursor_x;
}uint16_t ILI9341_getCursorY(void) {return _cursor_y;
}void ILI9341_write(uint8_t c) {if(c == '\n') {_cursor_y += _textsize*8;_cursor_x = 0;} else if(c == '\r') {// skip em} else {if(_wrap && ((_cursor_x + _textsize * 6) >= _width)) { // Heading off edge?_cursor_x = 0; // Reset x to zero_cursor_y += _textsize * 8; // Advance y one line}drawChar(_cursor_x, _cursor_y, c, _textColor, _textBgColor, _textsize);_cursor_x += _textsize * 6;}
}// Pass string and a cursor position, returns UL corner and W,H.
void ILI9341_getTextBounds(char *str, int16_t x, int16_t y,int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h) {uint8_t c; // Current character*x1 = x;*y1 = y;*w = *h = 0;uint16_t lineWidth = 0, maxWidth = 0; // Width of current, all lineswhile((c = *str++)) {if(c != '\n') { // Not a newlineif(c != '\r') { // Not a carriage return, is normal charif(_wrap && ((x + _textsize * 6) >= _width)) {x = 0; // Reset x to 0y += _textsize * 8; // Advance y by 1 lineif(lineWidth > maxWidth) maxWidth = lineWidth; // Save widest linelineWidth = _textsize * 6; // First char on new line} else { // No line _wrap, just keep incrementing XlineWidth += _textsize * 6; // Includes interchar x gap}} // Carriage return = do nothing} else { // Newlinex = 0; // Reset x to 0y += _textsize * 8; // Advance y by 1 lineif(lineWidth > maxWidth) maxWidth = lineWidth; // Save widest linelineWidth = 0; // Reset lineWidth for new line}}// End of stringif(lineWidth) y += _textsize * 8; // Add height of last (or only) line*w = maxWidth - 1; // Don't include last interchar x gap*h = y - *y1;
}// Enable (or disable) Code Page 437-compatible charset.
// There was an error in glcdfont.c for the longest time -- one character
// (#176, the 'light shade' block) was missing -- this threw off the index
// of every character that followed it. But a TON of code has been written
// with the erroneous character indices. By default, the library uses the
// original 'wrong' behavior and old sketches will still work. Pass 'true'
// to this function to use correct CP437 character values in your code.
void ILI9341_cp437(bool x) {_cp437 = x;
}uint16_t ILI9341_width(void) {return _width;
}uint16_t ILI9341_height(void) {return _height;
}void ILI9341_pushColor(uint16_t color) {HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_RESET);spiWrite(color >> 8);spiWrite(color);HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_SET);
}void ILI9341_drawFastVLine(int16_t x, int16_t y, int16_t h,uint16_t color) {// Rudimentary clippingif((x >= _width) || (y >= _height)) return;if((y+h-1) >= _height)h = _height-y;setAddrWindow(x, y, x, y+h-1);uint8_t hi = color >> 8, lo = color;HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_RESET);while (h--) {spiWrite(hi);spiWrite(lo);}HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_SET);
}void ILI9341_drawFastHLine(int16_t x, int16_t y, int16_t w,uint16_t color) {// Rudimentary clippingif((x >= _width) || (y >= _height)) return;if((x+w-1) >= _width) w = _width-x;setAddrWindow(x, y, x+w-1, y);uint8_t hi = color >> 8, lo = color;HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_RESET);while (w--) {spiWrite(hi);spiWrite(lo);}HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_SET);
}// Pass 8-bit (each) R,G,B, get back 16-bit packed color
uint16_t ILI9341_color565(uint8_t r, uint8_t g, uint8_t b) {return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
}#define MADCTL_MY 0x80
#define MADCTL_MX 0x40
#define MADCTL_MV 0x20
#define MADCTL_ML 0x10
#define MADCTL_RGB 0x00
#define MADCTL_BGR 0x08
#define MADCTL_MH 0x04void ILI9341_setRotation(uint8_t m) {writeCommand(ILI9341_MADCTL);_rotation = m % 4; // can't be higher than 3switch (_rotation) {case 0:writeData(MADCTL_MX | MADCTL_BGR);_width = ILI9341_TFTWIDTH;_height = ILI9341_TFTHEIGHT;break;case 1:writeData(MADCTL_MV | MADCTL_BGR);_width = ILI9341_TFTHEIGHT;_height = ILI9341_TFTWIDTH;break;case 2:writeData(MADCTL_MY | MADCTL_BGR);_width = ILI9341_TFTWIDTH;_height = ILI9341_TFTHEIGHT;break;case 3:writeData(MADCTL_MX | MADCTL_MY | MADCTL_MV | MADCTL_BGR);_width = ILI9341_TFTHEIGHT;_height = ILI9341_TFTWIDTH;break;}
}uint16_t ILI9341_getRotation(void) {return _rotation;
}
放到合适的位置并保存,添加包含头文件,.c文件到main文件同级文件下编译运行,在main函数初始化后添加
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();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_CRC_Init();MX_SPI1_Init();/* USER CODE BEGIN 2 */ILI9341_begin(&hspi1);ILI9341_fillScreen(ILI9341_BLACK);ILI9341_fillCircle(160,120,50,ILI9341_GREEN);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}
运行proteus8,建立原理图,添加hex文件并点击运行,效果及原理图如下:
相关文章:

STM32F401VET6 PROTEUS8 ILI9341 驱动显示及仿真
stm32cubemx新建工程代码,并生成工程 设置gpio 设置SPI 其他的参考stm32默认设置 然后编辑驱动代码 ili9341.h #ifndef ILI9341_H #define ILI9341_H#include <stdbool.h> #include <stdint.h>#include "glcdfont.h" #include "stm32…...

抖音视频素材网站有哪些?非常好用的5个抖音视频素材库分享
在打造引人入胜的抖音视频时,选择高品质的视频素材至关重要。优选的素材不仅能够显著提升视频的吸引力,还能让你的作品在众多视频中突出重围。对于抖音创作者而言,让我们探索一些备受推崇的视频素材平台,帮助你制作出既专业又引人…...

【数据结构】链式二叉树的实现和思路分析及二叉树OJ
【数据结构】链式二叉树的实现和思路分析及二叉树OJ 🔥个人主页:大白的编程日记 🔥专栏:数据结构 文章目录 【数据结构】链式二叉树的实现和思路分析及二叉树OJ前言一.链式二叉树的定义及结构二.链式二叉树的遍历2.1前序遍历2.2中…...

项目成功秘诀:工单管理系统如何加速进程
国内外主流的10款项目工单管理系统对比:PingCode、Worktile、浪潮云工单管理系统、华为企业智能工单系统、金蝶云苍穹、紫光软件管理系统、Jira、Asana、ServiceNow、Smartsheet。 在管理日益复杂的个人项目时,找到一款能够真正符合需求的管理软件&#…...

OpenGauss和GaussDB有何不同
OpenGauss和GaussDB是两个不同的数据库产品,它们都具有高性能、高可靠性和高可扩展性等优点,但是它们之间也有一些区别和相似之处。了解它们之间的关系、区别、建议、适用场景和如何学习,对于提高技能和保持行业敏感性非常重要。本文将深入探…...

星环科技携手东华软件推出一表通报送联合解决方案
随着国家金融监督管理总局“一表通”试点工作的持续推进,星环科技携手东华软件推出了基于星环科技分布式分析型数据库ArgoDB和大数据基础平台TDH的一表通报送联合解决方案,并已在多地实施落地中得到充分验证。 星环科技与东华软件作为战略合作伙伴&…...

YOLOv10环境搭建、训练自己的目标检测数据集、实际验证和测试
1 环境搭建 1.1 在官方仓库的给定的使用python3.9版本,则使用conda创建对应虚拟环境。 conda create -n yolov10 python3.9 1.2 切换到对应虚拟环境 conda activate yolov10 1.3 在指定目录下克隆yolov10官方仓库代码 git clone https://github.com/THU-MIG/yo…...

Harmony Next -- 通用标题栏:高度自定义,可设置沉浸式状态,正常状态下为:左侧返回、居中标题,左中右均可自定义视图。
hm_common_title_bar OpenHarmony三方库中心仓:https://ohpm.openharmony.cn/#/cn/detail/common_title_bar 介绍 一款通用标题栏,支持高度自定义,可设置沉浸式状态,正常状态下为:左侧返回、居中标题,左…...

甄选范文“论数据分片技术及其应用”软考高级论文,系统架构设计师论文
论文真题 数据分片就是按照一定的规则,将数据集划分成相互独立、正交的数据子集,然后将数据子集分布到不同的节点上。通过设计合理的数据分片规则,可将系统中的数据分布在不同的物理数据库中,达到提升应用系统数据处理速度的目的。 请围绕“论数据分片技术及其应用”论题…...

【elementui】记录el-table设置左、右列固定时,加大滚动条宽度至使滚动条部分被固定列遮挡的解决方法
当前elementui版本:2.8.2 现象:此处el-table__body-wrapper默认的滚动条宽度为8px,我加大到10px,如果不设置fixed一切正常,设置fixed后会被遮挡一点 el-table__fixed-right::before, .el-table__fixed::before 设置…...

Python人工智能:一、语音合成和语音识别
在Python中,语音合成(Text-To-Speech, TTS)和语音识别(Speech-To-Text, STT)是两个非常重要的功能,它们在人工智能、自动化、辅助技术以及许多其他领域都有广泛的应用。下面将分别介绍这两个领域在Python中…...

C/C++进阶 (8)哈希表(STL)
个人主页:仍有未知等待探索-CSDN博客 专题分栏:C 本文着重于模拟实现哈希表,并非是哈希表的使用。 实现的哈希表的底层用的是线性探测法,并非是哈希桶。 目录 一、标准库中的哈希表 1、unordered_map 2、unordered_set 二、模…...
2024电赛H题参考方案(+视频演示+核心控制代码)——自动行驶小车
目录 一、题目要求 二、参考资源获取 三、TI板子可能用到的资源 1、环境搭建及工程移植 2、相关模块的移植 四、控制参考方案 1、整体控制方案视频演示 2、视频演示部分核心代码 五、总结 一、题目要求 小编自认为:此次控制类类型题目的H题,相较于往年较…...

设计模式14-享元模式
设计模式14-享元模式 由来动机定义与结构代码推导特点享元模式的应用总结优点缺点使用享元模式的注意事项 由来动机 在很多应用中,可能会创建大量相似对象,例如在文字处理器中每个字符对象。在这些场景下,如果每个对象都独立存在,…...

Javascript中canvas与svg详解
Canvas 在JavaScript中,<canvas> 元素用于在网页上绘制图形,如线条、圆形、矩形、图像等。它是一个通过JavaScript和HTML的<canvas>元素来工作的绘图表面。<canvas> 元素自身并不具备绘图能力,它仅仅提供了一个绘图环境&a…...

【BUG】已解决:No Python at ‘C:Users…Python Python39python. exe’
No Python at ‘C:Users…Python Python39python. exe’ 目录 No Python at ‘C:Users…Python Python39python. exe’ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班…...

Flink SQL 的工作机制
前言 Flink SQL 引擎的工作流总结如图所示。 从图中可以看出,一段查询 SQL / 使用TableAPI 编写的程序(以下简称 TableAPI 代码)从输入到编译为可执行的 JobGraph 主要经历如下几个阶段: 将 SQL文本 / TableAPI 代码转化为逻辑执…...

[AI Mem0] 源码解读,带你了解 Mem0 的实现
Mem0 的 CRUD 到底是如何实现的?我们来看下源码。 使用 先来看下,如何使用 Mem0 import os os.environ["OPENAI_API_KEY"] "sk-xxx"from mem0 import Memorym Memory()# 1. Add: Store a memory from any unstructured text re…...

【LLM】-10-部署llama-3-chinese-8b-instruct-v3 大模型
目录 1、模型下载 2、下载项目代码 3、启动模型 4、模型调用 4.1、completion接口 4.2、聊天(chat completion) 4.3、多轮对话 4.4、文本嵌入向量 5、Java代码实现调用 由于在【LLM】-09-搭建问答系统-对输入Prompt检查-CSDN博客 关于提示词注入…...

C语言 之 理解指针(4)
文章目录 1. 字符指针变量2. 数组指针变量2.1 对数组指针变量的理解2.2 数组指针变量的初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用 5. 函数指针数组 1. 字符指针变量 我们在前面使用的主要是整形指针变量,现在要学…...

Java设计模式—单例模式(Singleton Pattern)
目录 一、定义 二、应用场景 三、具体实现 示例一 示例二 四、懒汉与饿汉 饿汉模式 懒汉模式 五、总结 六、说明 一、定义 二、应用场景 单例模式的应用场景主要包括以下几个方面: 日志系统:在应用程序中,通常只需要一个日…...

AV1帧间预测(二):运动补偿
运动补偿(Motion Compensation,MC)是帧间预测最基础的工具,AV1支持两种运动补偿方式,一种是传统的平移运动补偿,另一种是仿射运动补偿。下面分别介绍这两种运动补偿方法。 平移运动补偿 平移运动补偿是最传统的运动补偿方式,H.26…...

数学建模(5)——逻辑回归
一、二分类 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklea…...

【C++高阶】:深入探索C++11
✨ 心似白云常自在,意如流水任东西 🌏 📃个人主页:island1314 🔥个人专栏:C学习 🚀 欢迎关注:👍点赞 Ǵ…...

6. 自定义Docker镜像
如何自定义Docker镜像:从基础到实践 Docker作为一个容器化平台,使得应用的打包、分发和运行变得更加高效和便捷。本文将详细介绍如何自定义一个Docker镜像,包括镜像的构成、分层原理、创建自定义镜像的具体步骤,并演示如何打包和…...

「12月·长沙」人工智能与网络安全国际学术会议(ISAICS 2024)
人工智能与网络安全国际学术会议(ISAICS 2024)将于2024年12月20日-2024年12月22日在湖南长沙召开。会议中发表的文章将会被收录,并于见刊后提交EI核心索引。会议旨在在为国内与国际学者搭建交流平台,推进不同学科领域的融合发展,就当今人工智能与网络安全范畴内各学…...

【技术支持案例】使用S32K144+NSD8381驱动电子膨胀阀
文章目录 1. 前言2. 问题描述3. 理论分析3.1 NSD8381如何连接电机3.2 S32K144和NSD8381的软件配置 4.测试验证4.1 测试环境4.2 测试效果4.3 测试记录 1. 前言 最近有客户在使用S32K144NSD8381驱动电子膨胀阀时,遇到无法正常驱动电子膨胀阀的情况。因为笔者也是刚开…...

第二期:集成电路(IC)——智能世界的微观建筑大师
嘿,小伙伴们!👋 我是你们的老朋友小竹笋,一名热爱创作和技术的工程师。上一期我们聊了聊AI芯片,这次我们要深入到更微观的层面,来探究集成电路(IC)的世界。准备好一起探索了吗&#…...

基于物联网的区块链算力网络,IGP/BGP协议
目录 基于物联网的区块链算力网络 IGP/BGP协议 IGP(内部网关协议) BGP(边界网关协议) 内部使用ISP的外部使用BGP的原因 一、网络规模和复杂性 二、路由协议的特性 三、满足业务需求 四、结论 基于物联网的区块链算力网络 通 过 多个物联网传感器将本地计算…...

每日一题~960 div2 A+B+C(简单奇偶博弈,构造,观察性质算贡献)
A题意: N 长的数组。 一次操作: 最开始的mx 为零。 选出一个数(使得这个数>mx) ,之后将mx 更新为这个数,将这个数置为零。 不能做这个操作的,输。 问是否有先手赢的策略。有的话,输出yes 否则no 当时一…...