📄 touch.c
字号:
#include "..\Target\44b.h"
#include "..\Target\44blib.h"
#define TOUCH_MSR_Y 0x9c//读Y轴坐标命令(参考表14-2的位定义说明)
#define TOUCH_MSR_X 0xdc//读X轴坐标命令
typedef struct {
int Pressed;
int x;
int y;
}TOUCHSTATE;
TOUCHSTATE _State;
int ReadTouch(unsigned char command)//TouchStruct *TouchState)
{
unsigned char temp,i,j,k;
unsigned int ack=0;
//PG7<-PENIRQ,PG6<-BUSY,PG5<-DOUT,PG4->CS,PG3->DCLK,PG2->DIN
rPDATG&=0xe7;//clr cs;clr dclk
temp=0x80;
for(i=0;i<8;i++)
{
if(command&temp)//mov din,c
rPDATG|=0x04;//setb din
else
rPDATG&=0xfb;//clr din
rPDATG|=0x08;//setb dclk
Delay(3);
rPDATG&=0xf7;//clr dclk
Delay(3);
temp=temp>>1;
}
while((temp=(rPDATG&0x40))==0);
rPDATG&=0xdf;//clr din
rPDATG|=0x08;//setb dclk
Delay(3);
rPDATG&=0xf7;//clr dclk
Delay(3);
for(i=0;i<16;i++)
{
rPDATG|=0x08;//setb dclk
if(temp=rPDATG&0x20)
ack+=1;
ack=ack<<1;
Delay(3);
rPDATG&=0xf7;//clr dclk
Delay(3);
}
ack=ack>>5;
rPDATG|=0x10;//setb cs
return ack;
}
void Test_Touch(void)
{
_State.Pressed=0;
_State.x=0;
_State.y=0;
rPCONG=0x015f;//init. I/O
rPUPG &=0x80;
ReadTouch(0xdc);
while(1)
{
if(((rPDATG&0x80)==0)&&(_State.Pressed==0)) //PENIRQ电平为低
{
_State.Pressed=1;//说明已经按下
_State.x=ReadTouch(TOUCH_MSR_X);
_State.y=ReadTouch(TOUCH_MSR_Y);
Uart_Printf("\nTouch at the point ( %4d, %4d )",_State.x,_State.y);
}
else if (((rPDATG&0x80)!=0)&&(_State.Pressed==1))
_State.Pressed=0;
Delay(100);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -