📄 tp.c
字号:
#include"TP_H.H"
/*------------------------------------------------------------------
TP READ USE INT SUB
------------------------------------------------------------------*/
void TP_INIT(void)
{
EA=0;
EX0=1;
// IT0=1;
// IE0=0;
// IP=0x00;
EA=1;
TP_FLAG=1;
}
void tp_cs(bit flag)
{ if(flag==0)
{ P40=0;
P41=1;
P42=0;
}
else
{ P40=1;
P41=1;
P42=1;
}
}
void start(void) //SPI开始
{
TP_DCLK=0;
TP_DIN=0;
tp_cs(0);
delay5us(1);
TP_DOUT=1;
}
void WriteCharTo7843(unsigned char num) //SPI写数据
{
unsigned char count;
for(count=0;count<8;count++)
{ if(num&0x80)
{ TP_DIN=1;
}
else
{ TP_DIN=0;
}
TP_DCLK=1; //xia升沿有效
// delay5us(1);
TP_DCLK=0;
// delay5us(1);
num=num<<1;
}
TP_DIN=0;
TP_DCLK=1;
TP_DCLK=0;
}
uint ReadFromCharFrom7843(void) //SPI 读数据
{
unsigned char count=0;
unsigned int Num=0;
for(count=0;count<12;count++)
{
Num<<=1;
// delay5us(1);
if(TP_DOUT) Num++;
// delay5us(1);
TP_DCLK=1;
TP_DCLK=0;
// delay5us(1);
}
for(count=0;count<3;count++)
{ TP_DCLK=1;
TP_DCLK=0;
}
return(Num);
}
void TP_ZHONGDUAN() interrupt 0 using 3 //TP_INT SUB PROGRAM INTERFACE:P3.2 EX0 REGISTER:03
{
EA=0;
/*
TP_X=0;
TP_Y=0;
delay5us(100); //中断后延时以消除抖动,使得采样数据更准确
start(); //启动SPI
WriteCharTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料
TP_BUSY=1;
while(TP_BUSY);//wait for TP not busy.
TP_Y=ReadFromCharFrom7843(); //读X轴坐标
TP_BUSY=1;
while(TP_BUSY);
tp_cs(1);
start(); //启动SPI
WriteCharTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料
TP_BUSY=1;
while(TP_BUSY);//wait for TP not busy.
TP_X=ReadFromCharFrom7843(); //读Y轴坐标
TP_BUSY=1;
while(TP_BUSY);
tp_cs(1);
*/
TP_FLAG=1;
EA=1;
}
uint *TP_XY_READ(void)
{ uint XY_VALUE[2]={0,0};
if(TP_FLAG);//等待触摸中断
{ EA=0;
TP_FLAG=0;
TP_X=0;
TP_Y=0;
delay5us(100); //中断后延时以消除抖动,使得采样数据更准确
start(); //启动SPI
WriteCharTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料
// TP_BUSY=1;
// while(TP_BUSY);//wait for TP not busy.
TP_Y=ReadFromCharFrom7843(); //读y轴坐标
// TP_BUSY=1;
// while(TP_BUSY);
tp_cs(1);
start(); //启动SPI
WriteCharTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料
// TP_BUSY=1;
// while(TP_BUSY);//wait for TP not busy.
TP_X=ReadFromCharFrom7843(); //读x轴坐标
// TP_BUSY=1;
// while(TP_BUSY);
tp_cs(1);
XY_VALUE[0]=(TP_X-300)/14;
XY_VALUE[1]=(TP_Y-300)/10;
EA=1;
}
return(XY_VALUE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -