|
51單片機(jī)與stm32TFT屏驅(qū)動(dòng)程序(TFT_2.0_ILI9225)直接就能使用。
制作出來(lái)的實(shí)物圖如下:
_-1436841492_1554637229559_1554637230000_xg_0.jpg (157.66 KB, 下載次數(shù): 92)
下載附件
顯示部分
2019-4-7 19:44 上傳
_-79437221_1554637249937_1554637250000_xg_0.jpg (210.03 KB, 下載次數(shù): 77)
下載附件
背面
2019-4-7 19:44 上傳
單片機(jī)源程序如下:
- #include "TFT20_ILI9225.h"
- #include "SysTick.h"
- #include "font.h"
- //#include <absacc.h>
- //#include <intrins.h>
- //#include <string.h>
- /*******************************************************************************
- * 函 數(shù) : TFT20_TestDemo
- * 功 能 : 測(cè)試演示程序
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 要先進(jìn)行初始化
- *******************************************************************************/
- void TFT20_TestDemo() //測(cè)試演示程序
- {
- TFT20_Clear(GREEN);//清屏
- TFT20_DrawFont_GBK16(16,20,BLUE,GRAY0,"液晶測(cè)試程序");
-
- TFT20_DisplayButtonUp(15,38,80,58); //x0,y0,x1,y1
- TFT20_DrawFont_GBK16(16,40,YELLOW,GRAY0,"顏色填充");
-
- TFT20_DisplayButtonUp(15,68,80,88); //x0,y0,x1,y1
- TFT20_DrawFont_GBK16(16,70,BLUE,GRAY0,"文字顯示");
-
- TFT20_DisplayButtonUp(15,98,80,118); //x0,y0,x1,y1
- TFT20_DrawFont_GBK16(16,100,RED,GRAY0,"圖片顯示");
-
- TFT20_delay_ms(500);
- TFT20_DisplayButtonDown(15,38,80,58); //x0,y0,x1,y1
- TFT20_delay_ms(500);
- TFT20_DisplayButtonUp(15,38,80,58); //x0,y0,x1,y1
- TFT20_delay_ms(500);
- //-------------------------------
- TFT20_Clear(RED);
- TFT20_Clear(WHITE);
- TFT20_Clear(GREEN);
- TFT20_Clear(BLUE);
- TFT20_Clear(BLACK);
- TFT20_Clear(GRAY0);
- //-------------------------------
- // TFT20_LocalClear(0,0,100,50,BLUE);
- // TFT20_SetRegion(0,0,X_MAX_PIXEL,Y_MAX_PIXEL);
-
- TFT20_DrawFont_GBK24(0,0,BLUE,GRAY0,"文字\r顯示\rZSX--\rQQ:1543588107\rTel:18273897603");
- // TFT20_DrawFont_Num32(2,120,RED,GRAY0,8);
- // TFT20_DrawFont_Num32(34,120,RED,GRAY0,10);
- // TFT20_DrawFont_Num32(66,120,RED,GRAY0,0);
- // TFT20_DrawFont_Num32(96,120,RED,GRAY0,12);
- // TFT20_DrawFont_Num32(128,120,RED,GRAY0,13);
- // TFT20_Clear(YELLOW);
- // TFT20_DrawLine(175,0,0,220,BLUE);
- // TFT20_Drawbox(20,20,40,20,RED);
- // TFT20_Drawbox2(20,80,40,20,1);
- //
- // TFT20_DrawCircle(87,110,60,BLACK);
- // while(1)
- // delay_ms(10000);
-
-
- }
- /*******************************************************************************
- * 函 數(shù) : RGB
- * 功 能 : R,G,B 轉(zhuǎn)16位
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- u16 RGB(u16 R,u16 G,u16 B)
- {
- u16 RGB16;
-
- R>>=3;
- G>>=2;
- B>>=3;
-
- RGB16=R<<11|G<<5|B;
-
- return RGB16;
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_RGB24_RGB16
- * 功 能 : 24位rgb編碼轉(zhuǎn)16位
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- u16 TFT20_RGB24_RGB16(u32 rgb)
- {
- u16 R,G,B,RGB16;
-
- R=(rgb&0xff0000)>>19;
- G=(rgb&0x00ff00)>>10;
- B=(rgb&0x0000ff)>>3;
-
- RGB16=R<<11|G<<5|B;
-
- return RGB16;
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_delay_ms
- * 功 能 : 延時(shí)
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_delay_ms(u16 ms)
- {
- delay_ms(ms);
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_Reset
- * 功 能 : 液晶屏硬復(fù)位
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_Reset()
- {
- TFT20_RST=0;
- TFT20_delay_ms(100);
- TFT20_RST=1;
- TFT20_delay_ms(50);
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_Init
- * 功 能 : 液晶屏初始化
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 液晶屏初始化_ILI9225_176X220
- *******************************************************************************/
- void TFT20_Init()
- {
- TFT20_SPI_Init();//SPI GPIO初始化
-
- TFT20_Reset(); //Reset before LCD Init.
- //LCD Init For 2.2inch LCD Panel with ILI9225.
- TFT20_WriteReg(0x10, 0x0000); // Set SAP,DSTB,STB
- TFT20_WriteReg(0x11, 0x0000); // Set APON,PON,AON,VCI1EN,VC
- TFT20_WriteReg(0x12, 0x0000); // Set BT,DC1,DC2,DC3
- TFT20_WriteReg(0x13, 0x0000); // Set GVDD
- TFT20_WriteReg(0x14, 0x0000); // Set VCOMH/VCOML voltage
- TFT20_delay_ms(40); // Delay 20 ms
-
- // Please follow this power on sequence
- TFT20_WriteReg(0x11, 0x0018); // Set APON,PON,AON,VCI1EN,VC
- TFT20_WriteReg(0x12, 0x1121); // Set BT,DC1,DC2,DC3
- TFT20_WriteReg(0x13, 0x0063); // Set GVDD
- TFT20_WriteReg(0x14, 0x3961); // Set VCOMH/VCOML voltage
- TFT20_WriteReg(0x10, 0x0800); // Set SAP,DSTB,STB
- TFT20_delay_ms(10); // Delay 10 ms
- TFT20_WriteReg(0x11, 0x1038); // Set APON,PON,AON,VCI1EN,VC
- TFT20_delay_ms(30); // Delay 30 ms
-
- TFT20_WriteReg(0x02, 0x0100); // set 1 line inversion
- #if USE_HORIZONTAL//如果定義了橫屏
- //R01H:SM=0,GS=0,SS=0 (for details,See the datasheet of ILI9225)
- TFT20_WriteReg(0x01, 0x001C); // set the display line number and display direction
- //R03H:BGR=1,ID0=1,ID1=1,AM=1 (for details,See the datasheet of ILI9225)
- TFT20_WriteReg(0x03, 0x1038); // set GRAM write direction .
- #else//豎屏
- //R01H:SM=0,GS=0,SS=1 (for details,See the datasheet of ILI9225)
- TFT20_WriteReg(0x01, 0x011C); // set the display line number and display direction
- //R03H:BGR=1,ID0=1,ID1=1,AM=0 (for details,See the datasheet of ILI9225)
- TFT20_WriteReg(0x03, 0x1030); // set GRAM write direction.
- #endif
- TFT20_WriteReg(0x07, 0x0000); // Display off
- TFT20_WriteReg(0x08, 0x0808); // set the back porch and front porch
- TFT20_WriteReg(0x0B, 0x1100); // set the clocks number per line
- TFT20_WriteReg(0x0C, 0x0000); // CPU interface
- TFT20_WriteReg(0x0F, 0x0501); // Set Osc
- TFT20_WriteReg(0x15, 0x0020); // Set VCI recycling
- TFT20_WriteReg(0x20, 0x0000); // RAM Address
- TFT20_WriteReg(0x21, 0x0000); // RAM Address
-
- //------------------------ Set GRAM area --------------------------------//
- TFT20_WriteReg(0x30, 0x0000);
- TFT20_WriteReg(0x31, 0x00DB);
- TFT20_WriteReg(0x32, 0x0000);
- TFT20_WriteReg(0x33, 0x0000);
- TFT20_WriteReg(0x34, 0x00DB);
- TFT20_WriteReg(0x35, 0x0000);
- TFT20_WriteReg(0x36, 0x00AF);
- TFT20_WriteReg(0x37, 0x0000);
- TFT20_WriteReg(0x38, 0x00DB);
- TFT20_WriteReg(0x39, 0x0000);
-
- // ---------- Adjust the Gamma 2.2 Curve -------------------//
- TFT20_WriteReg(0x50, 0x0603);
- TFT20_WriteReg(0x51, 0x080D);
- TFT20_WriteReg(0x52, 0x0D0C);
- TFT20_WriteReg(0x53, 0x0205);
- TFT20_WriteReg(0x54, 0x040A);
- TFT20_WriteReg(0x55, 0x0703);
- TFT20_WriteReg(0x56, 0x0300);
- TFT20_WriteReg(0x57, 0x0400);
- TFT20_WriteReg(0x58, 0x0B00);
- TFT20_WriteReg(0x59, 0x0017);
-
- TFT20_WriteReg(0x0F, 0x0701); // Vertical RAM Address Position
- TFT20_WriteReg(0x07, 0x0012); // Vertical RAM Address Position
- TFT20_delay_ms(50); // Delay 50 ms
- TFT20_WriteReg(0x07, 0x1017); // Vertical RAM Address Position
-
- TFT20_Clear(WHITE); //白色 //清屏
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_SetXY
- * 功 能 : 設(shè)置TFT屏顯示起始點(diǎn)
- * 輸 入 : X Y 起始點(diǎn)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_SetXY(u16 XStart,u16 YStart)
- {
- #if USE_HORIZONTAL//如果定義了橫屏
- TFT20_WriteReg(0x21,XStart);//設(shè)置XY起始地址
- TFT20_WriteReg(0x20,YStart);
- #else //豎屏
- TFT20_WriteReg(0x20,XStart);
- TFT20_WriteReg(0x21,YStart);
- #endif
- TFT20_WriteIndex(0x22); //從GRAM讀取數(shù)據(jù)寄存器的18位數(shù)據(jù)。
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_SetRegion
- * 功 能 : 設(shè)置顯示窗口
- * 輸 入 : X Y 起點(diǎn)和終點(diǎn)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 在此區(qū)域?qū)扅c(diǎn)數(shù)據(jù)自動(dòng)換行
- *******************************************************************************/
- void TFT20_SetRegion(u8 XStart,u8 YStart,u8 XEnd,u8 YEnd)
- {
- #if USE_HORIZONTAL//橫屏
- TFT20_WriteReg(0x38,XEnd);
- TFT20_WriteReg(0x39,XStart);
- TFT20_WriteReg(0x36,YEnd);
- TFT20_WriteReg(0x37,YStart);
- TFT20_WriteReg(0x21,XStart);
- TFT20_WriteReg(0x20,YStart);
- #else //豎屏
- TFT20_WriteReg(0x36,XEnd);
- TFT20_WriteReg(0x37,XStart);
- TFT20_WriteReg(0x38,YEnd);
- TFT20_WriteReg(0x39,YStart);
- TFT20_WriteReg(0x20,XStart);
- TFT20_WriteReg(0x21,YStart);
- #endif
- TFT20_WriteIndex(0x22);
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_Clear
- * 功 能 : 全屏填充顏色函數(shù)(清屏)
- * 輸 入 : Color[in] 顏色數(shù)據(jù)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_Clear(u16 Color)
- {
- u16 i,m;
-
- TFT20_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);
-
- for(i=0;i<X_MAX_PIXEL;i++)
- for(m=0;m<Y_MAX_PIXEL;m++)
- {
- TFT20_WriteData(Color>>8);
- TFT20_WriteData(Color);
- }
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_LocalClear
- * 功 能 : 局部清屏
- * 輸 入 : XY 顯示起始點(diǎn) Color 顏色數(shù)據(jù)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_LocalClear(u16 XStart,u16 YStart,u16 C,u16 H,u16 Color) //局部清屏
- {
- u16 temp;
-
- TFT20_SetRegion(XStart,YStart,XStart+C-1,YStart+H-1); //設(shè)置顯示窗口大小
- for(temp=0;temp<(C*H);temp++)
- {
- TFT20_WriteData(Color>>8);
- TFT20_WriteData(Color);
- }
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_DrawPoint
- * 功 能 : 畫(huà)任意顏色點(diǎn)
- * 輸 入 : XStart[in] YStart[in] XY描點(diǎn)位置 Color[in] 顏色數(shù)據(jù)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_DrawPoint(u16 XStart,u16 YStart,u16 Color)
- {
- TFT20_SetXY(XStart,YStart);
- TFT20_WriteData(Color>>8);
- TFT20_WriteData(Color);
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_BGR_RGB
- * 功 能 : BGR->RGB格式轉(zhuǎn)換
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- * 返 回 : RGB格式的顏色值
- * 說(shuō) 明 : 從ILI93xx讀出的數(shù)據(jù)為GBR格式,而我們寫(xiě)入的時(shí)候?yàn)镽GB格式。
- *******************************************************************************/
- u16 TFT20_BGR_RGB(u16 BGR)
- {
- u16 R,G,B,RGB;
- B=(BGR>>0)&0x1f;
- G=(BGR>>5)&0x3f;
- R=(BGR>>11)&0x1f;
-
- RGB=(B<<11)+(G<<5)+(R<<0);
-
- return (RGB);
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_DrawCircle
- * 功 能 : 畫(huà)圓
- * 輸 入 : x[in] y[in] XY圓心點(diǎn)位置 R[in] 半徑 Color[in] 顏色數(shù)據(jù)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : Bresenham算法
- *******************************************************************************/
- void TFT20_DrawCircle(u16 X,u16 Y,u16 R,u16 Color) //畫(huà)圓
- {
- unsigned short a,b; //短整型
- int c;
- a=0; //必須賦值為零
- b=R;
- c=3-2*R;
- while(a<b)
- {
- TFT20_DrawPoint(X+a,Y+b,Color); //7
- TFT20_DrawPoint(X-a,Y+b,Color); //6
- TFT20_DrawPoint(X+a,Y-b,Color); //2
- TFT20_DrawPoint(X-a,Y-b,Color); //3
- TFT20_DrawPoint(X+b,Y+a,Color); //8
- TFT20_DrawPoint(X-b,Y+a,Color); //5
- TFT20_DrawPoint(X+b,Y-a,Color); //1
- TFT20_DrawPoint(X-b,Y-a,Color); //4
- if(c<0) c=c+4*a+6;
- else {c=c+4*(a-b)+10;b-=1;}
- a+=1;
- }
- if(a==b)
- {
- TFT20_DrawPoint(X+a,Y+b,Color);
- TFT20_DrawPoint(X+a,Y+b,Color);
- TFT20_DrawPoint(X+a,Y-b,Color);
- TFT20_DrawPoint(X-a,Y-b,Color);
- TFT20_DrawPoint(X+b,Y+a,Color);
- TFT20_DrawPoint(X-b,Y+a,Color);
- TFT20_DrawPoint(X+b,Y-a,Color);
- TFT20_DrawPoint(X-b,Y-a,Color);
- }
- }
- //,
- /*******************************************************************************
- * 函 數(shù) : TFT20_DrawLine
- * 功 能 : 畫(huà)線函數(shù)
- * 輸 入 : X Y 起始點(diǎn) 終點(diǎn)坐標(biāo) Color[in] 顏色數(shù)據(jù)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 使用Bresenham 畫(huà)線算法
- *******************************************************************************/
- void TFT20_DrawLine(u16 XStart, u16 YStart,u16 XEnd, u16 YEnd,u16 Color)
- {
- int dx,dy, //X Y 差值
- dx2,dy2, //X Y 差值的兩倍
- x_inc,y_inc,//在繪圖過(guò)程中像素點(diǎn)移動(dòng)的方向
- juece, //決策變量
- temp; //臨時(shí)變量
- TFT20_SetXY(XStart,YStart);//設(shè)置TFT屏顯示起始點(diǎn)
-
- dx = XEnd-XStart;//計(jì)算x距離
- dy = YEnd-YStart;//計(jì)算y距離
- if(dx>=0) x_inc= 1; //確定方向
- else {x_inc= -1;dx= -dx;}
-
- if(dy>=0) y_inc= 1;
- else {y_inc= -1;dy= -dy;}
- dx2 = dx<<1; //乘以2
- dy2 = dy<<1;
- if(dx>dy) //x距離大于y距離,那么每個(gè)x軸上只有一個(gè)點(diǎn),每個(gè)y軸上有若干個(gè)點(diǎn)
- { //且線的點(diǎn)數(shù)等于x距離,以x軸遞增畫(huà)點(diǎn)
- juece= dy2-dx; //初始化誤差項(xiàng)
- for(temp=0;temp<=dx;temp++) //要畫(huà)的點(diǎn)數(shù)不會(huì)超過(guò)x距離
- {
- TFT20_DrawPoint(XStart,YStart,Color);
- if(juece>=0) //是否需要增加y坐標(biāo)值
- {
- juece -=dx2;
- YStart +=y_inc;//增加y坐標(biāo)值
- }
- juece +=dy2; //調(diào)整
- XStart +=x_inc;//x坐標(biāo)值每次畫(huà)點(diǎn)后都遞增1(移動(dòng)到下一個(gè)像素)
- }
- }
- else //y軸大于x軸,則每個(gè)y軸上只有一個(gè)點(diǎn),x軸若干個(gè)點(diǎn)
- { //以y軸為遞增畫(huà)點(diǎn)
- juece= dx2-dy; //初始化誤差項(xiàng)
- for (temp=0;temp<=dy;temp++) //畫(huà)線
- {
- TFT20_DrawPoint(XStart,YStart,Color);
- if(juece>=0)
- {
- juece -=dy2;
- XStart +=x_inc;
- }
- juece +=dx2;
- YStart +=y_inc;
- }
- }
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_Drawbox
- * 功 能 : 畫(huà)矩形(帶斜線)
- * 輸 入 : xy 顯示起始點(diǎn) w[in]矩形寬度 h[in]高度 Color[in] 顏色
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_Drawbox(u16 x,u16 y,u16 w,u16 h,u16 Color)
- {
- TFT20_DrawLine(x ,y ,x+w ,y ,0xEF7D);//上橫
- TFT20_DrawLine(x+w ,y ,x+w ,y+h ,0x2965);//右豎
- TFT20_DrawLine(x ,y+h,x+w ,y+h ,0x2965);//下橫
- TFT20_DrawLine(x ,y ,x ,y+h ,0xEF7D);//左豎
- TFT20_DrawLine(x+1 ,y+1,x+w-1,y+h-1,Color );//正斜
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_Drawbox2
- * 功 能 : 畫(huà)矩形
- * 輸 入 : xy 顯示起始點(diǎn) w[in]矩形寬度 h[in]高度
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_Drawbox2(u16 x,u16 y,u16 w,u16 h,u8 mode)
- {
- if(mode==0){
- TFT20_DrawLine(x ,y ,x+w ,y ,0xEF7D);
- TFT20_DrawLine(x+w ,y ,x+w ,y+h ,0x2965);
- TFT20_DrawLine(x ,y+h,x+w ,y+h ,0x2965);
- TFT20_DrawLine(x ,y ,x ,y+h ,0xEF7D);
- }
- if(mode==1){
- TFT20_DrawLine(x ,y ,x+w ,y ,0x2965);
- TFT20_DrawLine(x+w ,y ,x+w ,y+h ,0xEF7D);
- TFT20_DrawLine(x ,y+h,x+w ,y+h ,0xEF7D);
- TFT20_DrawLine(x ,y ,x ,y+h ,0x2965);
- }
- if(mode==2){
- TFT20_DrawLine(x ,y ,x+w ,y ,0x0000);
- TFT20_DrawLine(x+w ,y ,x+w ,y+h ,0x0000);
- TFT20_DrawLine(x ,y+h,x+w ,y+h ,0x0000);
- TFT20_DrawLine(x ,y ,x ,y+h ,0x0000);
- }
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_DisplayImg
- * 功 能 : 任意位置顯示圖片
- * 輸 入 : XY 顯示起始點(diǎn) *img[in] 圖片數(shù)據(jù)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 16位BMP/Image2LCD取模選項(xiàng)設(shè)置/水平掃描/16位/不包含圖像頭數(shù)據(jù)/自左至右
- 自頂至底/低位在前/在圖片數(shù)組前加上圖片尺寸 例:u8 a[]={176,220,dat};
- *******************************************************************************/
- void TFT20_DisplayImg(u16 XStart,u16 YStart,u8 *img)
- {
- u16 temp;
-
- // TFT20_Clear(GRAY0); //灰色0 //清屏
- TFT20_SetRegion(XStart,YStart,XStart+img[0]-1,YStart+img[1]-1); //設(shè)置顯示窗口大小
- for(temp=0;temp<(img[0]*img[1]);temp++)
- {
- TFT20_WriteData(*(img+temp*2+3)); //數(shù)據(jù)低位在前
- TFT20_WriteData(*(img+temp*2+2));
- }
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_DisplayButtonDown
- * 功 能 : 在屏幕顯示一凸起的按鈕框
- * 輸 入 : x0,y0,x1,y1 按鈕框左上角和右下角坐標(biāo)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_DisplayButtonDown(u16 x0,u16 y0,u16 x1,u16 y1)
- {
- TFT20_DrawLine(x0 ,y0 ,x1 ,y0 ,GRAY2); //上上橫
- TFT20_DrawLine(x0+1,y0+1,x1 ,y0+1,GRAY1); //上下橫
- TFT20_DrawLine(x0 ,y0 ,x0 ,y1 ,GRAY2); //左左豎
- TFT20_DrawLine(x0+1,y0+1,x0+1,y1 ,GRAY1); //左右豎
- TFT20_DrawLine(x0 ,y1 ,x1 ,y1 ,WHITE); //下橫
- TFT20_DrawLine(x1 ,y0 ,x1 ,y1 ,WHITE); //右豎
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_DisplayButtonUp
- * 功 能 : 在屏幕顯示一凹下的按鈕框
- * 輸 入 : x0,y0,x1,y1 按鈕框左上角和右下角坐標(biāo)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_DisplayButtonUp(u16 x0,u16 y0,u16 x1,u16 y1)
- {
- TFT20_DrawLine(x0 ,y0 ,x1 ,y0 ,WHITE); //上橫
- TFT20_DrawLine(x0 ,y0 ,x0 ,y1 ,WHITE); //左豎
- TFT20_DrawLine(x0+1,y1-1,x1 ,y1-1,GRAY1); //下上橫
- TFT20_DrawLine(x0 ,y1 ,x1 ,y1 ,GRAY2); //下下橫
- TFT20_DrawLine(x1-1,y0+1,x1-1,y1 ,GRAY1); //右左豎
- TFT20_DrawLine(x1 ,y0 ,x1 ,y1 ,GRAY2); //右右豎
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_DrawFont_GBK16
- * 功 能 : 顯示漢字或字符 (GBK16)
- * 輸 入 : XY 顯示起始點(diǎn) fc[in]字體顏色 bc[in]背景色 *Dat[in] 顯示數(shù)據(jù)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_DrawFont_GBK16(u16 x,u16 y,u16 fc,u16 bc,u8 *Dat)
- {
- u8 i,j;
- unsigned short k,x0=x;//記憶x0起點(diǎn)坐標(biāo)
- while(*Dat)
- {
- if((*Dat) < 128) //小于128的為ASCLL字符
- {
- k=*Dat; //ASCLL字符編號(hào)索引
- if(k==0x0D) {x=x0;y+=16;} //換行 +16
- else
- {
- if(k>32) k-=32; else k=0;//數(shù)組字符編號(hào)索引
- for(i=0;i<16;i++)
- for(j=0;j<8;j++)
- {
- if(asc16[k*16+i]&(0x80>>j)) TFT20_DrawPoint(x+j,y+i,fc); //字體顏色
- else {if(fc!=bc) TFT20_DrawPoint(x+j,y+i,bc);} //背景色
- }
- x+=8;
- }
- Dat++;
- }
- else //大于128的為GBK漢字內(nèi)碼(兩字節(jié))(在這里面是)
- {
- for(k=0;k<hz16_num;k++)
- {
- if((hz16[k].Index[0]==*(Dat))&&(hz16[k].Index[1]==*(Dat+1)))
- {
- for(i=0;i<16;i++)
- {
- for(j=0;j<8;j++)
- {
- if(hz16[k].Msk[i*2]&(0x80>>j)) TFT20_DrawPoint(x+j,y+i,fc); //字體顏色
- else {if(fc!=bc) TFT20_DrawPoint(x+j,y+i,bc);} //背景色
- }
- for(j=0;j<8;j++)
- {
- if(hz16[k].Msk[i*2+1]&(0x80>>j)) TFT20_DrawPoint(x+j+8,y+i,fc); //字體顏色
- else {if(fc!=bc) TFT20_DrawPoint(x+j+8,y+i,bc);} //背景色
- }
- }
- }
- }
- Dat+=2;x+=16;
- }
- }
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_DrawFont_GBK24
- * 功 能 : 顯示漢字或字符 (GBK24)
- * 輸 入 : XY 顯示起始點(diǎn) fc[in]字體顏色 bc[in]背景色 *Dat[in] 顯示數(shù)據(jù)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_DrawFont_GBK24(u16 x,u16 y,u16 fc,u16 bc,u8 *Dat)
- {
- u8 i,j;
- unsigned short k,x0=x;
- while(*Dat)
- {
- if((*Dat)<128)
- // {
- // k=*Dat;
- // if(k>32) k-=32; else k=0;
- // for(i=0;i<16;i++)
- // for(j=0;j<8;j++)
- // {
- // if(asc16[k*16+i]&(0x80>>j)) TFT20_DrawPoint(x+j,y+i,fc);
- // else {if(fc!=bc) TFT20_DrawPoint(x+j,y+i,bc);}
- // }
- // Dat++;x+=8;
- // }
- {
- k=*Dat; //ASCLL字符編號(hào)索引
- if(k==0x0D) {x=x0;y+=24;} //換行 +24
- else
- {
- if(k>32) k-=32; else k=0;//數(shù)組字符編號(hào)索引
- for(i=0;i<16;i++)
- for(j=0;j<8;j++)
- {
- if(asc16[k*16+i]&(0x80>>j)) TFT20_DrawPoint(x+j,y+i+4,fc); //字體顏色
- else {if(fc!=bc) TFT20_DrawPoint(x+j,y+i+4,bc);} //背景色
- }
- x+=8;
- }
- Dat++;
- }
- else
- {
- for (k=0;k<hz24_num;k++)
- {
- if ((hz24[k].Index[0]==*(Dat))&&(hz24[k].Index[1]==*(Dat+1)))
- {
- for(i=0;i<24;i++)
- {
- for(j=0;j<24;j++)
- {
- if(hz24[k].Msk[i*3+(j>>3)]&(0x80>>(j&0x07))) TFT20_DrawPoint(x+j,y+i,fc);
- else {if(fc!=bc) TFT20_DrawPoint(x+j,y+i,bc);}
- }
- // for(j=0;j<8;j++)
- // {
- // if(hz24[k].Msk[i*3+1]&(0x80>>j)) TFT20_DrawPoint(x+j+8,y+i,fc);
- // else {if(fc!=bc) TFT20_DrawPoint(x+j+8,y+i,bc);}
- // }
- // for(j=0;j<8;j++)
- // {
- // if(hz24[k].Msk[i*3+2]&(0x80>>j)) TFT20_DrawPoint(x+j+16,y+i,fc);
- // else {if(fc!=bc) TFT20_DrawPoint(x+j+16,y+i,bc);}
- // }
- }
- }
- }
- Dat+=2;x+=24;
- }
- }
- }
- /*******************************************************************************
- * 函 數(shù) : TFT20_DrawFont_Num32
- * 功 能 : 顯示數(shù)碼管體數(shù)字
- * 輸 入 : XY 顯示起始點(diǎn) fc[in]字體顏色 bc[in]背景色 num[in]
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : 無(wú)
- *******************************************************************************/
- void TFT20_DrawFont_Num32(u16 x,u16 y,u16 fc,u16 bc,u16 num)
- {
- u8 i,j,k,c;
- for(i=0;i<32;i++)
- {
- for(j=0;j<4;j++)
- {
- c=*(sz32+num*32*4+i*4+j);
- for(k=0;k<8;k++)
- {
- if(c&(0x80>>k)) TFT20_DrawPoint(x+j*8+k,y+i,fc);
- else {if(fc!=bc) TFT20_DrawPoint(x+j*8+k,y+i,bc);}
- }
- }
- }
- }
- /*******************************************************************************
- * 函 數(shù) : SPI_Init
- * 功 能 : 配置硬件SPI,可通過(guò)修改SPEED_4值來(lái)更改SPI總線速度
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- * 返 回 : 無(wú)
- * 說(shuō) 明 : SPEED_4為4分頻最高速,SPEED_128為最低速
- *******************************************************************************/
- void TFT20_SPI_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;//定義結(jié)構(gòu)體變量
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//PB3,PB4使用了復(fù)用為IO口,需使能復(fù)用功能
-
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
TFT_2.0_ILI9225.zip
(381.39 KB, 下載次數(shù): 325)
2019-4-7 19:47 上傳
點(diǎn)擊文件名下載附件
程序 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|