找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 18197|回复: 12
打印 上一主题 下一主题
收起左侧

51单片机与stm32TFT屏驱动程序(TFT_2.0_ILI9225)

  [复制链接]
跳转到指定楼层
楼主
51单片机与stm32TFT屏驱动程序(TFT_2.0_ILI9225)直接就能使用。

制作出来的实物图如下:


单片机源程序如下:
  1. #include "TFT20_ILI9225.h"
  2. #include "SysTick.h"
  3. #include "font.h"
  4. //#include <absacc.h>
  5. //#include <intrins.h>
  6. //#include <string.h>



  7. /*******************************************************************************
  8. * 函 数 : TFT20_TestDemo
  9. * 功 能 : 测试演示程序
  10. * 输 入 : 无
  11. * 输 出 : 无
  12. * 返 回 : 无
  13. * 说 明 : 要先进行初始化
  14. *******************************************************************************/
  15. void TFT20_TestDemo()  //测试演示程序
  16. {
  17.         TFT20_Clear(GREEN);//清屏       
  18.         TFT20_DrawFont_GBK16(16,20,BLUE,GRAY0,"液晶测试程序");
  19.        
  20.         TFT20_DisplayButtonUp(15,38,80,58); //x0,y0,x1,y1
  21.         TFT20_DrawFont_GBK16(16,40,YELLOW,GRAY0,"颜色填充");
  22.        
  23.         TFT20_DisplayButtonUp(15,68,80,88); //x0,y0,x1,y1
  24.         TFT20_DrawFont_GBK16(16,70,BLUE,GRAY0,"文字显示");
  25.        
  26.         TFT20_DisplayButtonUp(15,98,80,118); //x0,y0,x1,y1
  27.         TFT20_DrawFont_GBK16(16,100,RED,GRAY0,"图片显示");
  28.        

  29.   TFT20_delay_ms(500);
  30.         TFT20_DisplayButtonDown(15,38,80,58); //x0,y0,x1,y1
  31.         TFT20_delay_ms(500);
  32.         TFT20_DisplayButtonUp(15,38,80,58); //x0,y0,x1,y1
  33.         TFT20_delay_ms(500);

  34. //-------------------------------       
  35.         TFT20_Clear(RED);
  36.         TFT20_Clear(WHITE);
  37.         TFT20_Clear(GREEN);
  38.         TFT20_Clear(BLUE);
  39.         TFT20_Clear(BLACK);
  40.         TFT20_Clear(GRAY0);
  41. //-------------------------------
  42. //   TFT20_LocalClear(0,0,100,50,BLUE);
  43. // TFT20_SetRegion(0,0,X_MAX_PIXEL,Y_MAX_PIXEL);
  44.        
  45.         TFT20_DrawFont_GBK24(0,0,BLUE,GRAY0,"文字\r显示\rZSX--\rQQ:1543588107\rTel:18273897603");
  46. //        TFT20_DrawFont_Num32(2,120,RED,GRAY0,8);
  47. //        TFT20_DrawFont_Num32(34,120,RED,GRAY0,10);
  48. //        TFT20_DrawFont_Num32(66,120,RED,GRAY0,0);
  49. //        TFT20_DrawFont_Num32(96,120,RED,GRAY0,12);
  50. //        TFT20_DrawFont_Num32(128,120,RED,GRAY0,13);
  51. //        TFT20_Clear(YELLOW);
  52. //        TFT20_DrawLine(175,0,0,220,BLUE);
  53. //        TFT20_Drawbox(20,20,40,20,RED);
  54. //        TFT20_Drawbox2(20,80,40,20,1);
  55. //       
  56. //        TFT20_DrawCircle(87,110,60,BLACK);
  57. //        while(1)
  58. //        delay_ms(10000);
  59.        
  60.        
  61. }


  62. /*******************************************************************************
  63. * 函 数 : RGB
  64. * 功 能 : R,G,B 转16位
  65. * 输 入 : 无
  66. * 输 出 : 无
  67. * 返 回 : 无
  68. * 说 明 : 无
  69. *******************************************************************************/
  70. u16 RGB(u16 R,u16 G,u16 B)
  71. {
  72.         u16 RGB16;
  73.        
  74.         R>>=3;
  75.         G>>=2;
  76.         B>>=3;
  77.        
  78.         RGB16=R<<11|G<<5|B;
  79.        
  80.         return RGB16;
  81. }

  82. /*******************************************************************************
  83. * 函 数 : TFT20_RGB24_RGB16
  84. * 功 能 : 24位rgb编码转16位
  85. * 输 入 : 无
  86. * 输 出 : 无
  87. * 返 回 : 无
  88. * 说 明 : 无
  89. *******************************************************************************/
  90. u16 TFT20_RGB24_RGB16(u32 rgb)
  91. {
  92.         u16 R,G,B,RGB16;
  93.        
  94.         R=(rgb&0xff0000)>>19;
  95.         G=(rgb&0x00ff00)>>10;
  96.         B=(rgb&0x0000ff)>>3;
  97.        
  98.         RGB16=R<<11|G<<5|B;
  99.        
  100.         return RGB16;
  101. }



  102. /*******************************************************************************
  103. * 函 数 : TFT20_delay_ms
  104. * 功 能 : 延时
  105. * 输 入 : 无
  106. * 输 出 : 无
  107. * 返 回 : 无
  108. * 说 明 : 无
  109. *******************************************************************************/
  110. void TFT20_delay_ms(u16 ms)
  111. {
  112.         delay_ms(ms);
  113. }


  114. /*******************************************************************************
  115. * 函 数 : TFT20_Reset
  116. * 功 能 : 液晶屏硬复位
  117. * 输 入 : 无
  118. * 输 出 : 无
  119. * 返 回 : 无
  120. * 说 明 : 无
  121. *******************************************************************************/
  122. void TFT20_Reset()
  123. {       
  124.     TFT20_RST=0;
  125.     TFT20_delay_ms(100);
  126.     TFT20_RST=1;
  127.     TFT20_delay_ms(50);
  128. }


  129. /*******************************************************************************
  130. * 函 数 : TFT20_Init
  131. * 功 能 : 液晶屏初始化
  132. * 输 入 : 无
  133. * 输 出 : 无
  134. * 返 回 : 无
  135. * 说 明 : 液晶屏初始化_ILI9225_176X220
  136. *******************************************************************************/
  137. void TFT20_Init()
  138. {       
  139.         TFT20_SPI_Init();//SPI  GPIO初始化
  140.        
  141.         TFT20_Reset(); //Reset before LCD Init.

  142.         //LCD Init For 2.2inch LCD Panel with ILI9225.       
  143.         TFT20_WriteReg(0x10, 0x0000); // Set SAP,DSTB,STB
  144.         TFT20_WriteReg(0x11, 0x0000); // Set APON,PON,AON,VCI1EN,VC
  145.         TFT20_WriteReg(0x12, 0x0000); // Set BT,DC1,DC2,DC3
  146.         TFT20_WriteReg(0x13, 0x0000); // Set GVDD
  147.         TFT20_WriteReg(0x14, 0x0000); // Set VCOMH/VCOML voltage
  148.         TFT20_delay_ms(40); // Delay 20 ms
  149.        
  150.         // Please follow this power on sequence
  151.         TFT20_WriteReg(0x11, 0x0018); // Set APON,PON,AON,VCI1EN,VC
  152.         TFT20_WriteReg(0x12, 0x1121); // Set BT,DC1,DC2,DC3
  153.         TFT20_WriteReg(0x13, 0x0063); // Set GVDD
  154.         TFT20_WriteReg(0x14, 0x3961); // Set VCOMH/VCOML voltage
  155.         TFT20_WriteReg(0x10, 0x0800); // Set SAP,DSTB,STB
  156.         TFT20_delay_ms(10); // Delay 10 ms
  157.         TFT20_WriteReg(0x11, 0x1038); // Set APON,PON,AON,VCI1EN,VC
  158.         TFT20_delay_ms(30); // Delay 30 ms
  159.        
  160.         TFT20_WriteReg(0x02, 0x0100); // set 1 line inversion

  161. #if USE_HORIZONTAL//如果定义了横屏
  162.         //R01H:SM=0,GS=0,SS=0 (for details,See the datasheet of ILI9225)
  163.         TFT20_WriteReg(0x01, 0x001C); // set the display line number and display direction
  164.         //R03H:BGR=1,ID0=1,ID1=1,AM=1 (for details,See the datasheet of ILI9225)
  165.         TFT20_WriteReg(0x03, 0x1038); // set GRAM write direction .
  166. #else//竖屏
  167.         //R01H:SM=0,GS=0,SS=1 (for details,See the datasheet of ILI9225)
  168.         TFT20_WriteReg(0x01, 0x011C); // set the display line number and display direction
  169.         //R03H:BGR=1,ID0=1,ID1=1,AM=0 (for details,See the datasheet of ILI9225)
  170.         TFT20_WriteReg(0x03, 0x1030); // set GRAM write direction.
  171. #endif

  172.         TFT20_WriteReg(0x07, 0x0000); // Display off
  173.         TFT20_WriteReg(0x08, 0x0808); // set the back porch and front porch
  174.         TFT20_WriteReg(0x0B, 0x1100); // set the clocks number per line
  175.         TFT20_WriteReg(0x0C, 0x0000); // CPU interface
  176.         TFT20_WriteReg(0x0F, 0x0501); // Set Osc
  177.         TFT20_WriteReg(0x15, 0x0020); // Set VCI recycling
  178.         TFT20_WriteReg(0x20, 0x0000); // RAM Address
  179.         TFT20_WriteReg(0x21, 0x0000); // RAM Address
  180.        
  181.         //------------------------ Set GRAM area --------------------------------//
  182.         TFT20_WriteReg(0x30, 0x0000);
  183.         TFT20_WriteReg(0x31, 0x00DB);
  184.         TFT20_WriteReg(0x32, 0x0000);
  185.         TFT20_WriteReg(0x33, 0x0000);
  186.         TFT20_WriteReg(0x34, 0x00DB);
  187.         TFT20_WriteReg(0x35, 0x0000);
  188.         TFT20_WriteReg(0x36, 0x00AF);
  189.         TFT20_WriteReg(0x37, 0x0000);
  190.         TFT20_WriteReg(0x38, 0x00DB);
  191.         TFT20_WriteReg(0x39, 0x0000);
  192.        
  193.         // ---------- Adjust the Gamma 2.2 Curve -------------------//
  194.         TFT20_WriteReg(0x50, 0x0603);
  195.         TFT20_WriteReg(0x51, 0x080D);
  196.         TFT20_WriteReg(0x52, 0x0D0C);
  197.         TFT20_WriteReg(0x53, 0x0205);
  198.         TFT20_WriteReg(0x54, 0x040A);
  199.         TFT20_WriteReg(0x55, 0x0703);
  200.         TFT20_WriteReg(0x56, 0x0300);
  201.         TFT20_WriteReg(0x57, 0x0400);
  202.         TFT20_WriteReg(0x58, 0x0B00);
  203.         TFT20_WriteReg(0x59, 0x0017);
  204.        
  205.         TFT20_WriteReg(0x0F, 0x0701); // Vertical RAM Address Position
  206.         TFT20_WriteReg(0x07, 0x0012); // Vertical RAM Address Position
  207.         TFT20_delay_ms(50); // Delay 50 ms
  208.         TFT20_WriteReg(0x07, 0x1017); // Vertical RAM Address Position  
  209.        
  210.   TFT20_Clear(WHITE); //白色 //清屏
  211. }




  212. /*******************************************************************************
  213. * 函 数 : TFT20_SetXY
  214. * 功 能 : 设置TFT屏显示起始点
  215. * 输 入 : X Y 起始点
  216. * 输 出 : 无
  217. * 返 回 : 无
  218. * 说 明 : 无
  219. *******************************************************************************/
  220. void TFT20_SetXY(u16 XStart,u16 YStart)
  221. {       
  222. #if USE_HORIZONTAL//如果定义了横屏                     
  223.         TFT20_WriteReg(0x21,XStart);//设置XY起始地址
  224.         TFT20_WriteReg(0x20,YStart);
  225. #else             //竖屏       
  226.         TFT20_WriteReg(0x20,XStart);
  227.         TFT20_WriteReg(0x21,YStart);
  228. #endif
  229.         TFT20_WriteIndex(0x22);                //从GRAM读取数据寄存器的18位数据。
  230. }


  231. /*******************************************************************************
  232. * 函 数 : TFT20_SetRegion
  233. * 功 能 : 设置显示窗口
  234. * 输 入 : X Y 起点和终点
  235. * 输 出 : 无
  236. * 返 回 : 无
  237. * 说 明 : 在此区域写点数据自动换行
  238. *******************************************************************************/
  239. void TFT20_SetRegion(u8 XStart,u8 YStart,u8 XEnd,u8 YEnd)
  240. {
  241. #if USE_HORIZONTAL//横屏       
  242.         TFT20_WriteReg(0x38,XEnd);
  243.         TFT20_WriteReg(0x39,XStart);
  244.         TFT20_WriteReg(0x36,YEnd);
  245.         TFT20_WriteReg(0x37,YStart);
  246.         TFT20_WriteReg(0x21,XStart);
  247.         TFT20_WriteReg(0x20,YStart);
  248. #else             //竖屏       
  249.         TFT20_WriteReg(0x36,XEnd);
  250.         TFT20_WriteReg(0x37,XStart);
  251.         TFT20_WriteReg(0x38,YEnd);
  252.         TFT20_WriteReg(0x39,YStart);
  253.         TFT20_WriteReg(0x20,XStart);
  254.         TFT20_WriteReg(0x21,YStart);
  255. #endif
  256.         TFT20_WriteIndex(0x22);       
  257. }


  258. /*******************************************************************************
  259. * 函 数 : TFT20_Clear
  260. * 功 能 : 全屏填充颜色函数(清屏)
  261. * 输 入 : Color[in] 颜色数据
  262. * 输 出 : 无
  263. * 返 回 : 无
  264. * 说 明 : 无
  265. *******************************************************************************/
  266. void TFT20_Clear(u16 Color)               
  267. {       
  268.    u16 i,m;
  269.        
  270.    TFT20_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);
  271.        
  272.    for(i=0;i<X_MAX_PIXEL;i++)
  273.     for(m=0;m<Y_MAX_PIXEL;m++)
  274.     {       
  275.                   TFT20_WriteData(Color>>8);
  276.             TFT20_WriteData(Color);
  277.     }   
  278. }


  279. /*******************************************************************************
  280. * 函 数 : TFT20_LocalClear
  281. * 功 能 : 局部清屏
  282. * 输 入 : XY 显示起始点  Color 颜色数据
  283. * 输 出 : 无
  284. * 返 回 : 无
  285. * 说 明 : 无
  286. *******************************************************************************/
  287. void TFT20_LocalClear(u16 XStart,u16 YStart,u16 C,u16 H,u16 Color)   //局部清屏
  288. {
  289.         u16 temp;
  290.        
  291.         TFT20_SetRegion(XStart,YStart,XStart+C-1,YStart+H-1); //设置显示窗口大小
  292.         for(temp=0;temp<(C*H);temp++)
  293.          {       
  294.                 TFT20_WriteData(Color>>8);
  295.                 TFT20_WriteData(Color);                               
  296.          }       
  297. }


  298. /*******************************************************************************
  299. * 函 数 : TFT20_DrawPoint
  300. * 功 能 : 画任意颜色点
  301. * 输 入 : XStart[in] YStart[in] XY描点位置  Color[in] 颜色数据
  302. * 输 出 : 无
  303. * 返 回 : 无
  304. * 说 明 : 无
  305. *******************************************************************************/
  306. void TFT20_DrawPoint(u16 XStart,u16 YStart,u16 Color)
  307. {
  308.         TFT20_SetXY(XStart,YStart);
  309.         TFT20_WriteData(Color>>8);
  310.         TFT20_WriteData(Color);

  311. }   


  312. /*******************************************************************************
  313. * 函 数 : TFT20_BGR_RGB
  314. * 功 能 : BGR->RGB格式转换
  315. * 输 入 : 无
  316. * 输 出 : 无
  317. * 返 回 : RGB格式的颜色值
  318. * 说 明 : 从ILI93xx读出的数据为GBR格式,而我们写入的时候为RGB格式。
  319. *******************************************************************************/
  320. u16 TFT20_BGR_RGB(u16 BGR)
  321. {
  322.   u16 R,G,B,RGB;   
  323.   B=(BGR>>0)&0x1f;
  324.   G=(BGR>>5)&0x3f;
  325.   R=(BGR>>11)&0x1f;       
  326.        
  327.   RGB=(B<<11)+(G<<5)+(R<<0);       
  328.        
  329.   return (RGB);
  330. }


  331. /*******************************************************************************
  332. * 函 数 : TFT20_DrawCircle
  333. * 功 能 : 画圆
  334. * 输 入 : x[in] y[in] XY圆心点位置 R[in] 半径 Color[in] 颜色数据
  335. * 输 出 : 无
  336. * 返 回 : 无
  337. * 说 明 : Bresenham算法
  338. *******************************************************************************/
  339. void TFT20_DrawCircle(u16 X,u16 Y,u16 R,u16 Color) //画圆
  340. {
  341.         unsigned short  a,b; //短整型
  342.         int c;
  343.         a=0;   //必须赋值为零
  344.         b=R;
  345.         c=3-2*R;
  346.         while(a<b)
  347.         {
  348.                 TFT20_DrawPoint(X+a,Y+b,Color); //7
  349.                 TFT20_DrawPoint(X-a,Y+b,Color); //6
  350.                 TFT20_DrawPoint(X+a,Y-b,Color); //2
  351.                 TFT20_DrawPoint(X-a,Y-b,Color); //3
  352.                 TFT20_DrawPoint(X+b,Y+a,Color); //8
  353.                 TFT20_DrawPoint(X-b,Y+a,Color); //5
  354.                 TFT20_DrawPoint(X+b,Y-a,Color); //1
  355.                 TFT20_DrawPoint(X-b,Y-a,Color); //4

  356.                 if(c<0) c=c+4*a+6;
  357.                 else {c=c+4*(a-b)+10;b-=1;}
  358.                 a+=1;
  359.         }
  360.         if(a==b)
  361.         {
  362.                 TFT20_DrawPoint(X+a,Y+b,Color);
  363.                 TFT20_DrawPoint(X+a,Y+b,Color);
  364.                 TFT20_DrawPoint(X+a,Y-b,Color);
  365.                 TFT20_DrawPoint(X-a,Y-b,Color);
  366.                 TFT20_DrawPoint(X+b,Y+a,Color);
  367.                 TFT20_DrawPoint(X-b,Y+a,Color);
  368.                 TFT20_DrawPoint(X+b,Y-a,Color);
  369.                 TFT20_DrawPoint(X-b,Y-a,Color);
  370.         }
  371. }


  372. //,
  373. /*******************************************************************************
  374. * 函 数 : TFT20_DrawLine
  375. * 功 能 : 画线函数
  376. * 输 入 : X Y 起始点 终点坐标  Color[in] 颜色数据
  377. * 输 出 : 无
  378. * 返 回 : 无
  379. * 说 明 : 使用Bresenham 画线算法
  380. *******************************************************************************/
  381. void TFT20_DrawLine(u16 XStart, u16 YStart,u16 XEnd, u16 YEnd,u16 Color)   
  382. {
  383.         int dx,dy,      //X Y 差值
  384.                         dx2,dy2,    //X Y 差值的两倍
  385.                         x_inc,y_inc,//在绘图过程中像素点移动的方向
  386.                         juece,      //决策变量
  387.                         temp;      //临时变量

  388.         TFT20_SetXY(XStart,YStart);//设置TFT屏显示起始点
  389.        
  390.         dx = XEnd-XStart;//计算x距离
  391.         dy = YEnd-YStart;//计算y距离

  392.         if(dx>=0) x_inc= 1;  //确定方向
  393.         else {x_inc= -1;dx= -dx;}
  394.        
  395.         if(dy>=0) y_inc= 1;
  396.         else {y_inc= -1;dy= -dy;}

  397.         dx2 = dx<<1; //乘以2
  398.         dy2 = dy<<1;

  399.         if(dx>dy)             //x距离大于y距离,那么每个x轴上只有一个点,每个y轴上有若干个点
  400.         {              //且线的点数等于x距离,以x轴递增画点
  401.                 juece= dy2-dx;  //初始化误差项
  402.                 for(temp=0;temp<=dx;temp++) //要画的点数不会超过x距离
  403.                 {
  404.                         TFT20_DrawPoint(XStart,YStart,Color);
  405.                         if(juece>=0) //是否需要增加y坐标值
  406.                         {
  407.                                 juece -=dx2;
  408.                                 YStart +=y_inc;//增加y坐标值
  409.                         }
  410.                         juece +=dy2; //调整
  411.                         XStart +=x_inc;//x坐标值每次画点后都递增1(移动到下一个像素)
  412.                 }
  413.         }
  414.         else          //y轴大于x轴,则每个y轴上只有一个点,x轴若干个点
  415.         {             //以y轴为递增画点
  416.                 juece= dx2-dy;  //初始化误差项
  417.                 for (temp=0;temp<=dy;temp++) //画线
  418.                 {
  419.                         TFT20_DrawPoint(XStart,YStart,Color);
  420.                         if(juece>=0)
  421.                         {
  422.                                 juece -=dy2;
  423.                                 XStart +=x_inc;
  424.                         }
  425.                         juece +=dx2;
  426.                         YStart +=y_inc;
  427.                 }
  428.         }
  429. }


  430. /*******************************************************************************
  431. * 函 数 : TFT20_Drawbox
  432. * 功 能 : 画矩形(带斜线)
  433. * 输 入 : xy 显示起始点 w[in]矩形宽度 h[in]高度  Color[in] 颜色
  434. * 输 出 : 无
  435. * 返 回 : 无
  436. * 说 明 : 无
  437. *******************************************************************************/
  438. void TFT20_Drawbox(u16 x,u16 y,u16 w,u16 h,u16 Color)
  439. {
  440.         TFT20_DrawLine(x    ,y  ,x+w  ,y    ,0xEF7D);//上横
  441.         TFT20_DrawLine(x+w        ,y        ,x+w        ,y+h  ,0x2965);//右竖
  442.         TFT20_DrawLine(x    ,y+h,x+w  ,y+h  ,0x2965);//下横
  443.         TFT20_DrawLine(x    ,y  ,x    ,y+h  ,0xEF7D);//左竖
  444.   TFT20_DrawLine(x+1  ,y+1,x+w-1,y+h-1,Color );//正斜
  445. }


  446. /*******************************************************************************
  447. * 函 数 : TFT20_Drawbox2
  448. * 功 能 : 画矩形
  449. * 输 入 : xy 显示起始点 w[in]矩形宽度 h[in]高度
  450. * 输 出 : 无
  451. * 返 回 : 无
  452. * 说 明 : 无
  453. *******************************************************************************/
  454. void TFT20_Drawbox2(u16 x,u16 y,u16 w,u16 h,u8 mode)
  455. {
  456.         if(mode==0){
  457.                 TFT20_DrawLine(x    ,y  ,x+w  ,y    ,0xEF7D);
  458.                 TFT20_DrawLine(x+w        ,y        ,x+w        ,y+h  ,0x2965);
  459.                 TFT20_DrawLine(x    ,y+h,x+w  ,y+h  ,0x2965);
  460.                 TFT20_DrawLine(x    ,y  ,x    ,y+h  ,0xEF7D);
  461.                 }
  462.         if(mode==1){
  463.                 TFT20_DrawLine(x    ,y  ,x+w  ,y    ,0x2965);
  464.                 TFT20_DrawLine(x+w        ,y         ,x+w        ,y+h  ,0xEF7D);
  465.                 TFT20_DrawLine(x    ,y+h,x+w  ,y+h  ,0xEF7D);
  466.                 TFT20_DrawLine(x    ,y  ,x    ,y+h  ,0x2965);
  467.         }
  468.         if(mode==2){
  469.                 TFT20_DrawLine(x    ,y  ,x+w  ,y    ,0x0000);
  470.                 TFT20_DrawLine(x+w  ,y  ,x+w  ,y+h  ,0x0000);
  471.                 TFT20_DrawLine(x    ,y+h,x+w  ,y+h  ,0x0000);
  472.                 TFT20_DrawLine(x    ,y  ,x    ,y+h  ,0x0000);
  473.         }
  474. }


  475. /*******************************************************************************
  476. * 函 数 : TFT20_DisplayImg
  477. * 功 能 : 任意位置显示图片
  478. * 输 入 : XY 显示起始点  *img[in] 图片数据
  479. * 输 出 : 无
  480. * 返 回 : 无
  481. * 说 明 : 16位BMP/Image2LCD取模选项设置/水平扫描/16位/不包含图像头数据/自左至右
  482.           自顶至底/低位在前/在图片数组前加上图片尺寸 例:u8 a[]={176,220,dat};
  483. *******************************************************************************/
  484. void TFT20_DisplayImg(u16 XStart,u16 YStart,u8 *img)
  485. {
  486.         u16 temp;
  487.        
  488. //        TFT20_Clear(GRAY0); //灰色0 //清屏
  489.         TFT20_SetRegion(XStart,YStart,XStart+img[0]-1,YStart+img[1]-1); //设置显示窗口大小
  490.         for(temp=0;temp<(img[0]*img[1]);temp++)
  491.          {       
  492.                 TFT20_WriteData(*(img+temp*2+3));        //数据低位在前
  493.                 TFT20_WriteData(*(img+temp*2+2));                               
  494.          }       
  495. }


  496. /*******************************************************************************
  497. * 函 数 : TFT20_DisplayButtonDown
  498. * 功 能 : 在屏幕显示一凸起的按钮框
  499. * 输 入 : x0,y0,x1,y1 按钮框左上角和右下角坐标
  500. * 输 出 : 无
  501. * 返 回 : 无
  502. * 说 明 : 无
  503. *******************************************************************************/
  504. void TFT20_DisplayButtonDown(u16 x0,u16 y0,u16 x1,u16 y1)
  505. {
  506.         TFT20_DrawLine(x0  ,y0  ,x1  ,y0  ,GRAY2); //上上横
  507.         TFT20_DrawLine(x0+1,y0+1,x1  ,y0+1,GRAY1); //上下横
  508.         TFT20_DrawLine(x0  ,y0  ,x0  ,y1  ,GRAY2); //左左竖
  509.         TFT20_DrawLine(x0+1,y0+1,x0+1,y1  ,GRAY1); //左右竖
  510.         TFT20_DrawLine(x0  ,y1  ,x1  ,y1  ,WHITE); //下横
  511.         TFT20_DrawLine(x1  ,y0  ,x1  ,y1  ,WHITE); //右竖
  512. }


  513. /*******************************************************************************
  514. * 函 数 : TFT20_DisplayButtonUp
  515. * 功 能 : 在屏幕显示一凹下的按钮框
  516. * 输 入 : x0,y0,x1,y1 按钮框左上角和右下角坐标
  517. * 输 出 : 无
  518. * 返 回 : 无
  519. * 说 明 : 无
  520. *******************************************************************************/
  521. void TFT20_DisplayButtonUp(u16 x0,u16 y0,u16 x1,u16 y1)
  522. {
  523.         TFT20_DrawLine(x0  ,y0  ,x1  ,y0  ,WHITE); //上横
  524.         TFT20_DrawLine(x0  ,y0  ,x0  ,y1  ,WHITE); //左竖
  525.         TFT20_DrawLine(x0+1,y1-1,x1  ,y1-1,GRAY1); //下上横
  526.         TFT20_DrawLine(x0  ,y1  ,x1  ,y1  ,GRAY2); //下下横
  527.         TFT20_DrawLine(x1-1,y0+1,x1-1,y1  ,GRAY1); //右左竖
  528.   TFT20_DrawLine(x1  ,y0  ,x1  ,y1  ,GRAY2); //右右竖
  529. }


  530. /*******************************************************************************
  531. * 函 数 : TFT20_DrawFont_GBK16
  532. * 功 能 : 显示汉字或字符 (GBK16)
  533. * 输 入 : XY 显示起始点 fc[in]字体颜色 bc[in]背景色 *Dat[in] 显示数据
  534. * 输 出 : 无
  535. * 返 回 : 无
  536. * 说 明 : 无
  537. *******************************************************************************/
  538. void TFT20_DrawFont_GBK16(u16 x,u16 y,u16 fc,u16 bc,u8 *Dat)
  539. {
  540.         u8  i,j;
  541.         unsigned short k,x0=x;//记忆x0起点坐标

  542.         while(*Dat)
  543.         {       
  544.                 if((*Dat) < 128) //小于128的为ASCLL字符
  545.                 {
  546.                         k=*Dat; //ASCLL字符编号索引
  547.                         if(k==0x0D) {x=x0;y+=16;} //换行  +16
  548.                         else
  549.                         {
  550.                                 if(k>32) k-=32; else k=0;//数组字符编号索引
  551.                           for(i=0;i<16;i++)
  552.                                  for(j=0;j<8;j++)
  553.                                         {
  554.                                     if(asc16[k*16+i]&(0x80>>j))        TFT20_DrawPoint(x+j,y+i,fc); //字体颜色
  555.                                                 else {if(fc!=bc) TFT20_DrawPoint(x+j,y+i,bc);}  //背景色
  556.                                         }
  557.                                 x+=8;
  558.                         }
  559.                         Dat++;
  560.                 }
  561.                 else   //大于128的为GBK汉字内码(两字节)(在这里面是)
  562.                 {
  563.                         for(k=0;k<hz16_num;k++)
  564.                         {
  565.                           if((hz16[k].Index[0]==*(Dat))&&(hz16[k].Index[1]==*(Dat+1)))
  566.                           {
  567.                                         for(i=0;i<16;i++)
  568.                                         {
  569.                                          for(j=0;j<8;j++)
  570.                                                 {
  571.                                                         if(hz16[k].Msk[i*2]&(0x80>>j)) TFT20_DrawPoint(x+j,y+i,fc); //字体颜色
  572.                                                         else {if(fc!=bc) TFT20_DrawPoint(x+j,y+i,bc);} //背景色
  573.                                                 }
  574.                                          for(j=0;j<8;j++)
  575.                                                 {
  576.                                                         if(hz16[k].Msk[i*2+1]&(0x80>>j)) TFT20_DrawPoint(x+j+8,y+i,fc); //字体颜色
  577.                                                         else {if(fc!=bc) TFT20_DrawPoint(x+j+8,y+i,bc);} //背景色
  578.                                                 }
  579.                                         }
  580.                                 }
  581.                          }
  582.                         Dat+=2;x+=16;
  583.                 }
  584.         }
  585. }


  586. /*******************************************************************************
  587. * 函 数 : TFT20_DrawFont_GBK24
  588. * 功 能 : 显示汉字或字符 (GBK24)
  589. * 输 入 : XY 显示起始点 fc[in]字体颜色 bc[in]背景色 *Dat[in] 显示数据
  590. * 输 出 : 无
  591. * 返 回 : 无
  592. * 说 明 : 无
  593. *******************************************************************************/
  594. void TFT20_DrawFont_GBK24(u16 x,u16 y,u16 fc,u16 bc,u8 *Dat)
  595. {
  596.         u8 i,j;
  597.         unsigned short k,x0=x;

  598.         while(*Dat)
  599.         {
  600.                 if((*Dat)<128)
  601. //                 {
  602. //                        k=*Dat;
  603. //                        if(k>32) k-=32; else k=0;

  604. //                  for(i=0;i<16;i++)
  605. //                         for(j=0;j<8;j++)
  606. //                                {
  607. //                            if(asc16[k*16+i]&(0x80>>j))        TFT20_DrawPoint(x+j,y+i,fc);
  608. //                                        else {if(fc!=bc) TFT20_DrawPoint(x+j,y+i,bc);}
  609. //                                }
  610. //                        Dat++;x+=8;
  611. //                 }
  612.                 {
  613.                         k=*Dat; //ASCLL字符编号索引
  614.                         if(k==0x0D) {x=x0;y+=24;} //换行  +24
  615.                         else
  616.                         {
  617.                                 if(k>32) k-=32; else k=0;//数组字符编号索引
  618.                           for(i=0;i<16;i++)
  619.                                  for(j=0;j<8;j++)
  620.                                         {
  621.                                     if(asc16[k*16+i]&(0x80>>j))        TFT20_DrawPoint(x+j,y+i+4,fc); //字体颜色
  622.                                                 else {if(fc!=bc) TFT20_DrawPoint(x+j,y+i+4,bc);}  //背景色
  623.                                         }
  624.                                 x+=8;
  625.                         }
  626.                         Dat++;
  627.                 }
  628.                 else
  629.                  {
  630.                         for (k=0;k<hz24_num;k++)
  631.                         {
  632.                           if ((hz24[k].Index[0]==*(Dat))&&(hz24[k].Index[1]==*(Dat+1)))
  633.                           {
  634.                                     for(i=0;i<24;i++)
  635.                                     {
  636.                                                   for(j=0;j<24;j++)
  637.                                                          {
  638.                                                      if(hz24[k].Msk[i*3+(j>>3)]&(0x80>>(j&0x07))) TFT20_DrawPoint(x+j,y+i,fc);
  639.                                                                  else {if(fc!=bc) TFT20_DrawPoint(x+j,y+i,bc);}
  640.                                                          }
  641. //                                                 for(j=0;j<8;j++)
  642. //                                                        {
  643. //                                                    if(hz24[k].Msk[i*3+1]&(0x80>>j)) TFT20_DrawPoint(x+j+8,y+i,fc);
  644. //                                                                else {if(fc!=bc) TFT20_DrawPoint(x+j+8,y+i,bc);}
  645. //                                                        }
  646. //                                                 for(j=0;j<8;j++)
  647. //                                                        {
  648. //                                                    if(hz24[k].Msk[i*3+2]&(0x80>>j)) TFT20_DrawPoint(x+j+16,y+i,fc);
  649. //                                                                else {if(fc!=bc) TFT20_DrawPoint(x+j+16,y+i,bc);}
  650. //                                                        }
  651.                                     }
  652.                           }
  653.                         }
  654.                         Dat+=2;x+=24;
  655.                 }
  656.         }
  657. }


  658. /*******************************************************************************
  659. * 函 数 : TFT20_DrawFont_Num32
  660. * 功 能 : 显示数码管体数字
  661. * 输 入 : XY 显示起始点 fc[in]字体颜色 bc[in]背景色 num[in]
  662. * 输 出 : 无
  663. * 返 回 : 无
  664. * 说 明 : 无
  665. *******************************************************************************/
  666. void TFT20_DrawFont_Num32(u16 x,u16 y,u16 fc,u16 bc,u16 num)
  667. {
  668.         u8 i,j,k,c;

  669.   for(i=0;i<32;i++)
  670.          {
  671.                 for(j=0;j<4;j++)
  672.                  {
  673.                         c=*(sz32+num*32*4+i*4+j);
  674.                         for(k=0;k<8;k++)       
  675.                          {
  676.                if(c&(0x80>>k)) TFT20_DrawPoint(x+j*8+k,y+i,fc);
  677.                                  else {if(fc!=bc) TFT20_DrawPoint(x+j*8+k,y+i,bc);}
  678.                         }
  679.                 }
  680.         }
  681. }


  682. /*******************************************************************************
  683. * 函 数 : SPI_Init
  684. * 功 能 : 配置硬件SPI,可通过修改SPEED_4值来更改SPI总线速度
  685. * 输 入 : 无
  686. * 输 出 : 无
  687. * 返 回 : 无
  688. * 说 明 : SPEED_4为4分频最高速,SPEED_128为最低速
  689. *******************************************************************************/
  690. void TFT20_SPI_Init(void)       
  691. {
  692.         GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
  693.        
  694.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  695.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//PB3,PB4使用了复用为IO口,需使能复用功能
  696.        
  697. ……………………

  698. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
TFT_2.0_ILI9225.zip (381.39 KB, 下载次数: 314)


评分

参与人数 1黑币 +6 收起 理由
hzd530 + 6 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏10 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:284075 发表于 2019-4-10 15:21 | 只看该作者
/*******************************************************************************
* 函 数 : TFT_Display
* 功 能 :
* 输 入 : 无
* 输 出 : 无
* 返 回 : 无
* 说 明 : 要先进行初始化
*******************************************************************************/
void TFT_Display(void)
{
        u8 g=14,j=2,Xn=0,Yn=0;//g 格子间距 j 偏移距离 即外边距
       
  TFT20_LocalClear(0,0,8*g+2*j+15,8*g+2*j+2,YELLOW);//基色
       
        for(Yn=0;Yn<8;Yn++)  //方格
                for(Xn=0;Xn<8;Xn++)
                 TFT20_Drawbox2(Xn*(g+2)+j,Yn*g+j,g,g,2);
        for(Yn=0;Yn<9;Yn++)
                for(Xn=1;Xn<8;Xn++)
           TFT20_DrawPoint(Xn*(g+2)+j-1,Yn*g+j,BLACK);
       
        TFT20_LocalClear(7*(g+2)+j+1,7*g+j+1,g-1,g-1,RED);//出发区
       
        TFT20_LocalClear(j+1,2*g+j+9,g+1,3*(g+1)-6,WHITE);//加工区
        TFT20_LocalClear(2*(g+3)+j+8,j+1,3*(g+3)-6,g,WHITE);//成品区
        TFT20_LocalClear(7*(g+2)+j+5,3*g+j+4,g-5,2*(g+1)-9,GRAY0);//物料
       
        TFT20_LocalClear(j+2,2*g+j+11,g-1,g-3,BLUE);//加工区
        TFT20_LocalClear(j+2,3*g+j+9 ,g-1,g-3,GREEN);//加工区
        TFT20_LocalClear(j+2,4*g+j+7 ,g-1,g-3,RED);//加工区

        TFT20_LocalClear(2*(g+3)+j+10,j+2,g-1,g-2,RED);//成品区
        TFT20_LocalClear(3*(g+3)+j+7,j+2 ,g-1,g-2,GREEN);//成品区
        TFT20_LocalClear(4*(g+3)+j+4,j+2 ,g-1,g-2,BLUE);//成品区
       
  TFT20_SetRegion(0,0,X_MAX_PIXEL,Y_MAX_PIXEL);
//        TFT20_LocalClear(7*(g+2)+j+6,3*g+j+6,g-7,0.7*(g+1)-2,WHITE);//物料
//        TFT20_LocalClear(7*(g+2)+j+6,3.7*g+j+4.7,g-7,0.7*(g+1)-2,WHITE);//物料
//        TFT20_LocalClear(7*(g+2)+j+6,4.4*g+j+3.4,g-7,0.7*(g+1)-2,WHITE);//物料

}
回复

使用道具 举报

板凳
ID:140253 发表于 2019-5-9 11:26 | 只看该作者
谢谢,非常好
回复

使用道具 举报

地板
ID:619398 发表于 2019-10-5 10:00 | 只看该作者
非常感谢
回复

使用道具 举报

5#
ID:349102 发表于 2019-10-7 16:49 来自手机 | 只看该作者
先收藏,留着
回复

使用道具 举报

6#
ID:629057 发表于 2020-3-2 13:14 | 只看该作者
谢谢楼主的无私奉献!收藏学习
回复

使用道具 举报

7#
ID:198286 发表于 2020-3-28 11:41 | 只看该作者
我买的8位并口屏,不会玩
回复

使用道具 举报

8#
ID:710336 发表于 2020-4-21 23:40 | 只看该作者
这么怎么使用呀?
回复

使用道具 举报

9#
ID:363917 发表于 2020-6-17 15:33 | 只看该作者
太棒了,谢谢分享
回复

使用道具 举报

10#
ID:585455 发表于 2020-9-30 15:28 | 只看该作者
庫函數不足,可以再上傳嗎?謝謝。
回复

使用道具 举报

11#
ID:469787 发表于 2020-12-20 17:07 | 只看该作者
有好多未定义呀,求教
回复

使用道具 举报

12#
ID:644357 发表于 2021-1-14 21:10 | 只看该作者
一看就是工程竞赛的大佬
回复

使用道具 举报

13#
ID:876149 发表于 2021-1-15 22:11 来自手机 | 只看该作者
没1.8寸屏程序吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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