收藏 分享(赏)

基于51的ads1115程序编写.doc

上传人:精品资料 文档编号:10117676 上传时间:2019-10-11 格式:DOC 页数:12 大小:63KB
下载 相关 举报
基于51的ads1115程序编写.doc_第1页
第1页 / 共12页
基于51的ads1115程序编写.doc_第2页
第2页 / 共12页
基于51的ads1115程序编写.doc_第3页
第3页 / 共12页
基于51的ads1115程序编写.doc_第4页
第4页 / 共12页
基于51的ads1115程序编写.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、/*-*/ /*-*功能: 【ADS1115 单端输入检测电压 】*-*/*-*CPU: 【STC12C5A60S2】*-*/*-*ADC 芯片:【ADS1115 (2 差分输入或 4 单端输入) 】*-*/*-*液晶: 【LCD1602】*-*/*-*ADC 与单片机连接:【SCL:P1.0 , SDA:P1.1】*-*/*-*检测范围:【0.004.99V】*-*/*-*/ #include #include #define uint unsigned int#define uchar unsigned char#define _Nop() _nop_()/*-以下为 LCD1602 显示

2、模块端口定义及函数声明-*/sbit lcd_rs_port = P17; /*定义 LCD 控制端口*/sbit lcd_rw_port = P16;sbit lcd_en_port = P24;#define lcd_data_port P0unsigned char num_char_table = “0123456789ABCDEF“;unsigned char Lcd_Dis1_table = “Volt: V “; /电压显示框架unsigned char pos_char_table = “ 67.9AB V “; /电压显示位置void lcd_delay(uchar ms);

3、 /LCD1602 延时void lcd_busy_wait(); /LCD1602 忙等待void lcd_command_write(uchar command); /LCD1602 命令字写入void lcd_system_reset(); /LCD1602 初始化void lcd_char_write(uchar x_pos,y_pos,lcd_dat); /LCD1602 字符写入void lcd_bad_check(); /LCD1602 坏点检查void Num_to_Disp(uint Num); /LCD1602 数据处理void LcdDisp(uint num); /LC

4、D1602 数据显示void delay_1ms(uchar x); /LCD1602 延时 1ms/*-以下为 ADS1115 模块端口定义及函数声明-*/sbit SCL = P10;sbit SDA = P11;#define TRUE 1#define FALSE 0unsigned int Config;unsigned char Writebuff4,Readbuff3;unsigned int Result2; int D_ADS; /转换的数字量#define Accuracy 32768 /定义 ADC 精度,ADS1115 单端输入时 15 位char VCC = 4.78

5、; /VCC,电压参考值#define ADDRESS_0 0x90 /ADDR PIN -GND#define ADDRESS_1 0x92 /ADDR PIN -VDD#define ADDRESS_2 0x94 /ADDR PIN -SDA#define ADDRESS_3 0x96 /ADDR PIN -SCL/*POINTER REGISTER*/#define Pointer_0 0x00 /Convertion register#define Pointer_1 0x01 /Config register#define Pointer_2 0x02 /Lo_thresh regi

6、ster#define Pointer_3 0x03 /Hi_thresh register/*CONFIG REGISTER*/#define OS_0 0x0000#define OS_1 0x8000#define MUX_0 0x0000 /AINp=AIN0, AINn=AIN1#define MUX_1 0x1000 /AINp=AIN0, AINn=AIN3#define MUX_2 0x2000 /AINp=AIN1, AINn=AIN3#define MUX_3 0x3000 /AINp=AIN2, AINn=AIN3#define MUX_4 0x4000 /AINp=AI

7、N0, AINn=GND#define MUX_5 0x5000 /AINp=AIN1, AINn=GND#define MUX_6 0x6000 /AINp=AIN2, AINn=GND#define MUX_7 0x7000 /AINp=AIN3, AINn=GND#define PGA_0 0x0000 /FS=6.144V#define PGA_1 0x0200 /FS=4.096V#define PGA_2 0x0400 /FS=2.048V#define PGA_3 0x0600 /FS=1.024V#define PGA_4 0x0800 /FS=0.512V#define PG

