📄 tp.c
字号:
//描述:扫描读入触摸屏上的输入点坐标
//创建日期:2007.8.7
//创建人:cqy
#include "44b.h"
#include "44blib.h"
#include<stdio.h>
#include<string.h>
#define TOUCH_MSR_Y 0x9c//读Y轴坐标命令
#define TOUCH_MSR_X 0xdc//读X轴坐标命令
typedef struct {
int Pressed;
int x;
int y;
}TOUCHSTATE;
TOUCHSTATE _State;
void Beep(unsigned int time)
{
unsigned int save_C,save_PC,save_DC;
save_C=rPCONC;
save_PC=rPUPC;
save_DC=rPDATC;
rPDATC|=0x1;
Delay(time);
rPDATC&=~(0x1);
rPCONC=save_C;
rPUPC=save_PC;
rPDATC=save_DC;
}
int ReadTouch(unsigned char command)//TouchStruct *TouchState)
{
unsigned char temp,i,ack,j,k;
ack=0; //EXINT2(PG2)<-PENIRQ,PC3->CS,PF8->DCLK,PF7<-DOUT,PF6<-BUSY,PF5->DIN
rPDATF&=0x0ff;//clr dclk;PF8=0
rPDATC&=0xfff7;//clr cs;PC3=0;;
temp=0x80;
for(i=0;i<8;i++)
{
if(command&temp)//mov din,c
rPDATF|=0x20;//setb din;PF5=0
else
rPDATF&=0x1df;//clr din;PF5=1
rPDATF|=0x100;//setb dclk;PF8=1
Delay(3);
rPDATF&=0x0ff;//clr dclk
Delay(3);
temp=temp>>1;
}
while((temp=(rPDATF&0x40))==0);//判断BUSY位;PF6
rPDATF&=0x1df;//clr din
rPDATF|=0x100;//setb dclk
Delay(3);
rPDATF&=0xff;//clr dclk
Delay(3);
for(i=0;i<7;i++)
{
rPDATF|=0x100;//setb dclk
if(temp=rPDATF&0x80)//当OUT==1时
ack+=1;
ack=ack<<1;
Delay(3);
rPDATF&=0xff;//clr dclk
Delay(3);
}
rPDATF|=0x100;//setb dclk
if(temp=rPDATF&0x80)
ack+=1;
Delay(3);
rPDATF&=0xff;//clr dclk
rPDATC|=0x8;//setb cs
return ack;
}
void Test_Touch(void)
{
unsigned int save_C,save_F,save_G,save_PC,save_PF,save_PG;
save_C=rPCONC;
save_F=rPCONF;
save_G=rPCONG;
save_PC=rPUPC;
save_PF=rPUPF;
save_PG=rPUPG;
_State.Pressed=0;
_State.x=0;
_State.y=0;
//init.I/O
//F8 F7 F6 F5 F4 F3 F2 F1 F0
//DCLK DOUT BUSY DIN
//001 000 000 001 00 00 00 00 00
rPCONF=0x80400;// DCLK SET OUT;DOUT SET IN;BUSY SET IN;DIN SET OUT
rPUPF=0x1e0;
//rPCONC|=0x41;//SET CS OUT AND BELL OUT
rPCONC=0x0f05ff41;
rPUPC=0x8;//PC3
//rPDATC=0xfffe;
rPCONG=0x00;//SET PENIRQ INPUT
rPUPG=0x04;//PENIRQ pull up disable
ReadTouch(0xdc);
while(1)
{
if(((rPDATG&0x4)==0)&&(_State.Pressed==0)) //PENIRQ电平为低
{
_State.Pressed=1;//说明已经按下
_State.x=ReadTouch(TOUCH_MSR_X);
_State.y=ReadTouch(TOUCH_MSR_Y);
printf("\nTouch at the point ( %4d, %4d )",_State.x,_State.y);
Beep(1000);
}
else if(((rPDATG&0x4)!=0)&&(_State.Pressed==1))
_State.Pressed=0;
Delay(100);
}
rPCONC=save_C;
rPCONF=save_F;
rPCONG=save_G;
rPUPC=save_PC;
rPUPF=save_PF;
rPUPG=save_PG;
}
int main(void)
{
printf("Please touch the Touchscreen:");
Test_Touch( );
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -