wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 463|回復: 4
收起左側

HC32F460JEUA使用SPI無法驅動LCD

[復制鏈接]
ID:1066795 發表于 2025-11-15 16:25 | 顯示全部樓層 |閱讀模式
50黑幣
LCD的配置是之前點亮過得現在只是換了個芯片 有點不熟悉這款芯片有路過的大佬能指點一下么.c 文件

  1. #include "tftlcd.h"
  2. extern uint32_t test_var;
  3. // 緩沖區定義
  4. #define COLOR_FILL_BUFFER_SIZE (240 * 4)
  5. uint16_t color_fill_buffer[COLOR_FILL_BUFFER_SIZE];

  6. void LCD_GPIO_Init(void)
  7. {
  8.     stc_gpio_init_t stcGpioInit;              // 定義GPIO結構體
  9.     GPIO_SetDebugPort(GPIO_PIN_TDO, DISABLE); // 關閉調試端口,釋放相關引腳
  10.     GPIO_SetDebugPort(GPIO_PIN_SWO, DISABLE);

  11.     (void)GPIO_StructInit(&stcGpioInit); // 使用默認參數配置結構體

  12.     stcGpioInit.u16PinState = PIN_STAT_SET;           // 高電平
  13.     stcGpioInit.u16PinDir = PIN_DIR_OUT;              // 輸出模式
  14.     stcGpioInit.u16PinOutputType = PIN_OUT_TYPE_CMOS; // 推挽輸出
  15.     stcGpioInit.u16PinDrv = PIN_HIGH_DRV;             // 驅動能力高
  16.     stcGpioInit.u16PullUp = PIN_PU_OFF;               

  17.     // SCLK
  18.     (void)GPIO_Init(LCD_POART, LCD_SCLK_PIN, &stcGpioInit);
  19.     // MOSI = SDA
  20.     (void)GPIO_Init(LCD_POART, LCD_MOSI_PIN, &stcGpioInit);
  21.     // RES
  22.     (void)GPIO_Init(LCD_RST_PORT, LCD_RST_PIN, &stcGpioInit);
  23.     // DC
  24.     (void)GPIO_Init(LCD_POART, LCD_DC_PIN, &stcGpioInit);
  25.     // CS
  26.     (void)GPIO_Init(LCD_POART, LCD_CS_PIN, &stcGpioInit);
  27.     // BLK
  28.     (void)GPIO_Init(LCD_POART, LCD_BLK_PIN, &stcGpioInit);

  29.     // SCLK MOSI 引腳設為復用模式
  30.     GPIO_SetFunc(LCD_POART, LCD_SCLK_PIN, LCD_SCLK_FUNC);
  31.     GPIO_SetFunc(LCD_POART, LCD_MOSI_PIN, LCD_MOSI_FUNC);

  32.     stc_spi_init_t stcSpiInit;
  33.     stc_spi_delay_t stcSpiDelayCfg;

  34.     // 使用默認參數初始化結構體
  35.     (void)SPI_StructInit(&stcSpiInit);
  36.     (void)SPI_DelayStructInit(&stcSpiDelayCfg);

  37.     // 開啟SPI時鐘
  38.     FCG_Fcg1PeriphClockCmd(SPI_FCG, ENABLE);

  39.     // 清空SPI配置
  40.     SPI_DeInit(LCD_SPI);

  41.     // 設置SPI必要參數
  42.     stcSpiInit.u32WireMode = SPI_4_WIRE; // SPI3線模式
  43.     stcSpiInit.u32TransMode = SPI_FULL_DUPLEX;
  44.     stcSpiInit.u32MasterSlave = SPI_MASTER; // SPI主機
  45.     stcSpiInit.u32ModeFaultDetect = SPI_MD_FAULT_DETECT_DISABLE;
  46.     stcSpiInit.u32SuspendMode = SPI_COM_SUSP_FUNC_OFF;  // 不自動掛起
  47.     stcSpiInit.u32Parity = SPI_PARITY_INVD;             // 不開奇偶校驗
  48.     stcSpiInit.u32SpiMode = SPI_MD_0;                   // 空閑低電平,奇數邊沿采樣
  49.     stcSpiInit.u32BaudRatePrescaler = SPI_BR_CLK_DIV64; // 64分頻
  50.     stcSpiInit.u32DataBits = SPI_DATA_SIZE_8BIT;        // 一次傳輸8位
  51.     stcSpiInit.u32FirstBit = SPI_FIRST_MSB;             // 高位在前

  52.     // 初始化SPI
  53.     (void)SPI_Init(LCD_SPI, &stcSpiInit);

  54.     // 配置SPI延時必要參數
  55.     stcSpiDelayCfg.u32IntervalDelay = SPI_INTERVAL_TIME_8SCK; // t3:下次存取延時
  56.     stcSpiDelayCfg.u32ReleaseDelay = SPI_RELEASE_TIME_8SCK;   // t2:振蕩停止到片選無效時間
  57.     stcSpiDelayCfg.u32SetupDelay = SPI_SETUP_TIME_1SCK;       // t1:片選有效到開始振蕩時間
  58.     (void)SPI_DelayTimeConfig(LCD_SPI, &stcSpiDelayCfg);

  59.     // 使能SPI
  60.     SPI_Cmd(LCD_SPI, ENABLE);

  61.     // // CS 拉高
  62.     LCD_CS_Set();
  63. }

  64. /******************************************************************************
  65.       函數說明:LCD串行數據寫入函數
  66.       入口數據:dat  要寫入的串行數據
  67.       返回值:  無
  68. ******************************************************************************/
  69. void LCD_Writ_Bus(uint8_t dat)
  70. {
  71.     LCD_CS_Clr();

  72.    
  73.     uint8_t RecvData = 0;

  74.     // 等待發送緩沖區為空
  75.     while( RESET == SPI_GetStatus(LCD_SPI,  SPI_FLAG_TX_BUF_EMPTY) );

  76.     // 發送并接收數據
  77.     SPI_TransReceive(LCD_SPI, &dat, &RecvData, 1, HCLK_VALUE);


  78.     LCD_CS_Set();
  79. }

  80. /******************************************************************************
  81.       函數說明:LCD寫入數據
  82.       入口數據:dat 寫入的數據
  83.       返回值:  無
  84. ******************************************************************************/
  85. void LCD_WR_DATA8(uint8_t dat)
  86. {
  87.      LCD_DC_Set(); // 寫數據
  88.     LCD_Writ_Bus(dat);
  89. }

  90. /******************************************************************************
  91.       函數說明:LCD寫入數據
  92.       入口數據:dat 寫入的數據
  93.       返回值:  無
  94. ******************************************************************************/
  95. void LCD_WR_DATA(uint16_t dat)
  96. {
  97.         LCD_Writ_Bus(dat >> 8);
  98.         LCD_Writ_Bus(dat & 0xff);
  99. }

  100. /******************************************************************************
  101.       函數說明:LCD寫入命令
  102.       入口數據:dat 寫入的命令
  103.       返回值:  無
  104. ******************************************************************************/
  105. void LCD_WR_REG(uint8_t dat)
  106. {
  107.         LCD_DC_Clr(); // 寫命令
  108.         LCD_Writ_Bus(dat);
  109.         LCD_DC_Set(); // 寫數據
  110. }

  111. /**
  112. * @brief       設置顯示窗口
  113. * @param       x1:窗口列起始地址
  114. * @param       y1:坐標行起始地址
  115. * @param       x2:窗口列結束地址
  116. * @param       y2:坐標行結束地址
  117. * @retval      無
  118. */
  119. void LCD_Address_Set(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
  120. {
  121.     LCD_WR_REG(0x2a); // 列地址設置
  122.     LCD_WR_DATA(x1);
  123.     LCD_WR_DATA(x2);
  124.     LCD_WR_REG(0x2b); // 行地址設置
  125.     LCD_WR_DATA(y1);
  126.     LCD_WR_DATA(y2);
  127.     LCD_WR_REG(0x2c); // 儲存器寫
  128. }

  129. /**
  130. * @brief LCD初始化
  131. */
  132. void LCD_Init(void)
  133. {
  134.     // 初始化GPIO、SPI和DMA
  135.      LCD_GPIO_Init();

  136.     LCD_RES_Clr(); // 復位
  137.     DDL_DelayMS(120);
  138.     LCD_RES_Set();
  139.     DDL_DelayMS(120);
  140.     LCD_BLK_Set(); // 打開背光
  141.     DDL_DelayMS(120);

  142.     LCD_WR_REG(0x11);
  143.     // 延時至少120ms
  144.     DDL_DelayMS(120);

  145.     LCD_WR_REG(0x36);
  146.     if (USE_HORIZONTAL == 0)
  147.         LCD_WR_DATA8(0x00);
  148.     else if (USE_HORIZONTAL == 1)
  149.         LCD_WR_DATA8(0xC0);
  150.     else if (USE_HORIZONTAL == 2)
  151.         LCD_WR_DATA8(0x70);
  152.     else
  153.         LCD_WR_DATA8(0xA0);

  154.     LCD_WR_REG(0x3A);
  155.     LCD_WR_DATA8(0x05);

  156.     LCD_WR_REG(0xB2);
  157.     LCD_WR_DATA8(0x0C);
  158.     LCD_WR_DATA8(0x0C);
  159.     LCD_WR_DATA8(0x00);
  160.     LCD_WR_DATA8(0x33);
  161.     LCD_WR_DATA8(0x33);

  162.     LCD_WR_REG(0xB7);
  163.     LCD_WR_DATA8(0x35);

  164.     LCD_WR_REG(0xBB);
  165.     LCD_WR_DATA8(0x1A);

  166.     LCD_WR_REG(0xC0);
  167.     LCD_WR_DATA8(0x2C);

  168.     LCD_WR_REG(0xC2);
  169.     LCD_WR_DATA8(0x01);

  170.     LCD_WR_REG(0xC3);
  171.     LCD_WR_DATA8(0x0B);

  172.     LCD_WR_REG(0xC4);
  173.     LCD_WR_DATA8(0x20);

  174.     LCD_WR_REG(0xC6);
  175.     LCD_WR_DATA8(0x0F);

  176.     LCD_WR_REG(0xD0);
  177.     LCD_WR_DATA8(0xA4);
  178.     LCD_WR_DATA8(0xA1);

  179.     LCD_WR_REG(0x21);
  180.     LCD_WR_REG(0xE0);
  181.     LCD_WR_DATA8(0xF0);
  182.     LCD_WR_DATA8(0x00);
  183.     LCD_WR_DATA8(0x04);
  184.     LCD_WR_DATA8(0x04);
  185.     LCD_WR_DATA8(0x04);
  186.     LCD_WR_DATA8(0x05);
  187.     LCD_WR_DATA8(0x29);
  188.     LCD_WR_DATA8(0x33);
  189.     LCD_WR_DATA8(0x3E);
  190.     LCD_WR_DATA8(0x38);
  191.     LCD_WR_DATA8(0x12);
  192.     LCD_WR_DATA8(0x12);
  193.     LCD_WR_DATA8(0x28);
  194.     LCD_WR_DATA8(0x30);

  195.     LCD_WR_REG(0xE1);
  196.     LCD_WR_DATA8(0xF0);
  197.     LCD_WR_DATA8(0x07);
  198.     LCD_WR_DATA8(0x0A);
  199.     LCD_WR_DATA8(0x0D);
  200.     LCD_WR_DATA8(0x0B);
  201.     LCD_WR_DATA8(0x07);
  202.     LCD_WR_DATA8(0x28);
  203.     LCD_WR_DATA8(0x33);
  204.     LCD_WR_DATA8(0x3E);
  205.     LCD_WR_DATA8(0x36);
  206.     LCD_WR_DATA8(0x14);
  207.     LCD_WR_DATA8(0x14);
  208.     LCD_WR_DATA8(0x29);
  209.     LCD_WR_DATA8(0x32);

  210.     LCD_WR_REG(0x20); // 反色St7789

  211.     LCD_WR_REG(0x11);
  212.     LCD_Fill(0, 0, LCD_HEIGHT, LCD_WIDTH, 0x0000);
  213.     LCD_WR_REG(0x29);
  214.     test_var = 1000;
  215. }
  216. void LCD_Fill(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color)
  217. {
  218.     uint16_t i, j;
  219.     LCD_Address_Set(xsta, ysta, xend - 1, yend - 1);
  220.     for (i = ysta; i < yend; i++)
  221.     {
  222.         for (j = xsta; j < xend; j++)
  223.         {
  224.             LCD_WR_DATA(color);
  225.         }
  226.     }
  227. }
復制代碼
.h文件
  1. #ifndef __LCD_H
  2. #define __LCD_H
  3. #include "main.h"
  4. #include "stdio.h"
  5. #include "lvgl.h"
  6. // LCD的寬和高定義
  7. #define USE_HORIZONTAL 2 // 設置橫屏或者豎屏顯示 0或1為豎屏 2或3為橫屏

  8. #if USE_HORIZONTAL == 0 || USE_HORIZONTAL == 1

  9. #define LCD_WIDTH  240
  10. #define LCD_W      240
  11. #define LCD_HEIGHT 240
  12. #define LCD_H      240

  13. #else
  14. #define LCD_W      240
  15. #define LCD_WIDTH  240

  16. #define LCD_H      320
  17. #define LCD_HEIGHT 320
  18. #endif

  19. // GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_06, GPIO_FUNC_43); // SPI3_SCK
  20. // GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_07, GPIO_FUNC_40); // SPI3_MOSI

  21. #define LCD_POART                   GPIO_PORT_B

  22. #define LCD_SCLK_PIN                GPIO_PIN_06
  23. #define LCD_SCLK_FUNC               GPIO_FUNC_43

  24. #define LCD_MOSI_PIN                GPIO_PIN_07
  25. #define LCD_MOSI_FUNC               GPIO_FUNC_40


  26. #define SPI_FCG                     FCG1_PERIPH_SPI3    // 時鐘
  27. #define LCD_SPI                     CM_SPI3

  28. #define LCD_CS_PORT  GPIO_PORT_A
  29. #define LCD_CS_PIN   GPIO_PIN_01
  30. #define LCD_DC_PORT  GPIO_PORT_B
  31. #define LCD_DC_PIN   GPIO_PIN_08
  32. #define LCD_RST_PORT GPIO_PORT_B
  33. #define LCD_RST_PIN  GPIO_PIN_09
  34. #define LCD_BLK_PORT GPIO_PORT_B
  35. #define LCD_BLK_PIN  GPIO_PIN_03

  36. // 控制引腳操作宏定義
  37. #define LCD_CS_Clr()  GPIO_ResetPins(LCD_CS_PORT, LCD_CS_PIN)
  38. #define LCD_CS_Set()  GPIO_SetPins(LCD_CS_PORT, LCD_CS_PIN)
  39. #define LCD_DC_Clr()  GPIO_ResetPins(LCD_DC_PORT, LCD_DC_PIN)
  40. #define LCD_DC_Set()  GPIO_SetPins(LCD_DC_PORT, LCD_DC_PIN)



  41. #define LCD_RES_Clr() GPIO_ResetPins(LCD_RST_PORT, LCD_RST_PIN)
  42. #define LCD_RES_Set() GPIO_SetPins(LCD_RST_PORT, LCD_RST_PIN)

  43. #define LCD_BLK_Set() GPIO_ResetPins(LCD_BLK_PORT, LCD_BLK_PIN)
  44. #define LCD_BLK_Clr() GPIO_SetPins(LCD_BLK_PORT, LCD_BLK_PIN)

  45. void LCD_Init(void);
  46. void LCD_Fill(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);

  47. #endif
復制代碼
主循環
  1. int32_t main(void)
  2. {
  3.     /* Register write unprotected for some required peripherals. */
  4.     LL_PERIPH_WE(LL_PERIPH_ALL);
  5.     // Clock Config
  6.     App_ClkCfg();
  7.     // Port Config
  8.     App_PortCfg();

  9.     // Setup
  10.     LCD_Init();
  11.     DDL_DelayMS(1U);

  12.     /* Register write protected for some required peripherals. */
  13.     // LL_PERIPH_WP(LL_PERIPH_ALL);
  14.     for (;;)
  15.     {

  16.         LCD_Fill(0, 0, LCD_WIDTH-1, LCD_HEIGHT-1, 0x0000);
  17.         DDL_DelayMS(500U);
  18.         LCD_Fill(0, 0, LCD_WIDTH-1, LCD_HEIGHT-1, 0xFFFF);
  19.         DDL_DelayMS(500U);
  20.     }
  21. }
復制代碼






回復

使用道具 舉報

ID:1153607 發表于 2025-11-16 09:02 | 顯示全部樓層
雖說叫SPI不同的工作方式還是存在的,首先要搞清楚芯片的SPI與負載的SPI工作方式是否一致,如果有邏輯分析儀可以看看波形就知道問題在哪里了。
回復

使用道具 舉報

ID:1162651 發表于 2025-11-17 11:33 | 顯示全部樓層
1,背光開沒開
2,初始化到底3線還是4線// 設置SPI必要參數
    stcSpiInit.u32WireMode = SPI_4_WIRE; // SPI3線模式
    stcSpiInit.u32TransMode = SPI_FULL_DUPLEX;
3,stcSpiInit.u32SpiMode = SPI_MD_0;這個可能要匹配正確
4,發數據,你的DC線呢?發數據前的片選是默認接地了嗎
void LCD_Fill(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color)
{
    LCD_CS_LOW();
    LCD_Address_Set(xsta, ysta, xend - 1, yend - 1);
    LCD_DC_Set();
.....
}
5,檢查你屏幕的時間脈沖間隔,你64分頻還延時
回復

使用道具 舉報

ID:1066795 發表于 2025-11-18 09:09 | 顯示全部樓層
nglskey 發表于 2025-11-17 11:33
1,背光開沒開
2,初始化到底3線還是4線// 設置SPI必要參數
    stcSpiInit.u32WireMode = SPI_4_WIRE; / ...

GPIO沒有對應配置
回復

使用道具 舉報

ID:1066795 發表于 2025-11-18 09:09 | 顯示全部樓層
  1. #ifndef __LCD_H
  2. #define __LCD_H
  3. #include "main.h"
  4. #include "stdio.h"
  5. #include "lvgl.h"
  6. // LCD的寬和高定義
  7. #define USE_HORIZONTAL 2// 設置橫屏或者豎屏顯示 0或1為豎屏 2或3為橫屏

  8. #if USE_HORIZONTAL == 0 || USE_HORIZONTAL == 1

  9. #define LCD_WIDTH  240
  10. #define LCD_W      240
  11. #define LCD_HEIGHT 320
  12. #define LCD_H      320

  13. #else
  14. #define LCD_W      240
  15. #define LCD_WIDTH  240

  16. #define LCD_H      320
  17. #define LCD_HEIGHT 320
  18. #endif

  19. // GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_06, GPIO_FUNC_43); // SPI3_SCK
  20. // GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_07, GPIO_FUNC_40); // SPI3_MOSI

  21. #define LCD_POART                   GPIO_PORT_B

  22. #define LCD_SCLK_PIN                GPIO_PIN_06
  23. #define LCD_SCLK_FUNC               GPIO_FUNC_43

  24. #define LCD_MOSI_PIN                GPIO_PIN_07
  25. #define LCD_MOSI_FUNC               GPIO_FUNC_40


  26. #define SPI_FCG                     FCG1_PERIPH_SPI3    // 時鐘
  27. #define LCD_SPI                     CM_SPI3

  28. #define LCD_CS_PORT  GPIO_PORT_A
  29. #define LCD_CS_PIN   GPIO_PIN_01
  30. #define LCD_DC_PORT  GPIO_PORT_B
  31. #define LCD_DC_PIN   GPIO_PIN_08
  32. #define LCD_RST_PORT GPIO_PORT_B
  33. #define LCD_RST_PIN  GPIO_PIN_09
  34. #define LCD_BLK_PORT GPIO_PORT_B
  35. #define LCD_BLK_PIN  GPIO_PIN_03

  36. // 控制引腳操作宏定義
  37. #define LCD_CS_Clr()  GPIO_ResetPins(LCD_CS_PORT, LCD_CS_PIN)
  38. #define LCD_CS_Set()  GPIO_SetPins(LCD_CS_PORT, LCD_CS_PIN)
  39. #define LCD_DC_Clr()  GPIO_ResetPins(LCD_DC_PORT, LCD_DC_PIN)
  40. #define LCD_DC_Set()  GPIO_SetPins(LCD_DC_PORT, LCD_DC_PIN)



  41. #define LCD_RES_Clr() GPIO_ResetPins(LCD_RST_PORT, LCD_RST_PIN)
  42. #define LCD_RES_Set() GPIO_SetPins(LCD_RST_PORT, LCD_RST_PIN)

  43. #define LCD_BLK_Set() GPIO_ResetPins(LCD_BLK_PORT, LCD_BLK_PIN)
  44. #define LCD_BLK_Clr() GPIO_SetPins(LCD_BLK_PORT, LCD_BLK_PIN)

  45. void LCD_Init(void);
  46. void LCD_Fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, lv_color_t *color);

  47. #endif