8、A_5 0x0A00 /FS=0.256V#define PGA_6 0x0C00 /FS=0.256V#define PGA_7 0x0E00 /FS=0.256V#define MODE_0 0x0000#define MODE_1 0x0100#define DR_0 0x0000 /Data Rate = 8#define DR_1 0x0020 /Data Rate = 16#define DR_2 0x0040 /Data Rate = 32#define DR_3 0x0060 /Data Rate = 64#define DR_4 0x0080 /Data Rate = 128

9、#define DR_5 0x00A0 /Data Rate = 250#define DR_6 0x00C0 /Data Rate = 475#define DR_7 0x00E0 /Data Rate = 860#define COMP_MODE_0 0x0000#define COMP_MODE_1 0x0010#define COMP_POL_0 0x0000#define COMP_POL_1 0x0008#define COMP_LAT_0 0x0000#define COMP_LAT_1 0x0040#define COMP_QUE_0 0x0000#define COMP_QU

10、E_1 0x0001#define COMP_QUE_2 0x0002#define COMP_QUE_3 0x0003/*ADDR Initial*/#define ADDRESS ADDRESS_0 /ADDR PIN -GND#define ADDRESS_W ADDRESS|0x00 /写地址#define ADDRESS_R ADDRESS|0x01 /读地址/*Config Initial*/#define OS OS_1#define MUX_A0 MUX_4 /AINp=AIN0, AINn=GND#define MUX_A1 MUX_5 /AINp=AIN1, AINn=GN

11、D#define MUX_A2 MUX_6 /AINp=AIN2, AINn=GND#define MUX_A3 MUX_7 /AINp=AIN3, AINn=GND#define PGA PGA_1 /FS=6.144V#define MODE MODE_1 /Continuous conversion mode#define DR DR_7 /Data Rate = 860#define COMP_QUE COMP_QUE_3void Delay_us_15 (void);void Delay_ms_1 (void); /功 能:延时void Start(void); /功 能:完成 II

12、C 的起始条件操作void Stop(void); /功 能:完成 IIC 的终止条件操作void ACK(void); /功 能:完成 IIC 的主机应答操作void NACK(void); /功 能:完成 IIC 的主机无应答操作unsigned char Check(void);/功 能:检查从机的应答操作void Write_1_Byte(unsigned char DataByte); /写 1 个字节unsigned char Write_N_Byte(unsigned char *writebuffer,unsigned char n); /写 N 个字节unsigned cha

13、r Read_1_Byte(void); /读 1 个字节void Read_N_Byte(unsigned int *readbuff,unsigned char n); /读 N 个字节void InitADS1115(bit S_MUX_0, bit S_MUX_1); /ADS1115 初始化void WriteWord(void); /写void ReadWord(void); /读unsigned int ADS1115(bit S_MUX_0, bit S_MUX_1); /ADS1115 取值/*-*/*-*【 主函数 】*-*/*-*/void main()unsigned

14、int result;lcd_system_reset(); /LCD1602 初始化lcd_bad_check(); /LCD1602 坏点检查while(1)result = ADS1115(0,0); /ADS1115 取值_AIN0/result = ADS1115(0,1); /ADS1115 取值_AIN1/result = ADS1115(1,0); /ADS1115 取值_AIN2/result = ADS1115(1,1); /ADS1115 取值_AIN3LcdDisp(result); /LCD1602 显示电压值/*-*/*-*-*/*-*/*-以下为 LCD1602

15、显示模块函数定义-*/void lcd_delay(uchar ms) /*LCD1602 延时 */uchar j;while(ms-)for(j=0;j 0;i-) _nop_();/*/函数名称:Start/功 能:完成 IIC 的起始条件操作/参 数:无/返回值 :无/*/void Start(void)SCL=1;SDA=1;Delay_us_15 ();SDA=0;Delay_us_15 ();SCL=0;Delay_us_15 ();/*/函数名称:Stop/功 能:完成 IIC 的终止条件操作/参 数:无/返回值 :无/*/void Stop(void) SDA=0;Delay

