?? touch_drv.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 + -