復制代碼
  1. #include "tftlcd.h"
  2. extern uint32_t test_var;
  3. // 緩沖區定義
  4. #define COLOR_FILL_BUFFER_SIZE (240 * 4)
  5. uint16_t color_fill_buffer[COLOR_FILL_BUFFER_SIZE];

  6. void LCD_GPIO_Init(void)
  7. {
  8.     stc_gpio_init_t stcGpioInit;              // 定義GPIO結構體
  9.     GPIO_SetDebugPort(GPIO_PIN_TDO, DISABLE); // 關閉調試端口,釋放相關引腳
  10.     GPIO_SetDebugPort(GPIO_PIN_SWO, DISABLE);

  11.     (void)GPIO_StructInit(&stcGpioInit); // 使用默認參數配置結構體

  12.     stcGpioInit.u16PinState = PIN_STAT_SET;           // 高電平
  13.     stcGpioInit.u16PinDir = PIN_DIR_OUT;              // 輸出模式
  14.     stcGpioInit.u16PinOutputType = PIN_OUT_TYPE_CMOS; // 推挽輸出
  15.     stcGpioInit.u16PinDrv = PIN_HIGH_DRV;             // 驅動能力高
  16.     stcGpioInit.u16PullUp = PIN_PU_OFF;

  17.     // SCLK
  18.     (void)GPIO_Init(LCD_POART, LCD_SCLK_PIN, &stcGpioInit);
  19.     // MOSI = SDA
  20.     (void)GPIO_Init(LCD_POART, LCD_MOSI_PIN, &stcGpioInit);
  21.     // RES
  22.     (void)GPIO_Init(LCD_RST_PORT, LCD_RST_PIN, &stcGpioInit);
  23.     // DC
  24.     (void)GPIO_Init(LCD_DC_PORT, LCD_DC_PIN, &stcGpioInit);
  25.     // CS
  26.     (void)GPIO_Init(LCD_CS_PORT, LCD_CS_PIN, &stcGpioInit);
  27.     // BLK
  28.     (void)GPIO_Init(LCD_BLK_PORT, LCD_BLK_PIN, &stcGpioInit);

  29.     // SCLK MOSI 引腳設為復用模式
  30.     GPIO_SetFunc(LCD_POART, LCD_SCLK_PIN, LCD_SCLK_FUNC);
  31.     GPIO_SetFunc(LCD_POART, LCD_MOSI_PIN, LCD_MOSI_FUNC);

  32.     stc_spi_init_t stcSpiInit;
  33.     stc_spi_delay_t stcSpiDelayCfg;

  34.     // 使用默認參數初始化結構體
  35.     (void)SPI_StructInit(&stcSpiInit);
  36.     (void)SPI_DelayStructInit(&stcSpiDelayCfg);

  37.     // 開啟SPI時鐘
  38.     FCG_Fcg1PeriphClockCmd(SPI_FCG, ENABLE);

  39.     // 清空SPI配置
  40.     SPI_DeInit(LCD_SPI);

  41.     // 設置SPI必要參數
  42.     stcSpiInit.u32WireMode = SPI_3_WIRE; // SPI3線模式
  43.     stcSpiInit.u32TransMode = SPI_FULL_DUPLEX;
  44.     stcSpiInit.u32MasterSlave = SPI_MASTER; // SPI主機
  45.     stcSpiInit.u32ModeFaultDetect = SPI_MD_FAULT_DETECT_DISABLE;
  46.     stcSpiInit.u32SuspendMode = SPI_COM_SUSP_FUNC_OFF; // 不自動掛起
  47.     stcSpiInit.u32Parity = SPI_PARITY_INVD;            // 不開奇偶校驗
  48.     stcSpiInit.u32SpiMode = SPI_MD_0;                  // 空閑低電平,奇數邊沿采樣
  49.     stcSpiInit.u32BaudRatePrescaler = SPI_BR_CLK_DIV2; //
  50.     stcSpiInit.u32DataBits = SPI_DATA_SIZE_8BIT;       // 一次傳輸8位
  51.     stcSpiInit.u32FirstBit = SPI_FIRST_MSB;            // 高位在前

  52.     // 初始化SPI
  53.     (void)SPI_Init(LCD_SPI, &stcSpiInit);

  54.     //         // 配置SPI延時必要參數
  55.     //         stcSpiDelayCfg.u32IntervalDelay = SPI_INTERVAL_TIME_1SCK; // t3:下次存取延時
  56.     //         stcSpiDelayCfg.u32ReleaseDelay = SPI_RELEASE_TIME_1SCK;   // t2:振蕩停止到片選無效時間
  57.     //         stcSpiDelayCfg.u32SetupDelay = SPI_SETUP_TIME_1SCK;       // t1:片選有效到開始振蕩時間
  58.     //         (void)SPI_DelayTimeConfig(LCD_SPI, &stcSpiDelayCfg);

  59.     // 使能SPI
  60.     SPI_Cmd(LCD_SPI, ENABLE);

  61.     // // CS 拉高
  62.     LCD_CS_Set();
  63. }

  64. /******************************************************************************
  65.       函數說明:LCD串行數據寫入函數
  66.       入口數據:dat  要寫入的串行數據
  67.       返回值:  無
  68. ******************************************************************************/
  69. void LCD_Writ_Bus(uint8_t dat)
  70. {
  71.     LCD_CS_Clr();

  72.     uint8_t RecvData = 0;

  73.     // 等待發送緩沖區為空
  74.     while (RESET == SPI_GetStatus(LCD_SPI, SPI_FLAG_TX_BUF_EMPTY))
  75.         ;

  76.     // 發送并接收數據
  77.     SPI_TransReceive(LCD_SPI, &dat, &RecvData, 1, HCLK_VALUE);

  78.     LCD_CS_Set();
  79. }

  80. /******************************************************************************
  81.       函數說明:LCD寫入數據
  82.       入口數據:dat 寫入的數據
  83.       返回值:  無
  84. ******************************************************************************/
  85. void LCD_WR_DATA8(uint8_t dat)
  86. {
  87.     LCD_DC_Set(); // 寫數據
  88.     LCD_Writ_Bus(dat);
  89. }

  90. /******************************************************************************
  91.       函數說明:LCD寫入數據
  92.       入口數據:dat 寫入的數據
  93.       返回值:  無
  94. ******************************************************************************/
  95. void LCD_WR_DATA(uint16_t dat)
  96. {
  97.     LCD_Writ_Bus(dat >> 8);
  98.     LCD_Writ_Bus(dat & 0xff);
  99. }

  100. /******************************************************************************
  101.       函數說明:LCD寫入命令
  102.       入口數據:dat 寫入的命令
  103.       返回值:  無
  104. ******************************************************************************/
  105. void LCD_WR_REG(uint8_t dat)
  106. {
  107.     LCD_DC_Clr(); // 寫命令
  108.     LCD_Writ_Bus(dat);
  109.     LCD_DC_Set(); // 寫數據
  110. }

  111. /**
  112. * @brief       設置顯示窗口
  113. * @param       x1:窗口列起始地址
  114. * @param       y1:坐標行起始地址
  115. * @param       x2:窗口列結束地址
  116. * @param       y2:坐標行結束地址
  117. * @retval      無
  118. */
  119. void LCD_Address_Set(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
  120. {
  121.     if (USE_HORIZONTAL == 0)
  122.     {
  123.         LCD_WR_REG(0x2a); // 列地址設置
  124.         LCD_WR_DATA(x1);
  125.         LCD_WR_DATA(x2);
  126.         LCD_WR_REG(0x2b); // 行地址設置
  127.         LCD_WR_DATA(y1);
  128.         LCD_WR_DATA(y2);
  129.         LCD_WR_REG(0x2c); // 儲存器寫
  130.     }
  131.     else if (USE_HORIZONTAL == 1)
  132.     {
  133.         LCD_WR_REG(0x2a); // 列地址設置
  134.         LCD_WR_DATA(x1);
  135.         LCD_WR_DATA(x2);
  136.         LCD_WR_REG(0x2b); // 行地址設置
  137.         LCD_WR_DATA(y1);
  138.         LCD_WR_DATA(y2);
  139.         LCD_WR_REG(0x2c); // 儲存器寫
  140.     }
  141.     else if (USE_HORIZONTAL == 2)
  142.     {
  143.         LCD_WR_REG(0x2a); // 列地址設置
  144.         LCD_WR_DATA(x1);
  145.         LCD_WR_DATA(x2);
  146.         LCD_WR_REG(0x2b); // 行地址設置
  147.         LCD_WR_DATA(y1);
  148.         LCD_WR_DATA(y2);
  149.         LCD_WR_REG(0x2c); // 儲存器寫
  150.     }
  151.     else
  152.     {
  153.         LCD_WR_REG(0x2a); // 列地址設置
  154.         LCD_WR_DATA(x1);
  155.         LCD_WR_DATA(x2);
  156.         LCD_WR_REG(0x2b); // 行地址設置
  157.         LCD_WR_DATA(y1);
  158.         LCD_WR_DATA(y2);
  159.         LCD_WR_REG(0x2c); // 儲存器寫
  160.     }
  161. }

  162. /**
  163. * @brief LCD初始化
  164. */
  165. void LCD_Init(void)
  166. {
  167.     // 初始化GPIO、SPI和DMA
  168.     LCD_GPIO_Init();

  169.     LCD_RES_Clr(); // 復位
  170.     DDL_DelayMS(120);
  171.     LCD_RES_Set();
  172.     DDL_DelayMS(120);
  173.     LCD_BLK_Set(); // 打開背光
  174.     DDL_DelayMS(120);

  175.     LCD_WR_REG(0x11);
  176.     // 延時至少120ms
  177.     DDL_DelayMS(120);

  178.     LCD_WR_REG(0x36);
  179.     if (USE_HORIZONTAL == 0)
  180.         LCD_WR_DATA8(0x00);
  181.     else if (USE_HORIZONTAL == 1)
  182.         LCD_WR_DATA8(0xC0);
  183.     else if (USE_HORIZONTAL == 2)
  184.         LCD_WR_DATA8(0x70);
  185.     else
  186.         LCD_WR_DATA8(0xA0);

  187.     LCD_WR_REG(0x3A);
  188.     LCD_WR_DATA8(0x05);

  189.     LCD_WR_REG(0xB2);
  190.     LCD_WR_DATA8(0x0C);
  191.     LCD_WR_DATA8(0x0C);
  192.     LCD_WR_DATA8(0x00);
  193.     LCD_WR_DATA8(0x33);
  194.     LCD_WR_DATA8(0x33);

  195.     LCD_WR_REG(0xB7);
  196.     LCD_WR_DATA8(0x35);

  197.     LCD_WR_REG(0xBB);
  198.     LCD_WR_DATA8(0x1A);

  199.     LCD_WR_REG(0xC0);
  200.     LCD_WR_DATA8(0x2C);

  201.     LCD_WR_REG(0xC2);
  202.     LCD_WR_DATA8(0x01);

  203.     LCD_WR_REG(0xC3);
  204.     LCD_WR_DATA8(0x0B);

  205.     LCD_WR_REG(0xC4);
  206.     LCD_WR_DATA8(0x20);

  207.     LCD_WR_REG(0xC6);
  208.     LCD_WR_DATA8(0x0F);

  209.     LCD_WR_REG(0xD0);
  210.     LCD_WR_DATA8(0xA4);
  211.     LCD_WR_DATA8(0xA1);

  212.     LCD_WR_REG(0x21);
  213.     LCD_WR_REG(0xE0);
  214.     LCD_WR_DATA8(0xF0);
  215.     LCD_WR_DATA8(0x00);
  216.     LCD_WR_DATA8(0x04);
  217.     LCD_WR_DATA8(0x04);
  218.     LCD_WR_DATA8(0x04);
  219.     LCD_WR_DATA8(0x05);
  220.     LCD_WR_DATA8(0x29);
  221.     LCD_WR_DATA8(0x33);
  222.     LCD_WR_DATA8(0x3E);
  223.     LCD_WR_DATA8(0x38);
  224.     LCD_WR_DATA8(0x12);
  225.     LCD_WR_DATA8(0x12);
  226.     LCD_WR_DATA8(0x28);
  227.     LCD_WR_DATA8(0x30);

  228.     LCD_WR_REG(0xE1);
  229.     LCD_WR_DATA8(0xF0);
  230.     LCD_WR_DATA8(0x07);
  231.     LCD_WR_DATA8(0x0A);
  232.     LCD_WR_DATA8(0x0D);
  233.     LCD_WR_DATA8(0x0B);
  234.     LCD_WR_DATA8(0x07);
  235.     LCD_WR_DATA8(0x28);
  236.     LCD_WR_DATA8(0x33);
  237.     LCD_WR_DATA8(0x3E);
  238.     LCD_WR_DATA8(0x36);
  239.     LCD_WR_DATA8(0x14);
  240.     LCD_WR_DATA8(0x14);
  241.     LCD_WR_DATA8(0x29);
  242.     LCD_WR_DATA8(0x32);

  243.     LCD_WR_REG(0x20); // 反色St7789

  244.     LCD_WR_REG(0x11);
  245.     LCD_Fill(0, 0, LCD_HEIGHT, LCD_WIDTH, 0x0000);
  246.     LCD_WR_REG(0x29);
  247.     test_var = 1000;
  248. }
  249. // void LCD_Fill(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color)
  250. // {
  251. //     uint16_t i, j;
  252. //     LCD_Address_Set(xsta, ysta, xend - 1, yend - 1);
  253. //     for (i = ysta; i < yend; i++)
  254. //     {
  255. //         for (j = xsta; j < xend; j++)
  256. //         {
  257. //             LCD_WR_DATA(color);
  258. //         }
  259. //     }
  260. // }
  261. void LCD_Fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, lv_color_t *color)
  262. {
  263.     uint16_t i, j;
  264.     uint32_t k = 0;
  265.     uint32_t x = 0, y = 0;
  266.     uint16_t height, width;
  267.     width = ex - sx + 1;  // 得到填充的寬度
  268.     height = ey - sy + 1; // 高度

  269.     LCD_Address_Set(sx, sy, ex, ey);

  270.     for (y = 0; y < width * height; y++)
  271.     {
  272.         LCD_WR_DATA(color->full);
  273.         color++;
  274.     }
  275. }
