找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1469|回复: 0
打印 上一主题 下一主题
收起左侧

基于51单片机的18B20温度检测- 微计算机应用综合实训报告

[复制链接]
跳转到指定楼层
楼主
ID:472874 发表于 2019-1-25 16:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     微计算机应用综合实训报告
课程名称:   微计算机应用综合实训     
           院 (系):
           专业班级:
           学生姓名:                  
           学    号:
           实践地点:   
           指导教师:
设计起止时间
基于51单片机的18B20温度检测
摘   要
随着时代的进步和发展,单片机技术已经普及到我们的生活、工作、科研各个领域,已经成为了一种比较成熟的技术,本文将介绍一种基于51单片机控制的温度检测仪。本设计使用简便,功能丰富。可以实现温度采集,温度报警,重设上下限度值等功能。
在现代化的工业生产中,需要对周围环境进行检测和控制。该系统使用STC89C51单片机,同时运用单线数字温度传感器DS18B20,四位共阳极数码管显示,按键控制等模块可实现温度的检测与设置。课题经过实验验证达到设计要求,具有一定的使用价值和推广价值。本作品使用四位共阳极数码管显示,可以清晰地显示当前的温度,快速准确,实用性很高。

目   录
1 绪论...4
1.1 实训内容.5
1.2 系统总体设计..5
2 protel学习..5
2.1 学习简介..5
2.2 原理图.6
2.3  PCB图.6
3 硬件电路.7
3.1 最小系统电路.7
3.2 数码管显示电路9
3.3 温度采集电路10
3.4 电路焊接10
4 软件设计.11
4.1 总体设计.11
4.2 温度采集子程序11
4.3 数码显示子程序12
4.4  protues仿真.13
4.5 硬件调试.13
参考文献13
附录..14

1绪 论
2009年6月14日随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。
本文主要介绍了一个基于89S51单片机的测温系统,详细描述了利用液晶显示器件传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感DS18B20的数据采集过程。对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
1.1   实训内容
通过基于C51系列单片机AT89C51和DS18B20温度传感器检测温度,熟悉芯片的使用,温度传感器的功能,数码显示管的使用,汇编语言的设计;并且把我们这大学所学的数字和模拟电子技术、检测技术、单片机应用等知识,通过理论联系实际,从题目分析、电路设计调试、程序编制调试到传感器的选定等这一完整的实验过程,培养了学生正确的设计思想,使学生充分发挥主观能动性,熟练掌握protues、protel、keil等软件,绘制PCB板,去独立解决实际问题,以达到提升学生的综合能力、动手能力、文献资料查阅能力的作用,为毕业设计和以后工作打下一个良好的基础。
1.2   系统总体设计
  采用AT89C51单片机作为控制核心对温度传感器DS18B20控制,读取温度信号并进行计算处理,并送到数码管显示器MSA10564显示。按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。数字温度计总体电路结构框图如图下所示。
2      protel学习
2.1   学习简介
(1)原理图设计步骤
查找所需原理图库文件并加载;
绘制所需原件;
绘制原理图;
注释原理图
(2)网络表的生成
网络报表由电路原理图生成,它包含原理图中元件的封装信息,是电路原理图设计和印制板设计之间的桥梁和纽带。
        (3)PCB设计步骤
设置PCB模板,放置安装孔;
检查网络表,并导入;
对所有元件进行布局;
按照元件的电气连接进行布线;
敷铜;
对整个PCB检错;
导出PCB文件,准备制作
2.2   原理图
2.3   PCB图
3      硬件设计
3.1   最小系统电路
  单片机最小系统板是散件由我们自己焊接的,如下图:
a、单片机控制模块
  该模块由AT89C51单片机组成在设计方面,AT89C51的EA接高电平,其外围电路提供能使之工作的晶振脉冲、复位按键,四个I/O分别接8路的单列IP座方便与外围设备连接。 当AT89C51芯片接到来自温度传感器的信号时,其内部程序将根据信号的类型进行处理,并且将处理的结果送到显示模块,发送控制信号控制各模块。
