⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 touch.c

📁 这是我在s3c44b0上移植成功的ucgui源码包
💻 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;
    
    if(_State.Pressed)
{

       ack=0;
    //PC8<-PENIRQ,PC3<-DOUT,PC2->DIN,PC1->CS,PC0->DCLK
       
    	rPDATC&=0x1fc;//clr cs;clr dclk
    	temp=0x80;
    	for(i=0;i<8;i++)
    	{
    		if(command&temp)//mov din,c
    		   rPDATC|=0x04;//setb din
    		else
    		   rPDATC&=0x1fb;//clr  din
    		   rPDATC|=0x01;//setb dclk
    		Delay(3);
    		rPDATC&=0x1fe;//clr dclk
    		Delay(3);
    		temp=temp>>1;
    	}
    	//while((temp=(rPDATG&0x40))==0);
         Delay(1000);
    	rPDATC&=0x1fb;//clr din
    	
    	rPDATC|=0x01;//setb dclk
    	Delay(3);
    	rPDATC&=0x1fe;//clr dclk
    	Delay(3);
         //Uart_Printf("\n");
    	for(i=0;i<7;i++)
    	{
    		rPDATC|=0x01;//setb dclk
                  temp=rPDATC&0x08;
                  Uart_Printf("%",temp);
    		if(temp)
    		ack+=1;
    		ack=ack<<1;
    		Delay(3);      
                  
    		rPDATC&=0x1fe;//clr dclk
    		Delay(3);
    	}
    	rPDATC|=0x01;//setb dclk
         temp=rPDATC&0x08;
    	if(temp)
    	   ack+=1;	
    	Delay(3);	
    	rPDATC&=0x1fe;//clr dclk
    	rPDATC|=0x02;//setb cs
 }      
        return ack;

}




int TOUCH_X_MeasureX(void)
{   
   _State.x=0;
   rPCONC=0xff15;
   rPUPC&=0xfeff;  
   
   while(1)
   {    
    	if((rPDATC&0x100)==0) //PENIRQ电平为低
        {
                _State.Pressed=1;//说明已经按下
		    _State.x=ReadTouch(TOUCH_MSR_X);  
                 _State.Pressed=0;	                
                           break;
	}
	else if ((rPDATC&0x80)!=0)
			_State.Pressed=0;			
	Delay(100);
   }
  
  return(_State.x);
}

int TOUCH_X_MeasureY(void)
{   
   _State.y=0;
   rPCONC=0xff15;
   rPUPC&=0xfeff;  
   
   while(1)
   {    
    	if((rPDATC&0x100)==0)//PENIRQ电平为低
        {
            _State.Pressed=1;//说明已经按下
		    _State.y=ReadTouch(TOUCH_MSR_Y);                   
              _State.Pressed=0;	    
        break;
	}
	else if ((rPDATC&0x80)!=0)
			_State.Pressed=0;			
	Delay(100);
   }
    return(_State.y);

}

void TOUCH_X_ActivateX(void){}
void TOUCH_X_ActivateY(void){}			

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -