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

📄 touch_drv.c

📁 PLL的资料文档,包括资料
💻 C
字号:
/*C**************************************************************************
* NAME:         touch_drv.c
*----------------------------------------------------------------------------
* Copyright (c) 2006 Atmel.
*----------------------------------------------------------------------------
* RELEASE:      C51 Sample      
* REVISION:     1.00     
*----------------------------------------------------------------------------
*
*****************************************************************************/
#include "system\reg51.h"
#include "system\compiler.h"
#include "system\config.h"
#include "Driver\io_def.h"
#include "Driver\touch_drv.h"

/*F**************************************************************************
* NAME: Touch_PositionXY
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 从Touch中读取XY Position数据
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
bit Touch_PositionXY (void)
{

	Touch_Write (TOUCH_REQUEST, XY_REG);
	if(!(Touch_Wait())) {Touch_stop();return(0);}
	if(!(Touch_Read())) {Touch_stop();return(0);}
	TouchPad[2] = TouchPad[0]; /* TouchPad[2] is X position value */
	TouchPad[3] = TouchPad[1]; /* TouchPad[3] is y position value */
	return(1);

}

/*F**************************************************************************
* NAME: Touch_PositionA
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 从Touch中读取Angol Position数据
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
Byte Touch_PositionA (void)
{
	Touch_Write (TOUCH_REQUEST, ANGLE_REG);
	if(!(Touch_Wait())) {Touch_stop();return(0);}
	if(!(Touch_Read())) {Touch_stop();return(0);}
	return(TouchPad[1]);
}

/*F**************************************************************************
* NAME: Touch_Read
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 从Touch pad中读取数据操作
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
bit Touch_Read (void)
{
	Byte bTemp = 0x00;

	Touch_start();
	bTemp = Touch_scanByteLSB(4);	/* scan start(1),type(101) */
	if(	bTemp != 0x05) return(0);
	bTemp =  Touch_scanByteLSB(8);	/* scan ID(0010),register(00xx) */
	TouchPad[0] =  Touch_scanByteLSB(8);
	TouchPad[1] =  Touch_scanByteLSB(8);
	bTemp = Touch_scanByteLSB(4);
	if(	bTemp != 0x01) return(0);
	Touch_stop();
	return(1);
}

/*F**************************************************************************
* NAME: Touch_Write
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 向eTK0101的指定Register发送读数据请求
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
bit Touch_Write (Byte PID, Byte bRegister)
{
	 Touch_start();
	 Touch_getMSB(PID);
	 Touch_getMSB(bRegister);
	 Touch_getMSB(0x00);
	 Touch_getMSB(0x01);
	 Touch_stop();
	 return(1);
}

/*F**************************************************************************
* NAME: Touch_scanByteMSB
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
Byte Touch_scanByteLSB (Byte bBit)
{
	Byte bCount = 0x00,i;
	Byte bByte = 0x00,temp;
	//Byte i;
	for (i=0; i<bBit;)	{
		while(!TOUCH_SCK && bCount<20) {	/* If the SCK is High, Waiting */
			bCount++;
			}
		while(TOUCH_SCK){	/* If the SCK is Low, Sen the data */
			if (TOUCH_SDI) {
				temp = 0x01;
   				temp <<= i;
       			bByte |= temp;
				}
			}
		bCount =0;i++;
		}
	return(bByte);
}

/*F**************************************************************************
* NAME: TouchPad_getLSB
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void Touch_getMSB (Byte bByte)
{
	Byte bCount = 0x00,i;

	for (i=0; i<8;)	{
		while(!TOUCH_SCK){	/* If the SCK is Low, Sen the data, To waiting */
			if (bByte & 0x80) TOUCH_SDI = High;
        		else TOUCH_SDI = Low;
				}
		while(TOUCH_SCK && bCount<20){	/* If the SCK is High, Waiting */
			bCount++;
			}
		bByte <<= 1; bCount =0;	i++;
		}
}

/*F**************************************************************************
* NAME: TouchPad_start
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void Touch_start (void)
{
	TOUCH_SDI = High;
	TOUCH_SDO = High;
	TOUCH_SCK = High;
	TOUCH_SS = Low;
}

/*F**************************************************************************
* NAME: TouchPad_stop
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void Touch_stop (void)
{
	TOUCH_SS = High;
	TOUCH_SDI = High;
	TOUCH_SDO = High;
	TOUCH_SCK = High;
}

/*F**************************************************************************
* NAME: Touch_Wait
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
bit Touch_Wait (void)
{
	Byte bCount;

	for (bCount=0; TOUCH_SCK && bCount < 6; bCount++) {	/* wait 150uS */
		DelayX25us(1);
		}
	if(bCount > 6) return(0); /* waiting time Out */
		else  return(1);
}



⌨️ 快捷键说明

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