b多路温度采集程序.docx

上传人:b****8 文档编号:11955757 上传时间:2023-06-03 格式:DOCX 页数:18 大小:73.50KB
下载 相关 举报
b多路温度采集程序.docx_第1页
第1页 / 共18页
b多路温度采集程序.docx_第2页
第2页 / 共18页
b多路温度采集程序.docx_第3页
第3页 / 共18页
b多路温度采集程序.docx_第4页
第4页 / 共18页
b多路温度采集程序.docx_第5页
第5页 / 共18页
b多路温度采集程序.docx_第6页
第6页 / 共18页
b多路温度采集程序.docx_第7页
第7页 / 共18页
b多路温度采集程序.docx_第8页
第8页 / 共18页
b多路温度采集程序.docx_第9页
第9页 / 共18页
b多路温度采集程序.docx_第10页
第10页 / 共18页
b多路温度采集程序.docx_第11页
第11页 / 共18页
b多路温度采集程序.docx_第12页
第12页 / 共18页
b多路温度采集程序.docx_第13页
第13页 / 共18页
b多路温度采集程序.docx_第14页
第14页 / 共18页
b多路温度采集程序.docx_第15页
第15页 / 共18页
b多路温度采集程序.docx_第16页
第16页 / 共18页
b多路温度采集程序.docx_第17页
第17页 / 共18页
b多路温度采集程序.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

b多路温度采集程序.docx

《b多路温度采集程序.docx》由会员分享,可在线阅读,更多相关《b多路温度采集程序.docx(18页珍藏版)》请在冰点文库上搜索。

b多路温度采集程序.docx

b多路温度采集程序

本程序为ds18b20的多路温度采集程序,是我自己参考其他程序后改写而成,可显示4路正负温度值,并有上下限温度报警(声音、灯光报警)

亲测,更改端口即可使用。

(主要器件:

51单片机,ds18b20,lcd显示器)

附有proteus仿真图,及序列号采集程序

/****上限62度下限-20度****/

#include<>

#defineucharunsignedchar

#defineuintunsignedint

sbitds=P1A1;

sbitrs=P1A4;

sbite=P1A6;

sbitsp=P1A0;

sbitd1=P1A2;

sbitd2=P1A3;

ucharlcdrom[4][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e},

{0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},{0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0},

{0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7}};unsignedcharcodetable0[]={"TEMPERARTURE:

U"};intf[4];

inttvalue;

floatftvalue;

uintwarnl=320;

uintwarnh=992;

 

/****lcd

程序****/

 

 

voiddelayms(uintms)//延时

{

uinti,j;

for(i=ms;i>0;i--)for(j=110;j>0;j--);

}

voidwrcom(ucharcom)//写指令

{delayms

(1);rs=0;

P3=com;delayms

(1);e=1;

delayms

(1);

e=0;

}

voidwrdat(uchardat)//写数据

{

rs=1;

e=0;

P3=dat;

delayms(5);

e=1;

delayms(5);

e=0;

}

voidlcdinit()//初始化lcd

{

delayms(15);

wrcom(0x38);delayms(5);

wrcom(0x0c);delayms(5);

wrcom(0x06);delayms(5);

wrcom(0x01);delayms(5);

}

voiddisplay(uchar*p)//显示

{

while(*p!

='\0')

wrdat(*p);

p++;

delayms

(1);

}

}

displayinit()//初始化显示{

lcdinit();

wrcom(0x80);

display(table0);

}

/****ds18b20程序****/voiddsrst()//ds18b20复位{

uinti;

ds=0;

i=103;

while(i>0)i--;

ds=1;

i=4;

while(i>0)i--;

bitdsrd0()//读一位数据

{

uinti;

bitdat;

ds=0;i++;

ds=1;i++;i++;

dat=ds;i=8;while(i>0)i--;return(dat);

}

uchardsrd()//读1个字节数据

{

uchari,j,dat;dat=0;

for(i=8;i>0;i--)

{

j=dsrd0();

dat=(j<<7)|(dat>>1);

}

return(dat);

}

voiddswr(uchardat)//写数据

uinti;

ucharj;

bittestb;

for(j=8;j>0;j--)

{

testb=dat&0x01;

dat=dat>>1;

if(testb)

{

ds=0;i++;i++;

ds=1;i=8;while(i>0)i--;

}

else

{

ds=0;i=8;while(i>0)i--;

ds=1;i++;i++;

}

voidtmstart()//初始化ds18b20

{

sp=1;

d1=1;

d2=1;

dsrst();

delayms

(1);

dswr(0xcc);dswr(0x44);

}

voidread_dealtemp()//读取并处理温度

{

uchari,j,t;

uchara,b;

for(j=0;j<4;j++)

{

dsrst();

delayms

(1);

dswr(0x55);

for(i=0;i<8;i++)

发送64位序列号

{

dswr(lcdrom[j][i]);//

dswr(0xbe);

a=dsrd();

b=dsrd();

tvalue=b;

tvalue<<=8;tvalue=tvalue|a;

if(tvalue<0)

{

d1=1;

tvalue=~tvalue+1;wrcom(0xc0);

wrdat(0x2d);if(tvalue>warnl)

{

d2=0;

sp=0;

}

else

{

d2=1;

sp=1;

else

{

d2=1;wrcom(0xc0);wrdat('');

if(tvalue>warnh){

d1=0;

sp=0;

}

else

{

d1=1;

sp=1;

}

}

if(j==0)

{

wrcom(0x8e);

wrdat('2');

}

if(j==1)

wrcom(0x8e);

wrdat('3');

}

if(j==2)

{

wrcom(0x8e);

wrdat('4');

}

if(j==3)

{

wrcom(0x8e);

wrdat('5');

}ftvalue=tvalue*;

tvalue=ftvalue*10+;

ftvalue=ftvalue+;

f[j]=tvalue;//温度扩大十倍,精确到一位小数tvalue=f[j];

t=tvalue/1000;

wrcom(0x80+0x41);

wrdat(table1[t]);//显示百位t=tvalue%1000/100;

t=tvalue%100/10;

wrdat(table1[t]);//

显示个位

wrdat(0x2e);//

显示小数点儿

t=tvalue%10/1;

wrdat(table1[t]);//

显示小数位

}

delayms(5000);

}

/****

主函数****/

voidmain()

{

d1=1;

d2=1;

sp=1;

displayinit();//初始化显示

while

(1)

{

tmstart();//初始化

read_dealtemp();//读取温度

}

}

/****序列号读取程序****/

#include<>

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P1A1;

//

温度传感器

信号线

sbitrs=P1A4;

//LCD

数据/命

令选择端(H/L)位声明

sbitlcden=P1A6;//LCD

使能信号端位

声明

voiddelay(uintz);

//

延时函

voidDS18B20_Reset(void);

//DQ18B20

复位,初始化函数

bitDS18B20_Readbit(void);

//

读1位数据函数

ucharDS18B20_ReadByte(void);

//

读1个字节数

据函数

voidDS18B20_WriteByte(uchardat);

//

向DQ18B20写一

个字节数据函数

voidLCD_WriteCom(ucharcom);

//1602

液晶命

令写入函数

voidLCD_WriteData(uchardat);

//1602

液晶数

据写入函数voidLCD_Init();//LCD初始化函数

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

/*主函数

*/

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

voidmain()

{uchara,b,c,d,e,f,g,h;

LCD_Init();

DS18B20_Reset();

delay

(1);

DS18B20_WriteByte(0x33);

delay

(1);

a=DS18B20_ReadByte();

b=DS18B20_ReadByte();

c=DS18B20_ReadByte();

d=DS18B20_ReadByte();

e=DS18B20_ReadByte();

f=DS18B20_ReadByte();

g=DS18B20_ReadByte();

h=DS18B20_ReadByte();LCD_WriteCom(0x80+0x40);

Display18B20Rom(h);

Display18B20Rom(g);

Display18B20Rom(f);

Display18B20Rom(e);

Display18B20Rom(d);

Display18B20Rom(c);

Display18B20Rom(b);

Display18B20Rom(a);

while

(1);

}

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

/*延时函数:

voiddelay()

*/

/*功能:

延时函数

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

voiddelay(uintz)//延时函数

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

***********************************************

/*DS18B20函数:

voidDS18B20_Reset()

*/

/*功能:

复位18B20

*//***************************************************/voidDS18B20_Reset(void)//DQ18B20复位,初始化函数

uinti;

DQ=0;

i=103;

while(i>0)i--;

DQ=1;

i=4;

while(i>0)i--;

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

 

/*

DS18B20

函数:

voidDS18B20_Readbit()

*/

/*

功能:

读1个字节数据函数

 

 

*/

读1位数据函数

/***************************************************/bitDS18B20_Readbit(void)//

{

uinti;

bitdat;

DQ=0;

i++;//i++起延时作用

DQ=1;

i++;

i++;

dat=DQ;

i=8;

while(i>0)i--;

return(dat);

}

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

/*DS18B20函数:

voidDS18B20_ReadByte()

*/

/*功能:

读1个字节数据函数

*/

 

读1个字节数据函数

ucharDS18B20_ReadByte(void)//

{

uchari,j,dat;

dat=0;

for(i=1;i<=8;i++)

j=DS18B20_Readbit();dat=(j<<7)|(dat>>1);

}return(dat);

}

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

/*DS18B20函数:

voidDS18B20_WriteByte()

*/

/*功能:

向DQ18B20写一个字节数据函数

*/

 

向DQ18B20写一个

voidDS18B20_WriteByte(uchardat)//

字节数据函数

{

uinti;

ucharj;

bittestb;

for(j=1;j<=8;j++)

{

testb=dat&0x01;

dat=dat>>1;

if(testb)//写1

i++;i++;

DQ=1;

i=8;while(i>0)i--;

}

else

{

DQ=0;//写0i=8;while(i>0)i--;

DQ=1;

i++;i++;

}

}

}

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

/*LCD函数:

voidLCD_WriteCom()

*/

/*功能:

向LCD写入命令

*/voidLCD_WriteCom(ucharcom)

{

rs=0;

P3=com;delay(5);

lcden=0;delay(5);

lcden=1;delay(5);

lcden=0;

}

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

/*LCD函数:

voidLCD_WriteData(uchardat)*/

/*功能:

向LCD写入数据

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

voidLCD_WriteData(uchardat)

{

rs=1;//

择LCD为写入数据状态

lcden=0;

将待写入数据放

P3=dat;//到总线上

delay(5);

lcden=1;

能端一个脉冲

delay(5);//前放到总线上

lcden=0;//

入LCD

delay(5);

}/***********************************************/

/*LCD函数:

voidLCD_Init()

*/

/*功能:

初始化LCD设定LCD的初始状态

voidLCD_Init()

{

信号将之

的数据写

*/

针为自动加1

打开LCD显示,

delay(3);

LCD_WriteCom(0x0c);//

但不显示光标

/*

 

*/

/*显示18B20序列号

*//*

*/

 

******************************************

voidDisplay18B20Rom(charRom)

{

ucharh,l;

l=Rom&0x0f;//取低4位h=Rom&0xf0;//取高4位h>>=4;

if((h>=0x00)&&(h<=0x09))

//

LCD_WriteData(h+0x30);

ASCII码

else

LCD_WriteData(h+0x37);

//

ASCII码

if((l

>=0x00)&&(l<=0x09))

LCD_WriteData(l+0x30);

//

ASCII码

else

LCD_WriteData(l+0x37);

//

ASCII码

}

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2