200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 水质检测c语言程序 单片机TDS水质检测源程序

水质检测c语言程序 单片机TDS水质检测源程序

时间:2024-02-01 22:40:00

相关推荐

水质检测c语言程序 单片机TDS水质检测源程序

/*******************************************************************************

--------------------------------------------------------------------------------

* 实 验 名 : TDS显示试验

* 实验说明 : LCD1602显TDS。

* 连接方式 : 见连接图

* 注 意 :

*******************************************************************************/

#include

#include"lcd.h"

#include"temp.h"

unsigned char code buf3[]={"evaluation\:Suggested filtering\n\n"};

unsigned char code buf2[]={"evaluation\:Slight solute in water\n\n"};

unsigned char code buf1[]={"evaluation\: less solute in water\n\n"};

unsigned char code buf4[]={"Warning\n\n"};

long caculate_TDS(int temp);

void LcdDisplay(int temp);

void TDSDisplay(int temp);

void send();

void PutString(unsigned char *TXStr);

unsigned int count;

sbit key=P1^4;

sbit key1=P1^3;

unsigned int FreResultFlag;

unsigned int FreNum;

/*******************************************************************************

* 函数名 : Timer0

* 描 述 : 中断程序,定时时间到后重新赋值开始定时,同时将LED的状态取反.

********************************************************************************/

void time0(void) interrupt 1

{

unsigned char i;

TH0=(65536-46083)/ 256;

TL0=(65536-46083)% 256;

i++;

if(i==20)

{

i=0;

count=TH1*256+TL1;

TH1=0x00;

TL1=0x00;

}

}

/*******************************************************************************

* 函数名 : main

* 函数功能 : 主函数

* 输入 : 无

* 输出: 无

*******************************************************************************/

void main()

{

unsigned char flag=1;

TMOD=0x51;

TH0=(65536-46083)/ 256;

TL0=(65536-46083)% 256;

TH1 = TL1 = 0;

EA=1;

ET0=1;

TR0 = 1;

TR1 = 1;

LcdInit(); //初始化LCD1602

LcdWriteCom(0x88); //写地址 80表示初始地址

LcdWriteData('C');

while(1)

{

//LcdDisplay();

// Delay1ms(1000);//1s钟刷一次

if( FreResultFlag )

{

FreNum = ( TH1 * 256 + TL1);

TH1 = 0;

TL1 = 0;

FreResultFlag = 0;

TR1 = 1;

TR0 = 1;

LcdDisplay(Ds18b20ReadTemp());

TDSDisplay(caculate_TDS(Ds18b20ReadTemp()));

send();

UsartConfiguration();

}

}

}

/*******************************************************************************

* 函数名 : LcdDisplay()

* 函数功能 : LCD显示读取到的温度

* 输入 : v

* 输出: 无

*******************************************************************************/

void LcdDisplay(int temp) //lcd显示

{

unsigned char datas[] = {0, 0, 0, 0, 0}; //定义数组

float tp;

if(temp< 0)//当温度值为负数

{

LcdWriteCom(0x80); //写地址 80表示初始地址

LcdWriteData('-'); //显示负

//因为读取的温度是实际温度的补码,所以减1,再取反求出原码

temp=temp-1;

temp=~temp;

tp=temp;

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

//算由?.5,还是在小数点后面。

}

else

{

LcdWriteCom(0x80); //写地址 80表示初始地址

LcdWriteData('+'); //显示正

tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量

//如果温度是正的那么,那么正数的原码就是补码它本身

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

//算加上0.5,还是在小数点后面。

}

datas[0] = temp / 10000;

datas[1] = temp % 10000 / 1000;

datas[2] = temp % 1000 / 100;

datas[3] = temp % 100 / 10;

datas[4] = temp % 10;

LcdWriteCom(0x82); //写地址 80表示初始地址

LcdWriteData('0'+datas[0]); //百位

LcdWriteCom(0x83); //写地址 80表示初始地址

LcdWriteData('0'+datas[1]); //十位

LcdWriteCom(0x84); //写地址 80表示初始地址

LcdWriteData('0'+datas[2]); //个位

LcdWriteCom(0x85); //写地址 80表示初始地址

LcdWriteData('.'); //显示 ‘.’

LcdWriteCom(0x86); //写地址 80表示初始地址

LcdWriteData('0'+datas[3]); //显示小数点

LcdWriteCom(0x87); //写地址 80表示初始地址

LcdWriteData('0'+datas[4]); //显示小数点

}

