#ifndef _BSP_NS2009
#define _BSP_NS2009
#define NS2009_ADDR 0x48
#define NS2009_ADDR_READ 0x91
#define NS2009_ADDR_WRITE 0x90
#define NS2009_LOW_POWER_READ_X 0xc0
#define NS2009_LOW_POWER_READ_Y 0xd0
#define NS2009_LOW_POWER_READ_Z1 0xe0
#define NS2009_LOW_POWER_READ_Z2 0xf0
#define SCREEN_X_PIXEL 240
#define SCREEN_Y_PIXEL 320
unsigned char bsp_ns2009_init(void);
unsigned int ns2009_read(const unsigned char _cmd);
unsigned int bsp_ns2009_getPress(void);
unsigned int bsp_ns2009_getPos(unsigned int *_pos);
#endif
#include "bsp_ns2009.h"
/*
**********************************************************************
* @fun :bsp_ns2009_init
* @brief :
* @param :
* @return :None
* @remark :
**********************************************************************
*/
unsigned char bsp_ns2009_init(void)
{
bsp_i2c_tp_init();
}
/*
**********************************************************************
* @fun :ns2009_read
* @brief :读取ns2009数据
* @param :
* @return :None
* @remark :
**********************************************************************
*/
unsigned int ns2009_read(const unsigned char _cmd)
{
unsigned int tp_adc = 0;
bsp_i2c_tp_start();
bsp_i2c_tp_sendByte(NS2009_ADDR_WRITE);
bsp_i2c_tp_waitAck();
bsp_i2c_tp_sendByte(_cmd);
bsp_i2c_tp_waitAck();
bsp_i2c_tp_stop();
bsp_i2c_tp_start();
bsp_i2c_tp_sendByte(NS2009_ADDR_READ);
bsp_i2c_tp_waitAck();
tp_adc = bsp_i2c_tp_readByte();
bsp_i2c_tp_ack();
tp_adc <<= 8;
tp_adc |= bsp_i2c_tp_readByte();
bsp_i2c_tp_nack();
bsp_i2c_tp_stop();
tp_adc >>= 4;
return tp_adc;
}
/*
**********************************************************************
* @fun :ns2009_getPress
* @brief :读取ns2009压力数据
* @param :
* @return :None
* @remark :
**********************************************************************
*/
unsigned int bsp_ns2009_getPress(void)
{
return ns2009_read(NS2009_LOW_POWER_READ_Z1);
}
/*
**********************************************************************
* @fun :ns2009_getPos
* @brief :获取ns2009坐标数据
* @param :
* @return :None
* @remark :
**********************************************************************
*/
unsigned int bsp_ns2009_getPos(unsigned int *_pos)
{
unsigned int x=0, y=0, z=0;
z = bsp_ns2009_getPress();
if ((z > 70) && (z < 2000))
{
x = ns2009_read(NS2009_LOW_POWER_READ_X);
y = ns2009_read(NS2009_LOW_POWER_READ_Y);
*(_pos+0) = x * SCREEN_X_PIXEL / 4096; //4096 = 2 ^ 12
*(_pos+1) = y * SCREEN_Y_PIXEL / 4096;
}
else
{
*(_pos+0) = 0;
*(_pos+1) = 0;
}
return z;
}
联系客服