找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机数字体温计的实物制作与课设总结报告下载

[复制链接]
跳转到指定楼层
楼主
ID:267736 发表于 2018-1-13 02:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

系统调试及结果

六、总结

通过本次课设,了解了好多知识,首先,对于思路上来说,首先要确定方案,这次课设从起初选择DS18B20不能够精确地测量人体体温,听从老师的建议后,改用热敏电阻,经过查资料后,选择了几种方案,一个是利用桥式电路测输出电压,还有就是用串联分压进行测量。因为桥式电路没有很好的测量出,所以本系统使用串联分压式。其次,做课设要靠自己的努力去完成,不能靠其他人,或者走捷径。本人就是通过查找资料自己确定一个方向,通过同学的指导,完成了软件部分的编程。最后,经过自己的努力以及别人的帮助,我成功地做出了数字体温计的实物,并用它测出了人体指尖的温度,误差也在允许的范围之内。

总之,这次的单片机课程的设计,在一次一次地查找资料过程中让我再一次了解单片机的工作原理,增加了自己的知识面,对今后的学习生活有很大的帮助。

附录一:

电路图

附录二

实物图

引言
随着以知识经济为特征的信息化时代的到来人们对仪器仪表的认识更加深入,温度作为一个重要的物理量,是工业生产过程中最普遍,最重要的工艺参数之一。随着工业的不断发展,对温度的测量的要求也越来越高,而且测量的范围也越来越广,对温度的检测技术的要求也越来越高,因此,温度测量及其测量技术的研究也是一个很重要的课题。

目录
方案的选择1
1.1方案一1
1.2方案二1
硬件电路简介2
2.1AT89C51简介2
ADC0809简介5
2.3 LCD1602简介8
软件设计11
3.1 主程序流程图11
3.2 部分程序11
四、硬件电路图12
    4.1 温度检测原理12
    4.2 A/D转换部分硬件电路图13
    4.3 显示部分硬件电路图14
五、系统调试及结果14
六、总结15
附录一16
附录二17
附录三17

一、方案的选择
1.1方案一
本方案主要是在温度检测部分利用了一款新型的温度检测芯片DS18B20,这个芯片大大简化了温度检测模块的设计,它无需A/D转换,可直接将测得的温度值以二进制形式输出。该方案的原理框图如图1.1和所示:

图1.1 方案(一)系统结构框图
DS18B20是美国达拉斯半导体公司生产的新型温度检测器件,它是单片结构,无需外加A/D即可输出数字量,通讯采用单线制,同时该通讯线还可兼作电源线,即具有寄生电源模式。它具有体积小、精度易保证、无需标定等特点,特别适合与单片机合用构成智能温度检测及控制系统。

1.2 方案二
温度检测部分采用传统的热敏电阻,热敏电阻的阻值随环境温度变化而变化,经A/D转换器ADC0809将其转换为单片机可识别得二进制数字量,单片机主要控制LCD显示器显示正确的温度值,LCD显示器实现显示功能。原理框图如图1.2所示
  
图1.2  方案二系统结构图
方案(二)与方案(一)相比,它最大的特点就是它能检测的温度范围很大,热敏电阻的性能决定了整个设计的所能检测的温度范围。方案(一)的温度检测范围已经由系统中的DS18B20的特性所决定,它能检测的温度范围为-55℃到120℃,且误差在0.5℃,其温度检测范围很宽,已能足够满足一般测量需要,从整体上来看方案(二)比方案(一)更具有实际的锻炼意义,因为我们方案(一)是利用现有的智能温度传感芯片DS18B20,他无需A/D转换,直接输出数字量,所以本设计中所使用的温度测量电路是方案(二)的电路。


2.2 ADC0809介绍

    ADC0809是8位逐次逼近式ADC转换器,它能分时地对8路模拟量信号进行AD转换,结果为8位二进制数据。

ADC0809的主要功能如下:

  • 分辨率为8位
  • 总的不可调误差在±1/2LSB和1LSB范围内
  • 典型转换时间为100μs
  • 具有锁存控制的8路多路开关
  • 具有三态缓冲输出控制
  • 单一+5V供电,此时输入范围为0~+5V
  • 输出与TTL兼容
  • 工作温度范围-40~85℃

   ADC0809的引脚功能:

      引脚图如图2.2

  (1)8路模拟电压输入线(共8根):IN7~IN0:用于输入被转换的模拟电压。

   (2)地址输入和控制线(共4根):C、B、A:3根地址线,与ALE配合使用可控制8路模拟开关工作,达到选择模拟量输入通道的作用。

    ALE:地址锁存允许输入线,高电平有效。当ALE线为高电平时,C、B、A这三条地址线上的地址信号得以锁存。

   (3)数字量输出及控制线(共11根):START:“启动脉冲”输入线,该线上的正脉冲由CPU送来,宽度应大于100ns,上升沿清零SAR,下降沿启动ADC工作。

    EOC:转换结束输出线,该线上的高电平表示AD转换已经结束,数字量已锁入“三态输出锁存器”。

    D7~D0:数字量输出线,共8根。D7为最高位。

    OE:“输出允许”线,高电平时能使用D7~D0引脚上输出转换后的数字量。

    (4)电源线及其他(5根):CLOCK:时钟输入线,用于为ADC0809提供逐次比较所需640kHz时钟脉冲序列。

    Vcc:+5V正电源电压输入线。

GND:地线。

图2.2  ADC0809引脚图

ADC0809真值表如表1:

ALE

CBA

接通信号

1

000

IN0

1

001

IN1

1

010

IN2

1

011

IN3

1

100

IN4

1

101

IN5

1

110

IN6

1

111

IN7

0

×××

均不通

表1 ADC0809真值表

2.3 LCD1602简介

LCD1602是一种专门用来显示字母、数字、符号等的点阵型液晶模块,每行显示16个字符,一共可显示两行。它的温度范围很窄,通常为0~+55℃,存储范围为-22~+60℃。引脚图如图2.3

             图2.3 LCD1602引脚图

  • 主要技术参数

     显示容量:16×2个字符。

     工作电压:4.5~5.5V。

     模块最佳工作电压:5.0V。

     字符尺寸:2.95㎜×4.35㎜(W×H)。

(2)引脚功能

1脚:Vss,电源地。

2脚:Vᴅᴅ,电源正极。

3脚:Vᴇᴇ,液晶显示器对比度调整端,接正电源时,对比度最弱,接地时对比度最高。对比度过高会会产生“鬼影”,使用时,可通过一个10kΩ的电位器调整度。

4脚:RS,数据/命令选择端,高电平时选择数据寄存器,低电平时,选择指令寄存器。

5脚:R/,读写信号线。高电平时进行读操作,低电平时进行写操作。4、5脚合作完成的功能如表2:

表2   4、5引脚合作功能表

RS(4)

R/(5)

功能

0

0

可写入指令或显示地址

0

1

读忙信号或读取地址计时器的内容

1

0

写入数据

1

1

读取DDRAM或GGRAM中的内容

       6脚:E,使能端。当E端为下降沿(高电平变成低电平)时,液晶模块写指令或写数据;当E为高电平时,为读状态或读数据。4~6脚共同合作实现的功能如表3:

表3       4~6引脚合作功能表

RS(4)

R/(5)

E

功能

0

0

下降沿

写指令,DB7~DB0=指令码,输出无

0

1

1

读状态,输出:DB7~DB0=状态字

1

0

下降沿

写数据,DB7~DB0=数据,输出无

1

1

1

读数据,输出:DB7~DB0=数据

    7~14脚:DB0~DB7,8位双向数据线。

15脚:背光源正极。

16脚:背光源负极。

   (3)RAM和ROM以及地址映射

    DDRAM就是显示数据RAM,用来寄存待显示的字符代码,共80个字节,这80个字节的地址为00H~27H和40H~67H,每一个地址内可以装载一个待显示的字符代码。

DDRAM中80个字节地址与屏幕的对应关系如下:

地址

显示位置

0

1

2

……

39

DDRAM地址

第0行

00H

01H

02H

……

27H

第1行

40H

41H

42H

……

67H

DDRAM字节地址与1602液晶屏幕的对应关系如下:

地址

位置

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

DDRAM地址

第0行

00H

01H

02H

03H

04H

05H

06H

07H

08H

09H

0AH

0BH

0CH

0DH

0EH

0FH

第1行

40H

41H

42H

43H

44H

45H

46H

47H

48H

49H

4AH

4BH

4CH

4DH

4EH

4FH

三、软件设计

3.1 主程序流程图


四、硬件电路图

     4.1 温度检测原理

         

本系统温度部分硬件电路部分采用串联分压式电路,由图可知所需测得温度为25℃至45℃,在温度为25℃时,热敏电阻的阻值是100k,串联一个50k的普通电阻进行分压,可知

由上式可知,当温度变化时,阻值减小,输出电压Vo也会变化,所以A/D转换后的值也会有所不同,利用查表法进行显示,显示出准确的温度值。

可以根据热敏电阻阻值和温度的关系以及Vo和阻值的关系,事先制作一张Vo(V)~t(℃)的关系表,存入单片机内部ROM中,以便通过查表的方式根据电压值得到温度值。





    • A/D转换部分硬件电路图

4.3显示部分硬件电路图