/*******************************************************************************

* 函数名 : TDSDisplay()

* 函数功能 : LCD显示读取到的

* 输入 : v

* 输出: 无

*******************************************************************************/

void TDSDisplay(int TDS) //lcd显示

{

unsigned char datas[] = {0, 0, 0, 0, 0, 0}; //定义数组

// float tp;

// if(temp< 0)//当温度值为负数

// {

// LcdWriteCom(0x80+0x40); //写地址 80表示初始地址

// LcdWriteData('-'); //显示负

// //因为读取的温度是实际温度的补码,所以减1,再取反求出原码

// temp=temp-1;

// temp=~temp;

// tp=temp;

// temp=tp*0.0625*100+0.5;

// //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

// //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

// //算由?.5,还是在小数点后面。

//

// }

//else

// {

// LcdWriteCom(0x80+0x40); //写地址 80表示初始地址

// LcdWriteData('+'); //显示正

// tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量

// //如果温度是正的那么,那么正数的原码就是补码它本身

// temp=tp*0.0625*100+0.5;

// //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

// //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

// //算加上0.5,还是在小数点后面。

// }

datas[0] = TDS / 100000;

datas[1] = TDS % 100000 / 10000;

datas[2] = TDS % 10000 / 1000;

datas[3] = TDS % 1000 / 100;

datas[4] = TDS % 100 / 10;

datas[5] = TDS % 10 ;

LcdWriteCom(0x81+0x40); //写地址 80表示初始地址

LcdWriteData('0'+datas[0]); //百位

//LcdWriteData('2');

LcdWriteCom(0x82+0x40); //写地址 80表示初始地址

LcdWriteData('0'+datas[1]); //十位

//LcdWriteData('2');

LcdWriteCom(0x83+0x40); //写地址 80表示初始地址

LcdWriteData('0'+datas[2]); //个位

LcdWriteCom(0x84+0x40); //写地址 80表示初始地址

LcdWriteData('0'+datas[3]); //

LcdWriteCom(0x85+0x40); //写地址 80表示初始地址

LcdWriteData('0'+datas[4]); //显示小数点

LcdWriteCom(0x86+0x40); //写地址 80表示初始地址

LcdWriteData('0'+datas[5]); //显示小数点

}

/*******************************************************************************

* 函数名 : TDSDisplay()

* 函数功能 : 计算TDS值

* 输入 : 温度

* 输出: 无

*******************************************************************************/

long caculate_TDS(float temp)

{

unsigned long TDS;

float Kt=0;

double Ks=0;

Ks=0.0324*count;

//Kt=1000000/count;

temp=temp*0.0625*100+0.5;

//temp=temp/100+(int)temp%100*0.01;

if(temp<10&&temp>=1)

{

Kt=Ks*(0.00169*temp+0.5583);

}

else if(temp<20&&temp>=10)

{Kt=Ks*(0.018*temp+0.5473);

}

else if(temp<30&&temp>=20)

{Kt=Ks*(0.00189*temp+0.5281);

}

else

{Kt=Ks*(0.022*temp+0.45);

}

TDS=0.55*Kt;

return Ks;

}

/*******************************************************************************

* 函 数 名定义 : PutString()

* 描 述 : 发送字符串

*******************************************************************************/

void PutString(unsigned char *TXStr)

{

while(*TXStr!=0)

{

SBUF=*TXStr;

while(TI==0);

TI=0;

TXStr++;

}

}

/*******************************************************************************

* 函 数 名定义 : send()

* 描 述 : 发送测量的温度,TDS

*******************************************************************************/

void send()

{

unsigned int shi,gewei,TD1,testno,testnoshi,testnoge;

unsigned int NO[6];

unsigned int i ,x;

unsigned int TD[8];

char str1[5];

unsigned int TE[8];

if(key==0)

{

while(!key);

testno++;

testnoshi=testno/10;

testnoge=testno%10;

NO[0]='N';

NO[1]='O';

NO[2]='\:';

NO[3]=testnoshi+0x30;

NO[4]=testnoge+0x30;

NO[5]='\n';

for(x=0;x<6;x++)

{

SBUF =NO[x];

while(!TI);

TI = 0;

}

str1[0]='\n';

str1[1]='T';

str1[2]='D';

str1[3]='S';

str1[4]='=';

for(x=1;x<5;x++)//??揟DS=?

{

SBUF = str1[x];

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。