触摸屏我的是电阻屏,基本上也可以直接拷STM32的原代码,稍做修改即可
主要完成SPI的初始化,u8 read_once(void)函数,读取数据即可
1.SPI初始化
void SPI1_Init()
{
//GPIO引脚
//spi init
SPI_InitTypeDef1 SPI_InitStructure;
/* SPI1 configuration */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
}
2.Read_once函数
//读取一次X,Y值
//读到的X,Y坐标值必须都大于100
//成功返回1,不成功返回0
//读数限制在100~4000之间.
u8 read_once(void)
{ unsigned int a,b;
TCS_SET(0);
delay_us(5);
SPI_SendByte(CMD_RDY);
delay_us(5);
a=SPI_ReadByte(0);
a=a<<8;
a|=SPI_ReadByte(0);
delay_us(5);
TCS_SET(1);
a>>=3;
Y=a;
delay_us(15);
TCS_SET(0);
delay_us(5);
SPI_SendByte(CMD_RDX);
delay_us(5);
b=SPI_ReadByte(0);
b=b<<8;
b|=SPI_ReadByte(0);
delay_us(5);
b>>=3;
X=b;
TCS_SET(1);
if(X>100&&Y>100&&X<4000&&Y<4000)return 1;//读数成功(范围限制)
else return 0; //读数失败
}
3.触摸屏中断
attachInterrupt(PEN, intcallback, GPIO_MODE_IT_FALLING) ; //触摸屏中断