找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2164|回复: 5
收起左侧

STM32F103C8T6 HAL库方式 1.8寸TFT ST7735 和LCD1602A时间显示照片轮播显示程序

[复制链接]
ID:1042254 发表于 2022-11-2 14:46 | 显示全部楼层 |阅读模式
制作出来的实物图如下:

1.8寸TFT ST7735

 1.8寸TFT ST7735

LCD1602A

LCD1602A

CubeMX设置

CubeMX设置

时钟配置

时钟配置

5.png
6.png

STM32F103C8T6 HAL库方式 1.8寸TFT ST7735 和LCD1602A 时间显示照片轮播显示
单片机源程序如下:
  1. /*
  2. * spi_lcd_st7735.h
  3. *
  4. *  Created on: Oct 31, 2022
  5. *      Author: Administrator
  6. */

  7. #ifndef LCD_SPI_LCD_ST7735_H_
  8. #define LCD_SPI_LCD_ST7735_H_

  9. #include "stm32f1xx_hal.h"
  10. #define u8 uint8_t
  11. #define u16 uint16_t
  12. #define u32 uint32_t
  13. void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color);//指定区域填充颜色
  14. void LCD_DrawPoint(u16 x,u16 y,u16 color);//在指定位置画一个点
  15. void LCD_DrawLine(u16 x1,u16 y1,u16 x2,u16 y2,u16 color);//在指定位置画一条线
  16. void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 color);//在指定位置画一个矩形
  17. void Draw_Circle(u16 x0,u16 y0,u8 r,u16 color);//在指定位置画一个圆

  18. void LCD_ShowChinese(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//显示汉字串
  19. void LCD_ShowChinese12x12(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//显示单个12x12汉字
  20. void LCD_ShowChinese16x16(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//显示单个16x16汉字
  21. void LCD_ShowChinese24x24(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//显示单个24x24汉字
  22. void LCD_ShowChinese32x32(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);//显示单个32x32汉字

  23. void LCD_ShowChar(u16 x,u16 y,u8 num,u16 fc,u16 bc,u8 sizey,u8 mode);//显示一个字符
  24. void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 fc,u16 bc,u8 sizey,u8 mode);//显示字符串
  25. u32 mypow(u8 m,u8 n);//求幂
  26. void LCD_ShowIntNum(u16 x,u16 y,u16 num,u8 len,u16 fc,u16 bc,u8 sizey);//显示整数变量
  27. void LCD_ShowFloatNum1(u16 x,u16 y,float num,u8 len,u16 fc,u16 bc,u8 sizey);//显示两位小数变量

  28. void LCD_ShowPicture(u16 x,u16 y,u16 length,u16 width,const u8 pic[]);//显示图片


  29. //画笔颜色
  30. #define WHITE                  0xFFFF
  31. #define BLACK                  0x0000
  32. #define BLUE                    0x001F
  33. #define BRED             0XF81F
  34. #define GRED                                0XFFE0
  35. #define GBLUE                               0X07FF
  36. #define RED                    0xF800
  37. #define MAGENTA                0xF81F
  38. #define GREEN                  0x07E0
  39. #define CYAN                   0x7FFF
  40. #define YELLOW                 0xFFE0
  41. #define BROWN                              0XBC40 //棕色
  42. #define BRRED                              0XFC07 //棕红色
  43. #define GRAY                               0X8430 //灰色
  44. #define DARKBLUE               0X01CF        //深蓝色
  45. #define LIGHTBLUE               0X7D7C        //浅蓝色
  46. #define GRAYBLUE                0X5458 //灰蓝色
  47. #define LIGHTGREEN              0X841F //浅绿色
  48. #define LGRAY                              0XC618 //浅灰色(PANNEL),窗体背景色
  49. #define LGRAYBLUE        0XA651 //浅灰蓝色(中间层颜色)
  50. #define LBBLUE           0X2B12 //浅棕蓝色(选择条目的反色)

  51. #endif /* LCD_SPI_LCD_ST7735_H_ */
复制代码
  1. /*
  2. * spi_lcd_st7735.c
  3. *
  4. *  Created on: Oct 31, 2022
  5. *      Author: Administrator
  6. */


  7. #include "spi_lcd_st7735.h"

  8. #include "../delay/delay.h"
  9. #include "spi_lcd_st7735_font.h"
  10. #include "spi_lcd_st7735_init.h"

  11. /******************************************************************************
  12.       函数说明:在指定区域填充颜色
  13.       入口数据:xsta,ysta   起始坐标
  14.                 xend,yend   终止坐标
  15.                                                                 color       要填充的颜色
  16.       返回值:  无
  17. ******************************************************************************/
  18. void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color)
  19. {
  20.         u16 i,j;
  21.         LCD_Address_Set(xsta,ysta,xend-1,yend-1);//设置显示范围
  22.         for(i=ysta;i<yend;i++)
  23.         {
  24.                 for(j=xsta;j<xend;j++)
  25.                 {
  26.                         LCD_WR_DATA(color);
  27.                 }
  28.         }
  29. }

  30. /******************************************************************************
  31.       函数说明:在指定位置画点
  32.       入口数据:x,y 画点坐标
  33.                 color 点的颜色
  34.       返回值:  无
  35. ******************************************************************************/
  36. void LCD_DrawPoint(u16 x,u16 y,u16 color)
  37. {
  38.         LCD_Address_Set(x,y,x,y);//设置光标位置
  39.         LCD_WR_DATA(color);
  40. }


  41. /******************************************************************************
  42.       函数说明:画线
  43.       入口数据:x1,y1   起始坐标
  44.                 x2,y2   终止坐标
  45.                 color   线的颜色
  46.       返回值:  无
  47. ******************************************************************************/
  48. void LCD_DrawLine(u16 x1,u16 y1,u16 x2,u16 y2,u16 color)
  49. {
  50.         u16 t;
  51.         int xerr=0,yerr=0,delta_x,delta_y,distance;
  52.         int incx,incy,uRow,uCol;
  53.         delta_x=x2-x1; //计算坐标增量
  54.         delta_y=y2-y1;
  55.         uRow=x1;//画线起点坐标
  56.         uCol=y1;
  57.         if(delta_x>0)incx=1; //设置单步方向
  58.         else if (delta_x==0)incx=0;//垂直线
  59.         else {incx=-1;delta_x=-delta_x;}
  60.         if(delta_y>0)incy=1;
  61.         else if (delta_y==0)incy=0;//水平线
  62.         else {incy=-1;delta_y=-delta_y;}
  63.         if(delta_x>delta_y)distance=delta_x; //选取基本增量坐标轴
  64.         else distance=delta_y;
  65.         for(t=0;t<distance+1;t++)
  66.         {
  67.                 LCD_DrawPoint(uRow,uCol,color);//画点
  68.                 xerr+=delta_x;
  69.                 yerr+=delta_y;
  70.                 if(xerr>distance)
  71.                 {
  72.                         xerr-=distance;
  73.                         uRow+=incx;
  74.                 }
  75.                 if(yerr>distance)
  76.                 {
  77.                         yerr-=distance;
  78.                         uCol+=incy;
  79.                 }
  80.         }
  81. }


  82. /******************************************************************************
  83.       函数说明:画矩形
  84.       入口数据:x1,y1   起始坐标
  85.                 x2,y2   终止坐标
  86.                 color   矩形的颜色
  87.       返回值:  无
  88. ******************************************************************************/
  89. void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 color)
  90. {
  91.         LCD_DrawLine(x1,y1,x2,y1,color);
  92.         LCD_DrawLine(x1,y1,x1,y2,color);
  93.         LCD_DrawLine(x1,y2,x2,y2,color);
  94.         LCD_DrawLine(x2,y1,x2,y2,color);
  95. }


  96. /******************************************************************************
  97.       函数说明:画圆
  98.       入口数据:x0,y0   圆心坐标
  99.                 r       半径
  100.                 color   圆的颜色
  101.       返回值:  无
  102. ******************************************************************************/
  103. void Draw_Circle(u16 x0,u16 y0,u8 r,u16 color)
  104. {
  105.         int a,b;
  106.         a=0;b=r;
  107.         while(a<=b)
  108.         {
  109.                 LCD_DrawPoint(x0-b,y0-a,color);             //3
  110.                 LCD_DrawPoint(x0+b,y0-a,color);             //0
  111.                 LCD_DrawPoint(x0-a,y0+b,color);             //1
  112.                 LCD_DrawPoint(x0-a,y0-b,color);             //2
  113.                 LCD_DrawPoint(x0+b,y0+a,color);             //4
  114.                 LCD_DrawPoint(x0+a,y0-b,color);             //5
  115.                 LCD_DrawPoint(x0+a,y0+b,color);             //6
  116.                 LCD_DrawPoint(x0-b,y0+a,color);             //7
  117.                 a++;
  118.                 if((a*a+b*b)>(r*r))//判断要画的点是否过远
  119.                 {
  120.                         b--;
  121.                 }
  122.         }
  123. }

  124. /******************************************************************************
  125.       函数说明:显示汉字串
  126.       入口数据:x,y显示坐标
  127.                 *s 要显示的汉字串
  128.                 fc 字的颜色
  129.                 bc 字的背景色
  130.                 sizey 字号 可选 16 24 32
  131.                 mode:  0非叠加模式  1叠加模式
  132.       返回值:  无
  133. ******************************************************************************/
  134. void LCD_ShowChinese(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
  135. {
  136.         while(*s!=0)
  137.         {
  138.                 if(sizey==12) LCD_ShowChinese12x12(x,y,s,fc,bc,sizey,mode);
  139.                 else if(sizey==16) LCD_ShowChinese16x16(x,y,s,fc,bc,sizey,mode);
  140.                 else if(sizey==24) LCD_ShowChinese24x24(x,y,s,fc,bc,sizey,mode);
  141.                 else if(sizey==32) LCD_ShowChinese32x32(x,y,s,fc,bc,sizey,mode);
  142.                 else return;
  143.                 s+=2;
  144.                 x+=sizey;
  145.         }
  146. }

  147. /******************************************************************************
  148.       函数说明:显示单个12x12汉字
  149.       入口数据:x,y显示坐标
  150.                 *s 要显示的汉字
  151.                 fc 字的颜色
  152.                 bc 字的背景色
  153.                 sizey 字号
  154.                 mode:  0非叠加模式  1叠加模式
  155.       返回值:  无
  156. ******************************************************************************/
  157. void LCD_ShowChinese12x12(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
  158. {
  159.         u8 i,j,m=0;
  160.         u16 k;
  161.         u16 HZnum;//汉字数目
  162.         u16 TypefaceNum;//一个字符所占字节大小
  163.         u16 x0=x;
  164.         TypefaceNum=(sizey/8+((sizey%8)?1:0))*sizey;

  165.         HZnum=sizeof(tfont12)/sizeof(typFNT_GB12);        //统计汉字数目
  166.         for(k=0;k<HZnum;k++)
  167.         {
  168.                 if((tfont12[k].Index[0]==*(s))&&(tfont12[k].Index[1]==*(s+1)))
  169.                 {
  170.                         LCD_Address_Set(x,y,x+sizey-1,y+sizey-1);
  171.                         for(i=0;i<TypefaceNum;i++)
  172.                         {
  173.                                 for(j=0;j<8;j++)
  174.                                 {
  175.                                         if(!mode)//非叠加方式
  176.                                         {
  177.                                                 if(tfont12[k].Msk[i]&(0x01<<j))LCD_WR_DATA(fc);
  178.                                                 else LCD_WR_DATA(bc);
  179.                                                 m++;
  180.                                                 if(m%sizey==0)
  181.                                                 {
  182.                                                         m=0;
  183.                                                         break;
  184.                                                 }
  185.                                         }
  186.                                         else//叠加方式
  187.                                         {
  188.                                                 if(tfont12[k].Msk[i]&(0x01<<j))        LCD_DrawPoint(x,y,fc);//画一个点
  189.                                                 x++;
  190.                                                 if((x-x0)==sizey)
  191.                                                 {
  192.                                                         x=x0;
  193.                                                         y++;
  194.                                                         break;
  195.                                                 }
  196.                                         }
  197.                                 }
  198.                         }
  199.                 }
  200.                 continue;  //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
  201.         }
  202. }

  203. /******************************************************************************
  204.       函数说明:显示单个16x16汉字
  205.       入口数据:x,y显示坐标
  206.                 *s 要显示的汉字
  207.                 fc 字的颜色
  208.                 bc 字的背景色
  209.                 sizey 字号
  210.                 mode:  0非叠加模式  1叠加模式
  211.       返回值:  无
  212. ******************************************************************************/
  213. void LCD_ShowChinese16x16(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
  214. {
  215.         u8 i,j,m=0;
  216.         u16 k;
  217.         u16 HZnum;//汉字数目
  218.         u16 TypefaceNum;//一个字符所占字节大小
  219.         u16 x0=x;
  220.   TypefaceNum=(sizey/8+((sizey%8)?1:0))*sizey;
  221.         HZnum=sizeof(tfont16)/sizeof(typFNT_GB16);        //统计汉字数目
  222.         for(k=0;k<HZnum;k++)
  223.         {
  224.                 if ((tfont16[k].Index[0]==*(s))&&(tfont16[k].Index[1]==*(s+1)))
  225.                 {
  226.                         LCD_Address_Set(x,y,x+sizey-1,y+sizey-1);
  227.                         for(i=0;i<TypefaceNum;i++)
  228.                         {
  229.                                 for(j=0;j<8;j++)
  230.                                 {
  231.                                         if(!mode)//非叠加方式
  232.                                         {
  233.                                                 if(tfont16[k].Msk[i]&(0x01<<j))LCD_WR_DATA(fc);
  234.                                                 else LCD_WR_DATA(bc);
  235.                                                 m++;
  236.                                                 if(m%sizey==0)
  237.                                                 {
  238.                                                         m=0;
  239.                                                         break;
  240.                                                 }
  241.                                         }
  242.                                         else//叠加方式
  243.                                         {
  244.                                                 if(tfont16[k].Msk[i]&(0x01<<j))        LCD_DrawPoint(x,y,fc);//画一个点
  245.                                                 x++;
  246.                                                 if((x-x0)==sizey)
  247.                                                 {
  248.                                                         x=x0;
  249.                                                         y++;
  250.                                                         break;
  251.                                                 }
  252.                                         }
  253.                                 }
  254.                         }
  255.                 }
  256.                 continue;  //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
  257.         }
  258. }


  259. /******************************************************************************
  260.       函数说明:显示单个24x24汉字
  261.       入口数据:x,y显示坐标
  262.                 *s 要显示的汉字
  263.                 fc 字的颜色
  264.                 bc 字的背景色
  265.                 sizey 字号
  266.                 mode:  0非叠加模式  1叠加模式
  267.       返回值:  无
  268. ******************************************************************************/
  269. void LCD_ShowChinese24x24(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
  270. {
  271.         u8 i,j,m=0;
  272.         u16 k;
  273.         u16 HZnum;//汉字数目
  274.         u16 TypefaceNum;//一个字符所占字节大小
  275.         u16 x0=x;
  276.         TypefaceNum=(sizey/8+((sizey%8)?1:0))*sizey;
  277.         HZnum=sizeof(tfont24)/sizeof(typFNT_GB24);        //统计汉字数目
  278.         for(k=0;k<HZnum;k++)
  279.         {
  280.                 if ((tfont24[k].Index[0]==*(s))&&(tfont24[k].Index[1]==*(s+1)))
  281.                 {
  282.                         LCD_Address_Set(x,y,x+sizey-1,y+sizey-1);
  283.                         for(i=0;i<TypefaceNum;i++)
  284.                         {
  285.                                 for(j=0;j<8;j++)
  286.                                 {
  287.                                         if(!mode)//非叠加方式
  288.                                         {
  289.                                                 if(tfont24[k].Msk[i]&(0x01<<j))LCD_WR_DATA(fc);
  290.                                                 else LCD_WR_DATA(bc);
  291.                                                 m++;
  292.                                                 if(m%sizey==0)
  293.                                                 {
  294.                                                         m=0;
  295.                                                         break;
  296.                                                 }
  297.                                         }
  298.                                         else//叠加方式
  299.                                         {
  300.                                                 if(tfont24[k].Msk[i]&(0x01<<j))        LCD_DrawPoint(x,y,fc);//画一个点
  301.                                                 x++;
  302.                                                 if((x-x0)==sizey)
  303.                                                 {
  304.                                                         x=x0;
  305.                                                         y++;
  306.                                                         break;
  307.                                                 }
  308.                                         }
  309.                                 }
  310.                         }
  311.                 }
  312.                 continue;  //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
  313.         }
  314. }

  315. /******************************************************************************
  316.       函数说明:显示单个32x32汉字
  317.       入口数据:x,y显示坐标
  318.                 *s 要显示的汉字
  319.                 fc 字的颜色
  320.                 bc 字的背景色
  321.                 sizey 字号
  322.                 mode:  0非叠加模式  1叠加模式
  323.       返回值:  无
  324. ******************************************************************************/
  325. void LCD_ShowChinese32x32(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)
  326. {
  327.         u8 i,j,m=0;
  328.         u16 k;
  329.         u16 HZnum;//汉字数目
  330.         u16 TypefaceNum;//一个字符所占字节大小
  331.         u16 x0=x;
  332.         TypefaceNum=(sizey/8+((sizey%8)?1:0))*sizey;
  333.         HZnum=sizeof(tfont32)/sizeof(typFNT_GB32);        //统计汉字数目
  334.         for(k=0;k<HZnum;k++)
  335.         {
  336.                 if ((tfont32[k].Index[0]==*(s))&&(tfont32[k].Index[1]==*(s+1)))
  337.                 {
  338.                         LCD_Address_Set(x,y,x+sizey-1,y+sizey-1);
  339.                         for(i=0;i<TypefaceNum;i++)
  340.                         {
  341.                                 for(j=0;j<8;j++)
  342.                                 {
  343.                                         if(!mode)//非叠加方式
  344.                                         {
  345.                                                 if(tfont32[k].Msk[i]&(0x01<<j))LCD_WR_DATA(fc);
  346.                                                 else LCD_WR_DATA(bc);
  347.                                                 m++;
  348.                                                 if(m%sizey==0)
  349.                                                 {
  350.                                                         m=0;
  351.                                                         break;
  352.                                                 }
  353.                                         }
  354.                                         else//叠加方式
  355.                                         {
  356.                                                 if(tfont32[k].Msk[i]&(0x01<<j))        LCD_DrawPoint(x,y,fc);//画一个点
  357.                                                 x++;
  358.                                                 if((x-x0)==sizey)
  359.                                                 {
  360.                                                         x=x0;
  361.                                                         y++;
  362.                                                         break;
  363.                                                 }
  364.                                         }
  365.                                 }
  366.                         }
  367.                 }
  368.                 continue;  //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
  369.         }
  370. }


  371. /******************************************************************************
  372.       函数说明:显示单个字符
  373.       入口数据:x,y显示坐标
  374.                 num 要显示的字符
  375.                 fc 字的颜色
  376.                 bc 字的背景色
  377.                 sizey 字号
  378.                 mode:  0非叠加模式  1叠加模式
  379.       返回值:  无
  380. ******************************************************************************/
  381. void LCD_ShowChar(u16 x,u16 y,u8 num,u16 fc,u16 bc,u8 sizey,u8 mode)
  382. {
  383.         u8 temp,sizex,t,m=0;
  384.         u16 i,TypefaceNum;//一个字符所占字节大小
  385.         u16 x0=x;
  386.         sizex=sizey/2;
  387.         TypefaceNum=(sizex/8+((sizex%8)?1:0))*sizey;
  388.         num=num-' ';    //得到偏移后的值
  389.         LCD_Address_Set(x,y,x+sizex-1,y+sizey-1);  //设置光标位置
  390.         for(i=0;i<TypefaceNum;i++)
  391.         {
  392.                 if(sizey==12)temp=ascii_1206[num][i];                       //调用6x12字体
  393.                 else if(sizey==16)temp=ascii_1608[num][i];                 //调用8x16字体
  394.                 else if(sizey==24)temp=ascii_2412[num][i];                 //调用12x24字体
  395.                 else if(sizey==32)temp=ascii_3216[num][i];                 //调用16x32字体
  396.                 else return;
  397.                 for(t=0;t<8;t++)
  398.                 {
  399.                         if(!mode)//非叠加模式
  400.                         {
  401.                                 if(temp&(0x01<<t))LCD_WR_DATA(fc);
  402.                                 else LCD_WR_DATA(bc);
  403.                                 m++;
  404.                                 if(m%sizex==0)
  405.                                 {
  406.                                         m=0;
  407.                                         break;
  408.                                 }
  409.                         }
  410.                         else//叠加模式
  411.                         {
  412.                                 if(temp&(0x01<<t))LCD_DrawPoint(x,y,fc);//画一个点
  413.                                 x++;
  414.                                 if((x-x0)==sizex)
  415.                                 {
  416.                                         x=x0;
  417.                                         y++;
  418.                                         break;
  419.                                 }
  420.                         }
  421.                 }
  422.         }
  423. }


  424. /******************************************************************************
  425.       函数说明:显示字符串
  426.       入口数据:x,y显示坐标
  427.                 *p 要显示的字符串
  428.                 fc 字的颜色
  429.                 bc 字的背景色
  430.                 sizey 字号
  431.                 mode:  0非叠加模式  1叠加模式
  432.       返回值:  无
  433. ******************************************************************************/
  434. void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 fc,u16 bc,u8 sizey,u8 mode)
  435. {
  436.         while(*p!='\0')
  437.         {
  438.                 LCD_ShowChar(x,y,*p,fc,bc,sizey,mode);
  439.                 x+=sizey/2;
  440.                 p++;
  441.         }
  442. }


  443. /******************************************************************************
  444.       函数说明:显示数字
  445.       入口数据:m底数,n指数
  446.       返回值:  无
  447. ******************************************************************************/
  448. u32 mypow(u8 m,u8 n)
  449. {
  450.         u32 result=1;
  451.         while(n--)result*=m;
  452.         return result;
  453. }


  454. /******************************************************************************
  455.       函数说明:显示整数变量
  456.       入口数据:x,y显示坐标
  457.                 num 要显示整数变量
  458.                 len 要显示的位数
  459.                 fc 字的颜色
  460.                 bc 字的背景色
  461.                 sizey 字号
  462.       返回值:  无
  463. ******************************************************************************/
  464. void LCD_ShowIntNum(u16 x,u16 y,u16 num,u8 len,u16 fc,u16 bc,u8 sizey)
  465. {
  466.         u8 t,temp;
  467.         u8 enshow=0;
  468.         u8 sizex=sizey/2;
  469.         for(t=0;t<len;t++)
  470.         {
  471.                 temp=(num/mypow(10,len-t-1))%10;
  472.                 if(enshow==0&&t<(len-1))
  473.                 {
  474.                         if(temp==0)
  475.                         {
  476.                                 LCD_ShowChar(x+t*sizex,y,' ',fc,bc,sizey,0);
  477.                                 continue;
  478.                         }else enshow=1;

  479.                 }
  480.                  LCD_ShowChar(x+t*sizex,y,temp+48,fc,bc,sizey,0);
  481.         }
  482. }


  483. /******************************************************************************
  484.       函数说明:显示两位小数变量
  485.       入口数据:x,y显示坐标
  486.                 num 要显示小数变量
  487.                 len 要显示的位数
  488.                 fc 字的颜色
  489.                 bc 字的背景色
  490.                 sizey 字号
  491.       返回值:  无
  492. ******************************************************************************/
  493. void LCD_ShowFloatNum1(u16 x,u16 y,float num,u8 len,u16 fc,u16 bc,u8 sizey)
  494. {
  495.         u8 t,temp,sizex;
  496.         u16 num1;
  497.         sizex=sizey/2;
  498.         num1=num*100;
  499.         for(t=0;t<len;t++)
  500.         {
  501.                 temp=(num1/mypow(10,len-t-1))%10;
  502.                 if(t==(len-2))
  503.                 {
  504.                         LCD_ShowChar(x+(len-2)*sizex,y,'.',fc,bc,sizey,0);
  505.                         t++;
  506.                         len+=1;
  507.                 }
  508.                  LCD_ShowChar(x+t*sizex,y,temp+48,fc,bc,sizey,0);
  509.         }
  510. }


  511. /******************************************************************************
  512.       函数说明:显示图片
  513.       入口数据:x,y起点坐标
  514.                 length 图片长度
  515.                 width  图片宽度
  516.                 pic[]  图片数组
  517.       返回值:  无
  518. ******************************************************************************/
  519. void LCD_ShowPicture(u16 x,u16 y,u16 length,u16 width,const u8 pic[])
  520. {
  521.         u16 i,j;
  522.         u32 k=0;
  523.         LCD_Address_Set(x,y,x+length-1,y+width-1);
  524.         for(i=0;i<length;i++)
  525.         {
  526.                 for(j=0;j<width;j++)
  527.                 {
  528.                         LCD_WR_DATA8(pic[k*2]);
  529.                         LCD_WR_DATA8(pic[k*2+1]);
  530.                         k++;
  531.                 }
  532.         }
  533. }


复制代码
  1. /*
  2. * spi_lcd_st7735_init.h
  3. *
  4. *  Created on: Oct 31, 2022
  5. *      Author: Administrator
  6. */

  7. #ifndef LCD_SPI_LCD_ST7735_INIT_H_
  8. #define LCD_SPI_LCD_ST7735_INIT_H_

  9. #include "stm32f1xx_hal.h"

  10. #define USE_HORIZONTAL 1  //设置横屏或者竖屏显示 0或1为竖屏 2或3为横屏
  11. #define u8 uint8_t
  12. #define u16 uint16_t

  13. #if USE_HORIZONTAL==0||USE_HORIZONTAL==1
  14. #define LCD_W 128
  15. #define LCD_H 160

  16. #else
  17. #define LCD_W 160
  18. #define LCD_H 128
  19. #endif



  20. //-----------------LCD端口定义----------------

  21. #define LCD_SCLK_Clr() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET); //GPIO_ResetBits(GPIOA,GPIO_PIN_0)//SCL=SCLK 低电平
  22. #define LCD_SCLK_Set() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET); //GPIO_SetBits(GPIOA,GPIO_PIN_0) 高电平

  23. #define LCD_MOSI_Clr() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //GPIO_ResetBits(GPIOA,GPIO_PIN_1)//SDA=MOSI
  24. #define LCD_MOSI_Set() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);//GPIO_SetBits(GPIOA,GPIO_PIN_1)

  25. #define LCD_RES_Clr()  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);//GPIO_ResetBits(GPIOA,GPIO_PIN_2)//RES
  26. #define LCD_RES_Set()  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//GPIO_SetBits(GPIOA,GPIO_PIN_2)

  27. #define LCD_DC_Clr()   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);//GPIO_ResetBits(GPIOA,GPIO_PIN_3)//DC
  28. #define LCD_DC_Set()   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);//GPIO_SetBits(GPIOA,GPIO_PIN_3)

  29. #define LCD_CS_Clr()   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//GPIO_ResetBits(GPIOA,GPIO_PIN_4)//CS
  30. #define LCD_CS_Set()   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//GPIO_SetBits(GPIOA,GPIO_PIN_4)

  31. #define LCD_BLK_Clr()  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);//GPIO_ResetBits(GPIOA,GPIO_PIN_5)//BLK
  32. #define LCD_BLK_Set()  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);//GPIO_SetBits(GPIOA,GPIO_PIN_5)




  33. //void LCD_GPIO_Init(void);//初始化GPIO
  34. void LCD_Writ_Bus(u8 dat);//模拟SPI时序
  35. void LCD_WR_DATA8(u8 dat);//写入一个字节
  36. void LCD_WR_DATA(u16 dat);//写入两个字节
  37. void LCD_WR_REG(u8 dat);//写入一个指令
  38. void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2);//设置坐标函数
  39. void LCD_Init(void);//LCD初始化

  40. #endif /* LCD_SPI_LCD_ST7735_INIT_H_ */
复制代码
  1. /*
  2. * spi_lcd_st7735_init.c
  3. *
  4. *  Created on: Oct 31, 2022
  5. *      Author: Administrator
  6. */

  7. #include "spi_lcd_st7735_init.h"

  8. #include "../delay/delay.h"

  9. //void LCD_GPIO_Init(void)
  10. //{
  11. //        GPIO_InitTypeDef  GPIO_InitStructure;
  12. //         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         //使能A端口时钟
  13. //        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
  14. //         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  15. //        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
  16. //         GPIO_Init(GPIOA, &GPIO_InitStructure);          //初始化GPIOA
  17. //         GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
  18. //}


  19. /******************************************************************************
  20.       函数说明:LCD串行数据写入函数
  21.       入口数据:dat  要写入的串行数据
  22.       返回值:  无
  23. ******************************************************************************/
  24. void LCD_Writ_Bus(u8 dat)
  25. {
  26.         u8 i;
  27.         LCD_CS_Clr();
  28.         for(i=0;i<8;i++)
  29.         {
  30.                 LCD_SCLK_Clr();
  31.                 if(dat&0x80)
  32.                 {
  33.                    LCD_MOSI_Set();
  34.                 }
  35.                 else
  36.                 {
  37.                    LCD_MOSI_Clr();
  38.                 }
  39.                 LCD_SCLK_Set();
  40.                 dat<<=1;
  41.         }
  42.   LCD_CS_Set();
  43. }


  44. /******************************************************************************
  45.       函数说明:LCD写入数据
  46.       入口数据:dat 写入的数据
  47.       返回值:  无
  48. ******************************************************************************/
  49. void LCD_WR_DATA8(u8 dat)
  50. {
  51.         LCD_Writ_Bus(dat);
  52. }


  53. /******************************************************************************
  54.       函数说明:LCD写入数据
  55.       入口数据:dat 写入的数据
  56.       返回值:  无
  57. ******************************************************************************/
  58. void LCD_WR_DATA(u16 dat)
  59. {
  60.         LCD_Writ_Bus(dat>>8);
  61.         LCD_Writ_Bus(dat);
  62. }


  63. /******************************************************************************
  64.       函数说明:LCD写入命令
  65.       入口数据:dat 写入的命令
  66.       返回值:  无
  67. ******************************************************************************/
  68. void LCD_WR_REG(u8 dat)
  69. {
  70.         LCD_DC_Clr();//写命令
  71.         LCD_Writ_Bus(dat);
  72.         LCD_DC_Set();//写数据
  73. }


  74. /******************************************************************************
  75.       函数说明:设置起始和结束地址
  76.       入口数据:x1,x2 设置列的起始和结束地址
  77.                 y1,y2 设置行的起始和结束地址
  78.       返回值:  无
  79. ******************************************************************************/
  80. void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
  81. {
  82.         if(USE_HORIZONTAL==0)
  83.         {
  84.                 LCD_WR_REG(0x2a);//列地址设置
  85.                 LCD_WR_DATA(x1+2);
  86.                 LCD_WR_DATA(x2+2);
  87.                 LCD_WR_REG(0x2b);//行地址设置
  88.                 LCD_WR_DATA(y1+1);
  89.                 LCD_WR_DATA(y2+1);
  90.                 LCD_WR_REG(0x2c);//储存器写
  91.         }
  92.         else if(USE_HORIZONTAL==1)
  93.         {
  94.                 LCD_WR_REG(0x2a);//列地址设置
  95.                 LCD_WR_DATA(x1+2);
  96.                 LCD_WR_DATA(x2+2);
  97.                 LCD_WR_REG(0x2b);//行地址设置
  98.                 LCD_WR_DATA(y1+1);
  99.                 LCD_WR_DATA(y2+1);
  100.                 LCD_WR_REG(0x2c);//储存器写
  101.         }
  102.         else if(USE_HORIZONTAL==2)
  103.         {
  104.                 LCD_WR_REG(0x2a);//列地址设置
  105.                 LCD_WR_DATA(x1+1);
  106.                 LCD_WR_DATA(x2+1);
  107.                 LCD_WR_REG(0x2b);//行地址设置
  108.                 LCD_WR_DATA(y1+2);
  109.                 LCD_WR_DATA(y2+2);
  110.                 LCD_WR_REG(0x2c);//储存器写
  111.         }
  112.         else
  113.         {
  114.                 LCD_WR_REG(0x2a);//列地址设置
  115.                 LCD_WR_DATA(x1+1);
  116.                 LCD_WR_DATA(x2+1);
  117.                 LCD_WR_REG(0x2b);//行地址设置
  118.                 LCD_WR_DATA(y1+2);
  119.                 LCD_WR_DATA(y2+2);
  120.                 LCD_WR_REG(0x2c);//储存器写
  121.         }
  122. }

  123. void LCD_Init(void)
  124. {
  125. //        LCD_GPIO_Init();//初始化GPIO

  126.         LCD_RES_Clr();//复位
  127.         delay_ms(100);
  128.         LCD_RES_Set();
  129.         delay_ms(100);

  130.         LCD_BLK_Set();//打开背光
  131.   delay_ms(100);

  132.         //************* Start Initial Sequence **********//
  133.         LCD_WR_REG(0x11); //Sleep out
  134.         delay_ms(120);              //Delay 120ms
  135.         //------------------------------------ST7735S Frame Rate-----------------------------------------//
  136.         LCD_WR_REG(0xB1);
  137.         LCD_WR_DATA8(0x05);
  138.         LCD_WR_DATA8(0x3C);
  139.         LCD_WR_DATA8(0x3C);
  140.         LCD_WR_REG(0xB2);
  141.         LCD_WR_DATA8(0x05);
  142.         LCD_WR_DATA8(0x3C);
  143.         LCD_WR_DATA8(0x3C);
  144.         LCD_WR_REG(0xB3);
  145.         LCD_WR_DATA8(0x05);
  146.         LCD_WR_DATA8(0x3C);
  147.         LCD_WR_DATA8(0x3C);
  148.         LCD_WR_DATA8(0x05);
  149.         LCD_WR_DATA8(0x3C);
  150.         LCD_WR_DATA8(0x3C);
  151.         //------------------------------------End ST7735S Frame Rate---------------------------------//
  152.         LCD_WR_REG(0xB4); //Dot inversion
  153.         LCD_WR_DATA8(0x03);
  154.         //------------------------------------ST7735S Power Sequence---------------------------------//
  155.         LCD_WR_REG(0xC0);
  156.         LCD_WR_DATA8(0x28);
  157.         LCD_WR_DATA8(0x08);
  158.         LCD_WR_DATA8(0x04);
  159.         LCD_WR_REG(0xC1);
  160.         LCD_WR_DATA8(0XC0);
  161.         LCD_WR_REG(0xC2);
  162.         LCD_WR_DATA8(0x0D);
  163.         LCD_WR_DATA8(0x00);
  164.         LCD_WR_REG(0xC3);
  165.         LCD_WR_DATA8(0x8D);
  166.         LCD_WR_DATA8(0x2A);
  167.         LCD_WR_REG(0xC4);
  168.         LCD_WR_DATA8(0x8D);
  169.         LCD_WR_DATA8(0xEE);
  170.         //---------------------------------End ST7735S Power Sequence-------------------------------------//
  171.         LCD_WR_REG(0xC5); //VCOM
  172.         LCD_WR_DATA8(0x1A);
  173.         LCD_WR_REG(0x36); //MX, MY, RGB mode
  174.         if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);
  175.         else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);
  176.         else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);
  177.         else LCD_WR_DATA8(0xA0);
  178.         //------------------------------------ST7735S Gamma Sequence---------------------------------//
  179.         LCD_WR_REG(0xE0);
  180.         LCD_WR_DATA8(0x04);
  181.         LCD_WR_DATA8(0x22);
  182.         LCD_WR_DATA8(0x07);
  183.         LCD_WR_DATA8(0x0A);
  184.         LCD_WR_DATA8(0x2E);
  185.         LCD_WR_DATA8(0x30);
  186.         LCD_WR_DATA8(0x25);
  187.         LCD_WR_DATA8(0x2A);
  188.         LCD_WR_DATA8(0x28);
  189.         LCD_WR_DATA8(0x26);
  190.         LCD_WR_DATA8(0x2E);
  191.         LCD_WR_DATA8(0x3A);
  192.         LCD_WR_DATA8(0x00);
  193.         LCD_WR_DATA8(0x01);
  194.         LCD_WR_DATA8(0x03);
  195.         LCD_WR_DATA8(0x13);
  196.         LCD_WR_REG(0xE1);
  197.         LCD_WR_DATA8(0x04);
  198.         LCD_WR_DATA8(0x16);
  199.         LCD_WR_DATA8(0x06);
  200.         LCD_WR_DATA8(0x0D);
  201.         LCD_WR_DATA8(0x2D);
  202.         LCD_WR_DATA8(0x26);
  203.         LCD_WR_DATA8(0x23);
  204.         LCD_WR_DATA8(0x27);
  205.         LCD_WR_DATA8(0x27);
  206.         LCD_WR_DATA8(0x25);
  207.         LCD_WR_DATA8(0x2D);
  208.         LCD_WR_DATA8(0x3B);
  209.         LCD_WR_DATA8(0x00);
  210.         LCD_WR_DATA8(0x01);
  211.         LCD_WR_DATA8(0x04);
  212.         LCD_WR_DATA8(0x13);
  213.         //------------------------------------End ST7735S Gamma Sequence-----------------------------//
  214.         LCD_WR_REG(0x3A); //65k mode
  215.         LCD_WR_DATA8(0x05);
  216.         LCD_WR_REG(0x29); //Display on
  217. }