復制代碼

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
免费看a在线观看| 久久三级中文| 高清欧美性猛交xxxx| 91网站在线播放| 欧美爱爱网站| 中文字幕有码在线观看| 天天摸天天碰天天爽天天弄| 精品人妻一区二区三| 久久国产精品免费一区| 久久久国产精品一区| 91久久精品一区二区| 成人一区二区三区视频 | 欧美人成在线观看网站高清| 国产午夜小视频| 中文字幕1区2区| 欧美狂野激情性xxxx在线观| 国产精选久久久久久| 色狠狠av一区二区三区香蕉蜜桃| 日本黄色一区二区| 欧美国产日产图区| 国内精品久久久久影院薰衣草| 99精品视频在线观看免费播放 | 亚洲 自拍 另类小说综合图区 | 日韩欧美亚洲视频| 人妻少妇精品视频一区二区三区| 男人添女人下部高潮视频在观看| 久久av一区二区三区亚洲| 国产97在线|日韩| 日韩在线观看免费网站| 日韩一区二区三区高清免费看看 | 成人精品在线视频| 久久福利视频网| 欧美成人午夜电影| 在线精品观看国产| 亚洲精品第一国产综合野| 成人深夜在线观看| 蓝色福利精品导航| 国产亚洲网站| 欧美人与牲动交xxxxbbbb| 天堂网视频在线| 国产又色又爽又高潮免费| 99热这里只有精品2| 欧美日韩一区二区在线免费观看| 伊人久久大香线蕉综合75| 国产免费高清一区| 91在线看www| 国产精品高潮呻吟视频| 欧美激情亚洲精品| 欧美国产一级| 日本免费一区二区视频| 欧洲一级精品| av影院在线免费观看| av在线电影网| 第一福利在线| 国产原创av在线| 桃花色综合影院| 午夜黄色一级片| 免费观看一二区视频网站| 久久精品偷拍视频| 日本三级理论片| 国产一级在线观看视频| 久草网在线观看| 国产一级做a爰片在线看免费| 999精品在线视频| 永久免费未视频| 日本精品在线免费观看| 亚洲综合视频网站| 国产真实乱人偷精品视频| 九九热精品免费视频| 久久久久久久黄色| 九九热在线视频播放| 国产精品乱子伦| 国产成人无码av| 中文字幕在线播放av| 96亚洲精品久久久蜜桃| 国产肥老妇视频| 性猛交xxxx| 欧美无遮挡国产欧美另类| 香蕉视频999| 国内外成人免费在线视频| 91网址在线播放| 丰满人妻一区二区三区53视频| jjzz黄色片| 国产中年熟女高潮大集合| 国产中年熟女高潮大集合| 蜜桃av.com| 特黄视频免费看| 国产精品日韩无码| 婷婷色在线视频| 欧美激情福利视频在线观看免费| 99久久国产视频| www.毛片| 亚洲精品视频区| 国产在线1区| 自拍一区在线观看| 一区二区三区四区高清视频| 精品国产乱码久久久久久果冻传媒 | 中国黄色片免费看| 黄色av电影网站| 无码人中文字幕| 天天操天天爽天天干| 中文字幕码精品视频网站| 五月婷中文字幕| 色橹橹高清视频在线播放| 啊啊啊啊啊好爽| 第三区美女视频在线| av成人影院在线| 久久99成人| 欧美aaaa视频| 久久狠狠亚洲综合| 国产日韩欧美不卡| 在线免费亚洲电影| 亚洲女人被黑人巨大进入al| 久久久久久久爱| www.成人av| 97超碰在线视| 亚洲欧美高清在线| 久久亚洲精品大全| 韩国av在线免费观看| 性一交一乱一伦一色一情| 午夜在线免费视频| h片在线观看视频免费免费| 一区二区三区四区精品视频| 亚洲午夜激情在线| 99麻豆久久久国产精品免费优播| 亚洲图片欧美一区| 日韩精品福利网站| 国产精品aaaa| 国产精品久久成人免费观看| 永久看看免费大片| 国产尤物在线视频| 乱小说欧美综合| 色视频在线观看| 午夜精品久久久久久毛片| 国产精品7m凸凹视频分类| 国产一区二区视频在线播放| 亚洲综合久久久久| 亚洲欧美制服另类日韩| 国产拍精品一二三| 97视频在线免费| 久久亚洲AV无码专区成人国产| 伊人久久成人网| 九九视频九九热| 深夜国产在线播放| 香蕉久久精品日日躁夜夜躁| 老司机免费视频一区二区三区| 一区二区三区在线视频免费 | 久久成人免费观看| 国产一区在线观看免费| 女人18毛片一区二区三区| 波多野结衣一区二区三区四区| xxxxx69·hd| 屁屁影院在线观看| 日韩av黄色| 亚洲免费观看| 亚洲男同性视频| 亚洲色图狂野欧美| 国产日韩欧美综合精品| 香蕉视频999| 亚洲中文字幕无码爆乳av| 国产69精品久久久久9999小说| 日韩精品123| 大型av综合网站| 黄页网站大全一区二区| 在线精品视频一区二区| 欧美一区二三区| 17c丨国产丨精品视频| 婷婷伊人五月天| 精品街拍一区二区| 午夜影院免费在线| 亚洲中无吗在线| 自拍偷拍欧美激情| 色婷婷av一区二区三区在线观看| 久久精品国产99精品国产亚洲性色| 日本少妇一级片| 国产精品毛片一区视频播| 秋霞在线观看av| 国产高清亚洲| 国产在线不卡视频| 91精品中文字幕一区二区三区| 国产精品网红福利| 国产精品自在自线| 亚洲国产999| www.亚洲黄色| www.中文字幕久久久| 日韩免费一区| 亚洲女厕所小便bbb| 欧美成人午夜剧场免费观看| 黄色污污在线观看| 国产午夜在线播放| 三级免费网站| 99久久人爽人人添人人澡| 成人av先锋影音| 亚洲人成77777在线观看网| 亚洲精蜜桃久在线| 麻豆影视在线播放| free亚洲| 久久资源综合| 国产精品女主播av| 久久久久久久久久久91| 国产性xxxx18免费观看视频| 一级黄色片在线| sese在线视频| 99综合视频| 欧美一区二区三区色| 久久免费在线观看| 国产真实乱子伦| 亚洲欧洲国产精品久久| 天海翼在线视频| jizzjizzjizz亚洲女| 无码日韩精品一区二区免费| 国产精品久久网站| 26uuu久久噜噜噜噜| 成人高清在线观看视频| 蜜桃色永久入口| 欧美日韩不卡| av日韩在线网站| 久久亚洲精品一区| 粉色视频免费看| 久久综合香蕉| 色综合久久久| 国产精品久久毛片| 国产精品私拍pans大尺度在线| 最近中文字幕无免费| 91麻豆产精品久久久久久夏晴子 | 最近中文字幕在线中文高清版| av今日在线| 波多野结衣中文字幕一区二区三区 | 狠狠操五月天| 久久99性xxx老妇胖精品| 亚洲午夜在线电影| 国产精品久久亚洲| 国产乡下妇女做爰| 黄色软件在线| 男女av一区三区二区色多| 亚洲精品久久久久久久久久久| 日本一二三区视频在线| 国产视频一区二区三| av资源网在线播放| 91影院在线观看| 国产mv久久久| 国产喷水在线观看| 性xxxx丰满孕妇xxxx另类| 亚洲手机视频| 亚洲精品999| 丁香婷婷激情网| 国产野外战在线播放| 成人在线tv视频| 欧美日韩午夜剧场| 五月天亚洲综合| 国产特级黄色片| 成人在线免费av| 亚洲午夜视频在线| 欧美高清视频一区| 在线观看免费高清视频| 毛片在线网站| 中文字幕五月欧美| 精品午夜一区二区三区| 国产日韩久久久| 九九色在线视频| 视频在线观看91| 色婷婷**av毛片一区| 一级黄色免费毛片| wwwcom羞羞网站| 亚洲自啪免费| 欧美激情久久久| 国产精品酒店视频| 成年人在线观看网站| 国产成+人+日韩+欧美+亚洲| 日本久久精品视频| 日本中文字幕免费观看| 神马午夜伦理不卡| 中文字幕日韩精品一区| 欧美韩国日本精品一区二区三区| 一区二区日韩在线观看| jizz免费一区二区三区| 亚洲高清免费观看| 中文字幕人成一区| 欧美黑人xxxx猛牲大交| 成人同人动漫免费观看 | 黄色免费福利视频| 99久久国产视频| 欧美视频一区| 久热精品视频在线| 国产性生活大片| 伊人在我在线看导航| 日韩一区中文字幕| 正在播放一区| 国产精品在线| 日韩视频在线一区二区三区| 欧美成人激情在线| 99热精品免费| 国产精品粉嫩| 在线观看区一区二| 婷婷丁香激情网| 老太做爰xxxx| 国产精品久久久一区二区| 91国产视频在线| 亚洲永久精品在线观看| 惠美惠精品网| 欧美在线高清视频| 三级av免费观看| 自由色视频.| 成人激情av网| 精品欧美一区二区久久久伦| 国产精品嫩草影院桃色| 欧美男男gaytwinkfreevideos| 亚洲第一视频网站| 在线免费观看污视频| 在线中文资源天堂| 亚洲欧美日韩一区二区| 欧美尤物巨大精品爽| 91精品国产乱码久久久张津瑜 | 日韩久久久久久久| 一道精品视频一区二区三区图片 | 亚洲成人性视频| 日韩人妻无码一区二区三区| 尤物在线视频| 亚洲成a人v欧美综合天堂下载| 欧美a v在线播放| 黄页视频在线观看| 久久亚区不卡日本| 中文字幕一区二区三区四区五区六区| 国产一卡2卡3卡四卡网站| 国产欧美一区二区色老头| 国产精品丝袜白浆摸在线| 国产女人爽到高潮a毛片| 精品国产午夜肉伦伦影院| 在线观看精品国产视频| 情侣偷拍对白清晰饥渴难耐| 国产亚洲欧美日韩精品一区二区三区 | 国产精品中文字幕亚洲欧美| 久久精品小视频| xxxx.国产| 红杏aⅴ成人免费视频| 日韩最新中文字幕电影免费看| 欧美第一页在线观看| 亚洲精品v亚洲精品v日韩精品| 精品99一区二区三区| 欧美日韩生活片| 日韩精品免费观看视频| 亚洲精品国产精品乱码不99按摩| 女性裸体视频网站| 制服诱惑亚洲| 精品亚洲永久免费精品| 四虎成人精品永久免费av| 亚洲国产视频二区| 欧美另类在线播放| 色婷婷久久综合中文久久蜜桃av| 水蜜桃精品av一区二区| 国产精品吹潮在线观看| 野外性xxxxfreexxxxx欧美| 日韩精品一级中文字幕精品视频免费观看 | 中文字幕亚洲区| 手机看片一级片| 国产成人l区| 欧美不卡一区二区三区四区| 日本一道本视频| 国产精品1区| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲免费视频网| 奇米影视一区二区三区| 正在播放91九色| 国产中文在线视频| 欧美视频在线不卡| 日本免费网站视频| 日韩欧美ww| 国产在线精品成人一区二区三区| 国产一级免费黄色片| 国产午夜精品久久| 欧美一级小视频| 国产福利91精品一区二区| 欧美成人免费在线视频| 亚州av在线播放| 成人高清在线视频| 狠狠操狠狠干视频| 99只有精品| 欧美精品久久久久久久久久| 欧美一级特黄aaaaaa| 国产精品资源网站| 99免费视频观看| 不卡av影片| 欧美成人激情视频免费观看| 一区二区免费播放| jiyouzz国产精品久久| 亚洲成人福利在线| 成人一级视频| 国产91色在线|| www狠狠操| 欧美日韩免费一区| 精品视频久久久久| 亚洲精品欧美| 国产精品啪啪啪视频| 国产二区三区在线| 色婷婷综合成人| 欧美另类videosbest视频| 国产精品伦一区| 成熟人妻av无码专区| 日韩欧美精品| 日本一区免费看|