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

上传人:b****2 文档编号:24224000 上传时间:2023-05-25 格式:DOCX 页数:13 大小:805.40KB
下载 相关 举报
单片机设计报告温度传感器.docx_第1页
第1页 / 共13页
单片机设计报告温度传感器.docx_第2页
第2页 / 共13页
单片机设计报告温度传感器.docx_第3页
第3页 / 共13页
单片机设计报告温度传感器.docx_第4页
第4页 / 共13页
单片机设计报告温度传感器.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

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

《单片机设计报告温度传感器.docx》由会员分享,可在线阅读,更多相关《单片机设计报告温度传感器.docx(13页珍藏版)》请在冰豆网上搜索。

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

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

1、设计题目

温度传感器

2、设计背景

温度测量在物理实验、医疗卫生、食品生产等领域,尤其在热学实验(如:

物体的比热容、汽化热、热功当量、压强温度系数等教学实验)中,有特别重要的意义。

目前温度计的发展很快,从原始的玻璃管温度计发展到了现在的热电阻温度计、热电偶温度计、数字温度计、电子温度计等等。

现在所使用的温度计通常都是精度为1℃和0.1℃的水银、煤油或酒精温度计,这些温度计的刻度间隔通常都很密,不容易准确分辨,读数困难,而且他们的热容量还比较大,达到热平衡所需的时间较长,因此很难读准,并且使用非常不方便。

本文所介绍与传统的温度计相比,具有读数方便、测温围广、测温准确等优点,其输出温度采用数字显示,主要供测温要求准确的场所和科研实验室使用。

2、设计目的

利用单片机及其外围电路完成远程温度检测系统设计。

通过本课题设计,学生能够掌握单片机硬件设计及其编程语言,掌握利用protel软件绘制电路图,提高根据实际情况进行单片机开发能力。

在电气工程及其自动化学科的培养方向上,提高针对具体问题的资料收集、自我学习、分析及处理能力。

学习protel软件,并绘制本课题的硬件电路图;熟悉单片机编程语言,并能用单片机C语言进行本课题的编程;通过本课题的设计,学习根据实际情况进行合理设计的方法,并能选择合适的器件实现系统功能。

3、设计原理

本设计是以51单片机为核心的温度传感器设计,该系统以STC89C516RD单片机为中心控制单元,由数码管显示模块,蜂鸣器警报模块组成,并预设温度报警上下限,系统启动后可以实时采集环境中的温度,并且当温度超出上下限的值以后蜂鸣器报警.

五、设计要求与容

1.用Protel等软件绘制原理图SCH的绘制;

2.画出电路原理图,并对元件进行正确的封装、合理布局、布线,完成PCB图。

3.小组成员掌握相关操作,完成各自的演示实验;

4.进行单片机仿真实验,按照设计任务书的要求对基础实验进行创新,达到预期目的。

六、主要过程

1.由老师布置设计任务,并对相关知识进行了讲述,并领取工具;

2.在老师的指导下,安装相关软件,对软件的常用操作进行学习;

3小组成员按照分配的任务展开工作。

主要是:

搜集相关资料,绘制SCH和PCB图,对程序进行修改完成相关创新;

4.进行仿真实验,对问题进行反馈,小组成员展开讨论;

5.递交设计结果及设计报告。

7、相关结果

1、设计原理图

2、由protel绘制的SCH图

3、由protel绘制的PCB图

4、基础设计仿真结果图

 

5、创新之后的仿真结果

(1)、程序

见附录1

(2)、结果

8、设计总结

这次课程设计的完成真的挺不容易的。

有的知识不太清楚,网上找的不符合课程设计要求,我们几个又跑到图书馆去找相关书籍,结果还是不太满意,最后还是求教于老师,还好老师有足够的耐心帮助我们完成课题设计。

虽然这次课程设计的完成有点吃力,但我还是挺珍惜课程设计的机会,因为它可以暴漏我自身的问题,让我更清楚的认识自己,同时,与组员之间讨论的时间多了,与老师接触的机会多了,锻炼了自己各个方面的能力。

而且,它是我们在校期间难得的实践机会。

在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上,不断收获喜悦,得到社会及他人对你的认可!

九、参考文献

电子CAD(Protel)教程中南大学

10、附录

附录1C++算法仿真程序(main.c)

/*******************************************************************************

*                 

*              普中科技

* 实 验 名 :

 18B20温度显示试验

* 实验说明       :

 LCD1602显示温度值。

* 连接方式       :

 见连接图

* 注    意 :

 

******************************************************************************/

#include

#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]); //显示小数点  

}

附录2C++算法仿真程序(lcd.c)

/*******************************************************************************

*                普中科技

-------------------------------------------------------------------------------

* 实 验 名 :

 18B20温度显示试验

* 实验说明       :

 LCD1602显示温度值。

* 连接方式       :

 见连接图

* 注    意 :

 

*******************************************************************************/

#include

#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]); //显示小数点  

}

 

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1