简易数字温度计课程设计报告.docx
- 文档编号:11921259
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:29
- 大小:80.05KB
简易数字温度计课程设计报告.docx
《简易数字温度计课程设计报告.docx》由会员分享,可在线阅读,更多相关《简易数字温度计课程设计报告.docx(29页珍藏版)》请在冰豆网上搜索。
简易数字温度计课程设计报告
唐山学院
单片机原理课程设计
题目简易数字温度计
系(部)智能与信息工程学院
班级
姓名
学号
指导教师
2017年1月2日至1月6日共1周
2017年1月4日
《单片机原理》课程设计任务书
一、设计题目、容及要求
设计题目:
简易数字温度计
设计容:
所设计数字温度计应具有以下功能:
1.可以测量-50到110摄氏度的温度。
2.在液晶上显示当前温度,分别为百位、十位、个位和小数点后一位。
3.测量精度误差在正负0.5摄氏度以。
设计要求:
1.根据题目要求进行系统总体设计。
2.完成系统硬件电路的设计。
3.系统程序的设计。
(1)程序流程图;
(2)完整源程序;(3)正确仿真运行。
4.撰写设计说明书(符合格式要求)。
二、设计原始资料
PROTEUS软件,WAVE/KEIL软件,实验箱
三、要求的设计成果(课程设计说明书、设计实物、图纸等)
设计结果能正确仿真演示
课程设计说明书一份(要求有硬件设计原理图,仿真结果图,源程序代码)
四、进程安排
1.2日-1.3日上午查阅资料,设计电路原理图、编写程序
1.4日下午-1.5日中心机房调试程序
1.6日课程设计答辩
五、主要参考资料
[1]肖看.群芳.单片机原理、接口及应用,清华大学.2010.9
[2]楼然苗.单片机课程设计指导.:
航空航天大学.2002.
[3]育才主编,MCS-51系列单片微型计算机及其应用.东南大学
指导教师(签名):
教研室主任(签名):
课程设计成绩评定表
出勤
情况
出勤天数
缺勤天数
成
绩
评
定
出勤情况及设计过程表现(20分)
课设答辩(20分)
设计成果(60分)
总成绩(100分)
提问
(答辩)
问题
情况
综
合
评
定
指导教师签名:
年月日
1.方案论证
该系统可以使用方案一:
热敏电阻;方案二:
数字温度芯片DS1621实现。
采用数字温度芯片DS1621测量温度,输出信号全数字化。
便于单片机处理及控制,省去传统的测温方法的很多外围电路。
且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。
在0—100摄氏度时,最大线形偏差小于1摄氏度。
DS1621的最大特点之一采用了单总线的数据传输,由数字温度计DS1621和微控制器AT89C51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。
这样,测温系统的结构就比较简单,体积也不大。
采用51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。
控制工作,还可以与PC机通信上传数据,另外AT89S51在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。
该系统利用AT89C51芯片控制温度传感器DS1621进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。
该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。
故采用了方案二。
测温电路的总体设计方框图如图1-1所示,控制器采用单片机AT89C51,温度传感器采用DS1621,用5位LED数码管以串口传送数据实现温度显示。
图1-1测温电路的总体设计方框图
2.硬件设计
2.1系统构成
本温度数据采集系统的主要功能是测量温度,并显示温度测量结果,并附带了单片机和PC机之间通讯接口。
系统结构包括单片机部分、温度传感器、显示电路、通讯接口电路等几个部分。
图2-1为系统的总体结构框图。
图2-1测温系统的总体结构框图
系统工作原理是:
电路在上电后,最先单片机利用模拟总线I2C对DS1621进行寻址,单片机在接收到DS1621应答后,单片机将设置/状态寄存器的值通过I2C总线写入该寄存器,之后DS1621在单片机控制下进行温度测量,然后DS1621把所采集的温度(-50摄氏度~+100摄氏度,精度为0.5摄氏度)传输给单片机,最后单片机把温度数据送到LED上显示。
系统中附带的串行接口以供备用。
2.2器件选择
2.2.1AT89C51概述
对于单片机的选择,可以考虑使用8031与8051系列,由于8031没有部RAM,系统又需要大量存存储数据,因而不适用。
所以,我们选用51系列单片机AT89C51。
AT89C51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片含4KB的可编程的Flash只读程序存储器,兼容标准8051指令系统及引脚,并集成了Flash程序存储器,既可在线编程(ISP),也可用传统方法进行编程,因此,低价位AT89C51单片机可应用于许多高性价比的场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。
单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
AT89C51的主要特性如下:
①与MCS-51兼容;
②4K字节可编程闪烁存储器;
③三级程序存储器锁定;
④128×8位部RAM;
⑤32根可编程I/O线;
⑥两个16位定时器/计数器;
⑦5个中断源;
⑧可编程串行通道;
⑨片振荡器和时钟电路。
2.2.2AT89C51引脚功能
单片机芯片AT89C51为40引脚双列直插式封装。
其各个引脚功能介绍如下,芯片AT89C51的引脚排列和逻辑符号如图2-2所示。
各引脚分别为:
1VCC:
供电电压图2-2AT89C51的引脚
②GND:
接地
③P0口
图4-2AT89C51的引脚排列图
P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。
当P1口的管脚写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必须被拉高。
④P1口
P1口是一个部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流P1口管脚写入”1”后,电位被部上拉为高可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
⑤P2口
P2口为一个部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流
当P2口被写”1”时,其管脚电位被部上拉电阻拉高,且作为输入。
作为输入时P2口的管脚电位被外部拉低,将输出电流,这是由于部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址”1”时,它利用部上拉的优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
⑥P3口
P3口管脚是8个带部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被部上拉为高电平,并用作输入。
作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,同时P3口同时为闪烁编程和编程校验接收一些控制信号。
⑦RST:
复位输入端。
当振荡器复位时,要保持RST两个机器周期的高电平时间。
⑧PSEN
外部程序存储器的选通信号。
在由外部程序存储器取址期间,每个机器周期PSEN两次有效。
但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。
⑨EA/VPP
当EA保持低电平时,访问外部ROM;注意加密方式1时,EA将部锁定为RESET;当EA端保持高电平时,访问部ROM。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
2.2.3复位电路的设计
单片机的复位电路如图2-2所示。
该复位电路采用手动复位与上电复位相结合的方式。
当按下按键S1时,VCC通过R2电阻给复位输入端口一个高电平,实现复位功能,即手动复位。
上电复位就是VCC通过电阻R2和电容C构成回路,该回路是一个对电容C1充电和放电的电路,所以复位端口得到一个周期性变化的电压值,并且有一定时间的电压值高于CPU复位电压,实现上电复位功能。
图2-3单片机的复位电路
2.3数字温度传感器
2.3.1DS1621的技术指标
DS1621是美国DALLAS公司生产的一种功能较强的数字式温度传感器和恒温控制器。
数字接口电路简单,与I2C总线兼容,且可以使用一片控制器控制多达8片的DS1621。
其数字温度输出达9位,精度为0.5摄氏度。
DS1621可工作在最低2.7V电压下,适用于低功耗应用系统。
DS1621的引脚排列图如图2-4所示,引脚功能描述如表2-1所示。
图2-4DS1621的引脚排列图
表2-1DS1621的引脚功能表
引脚
符号
功能描述
1
SDA
2—线I2C串行数据输入/输出
2
SCL
2—线I2C串行时钟端
3
TOUT
温度上下限超出输出
4
GND
地
5
A2~A0
片选地址输入A2~A0
6
VDD
电源端(+2.7—5.5V)
2.3.2DS1621的工作原理
图2-5DS1621的构成原理框图
斜坡累加电路
重预置
比较器
计数
温度低敏感振荡器
重预置电路
温度寄存器
温度低敏感振荡器
计数器
=0
DS1621的构成原理框图如图2-5所示,在测量温度时使用了独有的在线温度测量技术。
它通过在一个由对温度高度敏感的振荡器决定的计数周期对温度低敏感的振荡器时钟脉冲的计数值的计算来测量温度。
DS1621在计数器中预置了一个初值,它相当于-50摄氏度。
如果计数周期结束之前计数器达到0,已预置了此初值的温度寄存器中的数字就会增加,从而表明温度高于-55摄氏度。
与此同时,计数器斜坡累加电路被重新预置一个值,然后计数器重新对时钟计数,直到计数值为0。
通过改变增加的每1的计数器的计数,斜坡累加电路可以补偿振荡器的非线性误差,以提高精度,任意温度下计数器的值和每一斜坡累加电路的值对应的计数次数须为已知。
DS1621通过计算可以得到0.5摄氏度的精度,温度输出为9位,在发出读温度值请求后还会输出两位补偿值。
表2给出了所测的温度和输出数据的关系。
这些数据可通过2线制串行口连续输出,MSB在前,LSB在后。
2.4单片机和DS1621接口电路
前面已经介绍了DS1621温度传感器以8位数字输出,数据输出与I2C总线兼容,可以方便地通过SDA,SCL以串行方式与单片机相连。
而AT89C51面向主/从功能字节的I2C总线串行I/O口,所以多路温度数字量可以通过I2C总线直接送GAS97C2051单片机。
I2C总线(InterICBUS)是Philips公司推出的双向两线串行通信标准。
由于它具有接口少、通信效率高等优点,现已得到广泛的应用I2C总线是一种串行的数据总线,挂在总线上的各集成电路模块(单片机和具有各种功能的电路芯片)通过一条串行的数据线(SDA)和一条串行的时钟线(SCL),按一定的通信协议进行寻址和信息的传输。
每个电路模块都有唯一的地址,在信息的传输过程中,I2C总线上的电路模块有的是主控器,有的是被控器,主控器和被控器都可以是发送器或接收器,这完全取决于它所要完成的功能。
采用I2C总线可最大限度地简化电路结构,实现电路的模块化、标准化设计。
I2C总线在进行数据传输时,由作为主控器的AT89C51来初始化一次数据的传输,并在I2C总线上提供时钟进行传送。
信息传送的对象、方向和传送的开始、终止也由主控器(AT89C51)来决定。
此时,在I2C总线上被主控器所寻址的集成电路模块称为被控器(DS162)。
在I2C总线上,数据由发送器传出,并被接收器接收,接收器在每次正确接收到一个数据字节后,都要在数据总线(SDA)上给发送器一个应答信号。
因单片机AT89C51本身没有I2C硬件资源,所以必须用软件来模拟I2C总线,本系统利用单片机AT89C51的P3.0和P3.1引脚分别作I2C总线的数据线和时钟线(见附录A)。
AT89C51模拟I2C总线主要由软件设置来实现其功能。
2.5七段LED数码显示电路
采用七段LED数码显示,LED显示器部由7段发光二极管组成,因此亦称之为七段LED显示器,由于主要用于显示各种数字符号,故又称之为LED数码管。
每个显示器还有一个圆点型发光二极管,用于显示小数点。
在单片机AT89C51接收到DS1621所采集的温度数据后,单片机把所读到的数据送给数码管显示。
系统具体的显示电路如图2-6所示。
图2-6七段LED数码管显示电路
显示电路中单片机AT89C51的P0口直接驱动8段数码管(其中需要给P0外接上拉电阻)完成字形码的输出(字形选择)。
而P2.1-P2.5控制6位LED进行分时选通,这样在任一时刻,只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是我们常说的动态扫描电路。
3.软件设计与调试
3.1编程语言选择
51的编程语言常用的有两种,一种是汇编语言,一种是C语言。
汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,C语言很好的结构性和模块化更容易阅读和维护,用C编写程序比汇编更符合人们的思考习惯,开发者可以更专心的考虑算法而不是考虑一些细节问题这样就减少了开发和调试的时间,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。
3.2主程序的设计
初始化
N
读温度数据并存储
生成地址字节1001000,循环次数3
延时1S以上等待结果
启动转换
向设置/状态寄存器设置为连续工作方式
生成地址字节1001000,循环次数3次
地址字节加02H循环次数减1为0?
读温度数据并存储及显示
地址字节加02H循环次数减1为0?
图3-1主程序流程图
N
N
主程序的主要功能是负责多点温度数据的实时采集、传输,处理和显示。
其程序流程如图3-1所示。
3.3温度采集模块设计
为本温度采集系统开发的软件程序,可以对DS1621部的寄存器编程控制DS1621的工作方式,以及从这些数据寄存器读取温度值,最后把经过单片机数据处理后的温度送到LED上显示。
AT89C51扮演着上传下达的角色,单片机端的程序采用了C语言。
DS1621一侧的通信程序将利用并行端口P3.0和P3.1来模拟I2C总线协议,总线上的通信通过程序来实现。
整个软件采用了模块化的程序设计方法。
为了实现AT89C51和DS1621之间I2C协议之下的串行通信,编写了一些专用子程序。
这些子程序段包括:
符号定义、AT89C51的端口初始化、启动信号时序产生、停止信号时序产生、发送字节、读取字节、读取温度、显示。
系统电路在上电后开始工作,最先程序单片机进行初始化设置,然后单片机利用模拟I2C总线对DS1621进行寻址。
单片机在接收到DS1621应答后,紧接着单片机利用命令(AAh、ACh、EEh、22h)将设置/状态寄存器的值通过I2C总线写入DS1621状态寄存器,该系统中把DS1621设置为连续温度转换工作方式,之后DS1261在单片控制下进行温度测量,然后DS1261把所采集的温度传输给单片机,最后单片机把温度数据送到LED上显示。
3.4温度计算模块设计
计算温度子程序将从DS1621中读取的温度值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图3-2所示。
开始
温度零下?
温度值取补码置“—”标志
计算小数位温度BCD值
计算整数位温度BCD值
结束
置“+”标志
N
Y
图3-2温度计算流程图
3.5串行总线编程
在本系统中,单片机AT89C51作为主控器件,3个DS1621作为被控器,所以我们只要考虑主方式下的状态处理模块,即考虑AT89C51主发送和主接收方式下的状态处理模块。
该电路中为了简化电路设计在I2C总线的时钟和数据上各加了一个上拉电阻,以获取一定的上拉电流使信号采集可靠。
本系统中挂在I2C总线上的各电路模块都有其节点地址。
AT89C51作为主控器其节点地址无意义,作为被控器的3个DS1621都有其节点地址,其地址为1001A2A1A0,其中,1001是器件编号,已由芯片生产厂家规定,A2A1A0为DS1621的3个引脚,在电路中分别接高低电平决定2个DS1621的不同地址。
2个DS1621的地址分别为1001000~1001010。
本系统中的I2C总线的寻址方式为的广播寻址,即AT89C51对挂在I2C总线上所有的DS1621的广播呼叫寻址。
AT89C51发出开始信号S后的第一个字节确定由AT89C51所选择的一个DS1621的地址,然后在第一个字节以后开始数据传送。
具体实现寻址的方法是:
由AT89C51发出启动位S后紧跟着发送从器件DS1621的7位地址码,即S+SLA,在节点地址寻址中SLA为被寻址的从节点地址,主控设备在发送数据前,在时钟为高时,在数据线上发送一个由高到低的信号来表示开始传送数据,DS1621接收到开始信号时,移入后续8位(高7位地址线和一个R/W位)来确定进行如何操作,R/W位为0表示写,为1表示读。
读写操作完成后,在时钟为高时,在数据线上发送一个由低到高的信号表示传送结束。
具体数据格式如图3-3所示,时序如图3-4所示。
图3-3串行通信的数据格式
图3-4串行通信的时序图
4.软硬件调试结果分析
本设计应用Proteus及Keil软件,首先根据自己设计的电路图用Proteus软件画出电路模型,关于这个软件的使用通过查一些资料和自己的摸索学习;然后用Keil软件对所编写的程序进行编译、,如果没有错误和警告便可生成程序的hex文件,调试好程序后将目标文件导入Proteus的AT89C51芯片中进行软件调试。
最后进行三路温度的对比测试。
数字温度计的仿真电路图如图4-1所示。
图4-1仿真图
仿真结果分析:
不断调整三路DS1621的温度值,发现LED显示器上的数值和DS1621屏幕上的标准值相差无几,在误差允许的围之。
当某一路的温度不在50-80围时,两个LED同时发光,表示告警信息。
经调试,证明开发者最终设计出结构合理、美观,主要电气指标良好,性能稳定可靠的电路。
5.设计总结
不知不觉中,一周的课程设计实习已经接近尾声了。
可能是假期快到的缘故,总感觉这次实习特别短暂。
此刻,真是感慨万千啊!
现在我可以自豪的说,这次实习我达到了预期的目标。
因为在实习期间,我每天都在接触新的东西,每天都会有新的问题等待我去探讨去解决,每天都有新收获。
回想课设第一天,我们做点电脑前,不知道自己能干点什么,对于指导老师的讲解也是云里雾里的。
因为头一回接触Proteus和Keil这两个软件。
但是我相信,只要自己用心了,没有办不成的事。
于是,我静下心来,仔细研究老师下发的教程。
我珍惜每一次的上机机会,勤加练习,课下积极研究手册和相关书籍。
两天过后,才算有点眉目了。
到这时心里才算稍微安稳了一些,再加上以前学过名为Protel的电路设计软件,所以我的自信心加强了。
在这次设计过程中,体现出自己单独设计电路的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
在此感我们的田红霞、国旭老师,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次简易数字温度计设计的每个实验细节和每个数据,都离不开老师您的细心指导。
而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。
同时感对我帮助过的同学们,你们对我的帮助和支持,让我感受到同学的友谊。
6.参考文献
[1]肖看.群芳.单片机原理、接口及应用,清华大学.2010.9
[2]楼然苗.单片机课程设计指导.:
航空航天大学.2002.
[3]育才主编,MCS-51系列单片微型计算机及其应用.东南大学
附录A多点温度采集系统电路原理图
附录BC语言源代码
#include"reg51.h"
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineDiSdataP0//七段码数据输出口
#definediscanP2//扫描数据输出口
sbitDIN=P0^7;//小数点控制
sbitScl=P3^0;//串行时钟
sbitSda=P3^1;//串行数据
sbitalarm=P1^7;
sbitalarm2=P1^6;
uinti;
uinth;
uinttemp;
uchardath[2];//温度输入口
ucharff2,ff1=0,t3=0;
ucharcodedis_7[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
//共阴LED段码表"0""1""2""3""4""5""6""7""8""9""灭""-"
ucharcodescan_con[5]={0xfd,0xfb,0xf7,0xef,0xdf};
//LED显示控制,对应0的LED有效
uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x002};
//显示单元数据,共6个数据和一个运算暂用
uchardatadisplay1[5]={0x01,0x02,0x03,0x04,0x052};
uchardataDD[4]={0x90,0x92,0x94};
//
voiddelay_us(uintt)//延时函数
{
for(;t>0;t--);
}
//
scan()//LED扫描函数
{
uchark;
for(k=0;k<5;k++)
{
discan=scan_con[k];//控制位送P2口
DiSdata=dis_7[display[k]];//数据位送P0口
if(k==3){DIN=1;}
else
DIN=0;//小数点显示
delay_us(150);
}
}
//
voiddelay(void)//延时函数
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
//
voidi_start(void)//
开始
{
Sda=1;
Scl=1;
delay();
Sda=0;
de
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 数字 温度计 课程设计 报告