单片机源程序如下:
  1. ;********************************************************************
  2. ;           基于AT89C51的数字体温计
  3. ;********************************************************************        
  4.                               SHIWEI   EQU          32H;
  5.                               GEWEI    EQU          33H;
  6.                               HUANCUN  EQU          36H;
  7.                               CLOCK    BIT          P2.4;
  8.                               ST       BIT          P3.2;            
  9.                               EOC      BIT          P3.1;
  10.                               D_A      BIT                                          P2.3;
  11.                               D_B      BIT                                          P2.2;
  12.                               D_C                 BIT          P2.1;
  13.                               E        BIT          P2.7;
  14.                               RW       BIT          P2.5;
  15.                               RS       BIT          P2.6;
  16.                               ORG      0000H;
  17.                               LJMP     START;
  18.                               ORG      000BH;
  19.                               LJMP     INT_T0;
  20.                               ORG      0100H;
  21. ;***********主程序开始******************************************************
  22. START:    LCALL    LCDINIT;调用液晶显示屏初始化程序
  23.           LCALL    TISHI1;
  24.                               LCALL    TISHI2;
  25. ;*********************************************************************************
  26. ;                                  温度部分
  27. ;*******************************************************************************
  28. BEGIN:                MOV      TMOD,#02H;
  29.           MOV      TH0,#236;              定时钟频位50khz
  30.                               MOV      TL0,#236;
  31.                               MOV      IE,#82H;                 开T0中断
  32.                               SETB     TR0;                              启动定时器
  33.                               CLR      D_A;              AD0809选择IN0通道
  34.                               CLR      D_B;
  35.                               CLR      D_C;                           
  36. WEN:                                                              
  37.                     CLR      ST;                                    
  38.           SETB     ST;                             
  39.                               CLR      ST;启动AD转换
  40.                               JNB      EOC,$; 等待转换结束
  41.                               LCALL    DELAY1S;
  42. ;*********查表法得到转换值*********************************                                          
  43.                               MOV      HUANCUN,P1;                             
  44.                               MOV      DPTR,#TAB1
  45.                               MOV      A,HUANCUN
  46.                               MOVC     A,@A+DPTR
  47. ;*********将查表得到的值转换成BCD码**********************                                             
  48.                               MOV      B,#10
  49.                               DIV      AB
  50.                               MOV      SHIWEI,A
  51.                               MOV      GEWEI,B
  52. ;*********显示整数部分的温度值**************************                                                           
  53. XIANSHI:  MOV      A,#0C5H;
  54.           LCALL    WRC;
  55.                               NOP
  56.           MOV      R0,#32H;                                             显示温度的十位、个位
  57. WDA1:     MOV      A,@R0
  58.           ADD      A,#30H;                                                           转换成ASCII码
  59.                               LCALL    WRD;                                                           写数据                                                         
  60.                               INC      R0;
  61.                               CJNE     R0,#34H,WDA1;                               判断温度是否显示完
  62. ;*********显示小数点***********************************************************
  63. DIAN:     MOV      A,#0C7H;              显示小数点
  64.                               LCALL    WRC;
  65.                               MOV      A,#2EH;
  66.                               LCALL    WRD;
  67. ;*********查表得小数部分得温度值********************************************
  68.                               MOV      DPTR,#TAB2
  69.                               MOV      A,HUANCUN
  70.                               MOVC     A,@A+DPTR
  71. ;*********将小数部分的值转换成BCD码**********************************************************************
  72.                               MOV      B,#10
  73.                               DIV      AB
  74.                               MOV      SHIWEI,A
  75.                               MOV      GEWEI,B
  76. ;**********显示小数子程序********************
  77. XIANSHI1: MOV      A,#0C8H;
  78.           LCALL    WRC;
  79.                               MOV      R0,#32H;                                             显示温度的十位、个位
  80. WDA12:    MOV     A,@R0
  81.           ADD      A,#30H;                                                           转换成ASCII码
  82.                               LCALL    WRD;                                                           写数据
  83.                               INC      R0;
  84.                               CJNE     R0,#34H,WDA12;                               判断温度是否显示完
  85. ;*********显示温度符号*************************************************************************
  86.                               MOV    A,#0CAH;                                             显示温度符号,设定显示位置
  87.                               LCALL  WRC;                                                           写入命令
  88.                               MOV    A,#0DFH;                                             “。”的              ASCII码
  89.                               LCALL  WRD;                                                           写数据
  90.                               MOV    A,#43H;                                                           “C"的ASCII码
  91.                               LCALL  WRD;                                                           写数据            
  92.                              
  93.                               LCALL    DELAY1S;
  94.                               LCALL    DELAY1S;
  95.                               LCALL    DELAY1S;
  96.                               LCALL    DELAY1S                                          
  97.                               AJMP     WEN
  98.                              
  99.                                                                                          
  100. ;*********温度提示字符显示**************************************************************
  101. TISHI2:    MOV    DPTR,#M_2;                                             指针指到显示消息
  102. LINE12:    MOV    A,#0C0H;                                                           设置LCD的第一行地址
  103.            LCALL  WRC;                                                           写入命令
  104. FILL12:     CLR    A;                                                                         输入字符
  105.            MOVC   A,@A+DPTR;                                             由消息区取出字符
  106.                                CJNE   A,#0,LC12;                                             判断是否为结束码
  107.                                JMP    RET_END2                                                          ;子程序返回
  108. LC12:      LCALL  WRD;                                                           写入数据
  109.            INC    DPTR;                                                           指针加1
  110.                                JMP    FILL1;                                                           继续填入字符
  111. RET_END2:  RET

  112. TISHI1:    MOV    DPTR,#M_1;                                             指针指到显示消息
  113. LINE11:    MOV    A,#80H;                                                           设置LCD的第一行地址
  114.            LCALL  WRC;                                                           写入命令
  115. FILL1:     CLR    A;                                                                         输入字符
  116.            MOVC   A,@A+DPTR;                                             由消息区取出字符
  117.                                CJNE   A,#0,LC11;                                             判断是否为结束码
  118.                                JMP    RET_END1                                                          ;子程序返回
  119. LC11:      LCALL  WRD;                                                           写入数据
  120.            INC    DPTR;                                                           指针加1
  121.                                JMP    FILL1;                                                           继续填入字符
  122. RET_END1:  RET
  123. M_2:       DB    "Temp:",0;
  124. M_1:       DB    "He Xing (^_^)",0;
  125. ;********液晶初始化子程序***************************
  126. LCDINIT:  MOV      A,#01H;                                                           清屏
  127.           LCALL    WRC;                                                           调用写入命令子程序
  128.                               MOV      A,#38H;                                                           8位数据,2行,5*8点阵
  129.                               LCALL    WRC;
  130.                               MOV      A,#0CH;                                                           开显示和光标,字符不闪烁
  131.                               LCALL    WRC;
  132.                               MOV      A,#06H;                                                           字符不动,光标自动右移1格
  133.                               LCALL    WRC;
  134.                                  RET;
  135. ;********忙检查子程序************************
  136. CBUSY:    PUSH              ACC;                                                           将A的值暂存于堆栈
  137.           PUSH   DPH;                                                           将DPH的值暂存于堆栈
  138.                               PUSH   DPL;                                                           将DPL的值暂存于堆栈
  139.                               PUSH   PSW;                                                           将PSW的值暂存于堆栈
  140. WEIT:            
  141.           CLR    RS;                                                                         RS=0,选择指令寄存器
  142.           SETB   RW;                                                                         RW=1,选择读模式
  143.                               CLR    E;                                                                         E=0,禁止读/写LCD
  144.                               SETB   E;                                                                         E=1,允许读/写LCD
  145.                               NOP                             
  146.                               MOV    A,P0;                                                           读操作
  147.                               CLR    E;                                                                         E=0,禁止读/写LCD
  148.                               JB     ACC.7,WEIT;                                             忙碌循环等待
  149.                               POP    PSW;                                                           从堆栈中取回PSW的值
  150.                               POP    DPL;                                                           从堆栈中取回DPL的值
  151.                               POP    DPH;                                                           从堆栈中取回DPH的值
  152.                               POP    ACC;                                                           从堆栈中取回ACC的值
  153.                               LCALL  DELAY;                                                           延时
  154.                               RET;
  155. ;********写子程序**************************
  156. WRC:      LCALL  CBUSY;                                                           写入命令子程序
  157.           CLR    E;                                                                         E=0,禁止读/写LCD
  158.                               CLR    RS;                                                                         RS=0,选择指令寄存器
  159.                               CLR    RW;                                                                                                       RW=0,选择写模
  160.                               SETB   E;                                                                         E=1,允许读/写LCD
  161.                               MOV    P0,A;                                                           写操作
  162.                               CLR    E;                                                                         E=0,禁止读/写LCD
  163.                               LCALL  DELAY;                                                           延时
  164.                               RET
  165. ……………………

  166. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载(word格式完整设计报告与源程序):
http://www.51hei.com/bbs/dpj-104106-1.html


评分

参与人数 1黑币 +10 收起 理由
tieq1952 + 10 赞一个!

查看全部评分

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

使用道具 举报

沙发
ID:253767 发表于 2018-1-13 13:36 | 只看该作者
靠自身努力完成,赞一个!
回复

使用道具 举报

板凳
ID:350709 发表于 2018-6-25 12:57 | 只看该作者
不错可以的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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