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

📄 tchscr.c

📁 这是一个在ADS下编译通过的源码
💻 C
字号:
#include "../inc/drivers.h"
#include "../inc/lib.h"
#include "../inc/gpio.h"
#include "../inc/spi.h"

#include <stdio.h>

#define DPRINTF(...)		//printfNULL

#define ADS7843_PIN_PEN		(GPIO_MODE_IN | GPIO_PULLUP_EN | GPIO_F5)

#define ADS7843_PIN_CS		(GPIO_MODE_OUT | GPIO_PULLUP_DIS | GPIO_G12)
/*the Control Bits in the Control Byte.*/
#define ADS7843_CTRL_START		0x80
#define ADS7843_GET_X			0x50
#define ADS7843_GET_Y			0x10
#define ADS7843_CTRL_12MODE	0x0
#define ADS7843_CTRL_8MODE	0x8
#define ADS7843_CTRL_SER		0x4
#define ADS7843_CTRL_DFR		0x0
#define ADS7843_CTRL_DISPWD	0x3	// Disable power down
#define ADS7843_CTRL_ENPWD	0x0	// enable power down

#define ADS7843_CMD_X	(ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE|ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)
#define ADS7843_CMD_Y	(ADS7843_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE|ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)

#define enable_7843()	write_gpio_bit(ADS7843_PIN_CS, 0)
#define disable_7843()	write_gpio_bit(ADS7843_PIN_CS, 1)

#define ADS7843_SPI_CHANNEL		0

#define LCDWIDTH 	640
#define LCDHEIGHT 	480

int	TchScr_Xmin=135,	TchScr_Xmax=770,
	TchScr_Ymin=185,	TchScr_Ymax=900; 


 void TchScr_init()
{   	
	/*端口G12配成输出、关闭上拉模式*/
	set_gpio_ctrl(ADS7843_PIN_CS);
	/*端口G12输出1,使ADS7843的片选无效*/
	write_gpio_bit(ADS7843_PIN_CS, 1);
	/*配置SPI总线、使用通道0*/
	SPI_initIO(ADS7843_SPI_CHANNEL);
	/*询检模式、使能SCK、主模式、format A、设置波特率*/
	Set_SIO_mode(ADS7843_SPI_CHANNEL, SPCON_SMOD_POLL | 
		SPCON_ENSCK | SPCON_MSTR |SPCON_CPOL_HIGH | 
		SPCON_CPHA_FMTA, 33, 2, NULL, NULL, NULL);
	/*配置GPF5为输入、GPF5上拉使能*/
	set_gpio_ctrl(ADS7843_PIN_PEN);
}

#define CLOCK_DELAY()		do{int i; for(i=0; i<10; i++);}while(0)

/**************************************************************
*功能:采集触摸点的x、y坐标,并进行坐标变换,x、y坐标分
*      别采样四次取平均值,坐标变换公式
*       TchScr_Xmin:触摸屏X轴方向最小值
*		TchScr_Xmax:触摸屏X轴方向最大值
*		TchScr_Ymin:触摸屏Y轴方向最小值
*		TchScr_Ymax:触摸屏Y轴方向最大值
*		LCDWIDTH:lcd宽
*		LCDHEIGHT:lcd高
*参数:*x,*y-输出的x、y坐标
***************************************************************/
void TchScr_GetScrXY(int *x, int *y)
{
	unsigned int temp;
	enable_7843();//使能ADS7843片选
    
	//发送控制命令,详见ADS7843第8页
	SPISend (ADS7843_CMD_X, ADS7843_SPI_CHANNEL);
	//发一个数据0,意在等待8个时钟,同时返回读取的数据
	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	//数据高七位,有效数据存储在temp的低七位
	temp<<=5;
	//发下一次的数据的控制命令,有效数据在高五位
	temp|= (SendReadData(ADS7843_CMD_X, ADS7843_SPI_CHANNEL)>>3);
	//x轴的12位数据
	*x=temp;

	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_X, ADS7843_SPI_CHANNEL) >>3);
	*x+=temp;

	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_X, ADS7843_SPI_CHANNEL)>>3);
	*x+=temp;

	temp=SendReadData(0,ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_Y, ADS7843_SPI_CHANNEL)>>3);
	*x+=temp;
	*x>>=4;		//x=x/4/4;	change to 10bit
	
	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_Y, ADS7843_SPI_CHANNEL) >>3);
	*y=temp;

	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_Y, ADS7843_SPI_CHANNEL) >>3);
	*y+=temp;
	
	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_Y, ADS7843_SPI_CHANNEL) >>3);
	*y+=temp;

	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(0, ADS7843_SPI_CHANNEL)>>3);
	*y+=temp;
	*y>>=4;		//y=y/4/4;

	*x=(*x-TchScr_Xmin) * LCDHEIGHT / (TchScr_Xmax-TchScr_Xmin);
	*y=(*y-TchScr_Ymin) * LCDWIDTH / (TchScr_Ymax-TchScr_Ymin);

	disable_7843();//关闭ADS7843片选

}

⌨️ 快捷键说明

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