📄 touchscreendriver.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 + -