您好,欢迎访问三七文档
智能温度报警系统摘要:随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。关键词:单片机,数字控制,温度计,DS18B20,AT89S51ABSTRACTAlongwiththeprogressanddevelopmentsoftheages,amachinetechniquehasalreadymakewidelyavailableweareliving,work,theresearch,eachrealm,hasalreadybecomeakindoftocomparethematuretechnique,thistextwillintroduceakindofnumericalthermometerthatcontrolsaccordingtoamachine,thisthermometerbelongstothemulti-functionthermometer,canestablishthetopandbottomtoreporttothepolicethetemperature,beingthetemperaturenotwithinthescopeofestablish,canreporttothepolice.KeyWord:numeralcontrol,thermometer,DS18B20,AT89S52引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89S51,测温传感器使用DS18B20,用3位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。智能温度报警系统:主要参数序号参数数值备注1工作电压4V~6V直流2功率8W3温度测量量程0~99摄氏度4温度可设定值0~99摄氏度5误差范围精度误差小于0.5℃主要元器件序号名称作用个数1AT89S52单片机运算处理12DS1802传感器温度测量13数码管LG5011BSR温度显示44蜂鸣器温度报警15变压器变压16整流桥交流变直流17三端稳压器7805稳定电压值18AT24C02掉电存储器元件清单元件名称单位(只)型号参数备注温度传感器1DS18B20-55~100度5V单片机1AT89S52变压器1220V变9V9V/8W整流二极管4IN4007C1,C2230PC3,C6222UF/25VC41220UF/25VC512.2UF/25R1~R67100欧姆1/8WR7~R93510欧姆1/8WR10110K1/8WR11~R1554.7K1/8WR16,R17,R183510欧姆1/8WD01发光二极管白发红D11发光二极管白发蓝D2,D3,D53发光二极管红发红稳压管1LM7805Y11晶震11.0592HZS1~S33按键Q1~Q348550NPNU10~U156LG5011BSR7段数码管电路板2块掉电保护124c02电源线程序:#includereg52.h#includestdio.h#includeabsacc.hcodeunsignedcharseg7code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40};//显示段码sbitTMDAT=P3^1;//DS18B20的数据输入/输出脚DQ,根据情况设定sbitjia=P2^1;sbitjian=P2^0;sbithong=P1^0;//红色警告灯sbitsheng=P1^1;//蜂鸣器sbitlan=P1^2;//兰色灯bitwrite=0;//写24C08的标志;j=30;unsignedintsdata;//测量到的温度的整数部分unsignedcharxiaoshu1;//小数第一位unsignedcharxiaoshu2;//小数第二位unsignedcharxiaoshu;//两位小数bitfg=1;//温度正负标志////////24C08读写驱动程序////////////////////sbitscl=P3^4;//24c08SCLsbitsda=P3^5;//24c08SDAvoiddelay1(unsignedcharx){unsignedinti;for(i=0;ix;i++);;}voidflash(){;;}voidx24c08_init()//24c08初始化子程序{scl=1;flash();sda=1;flash();}voidstart()//启动(I方C)总线{sda=1;flash();scl=1;flash();sda=0;flash();scl=0;flash();}voidstop()//停止(I方C)总线{sda=0;flash();scl=1;flash();sda=1;flash();}voidwritex(unsignedcharj)//写一个字节{unsignedchari,temp;temp=j;for(i=0;i8;i++){temp=temp1;scl=0;flash();sda=CY;flash();scl=1;flash();}scl=0;flash();sda=1;flash();}unsignedcharreadx()//读一个字节{unsignedchari,j,k=0;scl=0;flash();sda=1;for(i=0;i8;i++){flash();scl=1;flash();if(sda==1)j=1;elsej=0;k=(k1)|j;scl=0;}flash();return(k);}voidclock()//(I方C)线时钟{unsignedchari=0;scl=1;flash();while((sda==1)&&(i255))i++;scl=0;flash();}////////从24c02的地址address中读取一个字节数据/////unsignedcharx24c08_read(unsignedcharaddress){unsignedchari;start();writex(0xa0);clock();writex(address);clock();start();writex(0xa1);clock();i=readx();stop();delay1(10);return(i);}//////向24c02的address地址中写入一字节数据info/////voidx24c08_write(unsignedcharaddress,unsignedcharinfo){EA=0;start();writex(0xa0);clock();writex(address);clock();writex(info);clock();stop();EA=1;delay1(50);}/*////////////24C08读写驱动程序完/////////////////////voidDelay2(unsignedinttc)//延时程序{while(tc!=0){unsignedinti;for(i=0;i100;i++);tc--;}}*///////////*显示延时程序*///////////////voidDelay(unsignedinttc){while(tc!=0){unsignedinti;for(i=0;i80;i++);tc--;}}////////////延时部分///////////////voidyanshi(unsignedintcount){unsignedchari;while(count--){for(i=0;i115;i++);}}/////////////发送复位///////////////voidfashong(void){unsignedchari;TMDAT=0;for(i=0;i103;i++);TMDAT=1;for(i=0;i4;i++);}bittmrbit(void)//读一位//{unsignedinti;bitdat;TMDAT=0;i++;TMDAT=1;i++;i++;//微量延时//dat=TMDAT;for(i=0;i8;i++);return(dat);}unsignedchartmrbyte(void)//读一个字节{unsignedchari,j,dat;dat=0;for(i=1;i=8;i++){j=tmrbit();dat=(j7)|(dat1);}return(dat);}voidtmwbyte(unsignedchardat)//写一个字节{unsignedcharj,i;bittestb;for(j=1;j=8;j++){testb=dat&0x01;dat=dat1;if(testb){TMDAT=0;//写0i++;i++;TMDAT=1;for(i=0;i8;i++);}else{TMDAT=0;//写0for(i=0;i8;i++);TMDAT=1;i++;i++;}}}voidtmstart(void)//发送ds1820开始转换{fashong();//复位yanshi(1);//延时tmwbyte(0xcc);//跳过序列号命令tmwbyte(0x44);//发转换命令44H,}voidtmrtemp(void)//读取温度{unsignedchara,b;fashong();//复位yanshi(1);//延时tmwbyte(0xcc);//跳过序列号命令tmwbyte(0xbe);//发送读取命令a=tmrbyte();//读取低位温度b=tmrbyte();//读取高位温度if(b0x7f)//最高位为1时温度是负{a=~a;b=~b+1;//补码转换,取反加一fg=0;//读取温度为负时fg=0}sdata=a/16+b*16;//整数部分xiaoshu1=(a&0x0f)*10/16;//小数第一位xiaoshu2=(a&0x0f)*100/16%10;//小数xiaoshu=xiaoshu1*10+xiaoshu2;//小数}voidDS18B20PRO(void){tmstart();//yanshi(5);//如果是不断地读取的话可以不延tmrtemp();//读取温度,执行完毕温度将存于}voidLed(){if(fg==1)//温度为正时显示的数据{P2=P2&0xef;P0=seg7code[sdata/10];//输Delay(2);P2=P2|0xf0;P2=P2&0xdf;P0=seg7code[sdata%10]|0x80;//输出个Delay(2);P2=P2|0xf0;P2=P2&0xbf;P0=seg7code[xiaoshu1];//输出小数点Delay(2);P2=P2|0xf0;P2=P2&0x7f;P0=seg7code[xiaoshu2];//输出小Delay(1);P2=P2|0xf0;Delay(2);P2=P2|0xf0;P2=P2&0xf7;P0=seg7code[j/10];//输出十位Delay(2);P2=P2|0x0f;P2=P2&0xfb;P0=seg7code[j%10]|0x80;//输出个位Delay(1);P2=P2|0x0f;/*P2=P2&0x7f;P0=seg7code[sdata/10];//
本文标题:智能温度报警系统
链接地址:https://www.777doc.com/doc-4447703 .html