16、_us_15 ();SCL=1;Delay_us_15 ();SDA=1;Delay_us_15 ();/*/函数名称:ACK/功 能:完成 IIC 的主机应答操作/参 数:无/返回值 :无/*/void ACK(void)SDA=0;_nop_(); _nop_();SCL=1;Delay_us_15 ();SCL=0;_nop_(); _nop_();SDA=1;Delay_us_15 ();/*/函数名称:NACK/功 能:完成 IIC 的主机无应答操作/参 数:无/返回值 :无/*/void NACK(void)SDA=1;_nop_(); _nop_();SCL=1;Delay_us

17、_15 ();SCL=0;_nop_(); _nop_();SDA=0; Delay_us_15 (); /*检查应答信号函数*/*如果返回值为 1 则证明有应答信号,反之没有*/*/函数名称:Check/功 能:检查从机的应答操作/参 数:无/返回值 :从机是否有应答:1-有,0-无/*/unsigned char Check(void)unsigned char slaveack;SDA=1;_nop_(); _nop_();SCL=1;_nop_(); _nop_();_nop_(); _nop_();slaveack = SDA; /读入 SDA 数值SCL=0;Delay_us_15

18、 ();if(slaveack) return FALSE;else return TRUE;/*Write a Byte*/void Write_1_Byte(unsigned char DataByte)int i;for(i=0;i8;i+)if(DataByteelseSDA=0;Delay_us_15 ();SCL=1;Delay_us_15 ();SCL=0;Delay_us_15 ();DataByte = 1;SDA=1;_nop_(); /*Write N Byte*/unsigned char Write_N_Byte(unsigned char *writebuffer,

19、unsigned char n)int i;for(i=0;in;i+)Write_1_Byte(*writebuffer);if(Check()writebuffer +;elseStop();return FALSE;Stop();return TRUE;/*Read a Byte*/unsigned char Read_1_Byte(void)unsigned char data_Value = 0, FLAG, i;for(i=0;i8;i+)SDA=1;Delay_us_15 ();SCL=1;Delay_us_15 ();FLAG=SDA;data_Value = 1;if( FL

20、AG)data_Value |= 0x01;SCL=0;Delay_us_15 ();return data_Value;/*Read N Byte*/void Read_N_Byte(unsigned int*readbuff, unsigned char n)unsigned char i;for(i=0;in;i+)readbuffi=Read_1_Byte();if(i=n-1)NACK(); /不连续读字节else ACK(); /连续读字节Stop();/*初始化*/void InitADS1115(bit S_MUX_0, bit S_MUX_1)if (S_MUX_0 = 0

21、if (S_MUX_0 = 0 if (S_MUX_0 = 1 if (S_MUX_0 = 1 Writebuff0=ADDRESS_W;Writebuff1=Pointer_1;Writebuff2=Config/256;Writebuff3=Config%256;Readbuff0=ADDRESS_W;Readbuff1=Pointer_0;Readbuff2=ADDRESS_R;/*Write a Word*/void WriteWord(void)int t;Start(); /写入 4 个字节dot=Write_N_Byte(Writebuff,4);while(t=0);/*Rea

22、d Word*/void ReadWord(void)int t;Start(); /写入 2 个字节dot=Write_N_Byte(Readbuff,2);while(t=0);Start(); /写入 2 个字节dot=Write_N_Byte(while(t=0);Read_N_Byte(Result,2); /读出 2 个字节/*ADS1115*/unsigned int ADS1115(bit S_MUX_0, bit S_MUX_1)InitADS1115(S_MUX_0, S_MUX_1);WriteWord();Delay_ms_1(); ReadWord();D_ADS=Result0*256+Result1; /转换的数字量return D_ADS;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报