温度监控系统程序设计Word下载.docx
《温度监控系统程序设计Word下载.docx》由会员分享,可在线阅读,更多相关《温度监控系统程序设计Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
报警功能:
上位机和下位机上均设置有报警功能,上位机中,采用语音或者警示灯报警,同时还有相关提示;
下位机则采用报警灯和报警蜂鸣器提示;
图1
图2
图3
图4
2)本文主要讲解上位机程序的编写(VC++),下位机串口通信程序编写(C51),以及温度传感器的驱动程序的编写(C51).
2.DS18B20及驱动程序
美国DALLAS公司生产的DS18B20,采用独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,测温范围-55℃~+125℃,固有测温分辨率0.5℃,工作电源:
3~5V/DC,在使用中不需要任何外围元件,测量结果以9~12位数字量方式串行传送,DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
因为一线通信接口,必须在先完成ROM设定,否则记忆和控制功能将无法使用。
主要首先提供以下功能命令之一:
1)读ROM,2)ROM匹配,3)搜索ROM,4)跳过ROM,5)报警检查。
这些指令操作作用在没有一个器件的64位光刻ROM序列号,可以在挂在一线上多个器件选定某一个器件,同时,总线也可以知道总线上挂有有多少,什么样的设备。
以下给出DS18B20的驱动程序:
typedefunsignedchar
BYTE;
typedefunsignedint
WORD;
typedefsignedchar
CHAR;
sbitDS18B20=P2^2;
//定义DS18B20温度传感器端口,接单片机P2.2口
BYTEbDS18B20Reset(void);
//sendresetandinitializationcommand
bitTmpreadByteBit(void);
//readabit
BYTEbTmpreadByte(void);
//readabytedate
voidTmpWriteByte(BYTE);
//writeabytetods18b20
voidTmpChange(void);
//DS18B20beginchange
WORDwGetTmp();
//getthetemperature
voidDelay1ms1(WORDwTime);
//Delaytimefuction
/****************************************************************************************
函数名:
DS18B20Reset(void)
功能:
sendresetandinitializationcommand
作者:
Koby
*****************************************************************************************/
BYTEbDS18B20Reset(void)
{
WORDwCnt;
DS18B20=0;
wCnt=103;
while(wCnt--);
DS18B20=1;
wCnt=4;
return(DS18B20);
}
TmpreadByteBit(void)
readabit
****************************************************************************************/
bitTmpreadByteBit(void)
WORDwCnt=0;
bitfgDat;
wCnt++;
//wCnt++forDelay1ms
fgDat=DS18B20;
wCnt=8;
return(fgDat);
TmpreadByte(void)
readabytedate
BYTEbTmpreadByte(void)
BYTEi,j,bData=0;
for(i=0;
i<
8;
i++){
j=TmpreadByteBit();
bData=(j<
<
7)|(bData>
>
1);
//读出的数据最低位在最前面,这样刚好一个字节在Data里
return(bData);
TmpWriteByte(BYTEbComond)
writeabytetoDS18B20
bData为指令码:
===================================================================================
ROM指令码
|
------------------------------------|----------------------------------------------
0x33
|
ReadROM(读ROM)
----------------------------------|----------------------------------------------
0x55
MatchROM(指定匹配芯片)
0xCC
Skip
ROM(跳跃ROM指令)
0xFO
SearchROM(搜索芯片)
0xEC
AlarmSearch(报警芯片搜索)
储存器指令码
0x4E
WriteScratchpad(向RAM中写数据)
0xBE
ReadScratchpad(从RAM中读数据)
0x48
CopyScratchpad(将RAM数据复制到EEPROM中)
0x44
ConvertT(温度转换)
0xB8
RecallEEPROM(将EEPROM中的报警值复制到RAM)
0xB4
ReadPowerSupply(工作方式切换)
************************************************************************************/
voidTmpWriteByte(BYTEbComond)
WORDi;
BYTEj;
bitfgTestb;
for(j=1;
j<
=8;
j++){
fgTestb=bComond&
0x01;
bComond=bComond>
1;
if(fgTestb){
//write1
i++;
i=8;
while(i--);
}
else
//write0
TmpChange(void)
DS18B20beginchange
voidTmpChange(void)
bDS18B20Reset();
Delay1ms1
(1);
TmpWriteByte(0xCC);
//addressalldriversonbus
TmpWriteByte(0x44);
//
initiatesasingletemperatureconversion
wGetTmp()
Getthetemperaturevalue
WORDwGetTmp()
WORDwTemp;
//variableoftemperature
floatfTemp;
BYTEbTmp1,bTmp2;
Delay1ms1
(2);
TmpWriteByte(0xBE);
bTmp1=bTmpreadByte();
bTmp2=bTmpreadByte();
wTemp=bTmp2;
wTemp=wTemp<
//twobyte
composeaintvariable
wTemp=wTemp|bTmp1;
fTemp=wTemp*0.0625;
wTemp=fTemp*10+0.5;
//放大10倍,四舍五入
returnwTemp;
Delay1ms(WORDwTime)
延时
voidDelay1ms1(WORDwTime)
WORDw1,w2;
if(wTime==0)return;
for(w1=wTime;
w1>
0;
w1--)
for(w2=100;
w2>
w2--);