1、单片机原理与应用课程设计报告题 目:LCD 数字式温度湿度测量计专 业:自动化班 级:A1332学 号:10姓 名:曾志勇指导老师:查兵2016-06-08目 录1. 设计题目、要求及分工 .11.1. 设计要求 11.2. 分工 12. 系统设计方案论证与选择 .13. 系统硬件电路设计 .13.1. 单片机的选择 13.2. 温度传感器电路的设计 23.3. LCD1602 显示设计 .34. 系统软件设计 .44.1. 主程序 44.2. 读出温度子程序 65. 系统仿真调试结果记录及分析 116. 总结 13参考文献 .141设计题目、要求及分工1.1. 设计要求(1)熟悉掌握单片机的
2、中断,定时器及各并行口的应用;(2)熟悉掌握单片机温度湿度的测量方法;(3)利用温度传感器及单片机完成对温度的检测;(4)掌握将检测的温度信号转换为数码管显示的数字信号;(5)设计一个简单数字温度计,能够测量通常环境下的温度,能够实现零下温度的测量,能够测量小数,精度为 0.01 度。1.2. 分工经过我和队友的商讨,为了能最大发挥各自的长处。我主要负责程序的编写与单片机的调试。他主要负责一些相关资料文献的查找与课程设计报告。1. 系统设计方案论证与选择在日常生活和生产中,我们经常要测量环境的温度湿度,传统的测量方式采用水银温度计和干湿球湿度计查算法,存在着误差大,操作使用不便等问题,采用工业
3、级测量仪表价格昂贵。采用 AT89C51 和温度传感器等构成的 LCD 数字式温度湿度测量计精度高且价格便宜。由于本设计是测温电路,可以使用一只温度传感器 DS18B20,此传感器,可以很容易直接读取被测温度值,进行 A/D 转换,将数据传入 80C51 单片机中,单片机处理后,通过 LED 显示出当前实测温度。2. 系统硬件电路设计2.1.单片机的选择单片 80C51 具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统。本次设计需要注意的几个端口: P0 口(3932):是一组 8 位漏极开路行双向 I/O 口,也既地址/数据总线
4、复用口。可作为输出口使用时,每位可吸收电流的方式驱动 8 个 TTL 逻辑电路,对端口写“1”可作为高阻抗输入输入端用。2在访问外部数据存储器时,这组口线分时转换地址(低 8 位)和数据总线复用,在访问期间激活内部上拉电阻。在 Flash 编程时,PO 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求接上拉电阻。 P3 口(1017):是一组带有内部上拉电阻的 8 位双向 I/O 口, ,P1 的输入缓冲级可驱动(吸收或输出电流)4 个 TTL 逻辑门电路。对 P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输出端口。作输出端口时,被外部拉低的 P3 口将用上拉电阻输出电流。 。
5、2.2.温度传感器电路的设计DS18B20 温度传感器是美国 DALLAS 半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 912 位的数字值读数方式。64 位 ROM 的结构开始 8 位是产品类型的编号,接着是每个器件的惟一的序号,共有 48 位,最后 8 位是前面 56 位的 CRC 检验码,这也是多个 DS18B20 可以采用一线进行通信的原因。温度报警触发器 TH 和 TL,可通过软件写入户报警上下限。 DS18B20 温度传感器的内部存储器还包括一个高速暂存 RAM 和一个非易失性的可电擦除的
6、EERAM。高速暂存 RAM 的结构为 8 字节的存储器,结构如图 2.3 所示。头 2 个字节包含测得的温度信息,第 3 和第 4 字节 TH 和 TL的拷贝,是易失的,每次上电复位时被刷新。第 5 个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20 工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义:低 5 位一直为 1,TM 是工作模式位,用于设置 DS18B20 在工作模式还是在测试模式,DS18B20 出厂时该位被设置为 0,用户要去改动,R1 和 R0 决定温度转换的精度位数,来设置分辨率S18B20 温度转换的时间比较长,而且分辨率越高,所
7、需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。温度传感器18B20 汇编程序,采用器件默认的 12 位转化,最大转化时间 750 微秒 ,可以将检测到的温度直接显示到 80C51 的两个数码管上。高速暂存 RAM 的第 6、7、8 字节保留未用,表现为全逻辑 1。第 9 字节读出前面所有 8 字节的 CRC 码,可用来检验数据,从而保证通信数据的正确性。 当 DS18B20 接收到温度转换命令后,开始启动转换。转换完成后的温度值3就以 16 位带符号扩展的二进制补码形式存储在高速暂存存储器的第 1、2 字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位
8、在后,数据格式以 0.0625LSB 式表示。当符号位 S0 时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位 S1 时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表 2 是一部分温度值对应的二进制温度数据。DS18B20 完成温度转换后,就把测得的温度值与 RAM 中的 TH、TL 字节内容作比较。若 TTH 或 TTL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令做出响应。因此,可用多只 DS18B20 同时测量温度并进行报警搜索。在 64 位 ROM 的最高有效字节中存储有循环冗余检验码(CRC) 。主机 ROM 的前 56 位来计算
9、CRC 值,并和存入 DS18B20 的 CRC 值作比较,以判断主机收到的ROM 数据是否正确。 另外,由于 DS18B20 单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对 DS18B20 的各种操作按协议进行。操作协议为:初使化 DS18B20(发复位脉冲)发 ROM 功能命令发存储器操作命令处理数据。图 2-1 温度传感器电路42.3.LCD1602 显示设计图 2-2 LCD 显示电路图LCD1602 显示流程:图 3-3 流程图3. 系统软件设计3.1.主程序主程序的主要功能是负责温度的实时显示、读出并处理 DS18B20 的测量温度值。温度测量每 1s 进
10、行一次。主程序流程图如图 4.1 所示:#include5#include“lcd.h“#include“temp.h“void LcdDisplay(int);void main() LcdInit(); /初始化 LCD1602LcdWriteCom(0x88); /写地址 80 表示初始地址LcdWriteData(C); while(1) LcdDisplay(Ds18b20ReadTemp();/ Delay1ms(1000);/1s 钟刷一次/* 函数名 : LcdDisplay()* 函数功能 : LCD 显示读取到温度/void LcdDisplay(int temp) /lc
11、d 显示 unsigned char datas = 0, 0, 0, 0, 0; /定义数组float tp; if(temp0; y-) for(x=110; x0; x-);uchar Ds18b20Init()uchar i;DSPORT = 0; /将总线拉低 480us960us8i = 70;while(i-);/延时 642usDSPORT = 1; /然后拉高总线,如果 DS18B20 做出反应会将在 15us60us 后总线拉低i = 0;while(DSPORT) /等待 DS18B20 拉低总线i+;if(i5)/等待5MSreturn 0;/初始化失败Delay1ms
12、(1);return 1;/初始化成功void Ds18b20WriteByte(uchar dat)uint i, j;for(j=0; j= 1;9uchar Ds18b20ReadByte()uchar byte, bi;uint i, j;for(j=8; j0; j-)DSPORT = 0;/先将总线拉低 1usi+;DSPORT = 1;/然后释放总线i+;i+;/延时 6us 等待数据稳定bi = DSPORT; /读取数据,从最低位开始读取/*将 byte 左移一位,然后与上右移 7 位后的 bi,注意移动之后移掉那位补 0。*/byte = (byte 1) | (bi 7)
13、; i = 4; /读取完之后等待 48us 再接着读取下一个数while(i-);return byte;void Ds18b20ChangTemp()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc); /跳过 ROM 操作命令 Ds18b20WriteByte(0x44); /温度转换命令/ Delay1ms(100); /等待转换成功,而如果你是一直刷着的话,就不10用这个延时了 void Ds18b20ReadTempCom() Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc); /跳过 R
14、OM 操作命令Ds18b20WriteByte(0xbe); /发送读取温度命令int Ds18b20ReadTemp() int temp = 0;uchar tmh, tml;Ds18b20ChangTemp(); /先写入转换命令Ds18b20ReadTempCom(); /然后等待转换完后发送读取温度命令tml = Ds18b20ReadByte(); /读取温度值共 16 位,先读低字节tmh = Ds18b20ReadByte(); /再读高字节temp = tmh;temp = 8;temp |= tml;return temp;读出温度子程序 读出温度子程序的主要功能是读出 R
15、AM 中的 9 字节。在读出时须进行 CRC 校验,校验有错时不进行温度数据的改写。得出温度子程序流程图如下图所示。11图 3-2温度转换命令子程序 温度转换命令子程序主要是发温度转换开始命令。当采用 12 位分辨率时,转换时间约为 750ms。在本程序设计中,采用 1s 显示程序延时法等待转换的完成。温度转换命令子程序流程图如下图所示。图 3-24. 系统仿真调试结果记录及分析硬件调试比较简单,首先检查电感的焊接是否正确,然后可用万用表测试或通电检测。 软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序
16、等的编程及调试 由于 DS18B20 与单片机采用串12行数据传送,因此,对 DS18B20 进行读/写编程时必须严格地保证读/写时序;否则将无法读取测量结果。电路 Isis 仿真测试烧写程序至单片机:液晶显示室温为+28.06 度13用手触摸 DS18B20,发现温度上升为+32.75 度,证明温度传感正常工作。145. 总结这次课程设计,主要是以 STC89C51 单片机为核心的,对温度的检测与显示进行了简单的设计与阐述。因没有湿度传感器模块,所以未进行湿度检测。本次课程设计可以说是软硬结合,又以硬件为主。当今科技发展迅速,单片机开发有着光明的前景。由于单片机经济实用、开发简便等特点依然在
17、工业控制、家电等领域占据了广泛的市场。所以我选择这样的设计课题,并且能通过此次设计来提高自己软件编制和硬件电路设计的能力。在我完成这次课程设计的过程中,当看到自己将专业知识用于解决实际的问题时,那份成就感和喜悦感是难以形容的。在这次实际的编程以及调试程序过程中,我发现自己学很多课本以外的东西。光靠自己在书本上所学过的这点知识是远远不够的,真正地认识到了工作就是学习的道理。尤其是对于编程来说,需要硬件的功底,也需要软件的能力。当程序有一点点错误时,将使整个程序无效,需要自己静下心来发现错误,改正错误,一次又一次得进行调试,锻炼了沉着踏实的心态。 通过这次对数字温度计的设计与制作,让我们了解了设计
18、电路的程序,也让我们了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真,仿真成功之后才实际接线的。 但是最后的成品却不一定与仿真时完全一样,因为,在实际接线中有着各种各样的条件制约着。并且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。通过这次学习,让我们对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。从这次的课程设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识应用到实际当中,学习单机片机更是如此,程序只有在经常写和读
19、的过程中才能提高,这就是我在这次课程设计中的最大收获。这次课程设计对我来说是一次比较全面的、富有创造性和探索性的锻炼,令我深有感触,对于我今后的学习、工作和生活都将是受益非浅。15参考文献(1)江世明.单片机原理与应用.上海交通大学出版社.2013;(2)朱清慧.电子线路设计、制版与仿真.清华大学出版社.2011.6;(3)黄同成.程序设计基础与教程(C 语言).湖南人民出版社.2011.12;(4)王东峰等.单片机 C 语言应用 100 例M.北京电子工业出版社,2009;(5)陈海宴.51 单片机原理及应用M.北京航空航天大学出版社.2010;(6)胡汉才.单片机原理及接口技术M.北京清华大学出版社.1996;(7)高稚允,高岳.光电检测技术M.北京国防工业出版社.1983;