封装好的AD及DA的应用函数定义如下:
typedef unsigned int ADCHandle;
typedef unsigned int DACHandle;
#define ADCH5 (unsigned short)0x4 // GPIO12
#define ADCH6 (unsigned short)0x5 // GPIO13
#define ADCH7 (unsigned short)0x6 // GPIO14
#define ADCH8 (unsigned short)0x7 // GPIO16
#define ADCH9 (unsigned short)0x8 // GPIO17
#define ADCH10 (unsigned short)0x9 // GPIO18
/************DAC通道定义******************/
#define DACH1 0x0 // GPIO0
#define DACH2 0x1 // GPIO1
/*
功能:ADC初始化
参数:
输入:
hADC :需要打开并初始化的AD通道 ADC1---ADC10
ADC_Rate : AD采样率
ADCData : AD采集数据的BUFF
DLen :该通道需要采集的个数
返回:已成功打开的AD通道handle值
*/
ADCHandle InitADC( unsigned short hADC , unsigned char ADC_Rate , unsigned short *ADCData , unsigned short DLen);
/*
功能:读取ADC所采集的值
参数:
输入:
hADC 已打开的ADC通道的handle值
返回:
*/
int StartADCVal( ADCHandle hADC );
/*
功能:读取已启动采集的ADC的采集状态
参数:
输入:无
输出: 1 采集完毕,要吧读取AD数据
0 系统还在采集数据
*/
int GetADC_State(void);
/*
功能:
参数:
输入:hDAC 要启动的ADC编号,限DACH1,DACH2有效
返回:>0 成功打开的DAC handle值
=0 打开DAC失败
*/
DACHandle StartDAC( int hDAC ) ;
/*
功能:
参数:
输入:
hDAC 已打开的DAC handle值
DACData 需要设置DAC输出电压对应的十六进制编码值
返回:1 设置成功
0 设备失败
*/
int SetDACVal( DACHandle hDAC , unsigned short DACData );
使用方法:
__IO unsigned short vADC[30];
ADCHandle hADC;
DACHandle hDAC;
hDAC = StartDAC( DACH2 ); //打开DAC2
SetDACVal( hDAC , 4000 ); //在DAC2上输出((3.3/4096)*4000)V电压信号
hADC = InitADC( ADCH10 , 0 , vADC , 16);// 打开ADC,读取16个连续采集的数据
StartADCVal( hADC );//启动已打开的ADC
while( !GetADC_State() );//等待ADC将16个数据全部转换完成
printf("%04d %04d %04d %04d %04d %04d %04d %04d %04d %04d %04d %04d %04d %04d %04d %04d \r",
vADC[0],vADC[1],vADC[2],vADC[3],
vADC[4],vADC[5],vADC[6],vADC[7],
vADC[8],vADC[9],vADC[10],vADC[11],
vADC[12],vADC[13],vADC[14],vADC[15]);//读取已采集的数据
现在还有两个问题我没有去处理(有空了再继续):
1、灵活地设置采集周期
2、ADC2通道加入并使用
如觉得有用的话,就下载源码:
SRC_API_TST.zip
(4.02 KB)
没用的话就路过,能给些建议,感激不尽了! |