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 |= 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 //
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示选择通道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]);
}
}
主函数:
#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]);
}
}