IC解密HC32F460单片机XPT2046触摸程序
- IC解密#include "xpt2046.h"
- void XPT2046_init(void)
- {
- stc_port_init_t stcPortInit;
- /* configuration structure initialization */
- MEM_ZERO_STRUCT(stcPortInit);
- stcPortInit.enPinMode = Pin_Mode_Out;
- stcPortInit.enExInt = Enable;
- stcPortInit.enPullUp = Enable;
- PORT_Init(XPT2046_PIN_PORT ,XPT2046_CS_PIN , &stcPortInit);
- stcPortInit.enPinMode = Pin_Mode_In;
- PORT_Init(XPT2046_PIN_PORT ,XPT2046_PEN_PIN , &stcPortInit);
- PORT_Unlock();
- M4_PORT->PSPCR = 0x0Bu;
- PORT_Lock();
- XPT2046_CS_Set();
- }
- void send_8way(uint8_t data)
- {
- while (Reset == SPI_GetFlag(SPI_UNIT, SpiFlagSpiIdle))
- {}
- SPI_SendData8(SPI_UNIT,data);
- while (Reset == SPI_GetFlag(SPI_UNIT,SpiFlagReceiveBufferFull))
- {}
- SPI_ReceiveData8(SPI_UNIT);
- }
- uint8_t receiv_8way(void)
- {
- while (Reset == SPI_GetFlag(SPI_UNIT, SpiFlagSpiIdle))
- {}
- SPI_SendData8(SPI_UNIT,0x00);
- while (Reset == SPI_GetFlag(SPI_UNIT,SpiFlagReceiveBufferFull))
- {}
- return SPI_ReceiveData8(SPI_UNIT);
- }
- int cmp(const void *a, const void *b)
- {
- return *(uint16_t *)a - *(uint16_t *)b; //从小到大排序(b-a则是从大到小)。需要与被测类型一致,否则排序乱七八糟
- }
- static const uint8_t count = REPEATED_SAMPLING_TIMES; //采集次数
- u16 x_data[count], y_data[count];
- void XPT2046_Rd_Addata(uint16_t *rxdata,uint16_t *rydata)
- {
- if(PORT_GetBit(XPT2046_PIN_PORT,XPT2046_PEN_PIN)==Reset)//触摸按下了
- {
- Ddl_Delay1ms(30);
- if(PORT_GetBit(XPT2046_PIN_PORT,XPT2046_PEN_PIN)==Reset)
- {
- XPT2046_CS_Clr();
- SPI_SetClockDiv(SPI_UNIT,SpiClkDiv32);
- Ddl_Delay1us(10);
- for (uint8_t i = 0; i < count; i++)
- {
- send_8way(0xd0); //发送命令
- Ddl_Delay1us(8);
- xdata = receiv_8way();
- xdata <<= 8;
- xdata |= receiv_8way();
- xdata >>= 3;
- x_data[i] = xdata & 0xFFF;
- send_8way(0x90);
- Ddl_Delay1us(8);
- ydata = receiv_8way();
- ydata <<= 8;
- ydata |= receiv_8way();
- ydata >>= 3;
- y_data[i] = ydata & 0xFFF;
- Ddl_Delay1us(200);

芯片解密