1、引言单片机的出现是近代计算机技术发展史上的重要里程碑。单片机自 20 世纪 70 年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。近年来随着电子技术和微型计算机技术的迅速发展,单片机的档次不断提高,其应用领域也在不断扩大,在工业测控、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人通信终端及通信产品中得到了广泛应用,已成为现代电子系统中最重要的智能化核心部件。随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提
2、供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本课程设计是在学习了单片机的基本原理的基础上进行的,综合利用所学单片机知识完成一个单片机应用系统设计并仿真实现,从而加深对单片机软硬知识的理解,获得初步的应用经验;进一步熟悉和掌握单片机的内部结构和工作原理,了解单片机应用系统设计的基本方法和步骤。本设计的目标是用单片机和温度传感器及相关部件实现温度的测量和数字显示,测量精度小于 0.5,可以设置温度测量的上下限,超出测温范围可以由蜂鸣器报警。本设计首先是确定目标,接下来是各个功能模块的设计和相应程序的编写。再在 proteus 软件上进行仿真,若结果满足要求
3、,则可以焊接硬件,若不满足继续修改,最终完成数字温度计的整个设计任务。经过仿真,本设计达到了预期的目标。1目录1 设计概述 31.1 设计目标和要求 31.2 设计思路 32 系统方案及硬件设计 42.1 设计方案 42.2 方案的硬件总体方框图 42.3 温度传感器 DS18B20 测温原理 52.4 硬件设计 92.4.1 主控制器 ATmega16.92.4.2 复位电路 92.4.3 时钟振荡电路 92.4.4 报警点调节电路 102.4.5 显示电路 .103 软件设计 113.1 系统分析 .113.2 各子程序及其流程图设计 123.2.1 初始化子程序 123.2.2 DS18
4、20 的读写字节子程序 .133.2.3 温度读取及转换子程序 143.2.4 计算温度子程序 .153.2.5 温度显示子程序 .163.2.6 报警子程序 .174 proteus 软件仿真 194.1 系统仿真设计 194.2 仿真结果分析 .195 系统原理图 206 心得体会 2121 设计概述1.1 设计目标和要求1.用所学的单片机知识设计制作数字温度计;2.测温范围是-20-70 ;3.误差小于 0.5;4.所测的温度值可以由 LCD 数码管直接显示;5.可以任意设置上下限温度的报警功能;6.进一步熟悉 proteus,protel,word 软件的功能和使用方法;1.2 设计思
5、路首先确定我们所设计的是一个数字温度计,由单片机、温度传感器以及其他电路共同实现。根据所要实现的功能,先在 proteus 软件上仿真。根据所选用的硬件可以将整个软件设计分为若干子程序,有初始化、查询时间、发送指令、读取数据、显示温度等构成,可将以上子程序分别设计,实现各自的功能,再在子程序中调用,就可以实现预期的目标。在 proteus 软件里画出相应的电路图,将编写好的程序的编译后的文件下载到 proteus 电路图的单片机里,进行仿真,对温度传感器设置不同的参数,看是否达到了我们设计所要求的目标,如果不符合要求,需要检查程序算法和硬件连接是否有误。若仿真成功,就按照电路图焊接硬件。32
6、系统方案及硬件设计2.1 设计方案采用数字温度芯片DS18B20 测量温度,输出信号全数字化。采用了单总线的数据传输,由数字温度计DS18B20和ATmega16单片机构成的温度测量装置,它直接输出温度的数字信号,也可直接与计算机连接。采用ATmega16单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。该系统利用ATmega16芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限温度。该系统扩展性非常强。该测温系统电路简单、精确度较高、实现方便、软件设计也比较简单。2.2 方案
7、的硬件总体方框图基于增强的 AVR RISC 结构的低功耗 8 位 CMOS 微控制器 ATmega16,温度传感器采用的 DS18B20,用四位数码管显示温度。图 142.3 温度传感器 DS18B20 测温原理DS18B20 温度传感器是美国 DALLAS 半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 9-12 位的数字值读数方式。DS18B20 的性能特点如下:(1)独特的单线接口仅需要一个端口引脚进行通信,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
8、(2)DS18B20 支持多点组网功能,多个 DS18B20 可以并联在惟一的三线上,实现多点组网测温;(3)无须外部器件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;(4)可通过数据线供电,电压范围为 3.0-5.5;(5)零待机功耗;(6)温度以9或12位数字,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温;(7)用户可定义报警设置;(8)报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;(9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;(10)测量结果直接输出数字温度信号,以“一线总线“串行传送给CPU,
9、同时可传送CRC校验码,具有极强的抗干扰纠错能力DS18B20 采用 3 脚 PR35 封装或 8 脚 SOIC 封装,其引脚排列及内部结构框图如图 2 及图 3 以及图 4 的测温原理图如下所示:5图 2 引脚排列图 3 内部结构框图预置 斜率累加器比较低温度系数振荡器 计数器 1温度寄存器Tx 预置=0高温度系数振荡器-0计数器 2T1加 1停止T2图4 DS18B20 测温原理图664 位 ROM 的结构开始 8 位是产品类型的编号,接着是每个器件的惟一的序号,共有 48 位,最后 8 位是前面 56 位的 CRC 检验码,这也是多个 DS18B20 可以采用一线进行通信的原因。温度报警
10、触发器 TH 和 TL,可通过软件写入户报警上下限。DS18B20 温度传感器的内部存储器还包括一个高速暂存 RAM 和一个非易失性的可电擦除的 EERAM。高速暂存 RAM 的结构为 8 字节的存储器,结构如图 4 所示。头 2 个字节包含测得的温度信息,第 3 和第 4 字节 TH 和 TL 的拷贝,是易失的,每次上电复位时被刷新。第 5 个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20 工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图 5 所示。低 5 位一直为 1,TM 是工作模式位,用于设置 DS18B20 在工作模式还是在测试模式,D
11、S18B20 出厂时该位被设置为 0,用户不要去改动,R1 和 R0 决定温度转换的精度位数,来设置分辨率。TM R1 R0 1 1 1 1 1图 5 DS18B20 的字节定义DS18B20 的分辨率定义如表 2-1 所示表 2-1 分辨率设置表R0 R1 分辨率 最大温度转移时间0 0 9 位 96.75ms0 1 10 位 187.5ms温度 LSB温度 MSBTH 用户字节 1TL 用户字节 2配置寄存器保留保留保留CRC71 0 11 位 375ms1 1 12 位 750ms由表 1 可见,DS18B20 温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在
12、实际应用中要将分辨率和转换时间权衡考虑。主机控制 DS18B20 完成温度转换过程是:每一次读写之前都要对 DS18B20 进行复位,即将数据总线下拉 500us,然后释放,DS18B20 收到信号后等待 16-60us左右,之后发出 60-240us 的存在低脉冲,主 CPU 收到此此信号表示复位成功;复位成功后发送一条 ROM 指令,然后发送 RAM 指令,这样才能对 DS18B20 进行预订的读写操作。表 2-2 ROM 指令集指令 约定代码 功能读 ROM 33H 读 DS18B20 中的编码符合 ROM 55H发出此命令后,接着发出 64 位 ROM 编码,访问单线总线上与该编辑相对
13、应的 DS18B20 使之做出响应,为下一步对该 DS18B20 的读写作准备搜索 ROM 0F0H 用于确定挂接在同一总线上的 DS18B20 个数和识别 64位 ROM 地址,为操作各器件作准备跳过 ROM 0CCH 忽略 64 位 ROM 地址,直接向 DS18B20 发送温度变换指令告警搜索命令0ECH 执行后,只有温度跳过设定值上限或下限的片子才能做出反应表 2-3 RAM 指令集指令 约定代码 功能温度转换 44H 启动 DS18B20 进行温度转换读暂存器 0BEH 读暂存器 9 个字节内容写暂存器 4EH 将数据写入暂存器的 TH、TL 字节复制暂存器 48H 把暂存器的 TH
14、、TL 字节写到 E2RAM 中重调 E2RAM 0B8H 把 E2RAM 中的 TH、TL 字节写到暂存器 TH、TL 字节读供电方式 0B4H 启动 DS18B20 发送电源供电方式的信号给主 CPU8DS18B20 的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器 1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器 2 的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20 就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将
15、最低温所对应的一个基数分别置入减法计数器 1、温度寄存器中,计数器 1 和温度寄存器被预置在最低温所对应的一个基数值。减法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1 的预置值减到 0 时,温度寄存器的值将加 1,减法计数器 1 的预置将重新被装入,减法计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到 0 时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。2.4 硬件设计2.4.1 主控制器 ATmega16ATm
16、ega16 是基于增强的 AVR RISC 结构的低功耗 8 位 CMOS 微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达1 MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。 ATmega16 AVR 内核具有丰富的指令集和 32 个通用工作寄存器。所有的寄存器都直接与算逻单元(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC 微控制器最高至 10 倍的数据吞吐率。 2.4.22.4.2 复位电路在这里采用的是按钮加上电复位,系统每次上电和每次按下复位按钮,
17、系统就会复位。92.4.3 时钟振荡电路采用的是 1MHZ 的晶振频率,它与单片机的硬件连接电路如图 7 所示图 7 晶振电路2.4.4 报警点调节电路可以通过微动开关,任意调节报警点的上下限,电路如图 8 所示10图 8 报警点调节电路2.4.5 显示电路显示电路采用集成的四位一体的数码管,为共阴极结构,通过设置不同的段码可以显示温度。图 9 显示电路3 软件设计3.1 系统分析系统程序主要包括 DS1820 初始化程序,向 DS1820 读字节程序,向 DS1820写字节程序,读取温度及转换程序,温度显示程序,报警程序。11初始化向 ds1820 读一字节向 ds1820 写一字节读取温度
18、及转换显示温度图 10 主程序流程图3.2 各子程序及其流程图设计3.2.1 初始化子程序令 P2.7 为高电平,延迟一段时间后令 P2.7 为低电平触发 DS1820 的初始化,低电平持续一段时间,然后读取 P2.7 的状态,直到 P2.7 的状态回到高电平时说明初始化完成。#include #define DQ P2_7#define dm P0sbit w0=P23;sbit w1=P24;sbit w2=P25;sbit w3=P26;sbit jia=P20;sbit jian=P21;sbit xuan=P22;/sbit p2_7=P27;sbit speaker=P10;#de
19、fine uint unsigned int #define uchar unsigned charuint mark;12uint xiaoshu;int temp1=0;uint H_t=10,L_t=-5;uchar table_dm=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar table_dm1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;uchar table_fuhao=0x00,0x40;void delay(unsigned int i) while(i-
20、); /初始化函数P2.7=1延时P2.7=0延时P2.7=1?完成NY图 11 初始化流程图3.2.2 DS1820 的读写字节子程序单片机向 DS1820 读写字节都是从最低位开始的。Init_DS18B20(void)unsigned char x=0;13DQ = 1; delay(8);DQ = 0; delay(80);DQ = 1; delay(14);x=DQ; /稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败delay(20); /读一个字节P2.7=1延时读数据待写入字节右移一位P2.7=1延时写数据待写入字节右移一位图 12 读操作 图 13 写操作3.2.
21、3 温度读取及转换子程序在读取温度值命令前,应使用温度转换命令才能保证读入的是当前温度值转换过程中 DS1820 会拉低总线直至转换完成,因此可以读取温度总线的状态来判断温度转换是否完成。ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)14DQ = 0;dat=1;DQ = 1;if(DQ)dat|=0x80;delay(4);return(dat); /写一个字节初始化 DS1820判断符号位转换温度读取温度图 14 温度读取及转换3.2.4 计算温度子程序计算温度子程序将 RAM 中读取值进行
22、BCD 码的转换运算,并进行温度值正负的判定,其程序流程图如图 14 所示:WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-)15DQ = 0;DQ = datdelay(5);DQ = 1;dat=1;delay(4);/读取温度零下 ?温度值取补码置“ ” 标志YN开始置 “ ” 标志结束计算整数位温度B C D 码计算小数位温度B C D 码图 15 温度计算3.2.5 温度显示子程序void delayms(uchar t)uint i;while(t-)16for(i=0;i4);if(i=0)mark
23、=0;t=(a4)|(b8)t=(t+1);else mark=1;a=a4; b=bh_t 或,l_t报警YN 返回返回 FANGUI Return图 17 报警4 proteus 软件仿真4.1 系统仿真设计本设计是在 Proteus 环境下进行仿真的,仿真所用到的器件有:单片机ATmega16, DS1820 温度传感器,蜂鸣器,液晶显示器,一些电阻,电容等。4.2 仿真结果分析本设计在仿真的条件下可以正确的显示温度,并在温度超过所设置的最高温度或最低温度时,蜂鸣器将发出滴滴的警告声。且本设计温度显示可以精确到0.1 满足设计要求。仿真时温度显示如图 18 所示图 18195 系统原理图
24、通过 Proteus 进行元器件的查找与连接仿真得到下图图 19206 心得体会在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也
25、让我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。