多点温度采集原理图与C语言程序.docx
- 文档编号:7876132
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:9
- 大小:34.89KB
多点温度采集原理图与C语言程序.docx
《多点温度采集原理图与C语言程序.docx》由会员分享,可在线阅读,更多相关《多点温度采集原理图与C语言程序.docx(9页珍藏版)》请在冰豆网上搜索。
多点温度采集原理图与C语言程序
主要程序,已经实验通过
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^7;
sbitD1=P2^3;
sbitD2=P2^2;
sbitD3=P2^1;
sbitD4=P2^0;
sbitkey1=P3^3;
sbitkey2=P3^4;
sbitkey3=P3^5;
ucharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
ucharcodetabnum1[]={0x28,0x5B,0x2E,0xC7,0x02,0x00,0x00,0x62};
ucharcodetabnum2[]={0x28,0x38,0x0E,0x3B,0x02,0x00,0x00,0x63};
ucharcodetabnum3[]={0x28,0x39,0xF5,0x3A,0x02,0x00,0x00,0x0D};
uinttvalue;//温度值
uchartflag,flagdat,t,hh1;//温度正负标志
uchartt,kk,dd;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddelay_18B20(unsignedinti)//延时1微秒
{
while(i--);
}
voidds1820rst()//ds1820复位*
{unsignedcharx=0;
DQ=1;//DQ复位
delay_18B20(4);//延时
DQ=0;//DQ拉低
delay_18B20(100);//精确延时大于480us
DQ=1;//拉高
delay_18B20(40);
}
unsignedchards1820rd()//读数据
{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>0;i--)
{DQ=0;
DQ=wdata&0x01;
delay_18B20(10);
DQ=1;
wdata>>=1;
}
}
voidchangds18b20_1(uchara[8])//往18B20写序列号
{
ds1820rst();
delay
(1);
ds1820wr(0x55);//285B2EC702000062
delay
(1);
ds1820wr(a[0]);
ds1820wr(a[1]);
ds1820wr(a[2]);
ds1820wr(a[3]);
ds1820wr(a[4]);
ds1820wr(a[5]);
ds1820wr(a[6]);
ds1820wr(a[7]);
}
read_temp1()//读取温度值并转换
{uchara,b;
ds1820rst();
changds18b20_1(tabnum1);//写序列号
ds1820wr(0x44);//启动温度转换
ds1820rst();
changds18b20_1(tabnum1);
ds1820wr(0xbe);//读取温度
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
return(tvalue);
}
read_temp2()//读取温度值并转换
{uchara,b;
ds1820rst();
changds18b20_1(tabnum2);//写序列号
ds1820wr(0x44);//启动温度转换
ds1820rst();
changds18b20_1(tabnum2);
ds1820wr(0xbe);//读取温度
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
return(tvalue);
}
read_temp3()//读取温度值并转换
{uchara,b;
ds1820rst();
changds18b20_1(tabnum3);//写序列号
ds1820wr(0x44);//启动温度转换
ds1820rst();
changds18b20_1(tabnum3);
ds1820wr(0xbe);//读取温度
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
return(tvalue);
}
voiddisp_temper(uinttemper)//温度值显示
{
uchartemper_ge,temper_shi,temper_bai;
//temper=read_temp();//读取温度
temper_ge=temper%10;
temper_shi=temper%100/10;
temper_bai=temper/100;
if(tflag==1)
{
D4=0;
P0=0xbf;
delay(5);
D4=1;
}
D3=0;
P0=tab[temper_bai];
delay(5);
D3=1;
D2=0;
P0=tab[temper_shi+10];
delay(5);
D2=1;
D1=0;
P0=tab[temper_ge];
delay(5);
D1=1;
}
voidkeyscan()
{
if(key1==0)
{
delay(50);
if(key1==0)
{
tt=1;//选择温度传感器的标志位
kk=0;
dd=0;
}
}
if(key2==0)
{
delay(50);
if(key2==0)
{
tt=0;
kk=1;
dd=0;
}
}
if(key3==0)
{
delay(50);
if(key3==0)
{
tt=0;
kk=0;
dd=1;
}
}
}
voidmain()
{
//kk=3;
uinttemper1;
ds1820rst();
delay
(1);
ds1820wr(0xcc);//跳过读序列号
ds1820wr(0x44);//启动温度转换
delay(200);
while
(1)
{
keyscan();
if(tt==1)
{
temper1=read_temp1();//读取温度
disp_temper(temper1);
}
if(kk==1)
{
temper1=read_temp2();//读取温度
disp_temper(temper1);
}
if(dd==1)
{
temper1=read_temp3();//读取温度
disp_temper(temper1);
}
disp_temper(temper1);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多点 温度 采集 原理图 语言 程序