多路温度采集系统Word文档下载推荐.docx
《多路温度采集系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《多路温度采集系统Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
{0x28,0x15,0x30,0xc5,0xb8,0x00,0x00,0x0b},
{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e},
{0x28,0x05,0x30,0xc5,0xb8,0x00,0x00,0x50}};
//4个器件的序列号,先读出单个序列号后填上才可以读取温度
uintf[4];
//结果是否为负温,“0”为正温,“1”为负温。
sbitDQ=P3^7;
//ds18b20与单片机连接口
sbitRS=P3^0;
sbitRW=P3^1;
sbitEN=P3^2;
unsignedcharcodestr0[]={"
temperature:
U"
};
unsignedcharcodestr5[]={"
"
uchardatadisdata[5];
uinttvalue;
//温度值
uchartflag[4];
//温度正负标志
/*************************LCD1602程序*****************************************************************/
voiddelay1ms(unsignedintms)//延时1毫秒(不够精确的)
{unsignedinti,j;
for(i=0;
i<
ms;
i++)
for(j=0;
j<
100;
j++);
}
voidwr_com(unsignedcharcom)//写指令//
{delay1ms
(1);
RS=0;
RW=0;
EN=0;
P2=com;
delay1ms
(1);
EN=1;
voidwr_dat(unsignedchardat)//写数据//
;
RS=1;
P2=dat;
voidlcd_init()//初始化设置//
{delay1ms(15);
wr_com(0x38);
delay1ms(5);
wr_com(0x08);
wr_com(0x01);
wr_com(0x06);
wr_com(0x0c);
voiddisplay(unsignedchar*p)//显示//
{
while(*p!
='
\0'
)
wr_dat(*p);
p++;
delay1ms
(1);
init_play()//初始化显示
{lcd_init();
wr_com(0x80);
display(str0);
wr_com(0xc0);
display(str5);
}
/*****************************************************************************
******************************DS18B20程序***************************************/
voiddelay_18B20(unsignedinti)//延时1微秒
while(i--);
voidds1820rst()/*ds1820复位*/
{unsignedcharx=0;
DQ=1;
//DQ复位
delay_18B20(4);
//延时
DQ=0;
//DQ拉低
delay_18B20(100);
//精确延时大于480us
//拉高
delay_18B20(40);
}
uchards1820rd()/*读数据*/
{unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
{DQ=0;
//给脉冲信号
dat>
>
=1;
DQ=1;
if(DQ)
dat|=0x80;
delay_18B20(10);
return(dat);
voidds1820wr(ucharwdata)/*写数据*/
{unsignedchari=0;
for(i=8;
i>
i--)
{DQ=0;
DQ=wdata&
0x01;
wdata>
/*******************发送ds1820开始转换/**************************************************************************************/
tmstart(void)//
{//
ds1820rst();
//复位//
//延时//
ds1820wr(0xcc);
//跳过序列号命令,对所有器件有效//
ds1820wr(0x44);
//发转换命令44H,//
}
/*****************************************************************************/
read_temp()/*读取温度值并转换*/
uchari,j;
//
uchara,b;
for(j=0;
4;
j++)//
ds1820wr(0x55);
//发送ROM匹配命令//
for(i=0;
8;
i++)//
ds1820wr(SN[j][i]);
//发送64位序列号//
}//
ds1820wr(0xbe);
//*读取温度*/
a=ds1820rd();
//连续读取两位温度//
b=ds1820rd();
tvalue=b;
tvalue<
<
=8;
tvalue=tvalue|a;
if(tvalue<
0xf800)
tflag[j]=0;
else
{tvalue=~tvalue+1;
tflag[j]=1;
f[j]=tvalue*(0.625);
//温度值扩大10倍,精确到1位小数
//return(f[4]);
/*******************************************************************/
voidds1820disp()//温度值显示
{ucharflagdat,i;
i++)
{tvalue=f[i];
disdata[0]=tvalue/1000+0x30;
//百位数
disdata[1]=tvalue%1000/100+0x30;
//十位数
disdata[2]=tvalue%100/10+0x30;
//个位数
disdata[3]=tvalue%10/1+0x30;
//小数位
if(tflag[i]==0)
flagdat=0x20;
//正温度不显示符号
flagdat=0x2d;
//负温度显示负号:
-
if(disdata[0]==0x30)
{disdata[0]=0x20;
//如果百位为0,不显示
if(disdata[1]==0x30)
{disdata[1]=0x20;
//如果百位为0,十位为0也不显示
if(i==0){wr_com(0x8d);
//第一个传感器在LCD第一行第14字符显示“1”
wr_dat('
1'
);
if(i==1){wr_com(0x8d);
//第二个传感器在LCD第一行第14字符显示“2”
2'
if(i==2){wr_com(0x8d);
//第三个传感器在LCD第一行第14字符显示“3”
3'
if(i==3){wr_com(0x8d);
//第四个传感器在LCD第一行第14字符显示“4”
4'
wr_com(0xc0);
//在LCD第二行第1个字符显示温度正负号
wr_dat(flagdat);
//显示符号位
wr_com(0xc1);
//在LCD第二行第2个字符显示百位温度值
wr_dat(disdata[0]);
//显示百位
wr_com(0xc2);
//在LCD第二行第3个字符显示十位温度值
wr_dat(disdata[1]);
//显示十位
wr_com(0xc3);
//在LCD第二行第4个字符显示个位温度值
wr_dat(disdata[2]);
//显示个位
wr_com(0xc4);
//在LCD第二行第5个字符显示小数点
wr_dat(0x2e);
//显示小数点
wr_com(0xc5);
//在LCD第二行第6个字符显示小数位温度值
wr_dat(disdata[3]);
//显示小数位
delay1ms(1500);
/********************主程序***********************************/
voidmain()
{init_play();
//初始化显示
while
(1)
{
tmstart();
//开始转换
read_temp();
//读取温度
ds1820disp();
//显示
/
2.程序二:
读取DS18B20序列号程序
读ROM时,只能有一个器件与单片机通信。
可以逐个相连来读出其ROM
uintsn[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10};
////////////////////////读取器件序列号子程序////////////////////////////
rom(void)
ds1820wr(0x33);
//发送读序列号子程序//
sn[0]=ds1820rd();
//连续读出64位ROM
sn[1]=ds1820rd();
sn[2]=ds1820rd();
sn[3]=ds1820rd();
sn[4]=ds1820rd();
sn[5]=ds1820rd();
sn[6]=ds1820rd();
sn[7]=ds1820rd();
{
{rom();
//调用读序列号子程序//
本文档部分内容来源于网络,如有内容侵权请告知删除,感谢您的配合!