《基于51的ads1115程序.docx》由会员分享,可在线阅读,更多相关《基于51的ads1115程序.docx(13页珍藏版)》请在课桌文档上搜索。
1、*/_*功能:ADS1115单端输入检测电压】./;._*Cpu:STC12C5A60S2*m*/;_*ADC芯片:【ADS1115(2差分输入或者4单端输入)】*._二一*液晶.*/fLCD1602J*_-*/*.*ADC与单片机连接:SCkPLOzSDAiPl.1*.*/*一* 检测范围:0.004.99V*/#include/include#defineuintunsignedintftdefineucharunsignedchar#define_Nop()_nop_()i以下为LCDI602显示模块端口定义及函数声明*/sbit lcd_rs_port = Pl7;sbit lcd_r
2、w_port = P16;sbit lcd_en_port = P24;#define lcd_data_port PO*定义LCD控制端口*/67.9AB电压显示框架电压显示位置voidlcd_delay(ucharms);/LCD1602延时voidlcd_busy_wait();/LCD1602忙等待voidlcd_command_write(ucharcommand);/LCD1602命令字写入voidlcd_system_reset);/LCD1602初始化voidlcd_char_write(ucharx-poszy-pos,lcd-dat);/LCD1602字符写入voidlcd
3、_bad_check();/LCD1602坏点检查voidNum_to_Disp(uintNum);/LCD1602数据处理voidLcdDisp(uintnum);/LCD1602数据显示voiddelay_lms(uchar);/LCD1602延时Ims/*以下为ADSIII5模块端口定义及函数声明*/sbitSCL=P10;sbitSDA=P11;#defineTRUE1#defineFALSE0unsignedintConfig;unsigned int Result2;int D_ADS;ftdefine Accuracy 32768 char VCC = 4.78;unsigned
4、charWritebuff4zReadbuff3;转换的数字量定义ADC精度,ADS1115单端输入时15位/VCC,电压参考值/ADDR PIN -GND /ADDR PIN -VDD /ADDR PIN -SDA /ADDR PIN -SCL#defineADDRESS_O0x90#defineADDRESS_10x92#defineADDRESS_20x94#defineADDRESS_30x96POINTERREGISTER*/Convertion register /Config register /Lo_thresh register /HLthresh register#defi
5、nePointer_0#definePointer_lOXol#definePointer_22#definePointer_30x03/CONFIGREGISTER*/#defineOS_00x0000#defineOS_10x8000#define MUX_0#define MUX_1 ftdefine MUX_2#define MUX_3#define MUX_40x00000x10000x20000x30000x4000#define MUX_5 0x5000#define MUX_6 0x6000#define MUX_7 0x7000/ANp=AIN0z AINn=AINl /AN
6、p=AIN0z AINn=AIN3 AINP=AlN1, AINn=AIN3 /AINp=AIN2z AINn=AIN3 /AINp=AIN0, AINn=GND /ANp=AINlz AINn=GND /AINp=AIN2z AINn=GND /AINp=AIN3z AINn=GND#definePGA_00x0000/FS=6.144V#definePGA_10x0200/FS=4.096V#definePGA_20x0400/FS=2.048V#definePGA_30x0600/FS=1.024V#definePGA_40x0800/FS=0.512V#definePGA_5OxOAO
7、O/FS=0.256V#definePGA_6OxOCOO/FS=0.256V#definePGA_7OxOEOO/FS=0.256VftdefineMODE_.00x0000#defineMODE_10x0100#defineDR_00x0000/DataRate=8#defineDR_10x0020/DataRate=16#defineDR_20x0040/DataRate=32#defineDR_30x0060/DataRate=64#defineDR_40x0080/DataRate=128#defineDR_5OxOOAO/DataRate=250#defineDR_6OxOOCO/
8、DataRate=475#defineDR_7OxOOEO/DataRate=860#defineCOMP_MODE_00x0000#defineCOMP_MODE_10x0010ftdefineCOMP_POL_0OXoOOO# defineCoMP_POL_1OXoOO8# defineCOMP_LAT_0OXOOoO# defineCOMP_LAT_1OXoO40# defineCOMP_QUE_0OXoOOo# defineCOMP_QUE_1OXoOol# defineCOMP_QUE_2OXOoO2#defineCOMP_QUE_30x0003/*ADDRInitial*#defi
9、neADDRESSADDRESS_0/ADDRPIN-GND#defineADDRESS_WADDRESS10x00写地址#defineADDRESS_RADDRESS10x01读地址*#defineOSOS_1#defineMUX_A0MUX_4/ANp=AIN0,AINn=GND#defineMUX_A1MUX_5AINP=AlN1,AINn=GND#defineMUX_A2MUX_6/AINp=AIN2,AINn=GND#defineMUX_A3MUX_7/AINp=AIN3zAINn=GND#definePGAPGA_1/FS=6.144V#defineMODEMODE_1/Conti
10、nuousconversion#defineDRDR_7/DataRate=860#defineCOMP_QUECOMP_QUE_3*ConfigInitial*/modevoidDelay_us_15(void);voidDelay_ms_l(void);voidStartfvoid);功功能:延时能:完成HC的起始条件操作voidStop(void);功能:完成HC的终止条件操作voidACKvoid);功能:完成HC的主机应答操作voidNACK(void);功能:完成IIC的主机无应答操作unsignedcharCheck(void)能:检查从机的应答操作voidWrite_l_Byt
11、e(unsignedcharDataByte);unsignedcharWrite_N_Byte(unsignedchar*writebufferzunsignedcharn);unsignedcharRead_l_Byte(void);voidRead_N_Byte(unsignedint*readbuff,unsignedcharn);voidlnitADS1115(bitS_MUX_0,bitS_MUX_1);voidWriteWord(void);voidReadWord(void);unsignedintADS1115(bitS_MUX_0,bitS_MUX_1);写1个字节写N个字
12、节读1个字节读N个字节/ADS1115初始化写读/ADS1115取值/*/*主函数*_*/*/voidmain)unsignedintresult;Icd_system_reset();lcd_bad_check();/LCD1602初始化/LCD1602坏点检查while(l)(result=ADS1115(0,0);/ADS1115取值_AIN0/result=ADSIIl5(0,1);ADSIIl5取值_AIN1/result=ADSlII5(L0);ADSIII5取值_AIN2/result=ADS1115(1,1);/ADS1115取值一AIN31.cdDispfresuIt);LC
13、Dl602显示电压值)*_*以下为LCDl602显示模块函数定义*/voidlcd_delay(ucharms)*LCD1602延时*/(ucharj;while(ms-)for(j=0J250J+);)voidlcd_busy_wait()*LCD1602忙等待*/(lcd_rs_port=0;lcd_rw_port=1;lcd_en_port=1;lcd_data_port=Oxff;while(Icd_data_port&0x80);lcd_en_port=0;)voidlcd_command_write(ucharcommand)*LCD1602命令字写入*/lcd_busy_wait
14、();lcd_rs_port=0;lcd_rw_port=0;lcd_en_port=0;lcd_data_port=command;lcd_en_port=1;Icd_en_port=O;)voidICcLSyStemeset()*LCD16O2初始化*/(lcd_delay(2O);Icd_command_write(0x38);lcd_delay(100);Icd_command_write(0x38);lcd_delay(5O);Icd_command_write(0x38);lcd_delay(10);Icd_command_write(0x08);Icd_command_write
15、(0x01);Icd_command_write(0x06);Icd_command_write(0x0c);)voidlcd_char_write(ucharx_pos,y_pos,lcd_dat)*LCD16O2字符写入*/(x_pos&=OXOf;*X位置范围015*/y_pos&=0x01;*Y位置范围01*/if(y_P。S=I)x_pos+=040;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;l
16、cd_en_port=1;lcd_en_port=0;)voidlcd_bad_check()*LCD1602坏点检查*/(charizj;for(i=0;i2;i+)for(j=0;j16;j+)lcd_char_write(j,izOxff);)lcd_delay(200);lcd_delay(200);lcd-delay(200);lcd_delay(100);lcd_delay(200);Icd_command_write(0x01);/clearleddispvoid Num_to_Disp(uint Num) 显示ADSlII5输出数值LCD显示数据处理*/StartjLQVej1
17、:显示电压值,Start_2QVej2:/Start_lNUM = (Num / (float)Accuracy) * VCC;x = (int)NUM;yy = (int)(NUM - (float)() * 10);zz = (int)(NM - (float)(x) 100)%10;zzz = (int)(NUM - (float)(xx) * 1000)%10;ADSIlI5 取值=Accuracy (Vin / VCC)floatNUM;intxx,yyzzz,zzz;电压值十位电压值个位电压值小数点后一位电压值小数点后两位电压值小数点后三位 OVeJlpos_char_table6
18、=num_char_tablexx/10;pos_char_table7=num_char_tablexx%10;pos_char_table9=num_char_tableyy;pos_char_table10=num_char_tablezz;pos_char_tablell=num_char_tablezzz;/*pos_char_table6=num_char_tableNum/10000;/Start_2pos_char_table7=num_char_table(Num%10000)/1000;pos_char_table8=num_char_table(Num%10)%1000)
19、/100;pos_char_table9=num_char_table(Num/10)%10;pos_char_tableA=num_char_tableNum%10;/Over_27)voidLcdDisp(uintnum)*LCD显示*/uinti=0;for(i=0;i16;i+)(lcd_char_write(izO,Lcd_Disl_tablei);显示框架)Num_to_Disp(num);for(i=6;i12;i+)(lcd_char_write(i,0,pos_char_table(i);显示电压)delay_lms(100);voiddelay_lms(ucharx)*1M
20、S为单位的延时程序*/ucharj;while(x-)for(j=0;j125;j+);)/*以下为ADSlll5模块端口函数定义*/voidDelay_us_15(void)/*延时程序*/unsignedchari;for(i=0;i0;i-)_nop_();)/*函数名称:Start功能:完成IIC的起始条件操作参数:无返回值:无*/voidStartfvoid)(SCL=I;SDA=I;Delay_us_15();SDA=O;Delay_us_15();SCL=O;Delay_us_15();)/*函数名称:Stop功能:完成IIC的终止条件操作参数:无返回值:无/*/voidStop
21、(void)SDA=O;Delay_us_15();SCL=1;Delay_us_15();SDA=1;Delay_us_15();)/*函数名称:ACK功能:完成IlC的主机应答操作参数:无返回值:无*/voidACK(void)SDA=O;_nop_();_nop_();SCL=1;Delay_us_15();SCL=O;_nop_();_nop_();SDA=1;Delay_us_15();)*函数名称:NACK功能:完成IlC的主机无应答操作参数:无返回值:无*/voidNACK(void)SDA=1;-opj);_nop_();SCL=1;Delay_us_15();SCL=O;.n
22、opj);_nop_();SDA=O;Delay_us_15();)*检查应答信号函数*/*如果返回值为1则证明有应答信号,反之没有*/*函数名称:Check功能:检查从机的应答操作参数:无返回值:从机是否有应答:1-有,0-无*/unsignedcharCheck(void)unsignedcharslaveack;SDA=I;_nop_0;_nop_();SS1V3ujjjQdois)S(:+j)jnq3)jM)()P叫刈f(janquM+)igajuv)(+ru!fo=!)Ji,!W)(ujeqp3u8!sun叫nqsM*JeiPpu9sun)jg-N-VJeqPaU软SUn*aMgNa
23、)!/V*/(f()dou-T=VQS(:工=jgeje 0SrSrrAelaQ-O=IDS 0ST-snepa-T=IJS 0SrSrrAelaQ,0=VQS3S3=as(080(!Mgeea)j!/(08XogaMgeL)(+!0=!)Jj,!刈)()g)aJeqoPaU软SUn)己认日一工一3曼Mp0*aMgeiM*/(3yujijsfgS!Vduj11)j(PeaAels)j!4)S厂Sn-AelaQP=DS勒麻asY里VQS=心e3Aesf()douf()douf()-dou-f()-dou-,=i3S)Stop();returnTRUE;)*ReadaByte*/unsignedc
24、harRead_l_Byte(void)(unsignedchardata_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(FLAG)data_Value=0x01;SCL=O;Delay_us_15);returndata_Value;)*ReadNy*voidRead_N_Byte(unsignedint*readbuff,unsignedcharn)unsignedchari;for(i=0;in;i+)readbuffi=Read_l_Byte()
25、;if(i=n-l)NACK();不连续读字节elseACK();连续读字节)Stop();*初始化*/voidlnitADS1115(bitS_MUX_0,bitS_MUX_1)if(S_MUX_O=O&S_MUX_1=O)/AINOConfig=OS+MUX_AO+PGA+DR+COMP_QUE+MODE;讦(S_MUXJ)=O&S_MUX_1=1)/AINlConfig=OS+MUX_A1+PGA+DR+COMP_QUE+MODE;if(S_MUX_0=1&S_MUX_1=O)/AIN2Config=OS+MUX_A2+PGA+DR+COMP_QUE+MODE;if(S_MUX_0=1&
26、S_MUX_1=1)/AN3Config=OS+MUX_A3+PGA+DR+COMP_QUE+MODE;WriteblJff0=ADDRESS_W;WritebUff1=POinter_1;Writebuff2=Config256;Writebuff3=Config%256;ReadbuffO=ADDRESS_W;ReadbUff1=POinter_0;ReadbUff2=ADDRESS_R;)*WriteaWord*voidWriteWord(Void)intt;Start();写入4个字节do(t=Write_N_Byte(Writebuff,4);while(t=0);)*ReadWOrd*/voidReadWord(void)intt;Start);写入2个字节do(t=Write_N_Byte(Readbuff,2);while(t=0);Start);写入2个字节do(t=Write_N_Byte(&Readbuff2Ll);while(t=0);Read_N_Byte(Result,2);读出2个字节-SQXfQuj11ij喜:彝明诳转4Rnsw+9G1*0Rns叫=S6Gf()pjovpedf()Tsueef()pjovavtxiiszoxis)ssai!u)(TIIS4q/OIISq)STTTSa刈PaU软SUn/*SlIIS。V*/