复制代码
  1. /*
  2. * spi_lcd_st7735_font.h
  3. *
  4. *  Created on: Oct 31, 2022
  5. *      Author: Administrator
  6. */

  7. #ifndef LCD_SPI_LCD_ST7735_FONT_H_
  8. #define LCD_SPI_LCD_ST7735_FONT_H_

  9. const unsigned char ascii_1206[][12]={

  10. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
  11. {0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x04,0x00,0x00},/*"!",1*/

  12. …………省略, 详见附件…………

  13. 0x08,0x08,0x20,0x08,0x08,0x00,0x00,0x00,/*"猪",7*/
  14. /* (24 X 24 , 宋体 )*/

  15. };


  16. typedef struct
  17. {
  18.         unsigned char Index[2];
  19.         unsigned char Msk[128];
  20. }typFNT_GB32;


  21. const typFNT_GB32 tfont32[]={

  22. "中",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x01,0x00,
  23. 0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,
  24. 0x10,0x80,0x01,0x0C,0xF0,0xFF,0xFF,0x0F,0x30,0x80,0x01,0x04,0x30,0x80,0x01,0x04,
  25. 0x30,0x80,0x01,0x04,0x30,0x80,0x01,0x04,0x30,0x80,0x01,0x04,0x30,0x80,0x01,0x04,
  26. 0x30,0x80,0x01,0x04,0x30,0x80,0x01,0x04,0xF0,0xFF,0xFF,0x07,0x30,0x80,0x01,0x04,
  27. 0x30,0x80,0x01,0x04,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,
  28. 0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,
  29. 0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,/*"中",0*/
  30. "景",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,
  31. 0x00,0xFF,0xFF,0x01,0x00,0x03,0x80,0x01,0x00,0x03,0x80,0x01,0x00,0xFF,0xFF,0x01,
  32. 0x00,0x03,0x80,0x01,0x00,0x03,0x80,0x01,0x00,0xFF,0xFF,0x01,0x00,0x81,0x81,0x00,
  33. 0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x1C,0xFC,0xFF,0xFF,0x3F,0x00,0x00,0x40,0x00,
  34. 0x00,0x03,0xC0,0x01,0x00,0xFF,0xFF,0x01,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,
  35. 0x00,0x03,0xC0,0x00,0x00,0xFF,0xFF,0x00,0x00,0x01,0x41,0x00,0x00,0x04,0x01,0x00,
  36. 0x00,0x0E,0x71,0x00,0x00,0x07,0x81,0x01,0x80,0x01,0x01,0x07,0x60,0x00,0x01,0x0E,
  37. 0x18,0x98,0x01,0x1C,0x04,0xE0,0x01,0x18,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,/*"景",1*/
  38. "园",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xF0,0xFF,0xFF,0x1F,
  39. 0x30,0x00,0x00,0x0C,0x30,0x00,0x00,0x0C,0x30,0x00,0x10,0x0C,0x30,0xFE,0x3F,0x0C,
  40. 0x30,0x04,0x00,0x0C,0x30,0x00,0x00,0x0C,0x30,0x00,0x00,0x0C,0x30,0x00,0x00,0x0C,
  41. 0x30,0x00,0xC0,0x0C,0xF0,0xFF,0xFF,0x0D,0x30,0x30,0x06,0x0E,0x30,0x30,0x06,0x0C,
  42. 0x30,0x10,0x06,0x0C,0x30,0x10,0x06,0x0C,0x30,0x10,0x06,0x0C,0x30,0x18,0x86,0x0C,
  43. 0x30,0x18,0x86,0x0C,0x30,0x08,0x06,0x0D,0x30,0x0C,0x86,0x0D,0x30,0x06,0xEE,0x0F,
  44. 0x30,0x02,0xFC,0x0D,0x30,0x01,0x00,0x0C,0xF0,0x00,0x00,0x0C,0x30,0x00,0x00,0x0C,
  45. 0xF0,0xFF,0xFF,0x0F,0x30,0x00,0x00,0x0C,0x10,0x00,0x00,0x04,0x00,0x00,0x00,0x00,/*"园",2*/
  46. "电",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x01,0x00,
  47. 0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,
  48. 0xE0,0xFF,0xFF,0x03,0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,
  49. 0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,0xE0,0xFF,0xFF,0x03,
  50. 0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,0x60,0xC0,0x00,0x03,
  51. 0x60,0xC0,0x00,0x03,0xE0,0xFF,0xFF,0x03,0x60,0xC0,0x00,0x01,0x60,0xC0,0x00,0x00,
  52. 0x00,0xC0,0x00,0x08,0x00,0xC0,0x00,0x10,0x00,0xC0,0x00,0x10,0x00,0xC0,0x00,0x18,
  53. 0x00,0xC0,0x01,0x38,0x00,0x80,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"电",3*/
  54. "子",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
  55. 0xC0,0xFF,0xFF,0x07,0x00,0x00,0x80,0x07,0x00,0x00,0xC0,0x00,0x00,0x00,0x60,0x00,
  56. 0x00,0x00,0x18,0x00,0x00,0x00,0x0C,0x00,0x00,0x80,0x03,0x00,0x00,0x80,0x03,0x00,
  57. 0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x08,0x00,0x80,0x01,0x1C,0xFC,0xFF,0xFF,0x3F,
  58. 0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,
  59. 0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,
  60. 0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,
  61. 0x00,0xFC,0x01,0x00,0x00,0xE0,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,/*"子",4*/
  62. };


  63. #endif /* LCD_SPI_LCD_ST7735_FONT_H_ */
