ads1115程序详细解说

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//说明:iic.h采用的是模拟iic,和驱动24c02相似,故不再重复,lcd12864.h是串行通信方式,也不再啰嗦,这是主程序。

#include "iic.h"

#include "lcd12864.h"

uchar a[10]="0123456789";

uchar b[16]="The V olt: . V";

uchar table[4],ReadBuffer[16],buffer[16];

uchar table1[16]=" 欢迎光临";

uchar table3[16]="当前电压是如下:";

uchar table2[16]="创新实验室sj618";

uchar table0[16]= " V";

unsigned long sum = 0;

uint real;

//配置ads1115

void Confige1115 ()

{

unsigned char i;

table[0] = 0x90;//CMD_Write;

table[1] = 0x01;//指向配置寄存器

table[2] = 0xC2;//设置配置寄存器的高八位1100 0101,即AINp=AIN0,AINn=GND;满量程FS=+-4.096;连续转换模式

table[3] = 0xe3;//设置配置寄存器的低八位1100 0101,即

start();//发送起始信号

for(i=0;i<4;i++)

{

shout(table[i]);//将table里面的数写入ads1115

_NOP();

}

stop();//发送停止信号

}

//指向ADS1115指针寄存器用于准备读取数据

void PointRegister (void)

{

unsigned char i;

table[0] = 0x90;//写

table[1] = 0x00;//指针指向转换寄存器

start();//发送起始信号

for(i=0;i<2;i++)

{

shout(table[i]);//将table里面的数写入ads1115

delay(5);

}

stop();//发送停止信号

}

//读转换寄存器里面的值

uint read()

{

uint result,resulth,resultl;

start();

shout(0x91);

resulth = shin(); //高八位

resultl = shin(); //底八位

stop();

result=(resulth<<8)|resultl;

if(result>0x7fff)

result=~result+1;//用于测量负电压,负电压从8000~ffff,负电压与正关于0有类似对称关系,按位取反后+1相同

return result;

}

//获取最终模数转换之后的结果

uint getad()

{

uint value;

Confige1115();

_NOP();

PointRegister();

_NOP();

value=read();

return value;

}

void main()

{

// Stop watchdog timer to prevent time out reset

uchar j,i,ptr[4];

WDTCTL = WDTPW + WDTHOLD;

//使用外部高频晶体振荡器

BCSCTL1&=~XT2OFF;

do{

IFG1&=~OFIFG;

for(j=0XFF;j>0;j--);

}while((IFG1&OFIFG));

BCSCTL2|=SELM_2;

init_lcd();//初始化液晶屏

delay(10);

while(1)

{

for(i=0;i<16;i++)

sum+= getad();//将ad转换的值赋给sum,取16次转换的平均值

sum>>=4;//左移相当于除以16

real=(3.3*sum/32768)*1208-90;//4.096*(2/3)=2.731,因为参考电压3.3/2.731=1.2084,再扩大1000倍便于显示

//对于AINn不是GND的情况,+FS最高为7fff,最低-FS为1000,只显示0~+FS只除以32768,

//90用于误差矫正

ptr[0] = real / 1000; //最高位

ptr[1] = (real - ptr[0]*1000)/100;//次高位

ptr[2] = (real - ptr[0]*1000 - ptr[1]*100)/10;//次低位

ptr[3] = (real - ptr[0]*1000 - ptr[1]*100 - ptr[2]*10); //最低位

b[10]=a[ptr[0]];

for(i=1;i<4;i++)

b[i+11]=a[ptr[i]];//b[11]显示“V”符号

display_12864(1,0,table1);

display_12864(2,0,table2);

display_12864(3,0,table3);

display_12864(4,0,b);

}

}

相关文档
最新文档