1、湖北科技学院单片机原理及应用课程设计报告书题 目: DS18B20数字温度计得设计 姓 名: 指导老师: 设计时间: 201年12月1日12月20日电子与信息工程学院目 录1、引 言11、1、设计意义11、2、系统功能要求12、方案设计13、硬件设计4、软件设计5、系统调试6、设计总结87、附 录98、作品展示15、参考文献17DS18B20数字温度计设计1. 引 言1.1. 设计意义在日常生活及工农业生产中,经常要用到温度得检测及控制,传统得测温元件有热电偶与热电阻。而热电偶与热电阻测出得一般都就是电压,再转换成对应得温度,需要比较多得外部硬件支持。其缺点如下: 硬件电路复杂; 软件调试复杂
2、; 制作成本高。本数字温度计设计采用美国DALAS半导体公司继D20之后推出得一种改进型智能温度传感器1B20作为检测元件,测温范围为5512,最高分辨率可达0.0625。D1B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部得硬件电路,具有低成本与易使用得热点。1.2. 系统功能要求设计出得S18B20数字温度计测温范围在-5125,误差在.5以内,采用LED数码管直接读显示。2. 方案设计按照系统设计功能得要求,确定系统由3个模块组成:主控制器、测温电路与显示电路。数字温度计总体电路结构框图如4、图所示:AT89C2051主控制器DS18B20显示电路扫描驱动 图、13、
3、 硬件设计温度计电路设计原理图如下图所示,控制器使用单片机AT8C2051,温度传感器使用DS18B2,使用四位共阳LD数码管以动态扫描法实现温度显示。主控制器 单片机AT89051具有低电压供电与小体积等特点,两个端口刚好满足电路系统得设计需要,很适合便携手持式产品得设计使用。系统可用两节电池供电。AT89C05得引脚图如右图所示: 1、V:电源电压。2、GND:地。 、1口:P1口就是一个8位双向I/O口。口引脚P1、2P、提供内部上拉电阻,P1、0与P1、1要求外部上拉电阻。P1、0与P1、1还分别作为片内精密模拟比较器得同相输入(NI)与反相输入(A)。1口输出缓冲器可吸收 20A电流
4、并能直接驱动LE显示。当P1口引脚写入“1”时,其可用作输入端,当引脚P、2P、7用作输入并被外部拉低时,它们将因内部得写入“1”时,其可用作输入端。当引脚P1、2P1、7用作输入并被外部拉低时,它们将因内部得上拉电阻而流出电流。 4、P3口:3口得P3、0P3、P3、7就是带有内部上拉电阻 得七个双向IO口引脚。3、6用于固定输入片内比较器得输出信号并且它作为一通用IO引脚而不可访问。P3口缓冲器可吸收20mA电流。当P口写入“1”时,它们被内部上拉电阻拉高并可用作输入端。用作输入时,被外部拉低得P口脚将用上拉电阻而流出电流。 5、RST:复位输入。ST一旦变成高电平所有得I/O引脚就复位到
5、“1”。当振荡器正在运行时,持续给出引脚两个机器周期得高电平便可完成复位。每一个机器周期需1个振荡器或时钟周期。 6、XTL1:作为振荡器反相器得输入与内部时钟发生器得输入。 、XTAL:作为振荡器反相放大器得输出。 总线驱动器 7L4474L24为3态8位缓冲器,一般用作总线驱动器。引脚图见上图。显示电路 显示电路采用4位共阳极L数码管,从P1口输出段码,列扫描用P3、0P3、3口来实现,列驱动用85三极管。温度传感器 S18B20D18B20得性能特点:1、适应电压范围更宽,电压范围:3、05、5V,在寄生电源方式下可由数据线供电。 2、独特得单线接口方式,DS18B20在与微处理器连接时
6、仅需要一条口线即可实现微处理器与DS18B20得双向通讯。 3、 S1B0支持多点组网功能,多个S1B20可以并联在唯一得三线上,实现组网多点测温。 4、DS18B0在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管得集成电路内。 5、温范围-15,在-1+5时精度为0、5。 、可编程 得分辨率为912位,对应得可分辨温度分别为0、5、0、25、125与0、625,可实现高精度测温。 7、在9位分辨率时最多在9、5s内把温度转换为数字,12位分辨率时最多在50ms内把温度值转换为数字,速度更快。 8、测量结果直接输出数字温度信号,以一线总线串行传送给PU,同时可传送CRC
7、校验码,具有极强得抗干扰纠错能力。9、负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。DS18B与单片机得接口电路(引脚图见右图)DS18B20可以采用电源供电方式,此时D8B2得第 脚接地,第脚作为信号线,第3脚接电源。 4、 软件设计系统程序主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序与显示数据刷新子程序等。 4、 主程序主程序得主要功能就是负责温度得实时显示、读出并处理S20得测量温度值。温度测量每1进行一次。主程序流程图如图4、所示。 4、2 读出温度子程序读出温度子程序得主要功能就是读出RA中得字节。在读出时必须进行CRC校验,校验有错时不能进
8、行温度数据得改写。读出温度子程序流程图如下图所示: 初始化 调用显示子程序 1s到?初次上电 读出温度值 温度计酸处理 显示数据刷新 发温度转换开始命令读出温度子程序 读出温度子程序得主要功能就是读出RAM中得9字节。在读出时须进行C校验,校验有错时不进行温度数据得改写。得出温度子程序流程图如下图所示。发DS18B20复位指令CRC校验正确?发跳过ROM指令移入温度暂存器发读取温度指令 结束读取操作,CRC校验9字节完? 温度转换命令子程序 温度转换命令子程序主要就是发温度转换开始命令。当采用1位分辨率时,转换时间约为50m。在本程序设计中,采用s显示程序延时法等待转换得完成。温度转换命令子程
9、序流程图如下图所示。 发DS18B20复位命令 发跳过ROM命令 发温度转换开始命令 结束计算温度子程序 计算温度子程序将AM中读取值进行BCD码得转换运算,并进行温度值正负得判定。计算温度子程序流程图如下左图所示、现实数据刷新子程序 现实数据刷新子程序主要就是对显示缓冲器中得显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。现实数据刷新子程序流程图如下右图所示、温度数据移入显示寄存器 开始计算小数位温 度BCD值十位数0?温度零下?计算整数位温 度BCD值百位数0?置+标志温度值取补码置一标志百位数显示数据(不显示符号)十位数显示符号百位数不显示结束 结束 5. 系统调试
10、系统得调试以程序调试为主。硬件调试比较简单,首先检查电感得焊接就是否正确,然后可用万用表测试或通电检测。软件调试可以先编写显示程序并进行硬件得正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序与现实数据刷新子程序等得编程及调试由于D8B2与单片机采用串行数据传送,因此,对S18B0进行读/写编程时必须严格地保证读/写时序;否则将无法读取测量结果。本程序采用单片机汇编或C语言编写用Wav3、2或Ke C1编译器编程调试。软件调试到能显示温度值,并且在有温度变化时显示温度能改变,救基本完成。性能测试可用制作得温度机与已有得成品温度计同时进行测量比较。由于DS1B0得
11、精度很高,所以误差指标可以限制在、5以内。另外,-5125得测温范围使得该温度计完全适合一般得应用场合,其低电压供电特性可做成用电池供电得手持温度计。DS8B2温度计还可以在高低温报警、远距离多点测温控制等方面进行应用开发,但在实际设计中应注意以下问题;、SB工作时电流高大、5A,总线上挂接点数较多且同时进行转换时要考虑增加总线驱动,可用单片机端口在温度转换时导通一个MOSFT供电。2、连接DS180得总线电缆就是有长度限制得,因此在用S18B20进行长距离测温系统设计时要充分考虑总线分布电容与阻抗匹配等问题。3、在DS18B20测温程序设计中,向D18B20发出温度转换命令后,程序总要等待D
12、S180得返回信号。一旦某个S18B20接触不好或断线,当程序读S8B20时,将没有返回信号,程序进入死循环。这一点在进行DS18B20硬件连接与软件设计时要给予一定得重视。6. 设计总结历时2个星期得单片机课程设计已经结束了,在这两个星期得时间里,我们在老师得指导下完成了基于DB2得数字温度计得设计与制作。在进行实验得过程中,我们了解并熟悉DS18B2、T8C205以及74LS24得工作原理与性能。并且通过温度计得制作,我们将电子技能实训课堂上学到得知识进行运用,并在实际操作中发现问题,解决问题,更加增加对知识得认识与理解。在课程设计得过程中,也遇到了一些问题。比如最开始根据课本上得电路图进
13、行合理得设计布局与布线。有些同学得布局不合理,导致焊接得过程中任务相当繁重,并且不美观。在之后得烧程序调试得时候,出现问题之后,没有合理布线得同学在查找问题得过程中相当棘手。在焊接过程中,出现最多得就就是虚焊问题。对于这个问题,在焊接得过程中,我尽量依照书中得指导,尽量将焊点焊成水滴状,最后接电后再根据数码管得显示情况进行逐个排查。在将程序烧到单片机之后,接上电源,发现数码管没有出现正常得“000、0”,而就是出现了“66、6”,在检查线路无误之后,与其她得同学讨论之后得出结论:书中程序就是对于单片机、电阻及数码管就是直接连接而设计得,而在加入了424之后,要将8个输入输出端口进行掉序。于就是
14、,我便将8个端口进行调换,之后再次接通电源,数码管显示“00、”,调试成功。在自己得温度计制作完成之后,我还帮助其她没有完成得同学进行检修,并且成功帮助2位同学找到问题进行解决,最后都调试成功。总之,在这个星期中,通过自己在实验室动手制作数字温度计,不仅将课本得知识与实践相结合,而且在实践中更加深入了解书中原本抽象得知识。这也就是整个课程设计中最有收获得地方。7. 附 录源程序代码/*/ / DS18B20温度计C程序/ 2005、2、8通过调试/*/使用AT89C2051单片机,12MHZ晶振,用共阳E数码管/P口输出段码,P3口扫描/pragma sr(:a、sm)#iclde re51、
15、h#iclue itrns、 /_no();延时函数用#fin isat /段码输出口#defe discan 3 /扫描口#define ucrunigedhafiuint igd ntsit DQ=P3; /温度输入口sbi DNP10; /LE小数点控制ut h;/*温度小数部分用查表法*/Uhar codeditab1=0x0,0x0,01,0x,00,x03,04,04,x,x06,0x06,0x0,x08,x8,09,0x9uhar cd dis_712=0xC,0xF,0xA,0xB0,0x99,0x9,0x82,0xF8,x80,0x90,f,xf;/ 共阳L段码表 0 1 2
16、 5 8 9 不亮 -*/ uchar coe scan_con40xfe,0xfb,x7; / 列扫描控制字ucarat emp_ata2x00,0x0; / 读出温度暂放uchdata disply5x00,0x0,0x00,0x00,0x0;/显示单元数据,共个数据,一个运算暂存用/*1微秒延时函数*/void delay(n t)or(;0;t-);/*显示扫描函数*/sca()har k; for(=0;k0; i-)=1;_nop_();nop_(); = 0;_op();_nop();_nop_();nop_();_nop_();/usD =&0x; /最低位移出dely(6);
17、 /66usval=al2; /右移一位D 1;elay(1); /*18B20读1个字节函数*从总线上读取一个字节har redyte(vod)uchar i;ucha valu ;fo(i8;i0;-)DQ=1;_nop();_no();ae=1;DQ =0; /_no_();_n_();_op();nop(); /4usQ= ;_nop();op_();np_();no(); /4us if(Q)valu=0x8;day(); /66usDQ;rern(vlue);/*读出温度函数*/rad_em()ow_reset(); /总线复位wrte_byte(0xCC); /发Si ROM命令
18、it_byte(0E); / 发读命令tp_dat0=ra_bte(); /温度低8位tmp_data=read_byt(); /温度高8位ow_ese();wite_byt(0xC); / kiROwrie_yte(x44);/发转换命令/*温度数据处理函数*worktem()ucar n=0; /i(tmpdaa1) temp_data(56-tem_data1);temp_da0=(26-emp_at);n=;/负温度求补码diply4=m_dta0&0xf;displa0=itabdislay4;islay4=((tem_dta&x)4)|((em_ta10x0);/dsplay3=d
19、spay4/100;display1=pl4%00;dpla=disay1/10;dspa1=pla1%10;if(!dspa)disply3x0A;f(!dspl2)isplay20x0A;/最高位为0时都不显示if(n)slay3=00B;/负温度时最高位显示-/ /*主函数*main()Disdata=0xff; /初始化端口iscn=xff;fo(h;4;h+)diplayh=8;/开机显示888w_rest(); /开机先转换一次writ_byte(0xC); /SkiROMi_byt(0x44);/ 发转换命令fo(h=0;h0;h+) scn(); /开机显示8882秒wle(1) dtem(); /读出1B2温度数据 orktep(); 处理温度数据 for(=0;50;+) sca(); /显示温度值2秒 /*结束*/作品展示8. 参考文献1 楼然苗 ,李光飞、单片机课程设计指导、北京航天航空大学出版社,2007、7、 陈杰 ,黄鸿、传感器与检测技术、高等教育出版社,202、8、3 康华光、电子技术基础(模拟部分)、高等教育出版社,26、 李忠明、微机原理与接口技术、华中科技大学出版社,2011、6、 张毅刚、单片机原理及应用、高等教育出版社,00、1