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

📄 lpc_lib_touch.c

📁 使用embest IDE开发工具开发的基于LPC2294 的触摸屏开发
💻 C
字号:
/*
**********************************************************************************************
*
*     		  Embest Info&Tech Co., Ltd.  All rights reserved.
*                   		  www.embedinfo.com
*			
*file:     		lpc_lib_LCD.c 
*author:   		z.x.q. embest 
*establish: 	2006.xx.xx
*modify:		xx
*notes:			xx
**********************************************************************************************
*/

/*
**********************************************************************************************
*                                       include files
**********************************************************************************************
*/
//#include	"..\..\com\lpc_lib_keyboard\lpc_lib_keyboard.h" 
#include	"..\..\com\lpc_lib_touch\lpc_lib_touch.h"

/*
**********************************************************************************************
*                               extern function/variable declare
**********************************************************************************************
*/
extern irq_eint0(void);
void irq_eint0_svr(void);
/*
**********************************************************************************************
*                                  global variable define 
**********************************************************************************************
*/

INT8U X,Y;                         //X:读到的X轴坐标值;Y:读到的Y轴坐标值
INT8U  touch_data[2];              //读到的触摸点的坐标touch_data[2]={X,Y}

/*
********************************************************************
* name  :    touch_init
* func  :    触摸屏的初始化,设置7843的各个端口,除了SPI口
* para  :    none
* ret   :    none
* modify:
* comment:
********************************************************************
*/
void touch_init()
{
 INT32U i;
 
 //设7843的BUSY,CS,IO1
 i=PINSEL1;
 i&=(~_7843_BUSY_CS_IO1_MASK);
 i |= _7843_BUSY_CS_IO1;
 PINSEL1 = i;
 
 //cs->p0.27,io1->p0.18 为输出口,
 IODIR0|=0x08040000;
 
 //busy->p0.28为输入口
 IODIR0&=0xefffffff;
/*                             //试试这个
 INT32U i;
    IODIR0&=0xFFFEFFFF;			//before set P0.16pin to eint0,must set the pin sate
	PINSEL1&=0xFFFFFFFC;           
	 	
	i=PINSEL1;       			//select eint0 pin
	i &=0xFFFFFFFC;             //后两位清零
	i |=0x00000001;             //最后一位置1
	PINSEL1=i;
*/	
 //这0.16为输入口
 IODIR0&=0xFFFEFFFF;                        //去掉这句试试
 
 //P0.16为GPIO口
 i=PINSEL1;
 i&=(~P0_16_GPIO_MASK);
 i |=P0_16_GPIO;
 PINSEL1 = i;
 
 //P0.16为EINT0口
 i=PINSEL1;
 i&=(~P0_16_EINT0_MASK);
 i |=P0_16_EINT0;
 PINSEL1 = i;
   
 io1_set(1);
 
 cs_set(0);

}
/*
********************************************************************
* name  :    touch_init
* func  :    触摸屏的初始化,设置7843的各个端口,除了SPI口
* para  :    none
* ret   :    none
* modify:
* comment:
********************************************************************
*/
void io1_set(INT8U on_off)
{
 INT8U i;
 if(on_off)
 {
  //P0.18
  //set IO1_7843=1
  i=IOSET0;
  i|=(0x01<<18);
  IOSET0=i;
 }
 else
 {
  //P0.18
  //set IO1_7843=0
  i=IOCLR0;
  i|=(0x01<<18);
  IOCLR0=i;
 }
}

/*
********************************************************************
* name  :    touch_init
* func  :    触摸屏的初始化,设置7843的各个端口,除了SPI口
* para  :    none
* ret   :    none
* modify:
* comment:
********************************************************************
*/
void cs_set(INT8U on_off)
{
 INT8U i;
 if(on_off)
 {
  //P0.27
  //set cs_7843=1
  i=IOSET0;
  i|=(0x01<<27);
  IOSET0=i;
 }
 else
 {
  //P0.27
  //set cs_7843=0
  i=IOCLR0;
  i|=(0x01<<27);
  IOCLR0=i;
 }
}
/*
**********************************************************************************************
* name:		init_ext
* func:		initialize EINT0
* para:		none
* ret:		none
* modify:
* comment:		
**********************************************************************************************
*/	

void init_ext(void)
{  
    //调试时可设置EXTMODE =0;电平触发;EXTPOLAR=0;低电平有效
   
//    EXTMODE =1;                 //选择EINT0为边沿触发模式
//    EXTPOLAR=1;                 //设置EINT0的中断极性为上升沿触发
    
   //打开EINT0中断(设置中断向量控制器,即使用向量IRQ)   
 
    VICIntSelect=0x00000000;    //将所有中断分配为IRQ中断
    VICVectCntl0=0x2E;          //设置EINT0为向量IRQ中断,并使能,且优先级最高  
    VICVectAddr0=(INT32U)irq_eint0;//设置EINT0的向量地址
    EXTINT   =1;                //中断重新使能前,清除eint0的标志位
    VICIntEnable=1<<14;         //使能EINT0中断请求

}

/*
**********************************************************************************************
* name:		init_ext
* func:		initialize EINT0
* para:		none
* ret:		none
* modify:
* comment:		
**********************************************************************************************
*/	




void irq_eint0_svr(void)

{	
    //关中断,清中断标志
    VICIntEnable=1<<14;         //关中断
    EXTINT   =1;                //中断重新使能前,清除eint0的标志位
    
     //  VICIntEnClr=1<<14;            //使能eint0中断请求
	touch_data[X,Y]=touch_read();   
	while((EXTINT&0x01)!=0)       //wait for einterrupt=1 等待外部中断恢复高电平
	{    
	EXTINT=0x01;                  //clear EXTINT 中断标志位
	}
	VICVectAddr=0;                //向量中断结束 
	

}	
/*
**********************************************************************************************
* name:		init_ext
* func:		initialize EINT0
* para:		none
* ret:		none
* modify:
* comment:		
**********************************************************************************************
*/	

INT8U touch_read()
{
INT8U X=0,Y=0,data[2]={X,Y};
time_dly(10000); //中断后延时以消除抖动,使得采样数据更准确
//spi_init(0, 1, 1);//启动SPI
//while(P0_28__GPIO_028); //如果BUSY信号不好使可以删除不用


time_dly(2);

X=spi_read_7843(0,0x90);//送控制字 10010000 即用差分方式读X坐标 详细请见有关资料
                        //读X轴坐标
                        
                        
//A2:A0用于选择数据输入通道,101选择X坐标测量,001选择Y坐标测量。
// while(BUSY); //如果BUSY信号不好使可以删除不用
time_dly(2);



Y=spi_read_7843(0,0xD0);//送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料
                         //读Y轴坐标
spi_init(0, 1, 1);   //释放SPI

return data[X,Y];

}  


⌨️ 快捷键说明

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