简易温度计项目报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简易温度计
团队成员:蒋颂
刘其聪
摘要
【关键词】单片机 DS18B20 LCD1602
使用STC89C52控制处理温度传感器DS18B20的信号,并驱动1602显示实时温度。
[keyword] single-chip DS18B20 LCD1602
Using STC89C52 to control and process signal that DS18B20 generates ,meanwhile it drive LCD1602 display contemporary temperature
目录
摘要 (1)
前言 (3)
设计要求 (3)
任务分析 (3)
总体设计 (4)
硬件设计 (5)
软件设计 (6)
检测调试 (7)
总结 (8)
参考文献 (8)
附录 (9)
前言
本作品电源部分采用一块节3.7V 18650锂电池,温度测量范围-55℃~+55℃,电路板及各元件使用厚纸板固定及包装定型。
设计要求
利用单片机软硬件资源控制温度传感器完成温度检测,并将转换结果在液晶显示屏上显示。具体要求如下:
1.温度测量范围-30℃~ +60℃
2.测量精度:<0.1℃
3.利用字符型液晶模块显示当前温度值
任务分析
根据设计要求可知在该系统中单片机控制功能比较简单,因此从成本上考虑选用STC89C52。
由于热电偶电路硬件接口复杂、调试难度大、检测精度较低且元器件参数变化影响等等缺点,所以本系统设计拟采用单总线数字式温度传感器DS18B20,其具有硬件电路结构简单、转换精度高、成本低等特点。
显示模块选用LCD1602,它具有体积小、功耗低、显示内容丰富、使用方便等优点。
总体设计
据任务分析,该测温系统设计需一个温度检测电路、一个液晶显示电路、单片机最小系统电路、电源电路。系统结构图如下:
硬件设计
据任务分析,该温度计的硬件原理图如下图所示:
软件设计
检测调试
1.电路板检查: 对照元器件表,检查所有元器件的规格、型
号有无装配错误。按照原理图检查接线是否有错,集成电路模块有无反接等故障。
2.接通电源:检查电源电压和极性无误后给电路板上电。上
电后检查各引脚电位是否正常。
3.P roteus仿真:打开proteus,装载本系统的硬件仿真图,
将keil软件开发环境下编译生成的HEX文件装载到
proteus的仿真单片机里,运行软件,观察结果,若有不
符合设计要求的情况,调整源程序并重复上述步骤,直
到仿真结果符合设计要求为止。
4.将符合设计要求的源程序编译后生成的HEX文件通过
ISP烧写到单片机的ROM中。接上电源启动运行,观察
结果,若实际结果不符合设计要求,对硬件电路和软件
进行再次检查重复调试,直至出现正确结果为止。
设计总结
在本次作品从整体构思、功能设计、场景美化设计、可行性评估、制作成品等过程中,我遇到了许多最优解问题及材料特性限制问题,锻炼提高了我整体团队协作能力、程序设计能力、电子设计能力、封装与美化能力。
参考文献:
[1] 杨志忠《数字电子技术》[M] 高等教育出版社 2013.7
[2]张筱云李淑萍《单片机原理及接口技术项目教程》[M] 苏州大学出版2012.8
[3]李金祥顾小晶《实用C语言程序设计教程》[M] 中国电力出版社2010.6
附录:
#include
#include"lcd.h"
#include"temp.h"
void LcdDisplay(int);
void main()
{
LcdInit(); //初始化LCD1602
LcdWriteCom(0x88); //写地址80表示初始地址
LcdWriteData('C');
while(1)
{
LcdDisplay(Ds18b20ReadTemp());
// Delay1ms(1000);//1s钟刷一次
}
}
void LcdDisplay(int temp) //lcd显示
{
unsigned char datas[] = {0, 0, 0, 0, 0}; //定义数组float tp;
if(temp< 0) //当温度值为负数
{
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;
datas[4] = temp % 10;
LcdWriteCom(0x82); //写地址80表示初始地址
LcdWriteData('0'+datas[0]); //百位