久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 20002|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)與stm32TFT屏驅(qū)動(dòng)程序(TFT_2.0_ILI9225)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
51單片機(jī)與stm32TFT屏驅(qū)動(dòng)程序(TFT_2.0_ILI9225)直接就能使用。

制作出來(lái)的實(shí)物圖如下:


單片機(jī)源程序如下:
  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. * 函 數(shù) : TFT20_TestDemo
  9. * 功 能 : 測(cè)試演示程序
  10. * 輸 入 : 無(wú)
  11. * 輸 出 : 無(wú)
  12. * 返 回 : 無(wú)
  13. * 說(shuō) 明 : 要先進(jìn)行初始化
  14. *******************************************************************************/
  15. void TFT20_TestDemo()  //測(cè)試演示程序
  16. {
  17.         TFT20_Clear(GREEN);//清屏       
  18.         TFT20_DrawFont_GBK16(16,20,BLUE,GRAY0,"液晶測(cè)試程序");
  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. * 函 數(shù) : RGB
  64. * 功 能 : R,G,B 轉(zhuǎn)16位
  65. * 輸 入 : 無(wú)
  66. * 輸 出 : 無(wú)
  67. * 返 回 : 無(wú)
  68. * 說(shuō) 明 : 無(wú)
  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. * 函 數(shù) : TFT20_RGB24_RGB16
  84. * 功 能 : 24位rgb編碼轉(zhuǎn)16位
  85. * 輸 入 : 無(wú)
  86. * 輸 出 : 無(wú)
  87. * 返 回 : 無(wú)
  88. * 說(shuō) 明 : 無(wú)
  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. * 函 數(shù) : TFT20_delay_ms
  104. * 功 能 : 延時(shí)
  105. * 輸 入 : 無(wú)
  106. * 輸 出 : 無(wú)
  107. * 返 回 : 無(wú)
  108. * 說(shuō) 明 : 無(wú)
  109. *******************************************************************************/
  110. void TFT20_delay_ms(u16 ms)
  111. {
  112.         delay_ms(ms);
  113. }


  114. /*******************************************************************************
  115. * 函 數(shù) : TFT20_Reset
  116. * 功 能 : 液晶屏硬復(fù)位
  117. * 輸 入 : 無(wú)
  118. * 輸 出 : 無(wú)
  119. * 返 回 : 無(wú)
  120. * 說(shuō) 明 : 無(wú)
  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. * 函 數(shù) : TFT20_Init
  131. * 功 能 : 液晶屏初始化
  132. * 輸 入 : 無(wú)
  133. * 輸 出 : 無(wú)
  134. * 返 回 : 無(wú)
  135. * 說(shuō) 明 : 液晶屏初始化_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. * 函 數(shù) : TFT20_SetXY
  214. * 功 能 : 設(shè)置TFT屏顯示起始點(diǎn)
  215. * 輸 入 : X Y 起始點(diǎn)
  216. * 輸 出 : 無(wú)
  217. * 返 回 : 無(wú)
  218. * 說(shuō) 明 : 無(wú)
  219. *******************************************************************************/
  220. void TFT20_SetXY(u16 XStart,u16 YStart)
  221. {       
  222. #if USE_HORIZONTAL//如果定義了橫屏                     
  223.         TFT20_WriteReg(0x21,XStart);//設(shè)置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讀取數(shù)據(jù)寄存器的18位數(shù)據(jù)。
  230. }


  231. /*******************************************************************************
  232. * 函 數(shù) : TFT20_SetRegion
  233. * 功 能 : 設(shè)置顯示窗口
  234. * 輸 入 : X Y 起點(diǎn)和終點(diǎn)
  235. * 輸 出 : 無(wú)
  236. * 返 回 : 無(wú)
  237. * 說(shuō) 明 : 在此區(qū)域?qū)扅c(diǎn)數(shù)據(jù)自動(dòng)換行
  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. * 函 數(shù) : TFT20_Clear
  260. * 功 能 : 全屏填充顏色函數(shù)(清屏)
  261. * 輸 入 : Color[in] 顏色數(shù)據(jù)
  262. * 輸 出 : 無(wú)
  263. * 返 回 : 無(wú)
  264. * 說(shuō) 明 : 無(wú)
  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. * 函 數(shù) : TFT20_LocalClear
  281. * 功 能 : 局部清屏
  282. * 輸 入 : XY 顯示起始點(diǎn)  Color 顏色數(shù)據(jù)
  283. * 輸 出 : 無(wú)
  284. * 返 回 : 無(wú)
  285. * 說(shuō) 明 : 無(wú)
  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); //設(shè)置顯示窗口大小
  292.         for(temp=0;temp<(C*H);temp++)
  293.          {       
  294.                 TFT20_WriteData(Color>>8);
  295.                 TFT20_WriteData(Color);                               
  296.          }       
  297. }


  298. /*******************************************************************************
  299. * 函 數(shù) : TFT20_DrawPoint
  300. * 功 能 : 畫(huà)任意顏色點(diǎn)
  301. * 輸 入 : XStart[in] YStart[in] XY描點(diǎn)位置  Color[in] 顏色數(shù)據(jù)
  302. * 輸 出 : 無(wú)
  303. * 返 回 : 無(wú)
  304. * 說(shuō) 明 : 無(wú)
  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. * 函 數(shù) : TFT20_BGR_RGB
  314. * 功 能 : BGR->RGB格式轉(zhuǎn)換
  315. * 輸 入 : 無(wú)
  316. * 輸 出 : 無(wú)
  317. * 返 回 : RGB格式的顏色值
  318. * 說(shuō) 明 : 從ILI93xx讀出的數(shù)據(jù)為GBR格式,而我們寫(xiě)入的時(shí)候?yàn)镽GB格式。
  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. * 函 數(shù) : TFT20_DrawCircle
  333. * 功 能 : 畫(huà)圓
  334. * 輸 入 : x[in] y[in] XY圓心點(diǎn)位置 R[in] 半徑 Color[in] 顏色數(shù)據(jù)
  335. * 輸 出 : 無(wú)
  336. * 返 回 : 無(wú)
  337. * 說(shuō) 明 : Bresenham算法
  338. *******************************************************************************/
  339. void TFT20_DrawCircle(u16 X,u16 Y,u16 R,u16 Color) //畫(huà)圓
  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. * 函 數(shù) : TFT20_DrawLine
  375. * 功 能 : 畫(huà)線函數(shù)
  376. * 輸 入 : X Y 起始點(diǎn) 終點(diǎn)坐標(biāo)  Color[in] 顏色數(shù)據(jù)
  377. * 輸 出 : 無(wú)
  378. * 返 回 : 無(wú)
  379. * 說(shuō) 明 : 使用Bresenham 畫(huà)線算法
  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,//在繪圖過(guò)程中像素點(diǎn)移動(dòng)的方向
  386.                         juece,      //決策變量
  387.                         temp;      //臨時(shí)變量

  388.         TFT20_SetXY(XStart,YStart);//設(shè)置TFT屏顯示起始點(diǎn)
  389.        
  390.         dx = XEnd-XStart;//計(jì)算x距離
  391.         dy = YEnd-YStart;//計(jì)算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距離,那么每個(gè)x軸上只有一個(gè)點(diǎn),每個(gè)y軸上有若干個(gè)點(diǎn)
  400.         {              //且線的點(diǎn)數(shù)等于x距離,以x軸遞增畫(huà)點(diǎn)
  401.                 juece= dy2-dx;  //初始化誤差項(xiàng)
  402.                 for(temp=0;temp<=dx;temp++) //要畫(huà)的點(diǎn)數(shù)不會(huì)超過(guò)x距離
  403.                 {
  404.                         TFT20_DrawPoint(XStart,YStart,Color);
  405.                         if(juece>=0) //是否需要增加y坐標(biāo)值
  406.                         {
  407.                                 juece -=dx2;
  408.                                 YStart +=y_inc;//增加y坐標(biāo)值
  409.                         }
  410.                         juece +=dy2; //調(diào)整
  411.                         XStart +=x_inc;//x坐標(biāo)值每次畫(huà)點(diǎn)后都遞增1(移動(dòng)到下一個(gè)像素)
  412.                 }
  413.         }
  414.         else          //y軸大于x軸,則每個(gè)y軸上只有一個(gè)點(diǎn),x軸若干個(gè)點(diǎn)
  415.         {             //以y軸為遞增畫(huà)點(diǎn)
  416.                 juece= dx2-dy;  //初始化誤差項(xiàng)
  417.                 for (temp=0;temp<=dy;temp++) //畫(huà)線
  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. * 函 數(shù) : TFT20_Drawbox
  432. * 功 能 : 畫(huà)矩形(帶斜線)
  433. * 輸 入 : xy 顯示起始點(diǎn) w[in]矩形寬度 h[in]高度  Color[in] 顏色
  434. * 輸 出 : 無(wú)
  435. * 返 回 : 無(wú)
  436. * 說(shuō) 明 : 無(wú)
  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. * 函 數(shù) : TFT20_Drawbox2
  448. * 功 能 : 畫(huà)矩形
  449. * 輸 入 : xy 顯示起始點(diǎn) w[in]矩形寬度 h[in]高度
  450. * 輸 出 : 無(wú)
  451. * 返 回 : 無(wú)
  452. * 說(shuō) 明 : 無(wú)
  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. * 函 數(shù) : TFT20_DisplayImg
  477. * 功 能 : 任意位置顯示圖片
  478. * 輸 入 : XY 顯示起始點(diǎn)  *img[in] 圖片數(shù)據(jù)
  479. * 輸 出 : 無(wú)
  480. * 返 回 : 無(wú)
  481. * 說(shuō) 明 : 16位BMP/Image2LCD取模選項(xiàng)設(shè)置/水平掃描/16位/不包含圖像頭數(shù)據(jù)/自左至右
  482.           自頂至底/低位在前/在圖片數(shù)組前加上圖片尺寸 例: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); //設(shè)置顯示窗口大小
  490.         for(temp=0;temp<(img[0]*img[1]);temp++)
  491.          {       
  492.                 TFT20_WriteData(*(img+temp*2+3));        //數(shù)據(jù)低位在前
  493.                 TFT20_WriteData(*(img+temp*2+2));                               
  494.          }       
  495. }


  496. /*******************************************************************************
  497. * 函 數(shù) : TFT20_DisplayButtonDown
  498. * 功 能 : 在屏幕顯示一凸起的按鈕框
  499. * 輸 入 : x0,y0,x1,y1 按鈕框左上角和右下角坐標(biāo)
  500. * 輸 出 : 無(wú)
  501. * 返 回 : 無(wú)
  502. * 說(shuō) 明 : 無(wú)
  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. * 函 數(shù) : TFT20_DisplayButtonUp
  515. * 功 能 : 在屏幕顯示一凹下的按鈕框
  516. * 輸 入 : x0,y0,x1,y1 按鈕框左上角和右下角坐標(biāo)
  517. * 輸 出 : 無(wú)
  518. * 返 回 : 無(wú)
  519. * 說(shuō) 明 : 無(wú)
  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. * 函 數(shù) : TFT20_DrawFont_GBK16
  532. * 功 能 : 顯示漢字或字符 (GBK16)
  533. * 輸 入 : XY 顯示起始點(diǎn) fc[in]字體顏色 bc[in]背景色 *Dat[in] 顯示數(shù)據(jù)
  534. * 輸 出 : 無(wú)
  535. * 返 回 : 無(wú)
  536. * 說(shuō) 明 : 無(wú)
  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起點(diǎn)坐標(biāo)

  542.         while(*Dat)
  543.         {       
  544.                 if((*Dat) < 128) //小于128的為ASCLL字符
  545.                 {
  546.                         k=*Dat; //ASCLL字符編號(hào)索引
  547.                         if(k==0x0D) {x=x0;y+=16;} //換行  +16
  548.                         else
  549.                         {
  550.                                 if(k>32) k-=32; else k=0;//數(shù)組字符編號(hào)索引
  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漢字內(nèi)碼(兩字節(jié))(在這里面是)
  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. * 函 數(shù) : TFT20_DrawFont_GBK24
  588. * 功 能 : 顯示漢字或字符 (GBK24)
  589. * 輸 入 : XY 顯示起始點(diǎn) fc[in]字體顏色 bc[in]背景色 *Dat[in] 顯示數(shù)據(jù)
  590. * 輸 出 : 無(wú)
  591. * 返 回 : 無(wú)
  592. * 說(shuō) 明 : 無(wú)
  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字符編號(hào)索引
  614.                         if(k==0x0D) {x=x0;y+=24;} //換行  +24
  615.                         else
  616.                         {
  617.                                 if(k>32) k-=32; else k=0;//數(shù)組字符編號(hào)索引
  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. * 函 數(shù) : TFT20_DrawFont_Num32
  660. * 功 能 : 顯示數(shù)碼管體數(shù)字
  661. * 輸 入 : XY 顯示起始點(diǎn) fc[in]字體顏色 bc[in]背景色 num[in]
  662. * 輸 出 : 無(wú)
  663. * 返 回 : 無(wú)
  664. * 說(shuō) 明 : 無(wú)
  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. * 函 數(shù) : SPI_Init
  684. * 功 能 : 配置硬件SPI,可通過(guò)修改SPEED_4值來(lái)更改SPI總線速度
  685. * 輸 入 : 無(wú)
  686. * 輸 出 : 無(wú)
  687. * 返 回 : 無(wú)
  688. * 說(shuō) 明 : SPEED_4為4分頻最高速,SPEED_128為最低速
  689. *******************************************************************************/
  690. void TFT20_SPI_Init(void)       
  691. {
  692.         GPIO_InitTypeDef GPIO_InitStructure;//定義結(jié)構(gòu)體變量
  693.        
  694.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  695.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//PB3,PB4使用了復(fù)用為IO口,需使能復(fù)用功能
  696.        
  697. ……………………

  698. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
TFT_2.0_ILI9225.zip (381.39 KB, 下載次數(shù): 325)


評(píng)分

參與人數(shù) 1黑幣 +6 收起 理由
hzd530 + 6 很給力!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:284075 發(fā)表于 2019-4-10 15:21 | 只看該作者
/*******************************************************************************
* 函 數(shù) : TFT_Display
* 功 能 :
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
* 返 回 : 無(wú)
* 說(shuō) 明 : 要先進(jìn)行初始化
*******************************************************************************/
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);//出發(fā)區(qū)
       
        TFT20_LocalClear(j+1,2*g+j+9,g+1,3*(g+1)-6,WHITE);//加工區(qū)
        TFT20_LocalClear(2*(g+3)+j+8,j+1,3*(g+3)-6,g,WHITE);//成品區(qū)
        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);//加工區(qū)
        TFT20_LocalClear(j+2,3*g+j+9 ,g-1,g-3,GREEN);//加工區(qū)
        TFT20_LocalClear(j+2,4*g+j+7 ,g-1,g-3,RED);//加工區(qū)

        TFT20_LocalClear(2*(g+3)+j+10,j+2,g-1,g-2,RED);//成品區(qū)
        TFT20_LocalClear(3*(g+3)+j+7,j+2 ,g-1,g-2,GREEN);//成品區(qū)
        TFT20_LocalClear(4*(g+3)+j+4,j+2 ,g-1,g-2,BLUE);//成品區(qū)
       
  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);//物料

}
回復(fù)

