📄 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,ack; ack=0; ///PG7<-PENIRQ,PG6<-BUSY,PG5<-DOUT,PG4->CS,PG3->DCLK,PG2->DIN //PC14<-DCLK, PC11<-DOUT, PC10<-BUSY, PC9<-DIN, PC8<-CS, EXINT7<-PENIRQ rPDATC &=0xbeff;//rPDATG &=0xe7; //clr cs;clr dclk temp=0x80; for(i=0;i<8;i++) { if(command&temp)//mov din,c rPDATC |=0x0200;//rPDATG|=0x04;//setb din ,PC9=1 //setb din else rPDATC &=0xfdff;//rPDATG &=0xfb;//clr din ,PC9=0 //clr din rPDATC |=0x4000;//rPDATG |=0x08; //setb dclk //setb dclk Delay(3); rPDATC &=0xbfff;//rPDATG &=0xf7; //clr dclk ,PC14=0 //clr dclk Delay(3); temp=temp>>1; } temp=(unsigned char)((rPDATC&0x0400)>>8); while(temp==0) //while((temp=(rPDATG&0x40))==0); // 当busy(pc10)=0 循环 temp=(unsigned char)((rPDATC&0x0400)>>8); rPDATC &=0xf7ff;//rPDATG &=0xdf; //clr dout ,PC11=0 //clr din rPDATC |=0x4000;//rPDATG |=0x08; //setb dclk ,PC14=1 //setb dclk Delay(3); rPDATC &=0xbfff;//rPDATG &=0xf7; //clr dclk ,PC14=0 //clr dclk Delay(3); for(i=0;i<7;i++) { rPDATC |=0x4000;//rPDATG |=0x08; //setb dclk ,PC14=1 //setb dclk temp=(unsigned char)((rPDATC&0x0800)>>8); if(temp) //if(temp=rPDATG&0x20) //当dout(pc11)=1 ack++; ack=ack<<1; Delay(3); rPDATC &=0xbfff;//rPDATG &=0xf7; //clr dclk ,PC14=0 //clr dclk Delay(3); } rPDATC |=0x4000; // rPDATG |=0x08;//setb dclk ,PC14=1 temp=(unsigned char)((rPDATC&0x0800)>>8); if(temp) //if(temp=rPDATG&0x20) ack++; Delay(3); rPDATC &=0xbfff; //rPDATG&=0xf7;//clr dclk rPDATC |=0x0100; //rPDATG|=0x10;//setb cs return ack;}void Test_Touch(void){ unsigned int save_C,save_G,save_PC,save_PG; save_C=rPCONC; save_G=rPCONG; save_PC=rPUPC; save_PG=rPUPG; Uart_Printf("[Touch Screen Panel test!\n"); Uart_Printf(" 在计算机上,按任意键退出测试...\n"); Uart_Printf("点击触摸屏,显示点击的位置坐标。\n"); _State.Pressed=0; _State.x=0; _State.y=0; //rPCONG=0x015f;//init. I/O //rPUPG &=0x80; rPCONC =0x1f05ff55; //PC14,PC8,PC9为输出,PC10,PC11为输入 rPUPC =0x00ff; rPCONG =0x00ff; //PG7 设为输入 rPUPG =0x80; //PG7 the pull up resistor is disabled ReadTouch(0xdc); while(!Uart_GetKey()) { if(((rPDATG&0x80)==0)&&(_State.Pressed==0)) //PENIRQ电平为低 PG7=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); } rPCONC=save_C; rPCONG=save_G; rPUPC=save_PC; rPUPG=save_PG;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -