【外设移植】Ai-M61-32s 开发板+3.5寸SPI彩屏

[复制链接]
查看2082 | 回复11 | 2024-1-19 12:04:19 | 显示全部楼层 |阅读模式
大家好,今天给大家带来3.5寸SPI彩屏的移植库(硬件SPI,因为软件SPI刷新率的问题,所不提供软件SPI)


                               
登录/注册后可看大图



接线图如下


未标题-1.png


M61-32S 3.5寸SPI屏
VCC VCC
GND GND
IO12 CS
IO26 RS
IO27 D/C
IO19 SDI
IO13 SCL
IO28 BL
IO18 SDO





                               
登录/注册后可看大图




库文件介绍


该移植库共包含五个部分,分别是:
  • lcd_init.c  LCD初始化函数相关源码文件
  • lcd_init.h  LCD初始化函数头文件
  • lcd.c         LCD显示相关源码文件
  • lcd.h         LCD显示相关头文件
  • lcdfont.h  字体文件
  • pic.h         显示图片相关
  • USER_SPI.c  SPI相关源码文件
  • USER_SPI.h  SPI相关头文件





                               
登录/注册后可看大图

如何使用
1 - 用户需要在CMakeLists.txt引入需要编译的库即可,如下所示(可自定义引入的路径)
  1. target_sources(app PRIVATE
  2.                    USER_SPI.h
  3.                    USER_SPI.C
  4.                    LCD/lcd_init.c
  5.                    LCD/lcd_init.h
  6.                    LCD/lcd.c
  7.                    LCD/lcd.h
  8.                    LCD/lcdfont.h
  9.                    LCD/pic.h
  10.                    )
复制代码


2- 在main.c 中进行测试,或者手动调用lcd.h中的方法,下图为main.c的代码
  1. #include "bflb_mtimer.h"
  2. #include "board.h"
  3. #include "bflb_gpio.h"
  4. #include "LCD\lcd_init.h"
  5. #include "LCD\lcd.h"

  6. #include "LCD\pic.h"
  7. int main(void)
  8. {
  9.     uint8_t i, j;
  10.     float t = 0;
  11.     board_init();
  12.     LCD_Init();
  13.     LCD_Fill(0, 0, LCD_W, LCD_H, WHITE);
  14.     while (1)
  15.     {

  16.         LCD_ShowString(0, 40, "LCD_W:", RED, WHITE, 16, 0);
  17.         LCD_ShowIntNum(48, 40, LCD_W, 3, RED, WHITE, 16);
  18.         LCD_ShowString(80, 40, "LCD_H:", RED, WHITE, 16, 0);
  19.         LCD_ShowIntNum(128, 40, LCD_H, 3, RED, WHITE, 16);
  20.         LCD_ShowString(80, 40, "LCD_H:", RED, WHITE, 16, 0);
  21.         LCD_ShowString(0, 70, "Increaseing Nun:", RED, WHITE, 16, 0);
  22.         LCD_ShowFloatNum1(128, 70, t, 4, RED, WHITE, 16);
  23.         t += 0.11;
  24.         for (j = 0; j < 7; j++)
  25.         {
  26.             for (i = 0; i < 8; i++)
  27.             {
  28.                 LCD_ShowPicture(40 * i, 200 + j * 40, 40, 40, gImage_1);
  29.             }
  30.         }
  31.         bflb_mtimer_delay_ms(5000);
  32.     }
  33. }
复制代码