使用道具 舉報(bào)

板凳
ID:140253 發(fā)表于 2019-5-9 11:26 | 只看該作者
謝謝,非常好
回復(fù)

使用道具 舉報(bào)

地板
ID:619398 發(fā)表于 2019-10-5 10:00 | 只看該作者
非常感謝
回復(fù)

使用道具 舉報(bào)

5#
ID:349102 發(fā)表于 2019-10-7 16:49 來(lái)自手機(jī) | 只看該作者
先收藏,留著
回復(fù)

使用道具 舉報(bào)

6#
ID:629057 發(fā)表于 2020-3-2 13:14 | 只看該作者
謝謝樓主的無(wú)私奉獻(xiàn)!收藏學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

7#
ID:198286 發(fā)表于 2020-3-28 11:41 | 只看該作者
我買(mǎi)的8位并口屏,不會(huì)玩
回復(fù)

使用道具 舉報(bào)

8#
ID:710336 發(fā)表于 2020-4-21 23:40 | 只看該作者
這么怎么使用呀?
回復(fù)

使用道具 舉報(bào)

9#
ID:363917 發(fā)表于 2020-6-17 15:33 | 只看該作者
太棒了,謝謝分享
回復(fù)

使用道具 舉報(bào)

10#
ID:585455 發(fā)表于 2020-9-30 15:28 | 只看該作者
庫(kù)函數(shù)不足,可以再上傳嗎?謝謝。
回復(fù)

