收藏 分销(赏)

单片机设计报告温度传感器.docx

上传人:可**** 文档编号:9877214 上传时间:2025-04-11 格式:DOCX 页数:17 大小:817.94KB
下载 相关 举报
单片机设计报告温度传感器.docx_第1页
第1页 / 共17页
单片机设计报告温度传感器.docx_第2页
第2页 / 共17页
点击查看更多>>
资源描述
一、 设计题目 温度传感器 二、 设计背景 温度测量在物理实验、医疗卫生、食品生产等领域,尤其在热学实验(如:物体的比热容、汽化热、热功当量、压强温度系数等教学实验)中,有特别重要的意义。目前温度计的发展很快,从原始的玻璃管温度计发展到了现在的热电阻温度计、热电偶温度计、数字温度计、电子温度计等等。现在所使用的温度计通常都是精度为1℃和0.1℃的水银、煤油或酒精温度计,这些温度计的刻度间隔通常都很密,不容易准确分辨,读数困难,而且他们的热容量还比较大,达到热平衡所需的时间较长,因此很难读准,并且使用非常不方便。本文所介绍与传统的温度计相比,具有读数方便、测温范围广、测温准确等优点,其输出温度采用数字显示,主要供测温要求准确的场所和科研实验室使用。 二、 设计目的 利用单片机及其外围电路完成远程温度检测系统设计。通过本课题设计,学生能够掌握单片机硬件设计及其编程语言,掌握利用protel软件绘制电路图,提高根据实际情况进行单片机开发能力。在电气工程及其自动化学科的培养方向上,提高针对具体问题的资料收集、自我学习、分析及处理能力。 学习protel软件,并绘制本课题的硬件电路图;熟悉单片机编程语言,并能用单片机C语言进行本课题的编程;通过本课题的设计,学习根据实际情况进行合理设计的方法,并能选择合适的器件实现系统功能。 三、 设计原理 本设计是以51单片机为核心的温度传感器设计,该系统以STC89C516RD单片机为中心控制单元,由数码管显示模块,蜂鸣器警报模块组成,并预设温度报警上下限,系统启动后可以实时采集环境中的温度,并且当温度超出上下限的值以后蜂鸣器报警. 五、设计要求与内容 1.用Protel等软件绘制原理图SCH的绘制; 2.画出电路原理图,并对元件进行正确的封装、合理布局、布线,完成PCB图。 3.小组成员掌握相关操作,完成各自的演示实验; 4.进行单片机仿真实验,按照设计任务书的要求对基础实验进行创新,达到预期目的。 六、主要过程 1.由老师布置设计任务,并对相关知识进行了讲述,并领取工具; 2.在老师的指导下,安装相关软件,对软件的常用操作进行学习; 3小组成员按照分配的任务展开工作。主要是:搜集相关资料,绘制SCH和PCB图,对程序进行修改完成相关创新; 4.进行仿真实验,对问题进行反馈,小组成员内展开讨论; 5.递交设计结果及设计报告。 七、 相关结果 1、设计原理图 2、由protel绘制的SCH图 3、由protel绘制的PCB图 4、基础设计仿真结果图 5、 创新之后的仿真结果 (1)、程序 见附录 1 (2)、结果 八、 设计总结 这次课程设计的完成真的挺不容易的。有的知识不太清楚,网上找的不符合课程设计要求,我们几个又跑到图书馆去找相关书籍,结果还是不太满意,最后还是求教于老师,还好老师有足够的耐心帮助我们完成课题设计。虽然这次课程设计的完成有点吃力,但我还是挺珍惜课程设计的机会,因为它可以暴漏我自身的问题,让我更清楚的认识自己,同时,与组员之间讨论的时间多了,与老师接触的机会多了,锻炼了自己各个方面的能力。而且,它是我们在校期间难得的实践机会。 在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上,不断收获喜悦,得到社会及他人对你的认可! 九、参考文献 电子CAD(Protel)教程 中南大学出版社 十、 附录 附录1 C++算法仿真程序 (main.c) /******************************************************************************* *                  *              普中科技 * 实 验 名  : 18B20温度显示试验 * 实验说明       : LCD1602显示温度值。 * 连接方式       : 见连接图 * 注    意  :  ******************************************************************************/ #include<reg51.h> #include"lcd.h" #include"temp.h" void LcdDisplay(int); void delay(unsigned int i) ;//延迟 sbit Beep =  P1^5 ; //定义全局变量 unsigned char datas[] = {0, 0, 0, 0, 0}; //定义数组 /******************************************************************************* * 函数名         : main * 函数功能    : 主函数 * 输入           : 无 * 输出           : 无 ******************************************************************************/ void main() { LcdInit();  //初始化LCD1602 LcdWriteCom(0x88); //写地址 80表示初始地址 LcdWriteData('C');  while(1) { LcdDisplay(Ds18b20ReadTemp()); // Delay1ms(1000);//1s钟刷一次         if(datas[1]==2&&datas[2]>=5||datas[1]>2) {          Beep= 1;      delay(5);      Beep= 0;      delay(5);  } } } /******************************************************************************* * 函数名         : delay() * 函数功能  : 延迟程序 * 输入           : i * 输出           : 无 *******************************************************************************/  void delay(unsigned int i) {     char j;     for(i; i > 0; i--)         for(j = 200; j > 0; j--); } /******************************************************************************* * 函数名         : LcdDisplay() * 函数功能    : LCD显示读取到的温度 * 输入           : v * 输出           : 无 *******************************************************************************/ void LcdDisplay(int temp)   //lcd显示 {     float tp;   if(temp< 0) //当温度值为负数    {    LcdWriteCom(0x80); //写地址 80表示初始地址     LcdWriteData('-');   //显示负 //因为读取的温度是实际温度的补码,所以减1,再取反求出原码 temp=temp-1; temp=~temp; tp=temp; temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 //算由?.5,还是在小数点后面。   }   else    {    LcdWriteCom(0x80); //写地址 80表示初始地址     LcdWriteData('+');  //显示正 tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量 //如果温度是正的那么,那么正数的原码就是补码它本身 temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 //算加上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]); //百位  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]); //显示小数点   } 附录 2 C++算法仿真程序 (lcd.c) /******************************************************************************* *                普中科技 ------------------------------------------------------------------------------- * 实 验 名  : 18B20温度显示试验 * 实验说明       : LCD1602显示温度值。 * 连接方式       : 见连接图 * 注    意  :  *******************************************************************************/ #include<reg51.h> #include"lcd.h" #include"temp.h" void LcdDisplay(int); void delay(unsigned int i) ;//延迟 sbit Beep =  P1^5 ; //定义全局变量 unsigned char datas[] = {0, 0, 0, 0, 0}; //定义数组 /******************************************************************************* * 函数名         : main * 函数功能    : 主函数 * 输入           : 无 * 输出           : 无 *******************************************************************************/ void main() { LcdInit();  //初始化LCD1602 LcdWriteCom(0x88); //写地址 80表示初始地址 LcdWriteData('C');  while(1) { LcdDisplay(Ds18b20ReadTemp()); // Delay1ms(1000);//1s钟刷一次         if(datas[1]==2&&datas[2]>=5||datas[1]>2) {          Beep= 1;      delay(5);      Beep= 0;    delay(5);  } } } /******************************************************************************* * 函数名         : delay() * 函数功能   :延迟程序 * 输入          : i * 输出          : 无 *******************************************************************************/  void delay(unsigned int i) {     char j;     for(i; i > 0; i--)         for(j = 200; j > 0; j--); } /******************************************************************************* * 函数名          : LcdDisplay() * 函数功能     : LCD显示读取到的温度 * 输入           : v * 输出            : 无 *******************************************************************************/ void LcdDisplay(int temp)   //lcd显示 {         float tp;   if(temp< 0) //当温度值为负数    {    LcdWriteCom(0x80); //写地址 80表示初始地址     LcdWriteData('-');   //显示负 //因为读取的温度是实际温度的补码,所以减1,再取反求出原码 temp=temp-1; temp=~temp; tp=temp; temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 //算由?.5,还是在小数点后面。   }   else    {    LcdWriteCom(0x80); //写地址 80表示初始地址     LcdWriteData('+');  //显示正 tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量 //如果温度是正的那么,那么正数的原码就是补码它本身 temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 //算加上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]); //百位  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]); //显示小数点   } 第 14 页 共 13 页 目 录 一、设计题目 1 二、设计背景 1 三、设计目的 1 四、设计原理 1 五、设计要求与内容 2 六、设计主要过程 2 七、相关结果 2 1.设计原理图 3 2.SCH原理图 4 3.PCB图 5 4.基础实验仿真结果 5 5.创新仿真结果 5 八、设计总结 6 1.组内分工 6 2.自我总结 6 3.组内评分 7 4.组长总结 8 九、参考文献 8 十、附 录 9
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服