- 164.50 KB
- 12页
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
'简易温度计团队成员:蒋颂刘其聪11
摘要【关键词】单片机DS18B20LCD1602使用STC89C52控制处理温度传感器DS18B20的信号,并驱动1602显示实时温度。[keyword]single-chipDS18B20LCD1602UsingSTC89C52tocontrolandprocesssignalthatDS18B20generates,meanwhileitdriveLCD1602displaycontemporarytemperature11
目录摘要………………………………………………………………………………1前言………………………………………………………………………………3设计要求…………………………………………………………………………3任务分析…………………………………………………………………………3总体设计…………………………………………………………………………4硬件设计…………………………………………………………………………5软件设计…………………………………………………………………………6检测调试…………………………………………………………………………7总结………………………………………………………………………………8参考文献…………………………………………………………………………8附录………………………………………………………………………………911
前言本作品电源部分采用一块节3.7V18650锂电池,温度测量范围-55℃~+55℃,电路板及各元件使用厚纸板固定及包装定型。设计要求利用单片机软硬件资源控制温度传感器完成温度检测,并将转换结果在液晶显示屏上显示。具体要求如下:1.温度测量范围-30℃~+60℃2.测量精度:<0.1℃3.利用字符型液晶模块显示当前温度值任务分析根据设计要求可知在该系统中单片机控制功能比较简单,因此从成本上考虑选用STC89C52。由于热电偶电路硬件接口复杂、调试难度大、检测精度较低且元器件参数变化影响等等缺点,所以本系统设计拟采用单总线数字式温度传感器DS18B20,其具有硬件电路结构简单、转换精度高、成本低等特点。显示模块选用LCD1602,它具有体积小、功耗低、显示内容丰富、使用方便等优点。11
总体设计据任务分析,该测温系统设计需一个温度检测电路、一个液晶显示电路、单片机最小系统电路、电源电路。系统结构图如下:11
硬件设计据任务分析,该温度计的硬件原理图如下图所示:11
软件设计11
检测调试1.电路板检查:对照元器件表,检查所有元器件的规格、型号有无装配错误。按照原理图检查接线是否有错,集成电路模块有无反接等故障。2.接通电源:检查电源电压和极性无误后给电路板上电。上电后检查各引脚电位是否正常。3.Proteus仿真:打开proteus,装载本系统的硬件仿真图,将keil软件开发环境下编译生成的HEX文件装载到proteus的仿真单片机里,运行软件,观察结果,若有不符合设计要求的情况,调整源程序并重复上述步骤,直到仿真结果符合设计要求为止。4.将符合设计要求的源程序编译后生成的HEX文件通过ISP烧写到单片机的ROM中。接上电源启动运行,观察结果,若实际结果不符合设计要求,对硬件电路和软件进行再次检查重复调试,直至出现正确结果为止。11
设计总结在本次作品从整体构思、功能设计、场景美化设计、可行性评估、制作成品等过程中,我遇到了许多最优解问题及材料特性限制问题,锻炼提高了我整体团队协作能力、程序设计能力、电子设计能力、封装与美化能力。参考文献:[1]杨志忠《数字电子技术》[M]高等教育出版社2013.7[2]张筱云李淑萍《单片机原理及接口技术项目教程》[M]苏州大学出版2012.8[3]李金祥顾小晶《实用C语言程序设计教程》[M]中国电力出版社2010.611
附录:#include#include"lcd.h"#include"temp.h"voidLcdDisplay(int);voidmain(){LcdInit();//初始化LCD1602LcdWriteCom(0x88);//写地址80表示初始地址LcdWriteData("C");while(1){LcdDisplay(Ds18b20ReadTemp());//Delay1ms(1000);//1s钟刷一次}}voidLcdDisplay(inttemp)//lcd显示{unsignedchardatas[]={0,0,0,0,0};//定义数组floattp;if(temp<0)//当温度值为负数11
{LcdWriteCom(0x80);//写地址80表示初始地址LcdWriteData("-");//显示负//因为读取的温度是实际温度的补码,所以减1,再取反求出原码temp=temp-1;temp=~temp;tp=temp;temp=tp*0.0625*100+0.5;}else{LcdWriteCom(0x80);//写地址80表示初始地址LcdWriteData("+");//显示正tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量//如果温度是正的那么,那么正数的原码就是补码它本身temp=tp*0.0625*100+0.5;}datas[0]=temp/10000;datas[1]=temp%10000/1000;datas[2]=temp%1000/100;datas[3]=temp%100/10;11
datas[4]=temp%10;LcdWriteCom(0x82);//写地址80表示初始地址LcdWriteData("0"+datas[0]);//百位LcdWriteCom(0x83);//写地址80表示初始地址LcdWriteData("0"+datas[1]);//十位LcdWriteCom(0x84);//写地址80表示初始地址LcdWriteData("0"+datas[2]);//个位LcdWriteCom(0x85);//写地址80表示初始地址LcdWriteData(".");//显示‘.’LcdWriteCom(0x86);//写地址80表示初始地址LcdWriteData("0"+datas[3]);//显示小数点LcdWriteCom(0x87);//写地址80表示初始地址LcdWriteData("0"+datas[4]);//显示小数点}11'