复制代码
修正时间方法,上位机通过 串口usart1 访问 115200 ,编码改成中文,按回车显示当前时间,按C 回车 提示操作成功 输入当前时间 比如:20220916144030  年月日小时分钟秒   回车 就同步成功。
RTC实时时钟测试   
实时时间:2022-09-16  14:44:07  
单按回车键更新时间,输入字母C初始化时钟
请输入设置时间,格式20170806120000,按回车键确定!

串口usart3 是留给与蓝牙串口通信,手机蓝牙助手访问串口usart3蓝牙,上面同样的指令来一遍

Keil代码下载: Keil代码.7z (748.62 KB, 下载次数: 51)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:64089 发表于 2022-11-3 09:43 | 显示全部楼层
很不错的分享,学习一下,顶!
回复

使用道具 举报

ID:271166 发表于 2022-11-4 08:54 | 显示全部楼层
很不错的分享,学习一下,顶!
回复

使用道具 举报

ID:1048397 发表于 2022-11-4 09:14 | 显示全部楼层
好大的篇幅呀,厉害!
回复

使用道具 举报

ID:1042254 发表于 2022-11-6 10:27 | 显示全部楼层
1.8寸 TFT 取模教程文字取模
图片1.png



图片取模
图片2.png


03-LCD取模教程.zip (1.62 MB, 下载次数: 8)
回复

使用道具 举报

ID:77589 发表于 2022-11-8 10:32 | 显示全部楼层
兄弟,做的不错,辛苦了!
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表