您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于单片机的DS18B20数字温度计
课程设计报告设计题目:基于单片机的DS18B20数字温度计的设计学院:理学院专业:电子信息科学与技术班级:08级电子信息科学与技术(1)班学号:200831120107200831120114200831120124姓名:陈煜文林明彬吴瀚鑫电子邮件:linmingbin@stu.scau.edu.cn时间:2010年12月成绩:指导教师:刘丹理学院应用物理系课程设计(报告)任务书学生姓名陈煜文林明彬吴瀚鑫指导教师刘丹职称助教学生学号200831120107200831120114200831120124专业电子信息科学与技术题目基于单片机的DS18B20数字温度计的设计任务与要求1)以MCS-51系列单片机为核心器件,组成一个数字式温度计。2)采用数字式温度计传感器为检测器件,进行单点温度检测,检测精度为±0.5°C。3)温度显示采用3位LED数码管显示,两位整数,一位小数。4)具有键盘输入上、下限功能,超过上、下限温度时,进行声音报警。开始日期2010年12月10日完成日期20010年12月19日基于单片机的DS18B20数字温度计的设计学生:陈煜文林明彬吴瀚鑫指导教师:刘丹摘要:本文介绍了用STC89C52单片机、DS18B20温度传感器、74HC138、74HC245、4位共阴极数码管所设计的数字温度计电路,简要的说明电路图,并且给出了硬件组成及其功能以及用C语音编写的程序设计。关键词:STC89C52DS18B20温度传感器Abstract:WebrieflyintroducethedigitalthermometercircuitthatdesignedbyDS18B20,74HC138,74HC245,AT89S52andnixietube.Andgivesabriefdescriptionoftheelectriccircuit.What’smore,itintroduceeachpartofthehardwareandtheprogrammerthatcompiledbyCKeywords:STC89C52DS18B20一、硬件部分:本课程设计硬件主要分为温度传感器、STC89C52、74HC138、74HC245和数码管等五部分。1、温度传感器:DS18B20是美国DALLAS半导体公司推出的第一片支持“一线总线”接口电路的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供处理器处理。其特性如下:(1)适应电压范围宽,电压范围在3.0―5.5V,在寄生电源方式下可有数据线供电。(2)独特的单总线接口方式,它与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通信。(3)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。(4)在使用中不需要任何外围元件,全部传感器及转换电路集成在一只形如三极管的集成电路内。(5)测温范围-55℃―+125℃,在-10℃―+85℃时精度为±0.5℃。(6)可编程分辨率为9―12位,对应的可分辨温度分别为0.5℃,0.25℃,0.125℃,0.0625℃,可实现高精度测温。(7)在9位分辨率时,最多在93.75ms内把温度转换为数字;12位分辨率时,最多在750ms内把温度值转换为数字,显然速度更快。(8)测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。(9)负压特性。电源极性接反时,芯片不会因为发热而烧毁,但不能正常工作。2、STC89C5280C52是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。80C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,80C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。80C52有PDIP(40pin)和PLCC(44pin)两种封装形式。3、74HC138:74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC138译码器可接受3位二进制加权地址输入(A0,A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。74HC138特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。利用这种复合使能特性,仅需4片74HC138芯片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32(5线到32线)译码器。任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则74HC138亦可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。74HC138与74HC238逻辑功能一致,只不过74HC138为反相输出。4、74CH245:总线驱动器,典型的TTL型三态缓冲门电路。由于单片机等CPU的数据/地址/控制总线端口都有一定的负载能力,如果负载超过其负载能力,一般应加驱动器。另外,也可以使用74HC244等其他电路,74HC244比74HC245多了锁存器。二、电路电路图如下所示:在本电路中,单片机的P0口通过锁存器,连接到数码管的位选管脚,P2通过三八译码器,连接到数码管的段选管脚。增加锁存器和三八译码器的目的,主要是为了增加数码管的驱动电流,解决共阴极数码管因驱动不足而无法显示的问题。其次,蜂鸣器通过PNP型三极管驱动,当实际温度超过设定的温度界限时,P3.4管脚输出低电平时,蜂鸣器报警。3个按键分别接着P1.0--P1.2,按键按下时,向单片机输入低电平,单片机检测到低电平后坐出相应的动作。实物图如下所示:三、实验程序程序使用C语言编写,具体如下:#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintinttemp_h;//存储上限值inttemp_l;//存储下限值//inttempp;//存储用来比较的温度inttemp;//存储温度ucharshi;//存储十位数值ucharge;//存储个位数值ucharxiao;//存储小数点后第一位ucharflag1;//模式标志ucharflag3;//确认标志sbitkey1=P1^0;//模式转换sbitkey2=P1^1;//加1sbitkey3=P1^2;//确认sbitDS=P3^7;//定义DS18B20接口sbitfeng=P3^4;//定义蜂鸣器inttmp(void);voidtmpchange(void);voidtmpwritebyte(uchardat);uchartmpread(void);bittmpreadbit(void);voiddsreset(void);voiddelayb(uintcount);uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//不带小数点的共阴极数码管代码uchartable1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带小数点的工阴极数码管代码voidinit(){key1=1;key2=1;key3=1;flag1=0;flag3=0;temp_h=0;temp_l=0;}voiddelayms(unsignedintv){unsignedintm,n;for(m=v;m0;m--)for(n=73;n0;n--);}voiddisplay()//温度显示函数{shi=temp/100;//获取十位ge=temp%100/10;//获取个位xiao=temp%10;//获取小数点后第一位P2=0x00;P0=0x05;P2=table[shi];delayms(5);P2=0x00;P0=0x06;P2=table1[ge];delayms(5);P2=0x00;P0=0x07;P2=table[xiao];delayms(5);P2=0x00;}voiddisplay_h()//显示上限温度{shi=temp_h/10;ge=temp_h%10;xiao=0;P0=0x04;P2=0x76;//显示hdelayms(5);P2=0x00;P0=0x05;P2=table[shi];delayms(5);P2=0x00;P0=0x06;P2=table1[ge];delayms(5);P2=0x00;P0=0x07;P2=table[xiao];delayms(5);P2=0x00;}voiddisplay_l()//显示下限温度{shi=temp_l/10;ge=temp_l%10;xiao=0;P0=0x04;P2=0x38;//显示ldelayms(5);P2=0x00;P0=0x05;P2=table[shi];delayms(5);P2=0x00;P0=0x06;P2=table1[ge];delayms(5);P2=0x00;P0=0x07;P2=table[xiao];delayms(5);P2=0x00;}voidmain()//主函数{init();//调用初始化程序while(1)//大循环{while((flag1==0)&&(flag3==0))//模式0,显示温度,flag1作为模式标志位,0为显示模式,1为上限调整模式,2为下限调整模式{tmpchange();//温度转换temp=tmp();display();//调用温度显示函数if(key1==0)//按下key1,则转换到上限调整模式{delayms(200);flag1=1;key1=1;}}while((flag1==0)&&(flag3==1))//显示模式并开始比较{feng=1;tmpchange();//温度转换temp=tmp();display();//调用温度显示函数//temp=temp/10;while((temptemp_h)||(temptemp_l)){tmpchange();//温度转换temp=tmp();display();//调用温度显示函数feng=0;}}while(flag1==1)//模式1,上限调整模式{//temp_h=0;//给上限温度赋零while(flag1==1){display_h();if(key2==0){temp_h++;//key2=1;while(!key2)display_h();}if(key1==0)//按下key1,则转换到下限调整模式{//delayms(200);flag1=2;temp_h=temp_h*10;while(!key1);//key1=1;}if(key3==0)//按下key3,显示温度并开始比较{flag1=0;flag3=1;//key3=1;//tempp=tempp_h;temp_h=temp_h*10;while(!key3);}}}while(flag1==2)//模式2,下限调整模式{//temp_l=0;while(flag1==2){display_l();if(key2==0)
本文标题:基于单片机的DS18B20数字温度计
链接地址:https://www.777doc.com/doc-5553350 .html