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

📄 ads7843.c

📁 ADS7843的驱动程序
💻 C
字号:
#include <avr/io.h>
#include <avr/delay.h>

#define TOUCH_DCLK    0
#define TOUCH_CS      1
#define TOUCH_DIN     2
#define TOUCH_BUSY    3
#define TOUCH_DOUT    4
#define TOUCH_PENIRQ  5

#define TOUCH_DDR    DDRE
#define TOUCH_PORT   PORTE
#define TOUCH_PIN    PINE

unsigned long Xaddress,Yaddress;
unsigned char Xstring[8];
unsigned char Ystring[8];

unsigned char touch_irq_flag;    

int  main(void)
{  
   
    TouchInit();
    Int5Init();
   

    GUI_Initialize();				// 初始化LCM 

   
	
	touch_irq_flag=0;
		
	
	while(1)
	{  
	  
	
	   if(touch_irq_flag==1)
	   {	  
	     //Xaddress=TouchReadAddress(0xdc); //注意:在中断置标志位退出后,要第一时间读TOUCH,ADDRESS
         //Yaddress=TouchReadAddress(0x9c); //在调用其他程序后,在读就会出错。可能是BUG,在中断中读也有同样的问题
         //  change touch point to lcd point
		Xaddress=(230-TouchReadAddress(0xdc))*320/210;
        Yaddress=(230-TouchReadAddress(0x9c))*240/210;	
        if(Xaddress>=320) Xaddress=319;
        if(Yaddress>=240) Yaddress=239;	
		
		
	
		
		touch_irq_flag=0;
		sei();
	   }
	}
    return(0);
}

SIGNAL(SIG_INTERRUPT5)
{      
  touch_irq_flag=1;
  cli();    
}

void Int5Init(void)
{
   DDRE&= (~(1<<INT5));
   PORTE&=(~(1<<INT5));
//   GICR=0x80;  //低电平中断
  EIMSK|=(1<<INT5);
   sei();
}



void TouchInit(void)
{
  TOUCH_DDR|=(1<<TOUCH_DCLK)|(1<<TOUCH_CS)|(1<<TOUCH_DIN);
  TOUCH_DDR&=(~((1<<TOUCH_DOUT)|(1<<TOUCH_BUSY)|(1<<TOUCH_PENIRQ)));
  
  TOUCH_PORT|=(1<<TOUCH_DCLK)|(1<<TOUCH_CS)|(1<<TOUCH_DIN);
}  


unsigned long  TouchReadAddress(unsigned char command)
{	
	unsigned char i,address=0;
	unsigned char temp=0x80;
	
	TOUCH_PORT&=(~(1<<TOUCH_CS));	
	TOUCH_PORT&=(~(1<<TOUCH_DCLK));
	
	for (i=0;i<8;i++)          
    {
		 TOUCH_PORT&=(~(1<<TOUCH_DCLK));
		 _delay_loop_2(2); 
		 
		 if ((command&temp))  TOUCH_PORT|=(1<<TOUCH_DIN);  //SDIO=1;
		 else TOUCH_PORT&=(~(1<<TOUCH_DIN));  //SDIO=0; 
		 
		_delay_loop_2(2); 
		 TOUCH_PORT|=(1<<TOUCH_DCLK);  //SCLK=1;
		 _delay_loop_2(2); 
		 
		 temp>>=1;
	}	 
	
	TOUCH_PORT&=(~(1<<TOUCH_DCLK));
	
	
    while((TOUCH_PIN&(1<<TOUCH_BUSY))==0);
	
	 TOUCH_PORT&=(~(1<<TOUCH_DIN));
	 _delay_loop_2(2); 
		 TOUCH_PORT|=(1<<TOUCH_DCLK);  //SCLK=1;
		 _delay_loop_2(2); 
	 TOUCH_PORT&=(~(1<<TOUCH_DCLK));
	  _delay_loop_2(2); 
	  
	  
	 
	for (i=0;i<7;i++)   
	{		 
		 TOUCH_PORT|=(1<<TOUCH_DCLK);  //SCLK=1;
		 _delay_loop_2(2);
		 if (TOUCH_PIN&(1<<TOUCH_DOUT))  address+=1; 
		 
		 address<<=1;
		 _delay_loop_2(2); 
		  TOUCH_PORT&=(~(1<<TOUCH_DCLK));
		 _delay_loop_2(2); 
		 
	}	
	
	TOUCH_PORT|=(1<<TOUCH_DCLK);  //SCLK=1;
		 _delay_loop_2(2);
		 if (TOUCH_PIN&(1<<TOUCH_DOUT))  address+=1;  
		 _delay_loop_2(2);  
     TOUCH_PORT&=(~(1<<TOUCH_DCLK));
		
	
	  TOUCH_PORT|=(1<<TOUCH_CS);
	  
	  return(address);

}
	   

⌨️ 快捷键说明

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