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

📄 ad_collect.c

📁 触摸屏的数据ADS7846数据采集源代码
💻 C
字号:
#include <string.h>
#include <stdlib.h>
#include "intrins.h>
#include "C8051f.h"
#include "net.h"
#include "ad_collect.h"

UCHAR code command[]={0xd1,0x91,0xb1,0xc1};   //channel  [S A2 A1 A0 MODE SER/DFR PD1 PD0]
                                               //采集X坐标,Y坐标,Z1,Z2值。
extern void delay(UINT i); 
extern UCHAR idata point[DATA_SIZE];
extern UCHAR idata count;
//extern UCHAR idata text1[];
//extern UCHAR idata text2[];
//extern bit volatile tag;
//SIGNATURE xdata point[100];

UINT pulse(UCHAR commandbyte)        //ADS7846采集坐标
{
	UCHAR i,j;
	UINT result=0;
	//DCLK=0;
	CS=1;
	DIN=1;
	CS=0;
	for(i=0;i<8;i++)
		{
		commandbyte<<=1;
        DIN=CY;
		DCLK=0; 
		for(j=0;j<12;j++)
		{
		_nop_();
		}
	//	_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
		DCLK=1;
		for(j=0;j<12;j++)                                              //上升沿   DIN
		{
		_nop_();
		}
//	 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
		
		}
	//BUSY=1;
	while(AD_BUSY);
	delay(2);
	DCLK=1; 
		for(j=0;j<8;j++)
		{
		_nop_();
		}
//	_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    DCLK=0;                   
		for(j=0;j<8;j++)                  // 下降沿             DOUT
		{
		_nop_();
		}
   // _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
	for(i=0;i<12;i++)
		{
		result=result<<1;
		DCLK=1; 
		for(j=0;j<12;j++)
		{
		_nop_();
		}
	//	_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
		DCLK=0; 
		for(j=0;j<12;j++)
		{
		_nop_();
		}
	//	_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
		//DOUT=1;
		if(DOUT)
			{
			result++;
			}
		}
	for(i=0;i<3;i++)
	{
		DCLK=1; 
		for(j=0;j<8;j++)
		{
		_nop_();
		}
	//	_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
		DCLK=0;
		for(j=0;j<8;j++)
		{
		_nop_();
		}
	}
	CS=1;
	return result;  
}

void read_analog_inputs()
{
UCHAR i;
UINT temp;
UINT  ad_result[4];               // X Y Z1 Z2
UINT pos[3];

 RAM_CHIP_SELECT_BANK0;
    EMI0CF=0x24;

	for(i=0;i<4;i++)
	{
	ad_result[i]=pulse(command[i]);     
	}
    pos[2]=Rx*(ad_result[0]*5/ad_result[2])/4096*(ad_result[3]-ad_result[2])/5;     // 计算压力值   
 	if (ad_result[0]>4094)
	{
       pos[0]=0;             ///6.4;	
	   pos[1]=0;             ///8.53;
	   pos[2]=0;
	}
	else  
	{
	    //	 result=ad_result[0];///6.4;
     pos[0]=4096-ad_result[0];
//	 result=ad_result[1];///8.53;
     pos[1]=4096-ad_result[1];
	}     
    	
    for(i=0;i<3;i++)           
    {
          temp= pos[i];
          temp=temp>>8;
	      point[6*count+2*i]=pos[i]&0x00ff;               //先低8位
		  point[6*count+2*i+1]=temp&0x00ff;    
    }  
	count++;
	if(count==DATA_SIZE/6)
	{
	count=0;
	}
 }

⌨️ 快捷键说明

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