⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tc_ad7843_v1_00.c

📁 LPC2300 MP3 Player code
💻 C
字号:
#include "app_config.h"

#define TC_SPI_WIDTH	15 //use 15 clock per 1 SPI cycle
#define TC_CR_Y			0x90 << (TC_SPI_WIDTH - 8) //DFR = 0, PD = 00
#define TC_CR_X			0xD0 << (TC_SPI_WIDTH - 8) //DFR = 0, PD = 00

volatile unsigned short tc_x,tc_y;
extern void delay_1ms(unsigned int n);

unsigned short TCGetX(void) //call this after TCRead() to get X value
{
	return (tc_x);
}

unsigned short TCGetY(void) //call this after TCRead() to get Y value
{
	return (tc_y);
}

unsigned char TCIsPenOn(void) //TC_PEN_PIN is 0 when the screen is pressed
{	
	if (!Rdb(TC_PEN_PINP,TC_PEN_PIN))
		return (1); 
	return (0);
}

unsigned short spi_buf[16];

void TCInit(void)
{
	Setb(TC_CS_PRTS,TC_CS_PIN);
	TCRead(); //Wake it up
}

void TCRead(void) //read analog voltage
{
	spi_buf[0] = TC_CR_Y; //read Y first
	spi_buf[1] = TC_CR_X; //then read X
	spi_buf[2] = 0; //3rd word is not used

	SPIMasterEnable(TC_SPI,SPI_RIS_FIRST,SPI_SAM_FIRST,4,0,0,TC_SPI_WIDTH - 1); 
	//initiate SPI, depend on your controller
	//TC_SPI -> SPI device
	//SPI_RIS_FIRST -> rising edge first (CPOL)
	//SPI_SAM_FIRST -> sampling before setting (CPHASE)
	//3 -> clock divider
	//0 -> MSB first (LPC23XX have only this mode)
	//0 -> no interrupt mask set
	//TC_SPI_WIDTH - 1 -> data size = TC_SPI_WIDTH
																			 
	Orb(TC_CS_DPRT,TC_CS_PIN);	//set TC_CS to be output port
	Clrb(TC_CS_PRTC,TC_CS_PIN); //clear TC_CS to 0

	SPIMasterTransfer(TC_SPI,3,spi_buf); //transfer data for 3 cycles

	Setb(TC_CS_PRTS,TC_CS_PIN); //set TC_CS to 1

	SPIMasterDisable(TC_SPI); //disable interrupt

	tc_y = (spi_buf[0] << 6) | (spi_buf[1] >> 9); //arrange received data
	tc_x = ((spi_buf[1] & 0x3F) << 6) | (spi_buf[2] >> 9); //arrange received data
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -