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

📄 tchscr.c

📁 北京航空航天大学2006年嵌入式系统课件及试验.适合嵌入式初级学者!
💻 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 GPFCON (*(volatile unsigned *)0x56000050)
//#define GPFUP (*(volatile unsigned *)0x56000058)
#define LCDWIDTH 640
#define LCDHEIGHT 480
int TchScr_Xmin=138,TchScr_Xmax=842,
    TchScr_Ymin=251,TchScr_Ymax=841; 


 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为输入*/	
	//GPFCON=GPFCON&0xf3ff;
	/*GPF5上拉使能*/
	//GPFUP=GPFUP&0xdf;	
	set_gpio_ctrl(ADS7843_PIN_PEN);//功能同上面注释的两句即配置GPF5为输入、GPF5上拉使能
	
}

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

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

	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)*LCDWIDTH/(TchScr_Xmax-TchScr_Xmin);
    	*y=(*y-TchScr_Ymin)*LCDHEIGHT/(TchScr_Ymax-TchScr_Ymin);

	disable_7843();//关闭ADS7843片选


}

⌨️ 快捷键说明

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