使用道具 舉報(bào)

11#
ID:469787 發(fā)表于 2020-12-20 17:07 | 只看該作者
有好多未定義呀,求教
回復(fù)

使用道具 舉報(bào)

12#
ID:644357 發(fā)表于 2021-1-14 21:10 | 只看該作者
一看就是工程競(jìng)賽的大佬
回復(fù)

使用道具 舉報(bào)

13#
ID:876149 發(fā)表于 2021-1-15 22:11 來(lái)自手機(jī) | 只看該作者
沒(méi)1.8寸屏程序嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产综合久久精品 | 嫩草网 | 免费大黄视频 | 亚洲激情一区二区 | 亚洲国产欧美在线 | 精品伊人 | aⅴ色国产 欧美 | 日日操操操| 日本天堂视频 | 午夜精品视频 | 国产婷婷综合 | 欧美三级在线 | 国产三级国产精品 | 草久久免费视频 | 久久精品国产久精国产 | 日一区二区| 欧美成人影院 | 亚洲天堂一区二区 | 精品三区 | 97精品超碰一区二区三区 | 九九在线 | 国产精品美女一区二区 | 日韩欧美在线观看一区 | 亚洲精品欧美 | 久久久久1 | 亚洲精品一二区 | 亚洲精品一区二区三区蜜桃久 | 国产精品伦理一区 | 日本在线你懂的 | 欧美另类视频 | 国产精品视频不卡 | 精品国产一区二区在线 | 欧美一区二区三区的 | 这里有精品 | 精品视频久久久 | 中文字幕高清 | 中文字幕在线看人 | 国产一区二区精品 | 精品日韩| 午夜a v电影 | 亚洲欧美国产一区二区三区 |