MCU 通過 SPI(Serial Peripheral Interface Bus)接口,首先發送命令 0XD0,然後讀取 X座標的 2個位元組(2 Bytes)資料,然後再發送命令 0X90,再讀取 Y座標的 2個位元組(2 Bytes)資料。 MCU 便有了 XY 的座標值,可以知道在屏的那位置接觸。由於精度設定在 ADC12 位精度,所有讀出的 2個位元組中,只有高 12位元是有效資料。
XPT2046 電阻式觸摸屏的 Control Bit 資料 |
Microchip PIC24FJ64GA008 XPT2046 觸摸屏 Read_ADC 程式定義:
int xpt2046_Read_ADC(char data){
char i;
int res = 0;
// XPT2046 Total Conversion Complete within 1.6ms
T_CS_LAT_BIT = 0; // Chip Select Enable CS = 0
delayus(1); // CS
Enable Aftre Min 100ns Start Bit
for (i=0; i<8 i="" span="">8>
if ((data & 0x80)
== 0) {T_MOSI_LAT_BIT=0;}
else
{T_MOSI_LAT_BIT=1;}
delayus(1);
T_SCK_LAT_BIT = 1; // Rising Edge Min 200ns Data Valid
delayus(1);
T_SCK_LAT_BIT = 0; // Falling Edge Min 200ns
data <<=1;
}
T_MOSI_LAT_BIT = 0; // Data Output SDO = 0
// Clock 12 bit Read Data from XPT2046
for (i=0; i<12 i="" span="">12>
T_SCK_LAT_BIT = 0; // Falling Edge Min 200ns
delayus(1);
T_SCK_LAT_BIT = 1; // Rising Edge Min 200ns Data Valid
delayus(1);
res <<=1;
if (T_MISO_PORT_BIT !=
0){ res |= 0x0001;}
else {res &=
0xFFFE;}
}
T_SCK_LAT_BIT = 0; // Falling Edge Min 200ns
T_CS_LAT_BIT = 1; // Chip
Select Disable CS = 1
return res;
}
|
由於電阻式觸摸屏的品質和讀數問題,在開始時首先要將觸摸屏校準(Calibration),方法是通過觸摸液晶屏的4個角,採集 X 和 Y 座標的 12位值,再通過數學等比公式計算,就可以得到比例值。座標最小值約為 100 左右,而座標最大值約為 1900 左右,並非 12bit 的最大值 4095。
※ 注意:由於電阻式觸摸屏的品質,很可能發現觸摸屏是非線性(nonlinera)比例,那麼便要作多比例調校。
※ 注意:由於電阻式觸摸屏的品質,很可能發現觸摸屏是非線性(nonlinera)比例,那麼便要作多比例調校。
XPT2046 電阻式觸摸屏校準 |
Microchip PIC24FJ64GA008 XPT2046 觸摸屏計算 XY 位置程式定義:
x =
xpt2046_Read_ADC(0xD0);
y =
xpt2046_Read_ADC(0x90);
// Calaculate X Position
x = x/10;
x = ((Ax*x)/100)+Bx;
// Calaculate Y Position
if
(y < 1100 ){
y = y/10;
y = ((Ay*y)/100)+By-5;
} else
if (y > 1750) {
y = y/12;
y =
((Ay*y)/100)+By+43;
} else {
y = y/10;
y =
((Ay*y)/100)+By-15;
}
|
2016年 7月 26日 天氣報告
氣溫:30.2度 @ 20:00
相對濕度:百分之 82%
天氣:微雨
沒有留言:
張貼留言