久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
TFT3.2-SD-TP彩屏(R61509-16Pins)驅(qū)動程序
[打印本頁]
作者:
478738975
時(shí)間:
2016-11-2 22:16
標(biāo)題:
TFT3.2-SD-TP彩屏(R61509-16Pins)驅(qū)動程序
#include <reg51.h>
#include "gui.h"
#include "touch.h"
/****************************************************************************
*函數(shù)名:main
*輸 入:無
*輸 出:無
*功 能:主函數(shù)
****************************************************************************/
void main(void)
{
uchar rst;
//--多出來兩個(gè)值使用來在內(nèi)存上面跟別的變量分隔的--//
uchar xValue[5] = {0, 0, 0, 0, 0}, yValue[5] = {0, 0, 0, 0, 0};
long x, y;
TFT_Init();
rst = 1;
/* 觸摸校正,默認(rèn)使用開機(jī)不校正,如果觸摸正對可以改正,該函數(shù)里面的校正點(diǎn) */
/* 或者定義USE_TOUCH_ADJUST開啟開機(jī)校正,定義在touch.h的44行 */
TOUCH_Adjust();
while(1)
{
if(rst ==1)
{
TFT_ClearScreen(0xFFFF); //黑色
GUI_WriteASCII(190, 0, "RST", 0xF800, 0xFFFF);
GUI_Write32CnChar(60, 20, "普中科技", 0xF800, 0xFFFF);
GUI_Line(60, 50, 188, 50, 0xF800);
rst = 0;
}
if(TOUCH_XPT_ReadXY() == 1)
{
//--如果觸摸跟顯示發(fā)生偏移,可以根據(jù)顯示AD值--//
//--調(diào)整下面公式里面的數(shù)值--//
x = xpt_xy.y * TouchAdj.xFactor / LCD_ADJ_MUX + TouchAdj.xOffset;
y = xpt_xy.x * TouchAdj.yFactor / LCD_ADJ_MUX + TouchAdj.yOffset;
if (x > 240 )
{
x = 239;
}
if (y > 400)
{
y = 399;
}
x = 239 - x;
y = 399 - y;
if ((x > 190) && (y < 24))
{
rst = 1;
}
else
{
GUI_Dot((uint)x, (uint)y, 0xF800); //畫點(diǎn)
//
// //--計(jì)算讀取到的AD值--//
// //--由于添加了顯示AD值,計(jì)算需要時(shí)間,所以觸摸有一點(diǎn)延遲--//
// xValue[0] = (xpt_xy.x % 10000 /1000) + '0';
// xValue[1] = (xpt_xy.x % 1000 /100) + '0';
// xValue[2] = (xpt_xy.x % 100 /10) + '0';
// xValue[3] = (xpt_xy.x % 10) + '0';
// yValue[0] = (xpt_xy.y % 10000 /1000) + '0';
// yValue[1] = (xpt_xy.y % 1000 /100) + '0';
// yValue[2] = (xpt_xy.y % 100 /10) + '0';
// yValue[3] = (xpt_xy.y % 10) + '0';
// //--顯示AD值--//
// GUI_WriteASCII(0, 370, "X:", 0xF800, 0xFFFF);
// GUI_WriteASCII(32, 370, xValue, 0xF800, 0xFFFF);
// GUI_WriteASCII(119, 370, "Y:", 0xF800, 0xFFFF);
// GUI_WriteASCII(151, 370, yValue, 0xF800, 0xFFFF);
}
}
}
}
#include"R61509.h"
/****************************************************************************
*函數(shù)名:TFT_WriteCmd
*輸 入:cmd:寫入的十六命令
* * cmh:寫入的18位命令中的最高兩位
*輸 出:
*功 能:向TFT屏寫入18位數(shù)據(jù)。
****************************************************************************/
void TFT_WriteCmd(uint cmd)
{
uchar cmdH, cmdL;
cmdH = cmd >> 8;
cmdL = cmd & 0x00FF;
TFT_WR = 1;
TFT_CS = 0; //打開片選
TFT_RS = 0; //選擇寫命令
/* 放置數(shù)據(jù) */
TFT_DATAPORTH = cmdH;
TFT_DATAPORTL = cmdL;
TFT_WR=0;
TFT_WR=1;
TFT_CS=1; //關(guān)閉片選
}
/****************************************************************************
*函數(shù)名:TFT_WriteData
*輸 入:dat:寫入的16位數(shù)據(jù)
* * dah:寫入的18位數(shù)據(jù)中的最高2位
*輸 出:
*功 能:向TFT屏寫入18位命令。
****************************************************************************/
void TFT_WriteData(uint dat)
{
uchar datH, datL;
datH = dat >> 8;
datL = dat & 0x00FF;
TFT_WR = 1;
TFT_CS = 0; //打開片選
TFT_RS = 1; //選擇寫數(shù)據(jù)
/* 放置數(shù)據(jù) */
TFT_DATAPORTH = datH;
TFT_DATAPORTL = datL;
TFT_WR=0;
TFT_WR=1;
TFT_CS=1;//關(guān)閉片選
}
/****************************************************************************
*函數(shù)名: TFT_WriteCmdData
*輸 入:cmd:16位命令
* * dat:16位數(shù)據(jù)
*輸 出:
*功 能:向TFT屏先寫入16位命令。在寫入16位數(shù)據(jù)
****************************************************************************/
void TFT_WriteCmdData(uint cmd, uint dat)
{
TFT_WriteCmd(cmd);
TFT_WriteData(dat);
}
/****************************************************************************
*函數(shù)名: TFT_Init
*輸 入:無
*輸 出:無
*功 能:初始化TFT屏
****************************************************************************/
void TFT_Init(void)
{
uint i;
TFT_CS=1; //關(guān)閉片選
TFT_RD=1; //IO初始化
TFT_WR=1; //IO初始化
TFT_RST = 1;
for(i=500; i>0; i--);
TFT_RST = 0;
for(i=500; i>0; i--);
TFT_RST = 1;
for(i=5000; i>0; i--);
TFT_CS =0; //打開片選使能
for(i=0; i<500; i++);
TFT_WriteCmdData(0x0400,0x3102);
TFT_WriteCmdData(0x0007,0x0021);
for(i=0; i<5000; i++);
TFT_WriteCmdData(0x0110,0x0001);
for(i=0; i<5000; i++);
TFT_WriteCmdData(0x0100,0x17B0);
TFT_WriteCmdData(0x0112,0x0060);
TFT_WriteCmdData(0x0010,0x001F);
TFT_WriteCmdData(0x0101,0x0014);
TFT_WriteCmdData(0x0102,0x019E);
TFT_WriteCmdData(0x0103,0x3200);
TFT_WriteCmdData(0x0107,0x0000);
for(i=0; i<5000; i++);
TFT_WriteCmdData(0x0102,0x01BE);
for(i=0; i<5000; i++);
TFT_WriteCmdData(0x0001,0x0100);
TFT_WriteCmdData(0x0002,0x0000);
TFT_WriteCmdData(0x0003,0x1230);
TFT_WriteCmdData(0x0008,0x0808);
TFT_WriteCmdData(0x0009,0x0000);
TFT_WriteCmdData(0x000B,0x0010);
TFT_WriteCmdData(0x000C,0x0000);
TFT_WriteCmdData(0x0090,0x0000);
TFT_WriteCmdData(0x0300,0x0706);
TFT_WriteCmdData(0x0301,0x0206);
TFT_WriteCmdData(0x0302,0x0002);
TFT_WriteCmdData(0x0303,0x0201);
TFT_WriteCmdData(0x0304,0x0300);
TFT_WriteCmdData(0x0305,0x0207);
TFT_WriteCmdData(0x0306,0x1416);
TFT_WriteCmdData(0x0307,0x0706);
TFT_WriteCmdData(0x0308,0x0206);
TFT_WriteCmdData(0x0309,0x0002);
TFT_WriteCmdData(0x030A,0x0201);
TFT_WriteCmdData(0x030B,0x0300);
TFT_WriteCmdData(0x030C,0x0207);
TFT_WriteCmdData(0x030D,0x090B);
//gamma
TFT_WriteCmdData(0x0210,0x0000);
TFT_WriteCmdData(0x0211,0x00EF);
TFT_WriteCmdData(0x0212,0x0000);
TFT_WriteCmdData(0x0213,0x018F);
TFT_WriteCmdData(0x0401,0x0000);
TFT_WriteCmdData(0x0404,0x0000);
TFT_WriteCmdData(0x0010,0x0010);
TFT_WriteCmdData(0x0011,0x0002);
TFT_WriteCmdData(0x0012,0x0100);
TFT_WriteCmdData(0x0101,0x0017);
TFT_WriteCmdData(0x0200,0x0000);
TFT_WriteCmdData(0x0201,0x0000);
TFT_WriteCmd(0x0202);
//display on
TFT_WriteCmdData(0x0007,0x0021);
for(i=0; i<5000; i++);
TFT_WriteCmdData(0x0007,0x0061);
for(i=0; i<5000; i++);
TFT_WriteCmdData(0x0007,0x0173);
for(i=0; i<5000; i++);
TFT_WriteCmd(0x0202);
}
/****************************************************************************
*函數(shù)名:void TFT_Setwindow
*輸入:xStart:其實(shí)X坐標(biāo)
* * yStart:其實(shí)Y坐標(biāo)
* * xEnd:結(jié)束X坐標(biāo)
* * yEnd:結(jié)束Y坐標(biāo)
*輸出:
*功能:設(shè)置窗口的范圍,起始地址和終止地址。
****************************************************************************/
void TFT_SetWindow(uint xStart, uint yStart,uint xEnd, uint yEnd)
{
TFT_WriteCmdData(0x200, xStart);
TFT_WriteCmdData(0x201, yStart);
TFT_WriteCmdData(0x0210, xStart);
TFT_WriteCmdData(0x0212,yStart);
TFT_WriteCmdData(0x211,xEnd);
TFT_WriteCmdData(0x213,yEnd);
TFT_WriteCmd(0x0202);
}
/****************************************************************************
*函數(shù)名:TFT_ClearScreen
*輸 入:backColor:16位真彩數(shù)值
*輸 出:
*功 能:清屏并涂上顏色。
****************************************************************************/
void TFT_ClearScreen(uint color)
{
uint i, j;
TFT_SetWindow(0,0,TFT_XMAX,TFT_YMAX); //作用區(qū)域
for(i=0; i<TFT_XMAX+1; i++)
{
for (j=0; j<TFT_YMAX+1; j++)
{
TFT_WriteData(color);
}
}
}
#include"gui.h"
//---漢字的字庫頭文件---//
#include"charcode.h"
//---如果要顯示圖片就添加這個(gè)頭文件---//
#ifdef PICTURE_SHOW
#include"picture.h"
#endif
/****************************************************************************
*函數(shù)名:GUI_Dot
*輸 入:x:點(diǎn)的X坐標(biāo)
* * y:點(diǎn)的Y坐標(biāo)
* * color:點(diǎn)的顏色
*輸 出:
*功 能:給一塊3*3像素涂上顏色。
****************************************************************************/
void GUI_Dot(uint x, uint y, uint color)
{
uchar i;
TFT_SetWindow(x - 1, y - 1, x + 1, y + 1); //單個(gè)像素
for(i=0; i<9; i++)
{
TFT_WriteData(color);
}
}
/****************************************************************************
*函數(shù)名:GUI_DrowSign
*輸 入:x:標(biāo)記的X坐標(biāo);
* * y:標(biāo)記的Y坐標(biāo)
* * color:標(biāo)記的顏色
*輸 出:
*功 能:畫一個(gè)十字的標(biāo)記
****************************************************************************/
void GUI_DrowSign(uint x, uint y, uint color)
{
uchar i;
TFT_SetWindow(x-3, y, x+3, y);
for(i=0; i<7; i++)
{
TFT_WriteData(color);
}
TFT_SetWindow(x, y-3, x, y+3);
for(i=0; i<7; i++)
{
TFT_WriteData(color);
}
}
///****************************************************************************
//*函數(shù)名:GUI_Box
//*輸 入: sx, sy, ex, ey, color
//*輸 出:
//*功 能:給一個(gè)區(qū)域涂上顏色。
//****************************************************************************/
//void GUI_Box(uint sx, uint sy, uchar ex, uint ey, uint color)
//{
// uint temp;
// TFT_SetWindow(sx, sy, ex, ey);
// sx = ex - sx + 1;
// sy = ey - sy + 1;
// while (sx--)
// {
// temp = sy;
// while (temp--)
// {
// TFT_WriteData(color);
// }
// }
//}
/****************************************************************************
*函數(shù)名:GUI_Line
*輸 入:xStart:直線的起始X坐標(biāo)
* * yStart:直線的其實(shí)Y坐標(biāo)
* * xEnd:直線的結(jié)束X坐標(biāo)
* * yEnd:直線的結(jié)束Y坐標(biāo)
* * color:直線的顏色
*輸 出:
*功 能:畫一條直線
****************************************************************************/
void GUI_Line(uint xStart, uint yStart, uchar xEnd, uint yEnd, uint color)
{
uint t;
int xerr = 0, yerr = 0, delta_x, delta_y, distance;
int incx, incy;
uint row, col;
delta_x = xEnd - xStart;//計(jì)算坐標(biāo)增量
delta_y = yEnd - yStart;
col = xStart;
row = yStart;
if (delta_x > 0)
{
incx=1;//設(shè)置單步方向
}
else
{
if (delta_x == 0)
{
incx = 0;//垂直線
}
else
{
incx = -1;
delta_x = -delta_x;
}
}
if (delta_y > 0)
{
incy = 1;
}
else
{
if (delta_y == 0)
{
incy = 0;//水平線
}
else
{
incy = -1;
delta_y = -delta_y;
}
}
if (delta_x > delta_y)
{
distance = delta_x;//選取基本增量坐標(biāo)軸
}
else
{
distance = delta_y;
}
for (t=0; t<=distance+1; t++)
{ //畫線輸出
GUI_Dot(col, row, color);
xerr += delta_x;
yerr += delta_y;
if(xerr > distance)
{
xerr -= distance;
col += incx;
}
if(yerr > distance)
{
yerr -= distance;
row += incy;
}
}
}
/****************************************************************************
*函數(shù)名:GUI_WriteCnChar
*輸 入:x:漢字顯示的X坐標(biāo)
* * y:漢字顯示的Y坐標(biāo)
* * cn:要顯示的漢字
* * wordColor:文字的顏色
* * backColor:背景顏色
*輸 出:
*功 能:寫二號楷體漢字
****************************************************************************/
#ifdef CHAR32_SHOW
void GUI_Write32CnChar(uint x, uint y, uchar *cn, uint wordColor, uint backColor)
{
uchar i, j, wordNum;
uint color;
while (*cn != '\0')
{
TFT_SetWindow(x, y, x+31, y+28);
for (wordNum=0; wordNum<20; wordNum++)
{ //wordNum掃描字庫的字?jǐn)?shù)
if ((CnChar32x29[wordNum].Index[0]==*cn)
&&(CnChar32x29[wordNum].Index[1]==*(cn+1)))
{
for(i=0; i<116; i++)
{ //MSK的位數(shù)
color=CnChar32x29[wordNum].Msk[i];
for(j=0;j<8;j++)
{
if((color&0x80)==0x80)
{
TFT_WriteData(wordColor);
}
else
{
TFT_WriteData(backColor);
}
color<<=1;
}//for(j=0;j<8;j++)結(jié)束
}
}
} //for (wordNum=0; wordNum<20; wordNum++)結(jié)束
cn += 2;
x += 32;
}
}
#endif
/****************************************************************************
*函數(shù)名:GUI_WriteEnChar
*輸 入:x:字母顯示的X坐標(biāo)
* * y:字母顯示的Y坐標(biāo)
* * cn:要顯示的字母
* * wordColor:文字的顏色
* * backColor:背景顏色
*輸 出:
*功 能:寫四號字字母
****************************************************************************/
#ifdef CHAR14_SHOW
void GUI_Write14CnChar(uint x,uint y,uchar *cn,uint wordColor,uint backColor)
{
uchar i, j, wordNum;
uint color;
while (*cn != '\0')
{
TFT_SetWindow(x, y, x+23, y+18);
for (wordNum=0; wordNum<20; wordNum++)
{ //wordNum掃描字庫的字?jǐn)?shù)
if ((CnChar19x24[wordNum].Index[0]==*cn)
&&(CnChar19x24[wordNum].Index[1]==*(cn+1)))
{
for(i=0; i<57; i++)
{ //MSK的位數(shù)
color=CnChar19x24[wordNum].Msk[i];
for(j=0;j<8;j++)
{
if((color&0x80)==0x80)
{
TFT_WriteData(wordColor);
}
else
{
TFT_WriteData(backColor);
}
color<<=1;
}//for(j=0;j<8;j++)結(jié)束
}
}
} //for (wordNum=0; wordNum<20; wordNum++)結(jié)束
cn += 2;
x += 24;
}
}
#endif
/****************************************************************************
*函數(shù)名:GUI_WriteASCII
*輸 入:x:字母顯示的X坐標(biāo)
* * y:字母顯示的Y坐標(biāo)
* * cn:要顯示的字母
* * wordColor:文字的顏色
* * backColor:背景顏色
*輸 出:
*功 能:寫16X24的ASCII字符
****************************************************************************/
#ifdef USE_ASCII
void GUI_WriteASCII(uint x, uint y, uchar *p, uint wordColor, uint backColor)
{
uchar j, wordByte,wordNum;
uint color;
while(*p != '\0')
{
wordNum = *p - 32;
TFT_SetWindow(x,y,x+15, y+23);
for (wordByte=0; wordByte<48; wordByte++)
{
color = ASCII16x24[wordNum][wordByte];
for (j=0; j<8; j++)
{
if ((color&0x80) == 0x80)
{
TFT_WriteData(wordColor);
}
else
{
TFT_WriteData(backColor);
}
color <<= 1;
}
}
p++;
x +=16;
}
}
#endif
/****************************************************************************
*函數(shù)名:GUI_ShowPicture
*輸 入:x:圖片顯示起始X坐標(biāo)
* * y:圖片顯示起始Y坐標(biāo)
* * wide:圖片的寬度
* * high:圖片的高度
*輸 出:
*功 能:顯示一張圖片(取自picture.h中的pic[]數(shù)組,換圖片直接替換掉pic數(shù)組就
* * 可以了)
****************************************************************************/
#ifdef PICTURE_SHOW
void GUI_ShowPicture(uint x, uint y, uchar wide, uint high)
{
uint temp = 0, tmp = 0, num = 0;
TFT_SetWindow(x, y, x+wide-1, y+high-1);
num = wide * high * 2;
do
{
temp = pic[tmp + 1];
temp = temp << 8;
temp = temp | pic[tmp];
TFT_WriteData(temp);//逐點(diǎn)顯示
tmp += 2;
}
while(tmp < num);
}
#endif
#include"touch.h"
PosTypeDef TouchAdj; //定義一陣數(shù)據(jù)用來保存校正因數(shù)
XPT_XY xpt_xy; //定義一個(gè)全局變量保存X、Y的值
#define XY_READ_TIMS 10 //讀取的次數(shù)
/****************************************************************************
*函數(shù)名:TOUCH_SPI_Start
*輸 入:無
*輸 出:無
*功 能:初始化觸摸SPI
****************************************************************************/
void TOUCH_SPI_Start(void)
{
TOUCH_CLK = 0;
TOUCH_CS = 1;
TOUCH_DIN = 1;
TOUCH_CLK = 1;
TOUCH_CS = 0;
}
/****************************************************************************
*函數(shù)名:TOUCH_SPI_Write
*輸 入:dat:寫入數(shù)據(jù)
*輸 出:無
*功 能:使用SPI寫入數(shù)據(jù)
****************************************************************************/
void TOUCH_SPI_Write(uchar dat)
{
uchar i;
TOUCH_CLK = 0;
for(i=0; i<8; i++)
{
TOUCH_DIN = dat >> 7; //放置最高位
dat <<= 1;
TOUCH_CLK = 0; //上升沿放置數(shù)據(jù)
TOUCH_CLK = 1;
}
}
/****************************************************************************
*函數(shù)名:TOUCH_SPI_Read
*輸 入:無
*輸 出:dat:讀取 到的數(shù)據(jù)
*功 能:使用SPI讀取數(shù)據(jù)
****************************************************************************/
uint TOUCH_SPI_Read(void)
{
uint i, dat=0;
TOUCH_CLK = 0;
for(i=0; i<12; i++) //接收12位數(shù)據(jù)
{
dat <<= 1;
TOUCH_CLK = 1;
TOUCH_CLK = 0;
dat |= TOUCH_DOUT;
}
return dat;
}
/****************************************************************************
*函數(shù)名:TOUCH_XPT_ReadData
*輸 入:cmd:讀取的X或者Y
*輸 出:endValue:最終信號處理后返回的值
*功 能:讀取觸摸數(shù)據(jù)
****************************************************************************/
uint TOUCH_XPT_ReadData(uchar cmd)
{
uchar i, j;
uint readValue[XY_READ_TIMS];
long endValue;
TOUCH_CLK = 0; //先拉低時(shí)間
TOUCH_CS = 0; //選中芯片
for(i=0; i<XY_READ_TIMS; i++) //讀取XY_READ_TIMS次結(jié)果
{
TOUCH_SPI_Write(cmd); //發(fā)送轉(zhuǎn)換命令
//Delay_6us();
for(j=6; j>0; j--); //延時(shí)等待轉(zhuǎn)換結(jié)果
TOUCH_CLK = 1; //發(fā)送一個(gè)時(shí)鐘周期,清除BUSY
_nop_();
_nop_();
TOUCH_CLK = 0;
_nop_();
_nop_();
readValue[i] = TOUCH_SPI_Read();
}
TOUCH_CS = 1; //釋放片選
//---軟件濾波---//
//---先大到小排序,除去最高值,除去最低值,求其平均值---//
for(i=0; i<XY_READ_TIMS - 1; i++) //從大到小排序
{
for(j= i+1; j<XY_READ_TIMS; j++)
{
if(readValue[i] < readValue[j])
{
endValue = readValue[i];
readValue[i] = readValue[j];
readValue[j] = endValue;
}
}
}
// if((readValue[2] - readValue[3]) > 5)
// {
// return 0;
// }
endValue = 0;
for(i=2; i<XY_READ_TIMS-2; i++)
{
endValue += readValue[i];
}
endValue = endValue/ (XY_READ_TIMS - 4);//求平均值
return endValue;
}
/****************************************************************************
*函數(shù)名:TOUCH_XPT_ReadXY
*輸 入:無
*輸 出:1:成功 0:失敗
*功 能:讀取XY的AD值
****************************************************************************/
uchar TOUCH_XPT_ReadXY(void)
{
uint x1, x2, x, y1, y2, y;
TOUCH_SPI_Start();
//---分別讀兩次X值和Y值, 交叉著讀可以提高一些讀取精度---//
x1 = TOUCH_XPT_ReadData(XPT_CMD_X);
y1 = TOUCH_XPT_ReadData(XPT_CMD_Y);
x2 = TOUCH_XPT_ReadData(XPT_CMD_X);
y2 = TOUCH_XPT_ReadData(XPT_CMD_Y);
//---求取X值的差值---//
if (x1 > x2)
{
x = x1 - x2;
}
else
{
x = x2 - x1;
}
//---求取Y值的差值---//
if (y1 > y2)
{
y = y1 - y2;
}
else
{
y = y2 - y1;
}
//---判斷差值是否大于50,大于就返回0,表示讀取失敗---//
if((x > 50) || (y > 50))
{
return 0;
}
//---求取兩次讀取值的平均數(shù)作為讀取到的XY值---//
xpt_xy.x = (x1 + x2) / 2;
xpt_xy.y = (y1 + y2) / 2;
xpt_xy.x &= 0xFFF0; //去掉低四位
xpt_xy.y &= 0xFFF0;
//---確定XY值的范圍,用在觸摸屏大于TFT時(shí)---//
if((xpt_xy.x < 100) || (xpt_xy.y > 3900))
{
return 0;
}
return 1; // 返回1,表示讀取成功
}
/****************************************************************************
*函數(shù)名:TOUCH_ReadAdj
*輸 入:px:讀取到的X坐標(biāo)值
* * py:讀取到的Y坐標(biāo)值
*輸 出:無
*功 能:給屏幕校正函數(shù)取四個(gè)點(diǎn)
****************************************************************************/
void TOUCH_ReadAdj(uint *px, uint *py)
{
ulong i = 0;
XPT_XY pot[4];
/* 讀取四個(gè)定位點(diǎn)的坐標(biāo) */
TFT_ClearScreen(0x0000);
GUI_DrowSign(LCD_ADJX_MIN, LCD_ADJY_MIN, 0x0FF0);
while(1)
{
if(TOUCH_XPT_ReadXY())
{
i++;
if(i > 10)
{
pot[0].x = xpt_xy.x;
pot[0].y = xpt_xy.y;
break;
}
}
}
GUI_DrowSign(LCD_ADJX_MIN, LCD_ADJY_MIN, 0x0000);
ADJ_CHECK_DELAY;
GUI_DrowSign(LCD_ADJX_MIN, LCD_ADJY_MAX, 0x0FF0);
i = 0;
while(1)
{
if(TOUCH_XPT_ReadXY())
{
i++;
if(i > 10)
{
pot[1].x = xpt_xy.x;
pot[1].y = xpt_xy.y;
break;
}
}
}
GUI_DrowSign(LCD_ADJX_MIN, LCD_ADJY_MAX, 0x0000);
ADJ_CHECK_DELAY;
GUI_DrowSign(LCD_ADJX_MAX, LCD_ADJY_MIN, 0x0FF0);
i = 0;
while(1)
{
if(TOUCH_XPT_ReadXY())
{
i++;
if(i > 10)
{
pot[2].x = xpt_xy.x;
pot[2].y = xpt_xy.y;
break;
}
}
}
GUI_DrowSign(LCD_ADJX_MAX, LCD_ADJY_MIN, 0x0000);
ADJ_CHECK_DELAY;
GUI_DrowSign(LCD_ADJX_MAX, LCD_ADJY_MAX, 0x0FF0);
i = 0;
while(1)
{
if(TOUCH_XPT_ReadXY())
{
i++;
if(i > 10)
{
pot[3].x = xpt_xy.x;
pot[3].y = xpt_xy.y;
break;
}
}
}
GUI_DrowSign(LCD_ADJX_MAX, LCD_ADJY_MAX, 0x0000);
/* 處理讀取到的四個(gè)點(diǎn)的數(shù)據(jù),整合成對角的兩個(gè)點(diǎn) */
#if LCD_TOUCH_TYPE == 0
px[0] = (pot[0].x + pot[1].x) / 2;
py[0] = (pot[0].y + pot[2].y) / 2;
px[1] = (pot[3].x + pot[2].x) / 2;
py[1] = (pot[3].y + pot[1].y) / 2;
#endif
#if LCD_TOUCH_TYPE == 1
px[0] = (pot[0].x + pot[2].x) / 2;
py[0] = (pot[0].y + pot[1].y) / 2;
px[1] = (pot[3].x + pot[1].x) / 2;
py[1] = (pot[3].y + pot[2].y) / 2;
#endif
}
/****************************************************************************
*函數(shù)名:TOUCH_Adjust
*輸 入:無
*輸 出:無
*功 能:觸摸屏校正
****************************************************************************/
void TOUCH_Adjust(void)
{
uint px[2], py[2];
float xFactor, yFactor;
/* 定位取點(diǎn) */
#ifdef USE_TOUCH_ADJUST
TOUCH_ReadAdj(px, py);
#else
/* 將(10,10)和(TFT_XMAX - 10, TFT_YMAX - 10) 的坐標(biāo)填上就不用每次開機(jī)都要校正了*/
px[0] = 3664;
py[0] = 3696;
px[1] = 336;
py[1] = 528;
#endif
#if LCD_TOUCH_TYPE == 0
/* 求出比例因數(shù) */
xFactor = (float)LCD_ADJx / (px[1] - px[0]);
yFactor = (float)LCD_ADJy / (py[1] - px[0]);
/* 求出偏移量 */
TouchAdj.xOffset = (int)LCD_ADJX_MAX - ((float)px[1] * xFactor + 0.5);
TouchAdj.yOffset = (int)LCD_ADJY_MAX - ((float)py[1] * yFactor + 0.5);
/* 將比例因數(shù)進(jìn)行數(shù)據(jù)處理,然后保存 */
TouchAdj.xFactor = xFactor * LCD_ADJ_MUX + 0.5;
TouchAdj.yFactor = yFactor * LCD_ADJ_MUX + 0.5;
#endif
#if LCD_TOUCH_TYPE == 1
/* 求出比例因數(shù) */
yFactor = (float)LCD_ADJY_MAX / (px[0] - px[1]);
xFactor = (float)LCD_ADJX_MAX / (py[0] - py[1]);
/* 將比例因數(shù)進(jìn)行數(shù)據(jù)處理,然后保存 */
TouchAdj.xFactor = xFactor * LCD_ADJ_MUX + 0.5;
TouchAdj.yFactor = yFactor * LCD_ADJ_MUX + 0.5;
/* 求出偏移量 */
TouchAdj.xOffset = (int)LCD_ADJX_MAX - ((float)py[0] * xFactor + 0.5);
TouchAdj.yOffset = (int)LCD_ADJY_MAX - ((float)px[0] * yFactor + 0.5);
#endif
}
復(fù)制代碼
作者:
飛奔的hj
時(shí)間:
2020-5-24 21:43
請問這個(gè)驅(qū)動怎么使用呀
作者:
jemery1030
時(shí)間:
2020-10-1 16:45
缺庫函數(shù),可以補(bǔ)足嗎?感謝你。
作者:
jovew
時(shí)間:
2021-1-7 16:21
可以補(bǔ)足所有的文件嗎?
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
青青青草视频在线观看
|
国产中文字幕av
|
国产精品一级二级
|
91精品视频在线
|
成人做爰9片免费视频
|
亚洲欧美一区二区三区在线
|
av在线播放不卡
|
色播亚洲
|
国产三级一区
|
午夜在线
|
成人一级片
|
国产欧美一区二区精品性色超碰
|
欧美一级淫片免费视频黄
|
日韩欧美中文在线
|
欧美一级免费
|
在线观看免费av网站
|
69精品视频
|
日日爱视频
|
一级免费毛片
|
日韩毛片网站
|
日韩亚洲视频
|
日韩av在线一区二区
|
三级在线播放
|
波多野结衣久久
|
久久日av
|
午夜国产在线观看
|
亚洲视频在线免费观看
|
国产三级在线看
|
亚洲综合精品
|
亚洲动漫精品
|
亚洲精品播放
|
日本理论片午伦夜理片在线观看
|
免费黄色小说网站
|
久久久久亚洲精品
|
自由成熟xxxx色视频
|
www.九九热
|
国产精品伦一区二区三级视频
|
国产a久久麻豆入口
|
久久r
|
九九天堂
|
黄色一节片
|