3- lcd.h lcd显示相关函数定义(我已经加了详细的代码注释)
  1. #ifndef __LCD_H
  2. #define __LCD_H
  3. #include "stdint.h"
  4. /*********************************************屏幕显示函数开始********************************************/
  5. /**
  6. * @brief 在指定区域填充颜色
  7. *
  8. * @param xsta 起始坐标 x
  9. * @param ysta 起始坐标y
  10. * @param xend 结束坐标x
  11. * @param yend 结束坐标y
  12. * @param color 颜色
  13. */
  14. void LCD_Fill(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint32_t color);

  15. /**
  16. * @brief 在指定位置画点
  17. *
  18. * @param x x坐标
  19. * @param y y坐标
  20. * @param color 颜色
  21. */
  22. void LCD_DrawPoint(uint16_t x, uint16_t y, uint32_t color);

  23. /**
  24. * @brief 在指定位置画一个线段
  25. *
  26. * @param x1 起始坐标x
  27. * @param y1 起始坐标y
  28. * @param x2 结束坐标x
  29. * @param y2 结束坐标y
  30. * @param color 颜色
  31. */
  32. void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint32_t color);

  33. /**
  34. * @brief 在指定位置画一个矩形
  35. *
  36. * @param x1 起始坐标x
  37. * @param y1 起始坐标y
  38. * @param x2 结束坐标x
  39. * @param y2 结束坐标y
  40. * @param color 颜色
  41. */
  42. void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint32_t color);

  43. /**
  44. * @brief 在指定位置画一个圆
  45. *
  46. * @param x0 圆心坐标x
  47. * @param y0 圆心坐标y
  48. * @param r 半径
  49. * @param color 颜色
  50. */
  51. void Draw_Circle(uint16_t x0, uint16_t y0, uint8_t r, uint32_t color);

  52. /**
  53. * @brief 指定位置显示一个字符
  54. *
  55. * @param x x坐标
  56. * @param y y坐标
  57. * @param num 要显示的char 字符
  58. * @param fc  字体颜色
  59. * @param bc  背景颜色
  60. * @param sizey 字体大小 16 24 32
  61. * @param mode 0叠加模式 / 1 不叠加
  62. */
  63. void LCD_ShowChar(uint16_t x, uint16_t y, uint8_t num, uint32_t fc, uint32_t bc, uint8_t sizey, uint8_t mode);

  64. /**
  65. * @brief 指定位置显示一个字符串
  66. *
  67. * @param x x坐标
  68. * @param y y坐标
  69. * @param p 要显示的字符串数组指针
  70. * @param fc  字体颜色
  71. * @param bc  背景颜色
  72. * @param sizey 字体大小 16 24 32
  73. * @param mode 0叠加模式 / 1 不叠加
  74. */
  75. void LCD_ShowString(uint16_t x, uint16_t y, const uint8_t *p, uint32_t fc, uint32_t bc, uint8_t sizey, uint8_t mode);

  76. /**
  77. * @brief 求幂函数
  78. *
  79. * @param m 底数
  80. * @param n 指数
  81. * @return uint32_t 结果
  82. */
  83. uint32_t mypow(uint8_t m, uint8_t n);

  84. /**
  85. * @brief 指定位置显示一个字符串
  86. *
  87. * @param x x坐标
  88. * @param y y坐标
  89. * @param num 要显示的数字
  90. * @param len  长度
  91. * @param fc  字体颜色
  92. * @param bc 背景颜色
  93. * @param sizey 字体大小 16 24 32
  94. */
  95. void LCD_ShowIntNum(uint16_t x, uint16_t y, uint16_t num, uint8_t len, uint32_t fc, uint32_t bc, uint8_t sizey);

  96. /**
  97. * @brief 指定位置显示一个字符串
  98. *
  99. * @param x x坐标
  100. * @param y y坐标
  101. * @param num 要显示的数字
  102. * @param len  长度
  103. * @param fc  字体颜色
  104. * @param bc 背景颜色
  105. * @param sizey 字体大小 16 24 32
  106. */
  107. void LCD_ShowFloatNum1(uint16_t x, uint16_t y, float num, uint8_t len, uint32_t fc, uint32_t bc, uint8_t sizey);

  108. /**
  109. * @brief 显示一张图片在屏幕上
  110. *
  111. * @param x x坐标
  112. * @param y y坐标
  113. * @param length 长
  114. * @param width 宽
  115. * @param pic 图片数组
  116. */
  117. void LCD_ShowPicture(uint16_t x, uint16_t y, uint16_t length, uint16_t width, const uint8_t pic[]);

  118. /*********************************************屏幕显示函数结束***********************************************/

  119. /*---------------------------------------------------------------------------------------------------------*/
  120. /*********************************************屏幕显示颜色定义开始********************************************/
  121. #define WHITE 0xFCFCFC
  122. #define BLACK 0X000000
  123. #define RED 0xFC0000
  124. #define GREEN 0x00FC00
  125. #define BLUE 0x0000FC
  126. /*********************************************屏幕显示颜色定义结束********************************************/
  127. #endif
复制代码


                               
登录/注册后可看大图




代码如下
SPI_TEST.zip (20.55 KB, 下载次数: 18)

本帖被以下淘专辑推荐:

回复

使用道具 举报

timo | 2024-1-19 12:11:31 | 显示全部楼层
费心了,这是个大工程
回复 支持 反对

使用道具 举报

bzhou830 | 2024-1-19 12:30:15 | 显示全部楼层
王哥真棒
选择去发光,而不是被照亮
回复

使用道具 举报

WT_0213 | 2024-1-19 13:33:22 | 显示全部楼层
厉害了
回复

使用道具 举报

爱笑 | 2024-1-19 13:35:17 | 显示全部楼层
王哥优秀
用心做好保姆工作
回复

使用道具 举报

干簧管 | 2024-1-19 14:16:42 | 显示全部楼层
王哥优秀
回复

使用道具 举报

1084504793 | 2024-1-19 15:56:45 | 显示全部楼层
回复

使用道具 举报

duzi | 2024-1-20 07:19:09 来自手机 | 显示全部楼层
学到了
回复

使用道具 举报

WT_0213 | 2024-1-20 13:31:02 | 显示全部楼层
厉害
回复

使用道具 举报

WangChong | 2024-1-20 17:51:26 | 显示全部楼层

水哥,一个贴你能水几次
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则