b、温度传感器模块
DS18B20相关资料
DS18B20原理与分析
DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。 以下是DS18B20的特点:
(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(2)在使用中不需要任何外围元件。
(3)可用数据线供电,电压范围:+3.0~ +5.5 V。
(4)测温范围:-55 - +125 ℃。固有测温分辨率为0.5 ℃。
(5)通过编程可实现9-12位的数字读数方式。
(6)用户可自设定非易失性的报警上下限值。
(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。
(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
3.2   数码管显示电路
市面上的四位一体数码管一般都没有固定的段码表,所以掌握它们管脚的分布是很重要的一个环节。
   四位一体数码管,其内部段已连接好,数码管的使用中还需注意以下几个问题:
   (1)数码管使用时的电流与电压。
   ①电流:静态时,推荐使用10~15mA;动态时,16/1动态扫描时,平均电流为.4—5mA,峰值电流为50~60mA。
   ②电压:查引脚排布图,看一下每段的芯片数量是多少?当红色时,使用1.9V乘以每段的芯片串联的个数;当绿色时,使用2.1V乘以每段的芯片串联的个数。
   (2)显示效果。
   由于发光二极管基本上属于电流敏感器件,其正向压降的分散性很大,并且还与温度有关,为了保证数码管具有良好的亮度均匀度,就需要使其具有恒定的工作电流,且不能受温度及其他因素的影响。另外,当温度变化时驱动芯片还要能够自动调节输出电流的大小以实现色差平衡温度补偿。
3.3   温度采集电路
DS18B20有三个引脚,VCC、DQ、GND。分别接高电平、输出引脚和接地。
3.4   电路焊接
  电路焊接尤其要注意数码管的引脚,还有三极管以及DS18B20的接法。
4      软件设计
4.1   总体设计
系统程序主要包括主程序、读出温度子程序、温度转换子程序、计算温度子程序、显示等等。
4.2   温度采集子程序
void WriteOneChar(unsigned char dat)
{
  unsigned char i=0;
  for (i=8; i>0; i--)
  {
  DQ = 0;
  DQ = dat&0x01;
  dsdelay(5);
  DQ = 1;
  dat>>=1;
  }
  dsdelay(4);}//读取温度
void  ReadTemperature(void)
{
   Init_DS18B20();
   WriteOneChar(0xCC); // 跳过读序号列号的操作
   WriteOneChar(0x44); // 启动温度转换
   Init_DS18B20();
   WriteOneChar(0xCC); //跳过读序号列号的操作
   WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
   TMPL=ReadOneChar();
   TMPH=ReadOneChar();  
   temp= ((TMPL>>4 | TMPH<<4)) +((TMPL&0x0F)*0.0625);}
4.3   数码显示子程序
    {  ReadTemperature();
      A1=temp%100/10;
      A2=temp%10;
       LED=0xff;         
      LED=table[A2];
     led3=0;
      led4=1;
    delay_nms(5);
    LED=0xff;         
     LED=table[A1];
     led3=1;
led4=0;  
   delay_nms(5);     }
4.4   PROTUES仿真
4.5   硬件调试
  硬件调试是件很艰辛的过程,遇到的问题很多。比如焊接过程中DS18B20组件被高温烫坏,导致调试是检测不到信号数码管数字不变,更换后由于没注意区分DS18B20的引脚导致引脚接错,直接导致组件功能异常。调试过程中数码管示数变化缓慢,后来更改延时程序得以解决。
参考文献
【1】梁森,欧阳三泰,王侃夫. 自动检测技术及应用【M】.北京:机械工业出版社.
【2】万隆.单片机原理及应用技术教程 清华大学出版社.
【3】李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,
【4】李广弟.单片机基础[M].北京:北京航空航天大学出版社.
【5】 康华光.数字电子技术基础(第四版). 北京:高等教育出版社.
附录
总程序
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LED  P2
sbit DQ=P1^3;
sbit led1=P3^0;
sbit led2=P3^1;
sbit led3=P3^2;
sbit led4=P3^3;
ucharcode table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned charTMPH,TMPL,temp;                      //温度值
uchar A1,A2;
//延时函数
void dsdelay(unsigned int i)
{
   while(i--);
}
void delay_nms(uchar n)
{
uchar i,j,k;
  for(k=0;k<n;k++)
     {
      for(j=0;j<15;j++)
         {
           for(i=0;i<21;i++)
            {;}
         }
      }
}
//初始化函数
void Init_DS18B20(void)
{
   unsigned char x=0;
   DQ = 1;    //DQ复位
   dsdelay(8);  //稍做延时
   DQ = 0;    //单片机将DQ拉低
   dsdelay(80); //精确延时 大于 480us
   DQ = 1;    //拉高总线
   dsdelay(14);
   x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
   dsdelay(20);
}
//读一个字节
unsigned charReadOneChar(void)
{
  unsigned char i=0;
  unsigned char dat = 0;
  for (i=8;i>0;i--)
   {
    DQ = 0; // 给脉冲信号
    dat>>=1;
    DQ = 1; // 给脉冲信号
    if(DQ)
     dat|=0x80;
    dsdelay(4);
   }
   return(dat);
}
//写一个字节
void WriteOneChar(unsignedchar dat)
{
   unsigned char i=0;
   for (i=8; i>0; i--)
   {
    DQ = 0;
    DQ = dat&0x01;
    dsdelay(5);
    DQ = 1;
    dat>>=1;
   }
   dsdelay(4);
}
//读取温度
void  ReadTemperature(void)
{
  Init_DS18B20();
  WriteOneChar(0xCC); // 跳过读序号列号的操作
  WriteOneChar(0x44); // 启动温度转换
  Init_DS18B20();
  WriteOneChar(0xCC); //跳过读序号列号的操作
  WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度
  TMPL=ReadOneChar();
  TMPH=ReadOneChar();
  
  temp= ((TMPL>>4 | TMPH<<4)) + ((TMPL&0x0F)*0.0625);
}
void main()
     {
         led1=0;
         led2=0;
         led3=0;
         led4=0;
        
     while(1)
        {
              ReadTemperature();
      A1=temp%100/10;
      A2=temp%10;
        LED=0xff;         
      LED=table[A2];
     led3=0;
      led4=1;
     delay_nms(5);
     LED=0xff;         
     LED=table[A1];
     led3=1;
     led4=0;
   delay_nms(5);            
        }
     }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表