📄 ads7843.c
字号:
#include "44b.h"
#include "44blib.h"
#include "def.h"
#include "ads7843.h"
int ADC_PHY_X = 0 ;
int ADC_PHY_Y = 0 ;
/****************************************************************************
【功能说明】
****************************************************************************/
void ADS7843_SPI_Start( void )
{
TP_DCLK(0);
TP_CS(1);
TP_DIN(1);
TP_DCLK(1);
TP_CS(0); //芯片允许
}
//***************************************************************************
/****************************************************************************
【功能说明】向ADS7843
****************************************************************************/
void ADS7843_Write ( U8 cmd )
{
U8 buf, i, j ;
TP_DCLK(0);
for( i = 0; i < 8; i++ )
{
buf = (cmd >> (7-i)) & 0x1 ; //MSB在前,LSB在后
TP_DIN(buf); //时钟上升沿锁存DIN
for( j = 0; j < 25; j++ ); //200ns
TP_DCLK(1); //开始发送命令字
for( j = 0; j < 25; j++ ); //200ns
TP_DCLK(0); //时钟脉冲,一共8个
}
}
//***************************************************************************
/****************************************************************************
【功能说明】读取ADS7843的ADC数据
****************************************************************************/
U16 ADS7843_Read ( void )
{
U16 buf = 0 ;
U8 i, j ;
for( i = 0; i < 12; i++ )
{
buf = buf << 1 ;
TP_DCLK(1);
for( j = 0; j < 25; j++ ); //200ns
TP_DCLK(0);
for( j = 0; j < 5; j++ ); //时钟下降沿读取,一共12个,MSB在前,LSB在后
if ( TP_DOUT ) buf = buf + 1 ;
for( j = 0; j < 20; j++ ); //200ns
}
for( i = 0; i < 4; i++ )
{
TP_DCLK(1);
for( j = 0; j < 25; j++ ); //200ns
TP_DCLK(0);
for( j = 0; j < 25; j++ ); //4个没用时钟
}
return( buf ) ;
}
//***************************************************************************
/****************************************************************************
【功能说明】ADS7843触摸屏初始化
****************************************************************************/
void ADS7843_Init( void )
{
rPCONB = rPCONB & (~(3<<4)) ; //GPB4,GPB5 set OUTPUT
rPCONE = rPCONE & (~(3)) & (~(3<<14)) | (1) ; //GPE0 set OUTPUT, GPE7 set INPUT
rPUPE = rPUPE | (1) | (1<<7) ; //pull up resistor is disable
rPCONF = rPCONF & (~(7<<16)) ; //GPF7 set INPUT
rPUPF = rPUPF | (1<<7) ; //pull up resistor is disable
rPCONG = rPCONG & (~(3<<6)) ; //GPG3 set INPUT
rPUPG = rPUPG | ((1<<3)) ; //pull up resistor is disable
}
//***************************************************************************
/****************************************************************************
【功能说明】读取触摸屏X轴方向AD转换值
****************************************************************************/
U16 Read_X( void )
{
U16 x, j ;
for( j = 0; j < 10000; j++ ); //延时一下再响应其请求,消除抖动使得采样更准确
ADS7843_SPI_Start() ;
for( j = 0; j < 5; j++ ); //40ns
//while ( TP_BUSY ) ; //如果BUSY,等待直到转换完毕,这个可以不用
ADS7843_Write( CHX ) ;
for( j = 0; j < 25; j++ ); //200ns
x = ADS7843_Read() ;
TP_CS(1); //芯片禁止
return ( x ) ;
}
//***************************************************************************
/****************************************************************************
【功能说明】读取触摸屏Y轴方向AD转换值
****************************************************************************/
U16 Read_Y( void )
{
U16 y, j ;
for( j = 0; j < 10000; j++ ); //延时一下再响应其请求,消除抖动使得采样更准确
ADS7843_SPI_Start() ;
for( j = 0; j < 5; j++ ); //40ns
//while ( TP_BUSY ) ; //如果BUSY,等待直到转换完毕,这个可以不用
ADS7843_Write( CHY ) ;
for( j = 0; j < 25; j++ ); //200ns
y = ADS7843_Read() ;
TP_CS(1); //芯片禁止
return ( y ) ;
}
//***************************************************************************
/****************************************************************************
【功能说明】读取触摸屏X轴和Y轴方向AD转换值
****************************************************************************/
void TP_GetAdXY( int *X, int *Y )
{
U16 x, y, j ;
for( j = 0; j < 10000; j++ ); //延时一下再响应其请求,消除抖动使得采样更准确
ADS7843_SPI_Start() ;
for( j = 0; j < 5; j++ ); //40ns
//while ( TP_BUSY ) ; //如果BUSY,等待直到转换完毕,这个可以不用
ADS7843_Write( CHX ) ;
for( j = 0; j < 25; j++ ); //200ns
x = ADS7843_Read() ;
ADS7843_Write( CHY ) ;
for( j = 0; j < 25; j++ ); //200ns
y = ADS7843_Read() ;
TP_CS(1); //芯片禁止
*X = x ;
*Y = y ;
ADC_PHY_X = x ;
ADC_PHY_Y = y ;
//Uart_Printf("\nADC_X=%d ADC_Y=%d ",x,y);
}
//***************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -