文档介绍:该【单片机温度计代码(WORD档) 】是由【wawa】上传分享,文档一共【6】页,该文档可以免费在线阅读,需要了解更多关于【单片机温度计代码(WORD档) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..文档供参考,可复制、编制,期待您的好评与关注!#include<>//51系类单片机头文件#include""//包含对1602读写操作的头文件#include""//延时操作头文件#include""//包含对18B20操作的头文件#include<>sbitbeep=P3^0;//定义蜂鸣器信号线sbitled0=P1^0;//定义发光二极管端口sbitled1=P1^1;sbitled2=P1^2;sbitled3=P1^3;uintwarn_l1=270;//定义温度下限值温度*10uintwarn_l2=250;uintwarn_h1=320;uintwarn_h2=300;/******************************************************函数名称:deal(uintt)**函数功能:对18B20获取的温度进行相应的处理*入口参数:temp*出口参数:无********************************************************/voiddeal(uintt){if((t>warn_l2)&&(t<=warn_l1))//25~27度{led0=0;//第一个闪烁Delayms(20);led0=1;mdi();//蜂鸣器慢“滴”}//模拟开启制热elseif(t<=warn_l2)//<25度{led0=0;led1=0;//第一二灯闪烁Delayms(10);led0=1;led1=1;kdi();//蜂鸣器快“滴”}//模拟加大制热功率elseif((t>warn_h2)&&(t<=warn_h1))//30~32度{led2=0;//第三个灯闪烁Delayms(20);led2=1;mdi();//蜂鸣器慢“滴”1/6:..文档供参考,可复制、编制,期待您的好评与关注!}//模拟开启制冷elseif(t>=warn_h1)//>32度{led2=0;//第三四个灯闪烁led3=0;Delayms(10);led2=1;led3=1;kdi();//蜂鸣器快“滴”}//模拟加大制冷功率elsebeep=1;//温度正常}/******************************************************函数名称:display(uintt);*函数功能:显示温度*入口参数:t*出口参数:无********************************************************/voiddisplay(uintt){(0x80+12);//第一行第13列write_data(t/100+0x30);//十位+0X30转换为字符显示(0x80+14);write_data(t%100/10+0x30);(0x80+15);write_data(t%10+0x30);}/******************************************************函数名称:main(void);**函数功能:主函数*入口参数:无**出口参数:无********************************************************/voidmain(void){uchari=0;uinttemp=0;while(1){init();//LCD初始化tempchange();//温度转换_nop_();//稍作延时temp=get_temp();2/6:..文档供参考,可复制、编制,期待您的好评与关注!deal(temp);//温度处理_nop_();for(i=10;i>0;i--){display(temp());//温度处理}}#ifndef__18B20_h__//防止重复定义#define__18B20_h__#include<>#include<>#include""#include""externvoiddsreset(void);//函数声明外部可见externvoidtempwritebyte(uchardat);externbittempreadbit(void);externuchartempreadbyte(void);externvoidtempchange(void);externuintget_temp(void);##include""sbitbeep=P3^0;//定义蜂鸣器信号线sbitds=P2^7;//定义18B20信号线staticuinttemp=0;staticfloatf_temp=;/***************************************函数名称:dsreset(void)**函数功能:18B20初始化**入口参数:无**出口参数:无****************************************/voiddsreset(void){ds=1;//将数据线置高电平_nop_();//稍作延时,要尽可能短ds=0;//拉低数据线Delayus(40);//延时_nop_();ds=1;//将数据线拉高Delayus(14);//延时ds=1;//拉高数据线}3/6:..文档供参考,可复制、编制,期待您的好评与关注!/*********************************************函数名称:temwritebyte(uchardat)**函数功能:向18B20写一个字节**入口参数:dat**出口参数:无*********************************************/voidtempwritebyte(uchardat){uinti;for(i=0;i<8;i++)//一个字节有8位{ds=0;//将数据线拉低_nop_();//稍作延时,待数据稳定ds=dat&0x01;//低位在前,高位在后Delayus(3);//延时45us_nop_();_nop_();ds=1;//将数据线拉高dat>>=1;//左移一位,继续发送下一位}}/***************************************函数名称:tempreadbit(void)**函数功能:读一位数据**入口参数:无**出口参数:dat****************************************/bittempreadbit(void){uinti=0;//定义,做延时用bitdat;//义一位数据ds=0;i++;ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return(dat);//返回一位数据}/***************************************函数名称:tempreadbyte(void)**函数功能:读一个字节**入口参数:无**出口参数:dat****************************************/uchartempreadbyte(void)4/6:..文档供参考,可复制、编制,期待您的好评与关注!{uchari,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1);//读出的数据低位在前,刚好在一个字节dat里}return(dat);}/***************************************函数名称:tempchange(void)**函数功能:获取18B20温度转换**入口参数:无**出口参数:无****************************************/voidtempchange(void){dsreset();//18B20复位Delayms(1);//稍作延时tempwritebyte();//跳过读ROM指令tempwritebyte(0x44);//写温度转换指令}/*******************************************函数名称:get_temp(void)**函数功能:获取18B20寄存器中的数据**入口参数:无**出口参数:temp*****************************************/uintget_temp(void){uchara,b;dsreset();Delayms(1);tempwritebyte();//跳过ROMtempwritebyte(0xbe);//读暂存器a=tempreadbyte();//读低8位b=tempreadbyte();//读高8位temp=b;temp<<=8;//将两个字节合为一个字f_temp=temp*;//温度在寄存器中为12为,}5/6:..文档供参考,可复制、编制,期待您的好评与关注!voiddmsec(unsignedintcount){unsignedinti;while(count){i=115;while(i>0)i--;count--;}}6/6