1.看原理图找接口

2.看时序图编写读取数据代码

XPT2046.c代码
#include <REGX52.H>
 //引脚定义
 sbit XPY2046_DIN=P3^4;
 sbit XPY2046_CS=P3^5;
 sbit XPY2046_DCLK=P3^6;
 sbit XPY2046_DOUT=P3^7;
 unsigned int XPT2046_ReadAD(unsigned char Command)
 {
     unsigned char i;
     unsigned int Data=0;
     XPY2046_DCLK=0;            //确保其为低位
     XPY2046_CS=0;              //拉低
     for(i=0;i<8;i++)
     {
         XPY2046_DIN=Command&(0x80>>i);        //给第i位数据
         XPY2046_DCLK=1;                       //上升发送数据
         XPY2046_DCLK=0;                       //下降
     }
     for(i=0;i<16;i++)
     {
         XPY2046_DCLK=1;
         XPY2046_DCLK=0;
         if(XPY2046_DOUT){Data|=(0x8000>>i);}
     }
     XPY2046_CS=1;
     return Data>>8;
 }
 3.根据XPT2046原理图定义命令

S选为1,A2-A0自己选择,MODE选择分辨率第一个例子选1,SER根号DFR选1(单端模式),PD1-PD0选0

测量X+,根据单端模式输入配置图,A2-A0可以为001,也可以为011,以001为例,故命令码为1001 1100即0x9C,以此类推在XPT2046.h下定义一下命令
#define XPT2046_VBAT    0xAC
 #define XPT2046_AUX        0xEC
 #define XPT2046_XP        0x9C    //0xBC
 #define XPT2046_YP        0xDC
4.编写main代码
#include <REGX52.H>
 #include "Delay.h"
 #include "LCD1602.h"
 #include "XPT2046.h"
unsigned int ADValue;
void main(void)
 {
     LCD_Init();
     LCD_ShowString(1,1,"ADJ  NTC  GR");
     while(1)
     {
         ADValue=XPT2046_ReadAD(XPT2046_XP);        //读取AIN0,可调电阻
         LCD_ShowNum(2,1,ADValue,3);                //显示AIN0
         ADValue=XPT2046_ReadAD(XPT2046_YP);        //读取AIN1,热敏电阻
         LCD_ShowNum(2,6,ADValue,3);                //显示AIN1
         ADValue=XPT2046_ReadAD(XPT2046_VBAT);    //读取AIN2,光敏电阻
         LCD_ShowNum(2,11,ADValue,3);            //显示AIN2
         Delay(100);
     }
 }
 5.实现结果
XPT2046效果展示