[DemoCode下载] ILI9341初始化方法

[复制链接]
1130|3
 楼主| dongnanxibei 发表于 2023-12-18 21:37 | 显示全部楼层 |阅读模式
  1. /*-----------------------------------------------*/
  2. // Write control registers of LCD module  
  3. //
  4. /*-----------------------------------------------*/
  5. #if PH_CTRL_RS
  6. void LCD_WR_REG(uint16_t cmd)
  7. {
  8.     CLR_RS
  9.     EBI0_WRITE_DATA16(0x00000000, cmd);
  10.     SET_RS

  11. }

  12. #else
  13. void LCD_WR_REG(uint16_t cmd)
  14. {
  15.     EBI0_WRITE_DATA16(0x00000000, cmd);
  16. }

  17. #endif


  18. /*-----------------------------------------------*/
  19. // Write data to SRAM of LCD module  
  20. //
  21. /*-----------------------------------------------*/
  22. void LCD_WR_DATA(uint16_t dat)
  23. {
  24.     EBI0_WRITE_DATA16(0x00030000, dat);

  25. }


  26. /*-----------------------------------------------*/
  27. // Read data from SRAM of LCD module
  28. //
  29. /*-----------------------------------------------*/
  30. uint16_t LCD_RD_DATA(void)
  31. {
  32.     return EBI0_READ_DATA16(0x00030000);

  33. }

  34. /********************************************************************
  35. *
  36. *       LcdWriteDataMultiple
  37. *
  38. *   Function description:
  39. *   Writes multiple values to a display register.
  40. */
  41. static void LcdWriteDataMultiple(uint16_t * pData, int NumItems)
  42. {
  43.     while (NumItems--) {
  44.         EBI0_WRITE_DATA16(0x00030000,*pData++);
  45.     }
  46. }

  47. /********************************************************************
  48. *
  49. *       LcdReadDataMultiple
  50. *
  51. *   Function description:
  52. *   Reads multiple values from a display register.
  53. */
  54. static void LcdReadDataMultiple(uint16_t * pData, int NumItems)
  55. {
  56.     while (NumItems--) {
  57.         *pData++ = EBI0_READ_DATA16(0x00030000);
  58.     }
  59. }

  60. /*-----------------------------------------------*/
  61. // Set cursor positon on the LCD screen
  62. //
  63. /*-----------------------------------------------*/
  64. #if 0
  65. void LCD_SetCursor(uint16_t x_s, uint16_t y_s)
  66. {
  67.     uint16_t x_e = x_s+1;
  68.     uint16_t y_e = y_s+1;
  69.         
  70.     /* X range */
  71.     LCD_WR_REG(0x2A);
  72.     LCD_WR_DATA(x_s>>8);
  73.     LCD_WR_DATA(x_s);
  74.     LCD_WR_DATA(x_e>>8);
  75.     LCD_WR_DATA(x_e);

  76.     /* Y range */
  77.     LCD_WR_REG(0x2B);
  78.     LCD_WR_DATA(y_s>>8);
  79.     LCD_WR_DATA(y_s);
  80.     LCD_WR_DATA(y_e>>8);
  81.     LCD_WR_DATA(y_e);
  82.         
  83.     /* Memory write */
  84.     LCD_WR_REG(0x2C);
  85.    
  86. }
  87. #endif

  88. /*-----------------------------------------------*/
  89. // Initial LIL9341 LCD driver chip
  90. //
  91. /*-----------------------------------------------*/
  92. void ILI9341_Initial(void)
  93. {
  94.     uint16_t Reg = 0;
  95.    
  96.     /* Hardware reset */
  97.     SET_RST;
  98.     CLK_SysTickDelay(5000);     // Delay 5ms
  99.    
  100.     CLR_RST;
  101.     CLK_SysTickDelay(20000);    // Delay 20ms
  102.    
  103.     SET_RST;
  104.     CLK_SysTickDelay(40000);    // Delay 40ms

  105.     /* Initial control registers */
  106.     LCD_WR_REG(0xCB);
  107.     LCD_WR_DATA(0x39);
  108.     LCD_WR_DATA(0x2C);
  109.     LCD_WR_DATA(0x00);
  110.     LCD_WR_DATA(0x34);
  111.     LCD_WR_DATA(0x02);

  112.     LCD_WR_REG(0xCF);
  113.     LCD_WR_DATA(0x00);
  114.     LCD_WR_DATA(0xC1);
  115.     LCD_WR_DATA(0x30);

  116.     LCD_WR_REG(0xE8);
  117.     LCD_WR_DATA(0x85);
  118.     LCD_WR_DATA(0x00);
  119.     LCD_WR_DATA(0x78);

  120.     LCD_WR_REG(0xEA);
  121.     LCD_WR_DATA(0x00);
  122.     LCD_WR_DATA(0x00);

  123.     LCD_WR_REG(0xED);
  124.     LCD_WR_DATA(0x64);
  125.     LCD_WR_DATA(0x03);
  126.     LCD_WR_DATA(0x12);
  127.     LCD_WR_DATA(0x81);

  128.     LCD_WR_REG(0xF7);
  129.     LCD_WR_DATA(0x20);

  130.     LCD_WR_REG(0xC0);
  131.     LCD_WR_DATA(0x23);

  132.     LCD_WR_REG(0xC1);
  133.     LCD_WR_DATA(0x10);

  134.     LCD_WR_REG(0xC5);
  135.     LCD_WR_DATA(0x3e);
  136.     LCD_WR_DATA(0x28);

  137.     LCD_WR_REG(0xC7);
  138.     LCD_WR_DATA(0x86);

  139.     LCD_WR_REG(0x36);
  140.     LCD_WR_DATA(0x48);

  141.     LCD_WR_REG(0x3A);
  142.     LCD_WR_DATA(0x55);
  143.         
  144.     LCD_WR_REG(0xB1);
  145.     LCD_WR_DATA(0x00);
  146.     LCD_WR_DATA(0x18);

  147.     LCD_WR_REG(0xB6);
  148.     LCD_WR_DATA(0x08);
  149.     LCD_WR_DATA(0x82);
  150.     LCD_WR_DATA(0x27);

  151.     LCD_WR_REG(0xF2);
  152.     LCD_WR_DATA(0x00);

  153.     LCD_WR_REG(0x26);
  154.     LCD_WR_DATA(0x01);

  155.     LCD_WR_REG(0xE0);
  156.     LCD_WR_DATA(0x0F);
  157.     LCD_WR_DATA(0x31);
  158.     LCD_WR_DATA(0x2B);
  159.     LCD_WR_DATA(0x0C);
  160.     LCD_WR_DATA(0x0E);
  161.     LCD_WR_DATA(0x08);
  162.     LCD_WR_DATA(0x4E);
  163.     LCD_WR_DATA(0xF1);
  164.     LCD_WR_DATA(0x37);
  165.     LCD_WR_DATA(0x07);
  166.     LCD_WR_DATA(0x10);
  167.     LCD_WR_DATA(0x03);
  168.     LCD_WR_DATA(0x0E);
  169.     LCD_WR_DATA(0x09);
  170.     LCD_WR_DATA(0x00);

  171.     LCD_WR_REG(0xE1);
  172.     LCD_WR_DATA(0x00);
  173.     LCD_WR_DATA(0x0E);
  174.     LCD_WR_DATA(0x14);
  175.     LCD_WR_DATA(0x03);
  176.     LCD_WR_DATA(0x11);
  177.     LCD_WR_DATA(0x07);
  178.     LCD_WR_DATA(0x31);
  179.     LCD_WR_DATA(0xC1);
  180.     LCD_WR_DATA(0x48);
  181.     LCD_WR_DATA(0x08);
  182.     LCD_WR_DATA(0x0F);
  183.     LCD_WR_DATA(0x0C);
  184.     LCD_WR_DATA(0x31);
  185.     LCD_WR_DATA(0x36);
  186.     LCD_WR_DATA(0x0F);

  187.     LCD_WR_REG(0x11);
  188.     CLK_SysTickDelay(200000);   // Delay 200ms
  189.    
  190.     LCD_WR_REG(0x29);           //Display on

  191.     LCD_WR_REG(0x0A);
  192.     Reg = LCD_RD_DATA();
  193.     Reg = LCD_RD_DATA();
  194.     printf("0Ah = %02x.\n", Reg);
  195.    
  196.     LCD_WR_REG(0x0B);
  197.     Reg = LCD_RD_DATA();
  198.     Reg = LCD_RD_DATA();
  199.     printf("0Bh = %02x.\n", Reg);
  200.    
  201.     LCD_WR_REG(0x0C);
  202.     Reg = LCD_RD_DATA();
  203.     Reg = LCD_RD_DATA();
  204.     printf("0Ch = %02x.\n", Reg);

  205.     printf("Initial ILI9341 LCD Module done.\n\n");

  206. }


734774645 发表于 2023-12-18 22:24 | 显示全部楼层
另外可以将这些指令放到数组里,用循环写入方式写入芯片。
734774645 发表于 2023-12-18 22:25 | 显示全部楼层
直接写这么多看着就太长了,放数组写入可以让程序看着更加简洁
老橘树下的桥头 发表于 2025-9-11 15:38 | 显示全部楼层
ILI9341 初始化:复位后发送休眠退出、像素格式设置、内存数据访问控制等指令,配置时序与显示参数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

225

主题

3848

帖子

18

粉丝
快速回复 在线客服 返回列表 返回顶部