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

📄 touchscreendriver.c

📁 该压缩包内还有51单片机常用各类外设驱动C程序源码(128*64点阵屏
💻 C
字号:
#include "AT89S52.H"
#include "CONFIG.H"
#include "intrins.H"
#include "CM12864_Driver.H"
#include "CM12864_Disp_Driver.H"
#include "TouchScreenDriver.H"



/*--------------------------
	TouchScreen Result
--------------------------*/
uchar data TS_X;
uchar data TS_Y;

/*-------------------------------------------------
	Push Flag
	注意:
	每次有有效按键发生时会置TRUE
	每次程序响应完按键后应软件清除PEND!!!!
	否则读取的坐标将永远是最后一次的数值
	不会再更新!!!
正确用法:
	if(PEND==TRUE)
	{
		......
		PEND=FALSE;
	}
-------------------------------------------------*/
extern BOOL bdata PEND;
BOOL bdata PEND;

uchar bdata TS_BUF;
sbit TS_BUF_7=TS_BUF^7;




/*------------------------------------
		ADS7843写指令程序
------------------------------------*/
void TouchScreenWrite(uchar ts_cmd)
{
uchar data i;
TS_BUF=ts_cmd;
	for(i=0;i<7;i++)
	{
		TS_DIN=TS_BUF_7;
		_nop_();
		TS_DCLK=1;
		_nop_();
		TS_DCLK=0;
		TS_BUF=_crol_(TS_BUF,1);
	}
TS_DIN=0;
}

/*------------------------------------
		ADS7843读数据程序
------------------------------------*/
uchar TouchScreenRead(void)
{
uchar data i;
	for(i=0;i<7;i++)
	{
		TS_DCLK=1;
		_nop_();
		TS_DCLK=0;
		_nop_();
		TS_BUF_7=TS_DOUT;
		TS_BUF=_crol_(TS_BUF,1);
	}
return TS_BUF;
}

/*------------------------------------
		ADS7843读坐标程序
------------------------------------*/
void TouchScreenConvert(void)
{
TS_CS=1;
TS_DCLK=0;
TS_DIN=0;
TS_CS=0;
TouchScreenWrite(TSC_X);
_nop_();
TS_X=TouchScreenRead();//取X轴坐标
TouchScreenWrite(TSC_Y);
_nop_();
TS_Y=TouchScreenRead();//取Y轴坐标
TS_CS=1;
}

/*------------------------------------
		ADS7843映射坐标程序
		超出范围则返回FALSE
		否则返回TRUE
------------------------------------*/
BOOL TouchScreenTrans(void)
{
if(TS_X>X_MAX||TS_X<X_MIN) return FALSE;
if(TS_Y>Y_MAX||TS_Y<Y_MIN) return FALSE;
TS_X=(float)(X_MAX-TS_X)/(X_MAX-X_MIN)*127;
TS_Y=(float)(Y_MAX-TS_Y)/(Y_MAX-Y_MIN)*63;
return TRUE;
}

/*------------------------------------
	TouchScreen 初始化程序
	使用外部中断1,下降沿触发
------------------------------------*/
void TouchScreenInit(void)
{
IE|=0X84;//EA=1,EX1=1;
IT1=1;//EDGE TRIGGER
PEND=FALSE;
}

void int1() interrupt 2 using 2
{
if(PEND==FALSE)//如果没有按键发生或最近一次按键事件已被处理
{
	TouchScreenConvert();
	if(TouchScreenTrans())
	{
		PEND=TRUE;
	}
	else
	{
		PEND=FALSE;
	}
}
	IE1=0;
}

⌨️ 快捷键说明

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