1、报警功能:上位机和下位机上均设置有报警功能,上位机中,采用语音或者警示灯报警,同时还有相关提示;下位机则采用报警灯和报警蜂鸣器提示;图1图2图 3图4 2)本文主要讲解上位机程序的编写(VC+),下位机串口通信程序编写(C51),以及温度传感器的驱动程序的编写(C51).2.DS18B20及驱动程序美国DALLAS公司生产的 DS18B20,采用独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,测温范围 55125,固有测温分辨率0.5,工作电源: 35V/DC,在使用中不需要任何外围元件,测量结果以912位数字量方式串行传送,DS1
2、8B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。因为一线通信接口,必须在先完成ROM设定,否则记忆和控制功能将无法使用。主要首先提供以下功能命令之一: 1 )读ROM, 2 )ROM匹配, 3 )搜索ROM, 4 )跳过ROM, 5 )报警检查。这些指令操作作用在没有一个器件的64位光刻ROM序列号,可以在挂在一线上多个器件选定某一个器件,同时,总线也可以知道总线上挂有有多少,什么样的设备。以下给出DS18B20的驱动程序:typedef unsigned char BYTE;typedef unsigned int WORD;typedef signed
3、 char CHAR;sbit DS18B20 = P22;/定义DS18B20温度传感器端口,接单片机P2.2口BYTE bDS18B20Reset(void); /send reset and initialization commandbit TmpreadByteBit(void); /read a bitBYTE bTmpreadByte(void); /read a byte datevoid TmpWriteByte(BYTE); /write a byte to ds18b20void TmpChange(void);/DS18B20 begin changeWORD wGet
4、Tmp(); /get the temperaturevoid Delay1ms1(WORD wTime);/Delay time fuction/*函数名:DS18B20Reset(void) 功能:send reset and initialization command作者:Koby*/BYTE bDS18B20Reset(void)WORD wCnt;DS18B20=0;wCnt=103;while(wCnt-);DS18B20=1;wCnt=4;return(DS18B20);TmpreadByteBit(void)read a bit*/bit TmpreadByteBit(voi
5、d) WORD wCnt=0;bit fgDat;wCnt+;/wCnt+ for Delay1msfgDat=DS18B20;wCnt=8;return (fgDat);TmpreadByte(void)read a byte dateBYTE bTmpreadByte(void) BYTE i,j,bData=0;for(i=0;i8;i+)j=TmpreadByteBit();bData=(j1); /读出的数据最低位在最前面,这样刚好一个字节在Data里return(bData);TmpWriteByte(BYTE bComond)write a byte to DS18B20bDat
6、a为指令码:=ROM指令码 |-|-0x33 | Read ROM(读ROM)-|-0x55 Match ROM (指定匹配芯片)0xCC Skip ROM(跳跃ROM指令)0xFO Search ROM(搜索芯片)0xEC Alarm Search(报警芯片搜索) 储存器指令码 0x4E Write Scratchpad(向RAM中写数据) 0xBE Read Scratchpad(从RAM中读数据) 0x48 Copy Scratchpad(将RAM数据复制到EEPROM中) 0x44 Convert T(温度转换) 0xB8 Recall EEPROM(将EEPROM中的报警值复制到RA
7、M)0xB4 Read Power Supply(工作方式切换)*/void TmpWriteByte(BYTE bComond) WORD i;BYTE j;bit fgTestb;for(j=1;j1;if(fgTestb) /write 1i+;i=8;while(i-);else /write 0TmpChange(void)DS18B20 begin changevoid TmpChange(void)bDS18B20Reset();Delay1ms1(1);TmpWriteByte(0xCC);/ address all drivers on busTmpWriteByte(0x44);/ initiates a single temperature conversionwGetTmp() Get the temperature valueWORD wGetTmp() WORD wTemp; / variable of temperaturefloat fTemp;BYTE bTmp1,bTmp2;Delay1ms1(2);TmpWriteByte(0xBE);bTmp1=bTmpreadByte();bTmp2=bTmpreadByte();wTemp=bTmp2;wTemp=wTemp0;w1-) for(w2=100;w2w2-);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1