77范文网 - 专业文章范例文档资料分享平台

基于51的ads1115程序编写

来源:网络收集 时间:2019-08-29 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

/*------------------------------------------------------------------------------------------------------------------------------------------*/ /*--*************************功能: 【ADS1115单端输入检测电压】********************--*/ /*--*************************CPU: 【STC12C5A60S2】*******************************--*/ /*--*************************ADC芯片:【ADS1115(2差分输入或4单端输入)】***********--*/ /*--*************************液晶: 【LCD1602】************************************--*/ /*--*************************ADC与单片机连接:【SCL:P1.0 , SDA:P1.1】*******************--*/ /*--*************************检测范围:【0.00~4.99V】*********************************--*/ /*----------------------------------------------------------------------------------------------------------------------------------------*/ #include #include

#define uint unsigned int #define uchar unsigned char #define _Nop() _nop_()

/*------------------------以下为LCD1602显示模块端口定义及函数声明-----------------------*/ sbit lcd_rs_port = P1^7; /*定义LCD控制端口*/ sbit lcd_rw_port = P1^6; sbit lcd_en_port = P2^4; #define lcd_data_port P0

unsigned char num_char_table[] = {%unsigned char Lcd_Dis1_table[] = {\ V \ unsigned char pos_char_table[] = {\ 67.9AB V \

void lcd_delay(uchar ms); void lcd_busy_wait(); void lcd_command_write(uchar command); void lcd_system_reset(); void lcd_char_write(uchar x_pos,y_pos,lcd_dat); void lcd_bad_check(); void Num_to_Disp(uint Num); void LcdDisp(uint num); void delay_1ms(uchar x);

//电压显示框架 //电压显示位置

//LCD1602 延时 //LCD1602 忙等待 //LCD1602 命令字写入 //LCD1602 初始化 //LCD1602 字符写入 //LCD1602 坏点检查 //LCD1602 数据处理 //LCD1602 数据显示 //LCD1602 延时1ms

/*------------------------以下为ADS1115模块端口定义及函数声明--------------------------*/

sbit SCL = P1^0; sbit SDA = P1^1;

#define TRUE 1 #define FALSE 0

unsigned int Config;

unsigned char Writebuff[4],Readbuff[3]; unsigned int Result[2]; int D_ADS; //转换的数字量

#define Accuracy 32768 //定义ADC精度,ADS1115单端输入时15位 char VCC = 4.78; //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 register #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=AIN0, 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 PGA_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 #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_QUE_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=GND #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_3

void Delay_us_15 (void);

void Delay_ms_1 (void); //功 能:延时 void Start(void); //功 能:完成IIC的起始条件操作 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 char 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 int result;

}

/*--------------------------------------------------------------------------------------------------------------------------------*/ /*--****************************************************************************--*/ /*-------------------------------------------------------------------------------------------------------------------------------*/

/*------------------------以下为LCD1602显示模块函数定义-----------------------*/

void lcd_delay(uchar ms) /***********LCD1602 延时***************/ {

uchar j; while(ms--){

for(j=0;j<250;j++) {;} } }

void lcd_busy_wait() /**********LCD1602 忙等待*************/ {

lcd_rs_port = 0; lcd_rw_port = 1; lcd_en_port = 1; lcd_data_port = 0xff;

while (lcd_data_port&0x80); lcd_en_port = 0; }

void lcd_command_write(uchar command) /**********LCD1602 命令字写入*************/ {

lcd_busy_wait(); lcd_rs_port = 0; lcd_rw_port = 0; lcd_en_port = 0;

lcd_data_port = command; lcd_en_port = 1;

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取值_AIN3 LcdDisp(result); //LCD1602显示电压值 }

lcd_en_port = 0; }

void lcd_system_reset() /**********LCD1602 初始化**************/ {

lcd_delay(20);

lcd_command_write(0x38); lcd_delay(100);

lcd_command_write(0x38); lcd_delay(50);

lcd_command_write(0x38); lcd_delay(10);

lcd_command_write(0x08); lcd_command_write(0x01); lcd_command_write(0x06); lcd_command_write(0x0c); }

void lcd_char_write(uchar x_pos,y_pos,lcd_dat) /******LCD1602 字符写入**********/ {

x_pos &= 0x0f; /* X位置范围 0~15 */ y_pos &= 0x01; /* Y位置范围 0~ 1 */ if(y_pos==1) x_pos += 0x40; x_pos += 0x80;

lcd_command_write(x_pos); lcd_busy_wait(); lcd_rs_port = 1; lcd_rw_port = 0; lcd_en_port = 0;

lcd_data_port = lcd_dat; lcd_en_port = 1; lcd_en_port = 0; }

void lcd_bad_check() /******LCD1602 坏点检查**********/ {

char i,j;

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

for(j=0;j<16;j++) {

lcd_char_write(j,i,0xff); } }

lcd_delay(200); lcd_delay(200); lcd_delay(200); lcd_delay(100); lcd_delay(200);

lcd_command_write(0x01); // clear lcd disp }

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库基于51的ads1115程序编写在线全文阅读。

基于51的ads1115程序编写.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/688860.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: