ADS1115程序代码ADS1115模块:
#include
#define uchar unsigned char
#define uint unsigned int
#define SCL_H P1OUT |= BIT0
#define SCL_L P1OUT &= ~BIT0
#define SDA_H P1OUT |= BIT1
#define SDA_L P1OUT &= ~BIT1
#define SDA_in P1DIR &= ~BIT1 //SDA改成输入模式#define SDA_out P1DIR |= BIT...
ADS1115模块:
#include
#define uchar unsigned char
#define uint unsigned int
#define SCL_H P1OUT |= BIT0
#define SCL_L P1OUT &= ~BIT0
#define SDA_H P1OUT |= BIT1
#define SDA_L P1OUT &= ~BIT1
#define SDA_in P1DIR &= ~BIT1 //SDA改成输入模式#define SDA_out P1DIR |= BIT1 //SDA变回输出模式#define SDA_val P1IN&BIT1 //SDA的位值
#define TRUE 1
#define FALSE 0
void delay(void)
{
uchar i;
for(i = 0;i < 15;i++)
_NOP();
}
/*******************************************
函数名称:start
功能:完成IIC的起始条件操作
参数:无
返回值:无
********************************************/
void start(void)
{
SCL_H;
SDA_H;
delay();
SDA_L;
delay();
}
/*******************************************
函数名称:stop
功能:完成IIC的终止条件操作
参数:无
返回值:无
********************************************/
void stop(void)
{
SDA_L;
delay();
SCL_H;;
delay();
}
/******************************************* 函数名称:mack
功能:完成IIC的主机应答操作
参数:无
返回值:无
********************************************/ void mack(void)
{
SDA_L;
_NOP(); _NOP();
SCL_H;
delay();
SCL_L;
_NOP();_NOP();
SDA_H;
delay();
}
/******************************************* 函数名称:mnack
功能:完成IIC的主机无应答操作
参数:无
返回值:无
********************************************/ void mnack(void)
{
SDA_H;
_NOP(); _NOP();
SCL_H;
delay();
SCL_L;
_NOP(); _NOP();
SDA_L;
delay();
}
/**********检查应答信号函数******************/ /*如果返回值为1则有应答信号,反之没有*/
/******************************************* 函数名称:check
功能:检查从机的应答操作
参数:无
返回值:从机是否有应答:1--有,0--无
********************************************/ void ack()
{
uchar i;
i=0;
SDA_in;
SCL_H;
delay();
while((P1IN&BIT1)&&(i<250)) i++;
SDA_out;
SCL_L;
delay();
}
/******************************************* 函数名称:write1
功能:向IIC总线发送一个1
参数:无
返回值:无
********************************************/ void write1(void)
{
SDA_H;
delay();
SCL_H;
delay();
SCL_L;
delay();
}
/******************************************* 函数名称:write0
功能:向IIC总线发送一个0
参数:无
返回值:无
********************************************/ void write0(void)
{
SDA_L;
delay();
SCL_H;
delay();
SCL_L;
delay();
}
/******************************************* 函数名称:write1byte
功能:向IIC总线发送一个字节的数据
参数:wdata--发送的数据
返回值:无
********************************************/ void write1byte(uchar wdata)
{
uchar i;
for(i = 8;i > 0;i--)
{
if(wdata & 0x80) write1();
else write0();
wdata <<= 1;
}
SDA_H;
_NOP();
}
/******************************************* 函数名称:read1byte
功能:从IIC总线读取一个字节
参数:无
返回值:读取的数据
********************************************/ uchar read1byte(void)
{
uchar rdata = 0x00,i;
uchar flag;
for(i = 0;i < 8;i++)
{
SDA_H;
SCL_H;
SDA_in;
flag = SDA_val;
rdata <<= 1;
if(flag) rdata |= 0x01;
SDA_out;
SCL_L; }
}
显示模块:
#include
#include"lcd.h"
#include"iic.h"
#include"math.h"
void Send(unsigned char type,unsigned char transdata);
void Ini_Lcd(void);
void Clear_GDRAM(void);
void Disp_HZ(unsigned char addr,unsigned char * pt,unsigned char num);
void delay_Nms(unsigned int n);
void delay_Nus(unsigned int n);
void delay_1ms(void);
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) //延时uS #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) //延时mS #define uchar unsigned char
#define uint unsigned int
#define address 0x90
#define config 0x01
#define conversion 0x00
#define Lsiwei 0xE3
#define channel_0 0 //示选择通道0
#define channel_1 1 //表示选择通道1
#define channel_2 2 //表示选择通道2
#define channel_3 3 //表示选择通道2
uchar jieguo[5];
uchar dianya[3];
void Confige1115(uchar channel)
{
uchar a_channel;
switch (channel)
{
case 0:a_channel=0xC0;break;
case 1:a_channel=0xD0;break;
case 2:a_channel=0xE0;break;
case 3:a_channel=0xF0;break;
default: break;
}
write1byte(address);
ack();
write1byte(config);
ack();
write1byte(a_channel);
ack();
write1byte(Lsiwei);
ack();
stop();
}
uint read1115()
{
uchar result_l,result_h;
uint result;
start();
write1byte(address);
ack();
write1byte(conversion); ack();
stop();
delay_ms(5);
start();
write1byte(address+1);
ack();
result_h=read1byte();
ack();
result_l=read1byte();
ack();
stop();
result=result_h*256+result_l; return result;
}
uint go_1115(uchar temp) {
uint result_gd;
Confige1115(temp);
delay_ms(5);
result_gd=read1115();
delay_ms(5);
return result_gd;
}
{
uchar i;uint result=0;
WDTCTL= WDTPW + WDTHOLD; //关闭看门狗
BCSCTL1 &= ~XT2OFF; //基础时钟控制寄存器BCSCTL1的第7位置0,使XT2启动do
{
IFG1 &= ~OFIFG;
for(i= 0xff; i>0; i--);
}
while ((IFG1 & OFIFG)!=0);
BCSCTL2 |= SELS;
P1DIR=0xff;
SCL_H;
SDA_H;
SDA_out;
Ini_Lcd();
while(1)
{
result=go_1115(channel_0);
jieguo[0]=(result/10000)+0x30;
jieguo[1]=(result/1000%10)+0x30;
jieguo[2]=(result/100%10)+0x30;
jieguo[3]=(result/10%10)+0x30;
jieguo[4]=(result%10)+0x30;
Send(1,jieguo[0]);
Send(1,jieguo[1]);
Send(1,jieguo[2]);
Send(1,jieguo[3]);
Send(1,jieguo[4]);
}
}
主函数:
#include
#include"lcd.h"
#include"iic.h"
#include"math.h"
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) //延时uS
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) //延时mS
#define uchar unsigned char
#define uint unsigned int
#define address 0x90
#define config 0x01
#define conversion 0x00
#define Lsiwei 0xE3
#define channel_0 0 //表示选择通道0 #define channel_1 1 //表示选择通道1 #define channel_2 2 //表示选择通道2 #define channel_3 3 //表示选择通道2 uchar jieguo[5];
uchar dianya[3];
void Confige1115(uchar channel)
{
uchar a_channel;
switch (channel)
{
case 0:a_channel=0xC0;break;
case 1:a_channel=0xD0;break;
case 2:a_channel=0xE0;break;
case 3:a_channel=0xF0;break;
default: break;
}
start();
write1byte(address);
ack();
write1byte(config);
ack();
write1byte(a_channel);
ack();
write1byte(Lsiwei);
ack();
stop();
}
uint read1115()
{
uchar result_l,result_h;
uint result;
start();
write1byte(address);
ack();
write1byte(conversion);
ack();
stop();
delay_ms(5);
start();
write1byte(address+1);
ack();
result_h=read1byte();
ack();
result_l=read1byte();
ack();
stop();
result=result_h*256+result_l;
return result;
}
uint go_1115(uchar temp)
{
uint result_gd;
Confige1115(temp);
delay_ms(5);
result_gd=read1115();
delay_ms(5);
return result_gd;
}
void main()
{
uchar i;uint result=0;
WDTCTL= WDTPW + WDTHOLD; //关闭看门狗
BCSCTL1 &= ~XT2OFF; //基础时钟控制寄存器BCSCTL1的第7位置0,使XT2启动do
{
IFG1 &= ~OFIFG;
for(i= 0xff; i>0; i--);
}
while ((IFG1 & OFIFG)!=0);
BCSCTL2 |= SELS;
P1DIR=0xff;
SCL_H;
SDA_H;
SDA_out;
Ini_Lcd();
while(1)
{
result=go_1115(channel_0);
jieguo[0]=(result/10000)+0x30;
jieguo[1]=(result/1000%10)+0x30;
jieguo[2]=(result/100%10)+0x30;
jieguo[3]=(result/10%10)+0x30;
jieguo[4]=(result%10)+0x30;
Send(1,jieguo[0]);
Send(1,jieguo[1]);
Send(1,jieguo[2]);
Send(1,jieguo[3]);
Send(1,jieguo[4]);
}
}
本文档为【ADS1115程序代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。