2022年简易数字温度计单片机设计方案 .pdf
0 / 34 单片微机原理及应用课程设计任务书一、设计题目、内容及要求设计题目: 简易数字温度计设计内容 :1)可以测量 -50到100摄氏度内的温度2)用液晶显示温度,精确到小数点后两位;2)测量误差在0.5摄氏度以内。设计要求:1)根据任务要求设计硬件电路;2)设计电路原理图、仿真结果电路图;3)画出程序流程图,编写程序;4)书写设计说明书。二、设计原始资料1 李群芳,肖看 .单片机原理、接口及应用.清华大学出版社,2005.3 2Proteus软件, Wave/Keil 软件三、要求的设计成果 课程设计说明书、设计实物、图纸等)设计结果能正确仿真演示;课程设计说明书一份包括总体设计、方案论证、硬件电路、系统程序流程图、程序清单)四、进程安排周一查阅资料,设计电路原理图、编写程序周二利用 proteus完成硬件电路绘制周三程序调试周四书写课程设计说明书周五课程设计答辩五、主要参考资料1 何利民 .单片机中级教程.机械工业出版社,2002.4 2 丁元杰 .单片微机原理及应用第二版) .机械工业出版社,2005.2 3 张有德,赵志英.单片微型机原理、应用于实验.复旦大学出版社,2000.4指导教师 签名):教研室主任 签名):精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 34 页1 / 34 目录1 引言1 2 开发和仿真软件简介 2 2.1 开发软件 Keil C51 uVision22 2.2 仿真软件 Proteus ISIS3 3 总体设计方案论证 5 3.1 开发方案举例 5 3.1.1 热敏电阻 5 3.1.2 数字温度芯片 DS16215 3.2 数据通信技术 6 4 系统各部分电路的选择和设计7 4.1 系统的工作原理 7 4.2 AT89C51简介7 4.2.1 概述7 4.2.2 AT89C51 引脚功能 8 4.2.3 复位电路的设计 9 4.3数字温度传感器 10 4.3.1 DS1621的技术指标 10 4.3.2 DS1621的工作原理 11 4.4 单片机和 DS1621接口电路 11 4.5 七段LED数码显示电路 12 5 系统软件设计 14 5.1 编程语言选择 14 5.2 主程序的设计 14 5.3 温度采集模块设计 15 5.4 温度计算模块设计 15 5.5 串行总线编程 16 6 软硬件调试结果分析 17 7 总结18 参考文献 19 附录 A 多点温度采集系统电路原理图20 附录 B C 语言源代码 21精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 34 页1 / 34 1 引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。在信息采集传感器技术)、信息传输 通信技术)和信息处理 计算机技术)三大信息技术中,传感器属于信息技术的前沿尖端产品,尤其是温度传感器技术,在我国各领域已经引用的非常广泛,可以说是渗透到社会的每一个领域,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段:传统的分立式温度传感器,模拟集成温度传感器,智能集成温度传感器。目前的智能温度传感器 亦称数字温度传感器)是在20世纪90年代中期问世的,它是微电子技术、计算机技术和自动测试技术ATE)的结晶,特点是能输出温度数据及相关的温度控制量,适配各种微控制器 MCU)。社会的发展使人们对传感器的要求也越来越高,现在的温度传感器正在基于单片机的基础上从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展,并朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。本次课程设计的内容是开发一个基于AT89C51单片机的测温系统,并采用了数字温度传感器 DS1621和串行总线通信系统,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详细研究,对各部分的电路也一一进行了设计,该系统可以方便的实现对三路温度的采集、传输、处理和显示,并可设定上下限报警温度。它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。本次课程设计,利用 Keil和Proteus 软件设计和仿真该智能数字多点测温系统。过程中所用到的主要电路由我们自主设计制作,通过查阅资料和借助指导老师最终设计出结构合理、美观,主要电气指标良好,性能稳定可靠的电路。以培养我们严谨的科学态度,正确的设计思想,科学的设计方法和良好的工作作风,掌握一定的专业技能及综合运用基础理论、基本知识的能力。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 34 页2 / 34 2 开发和仿真软件简介2.1 开发软件 Keil C51 uVision2 Keil uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS-51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持、PLM、汇编和 C语言的程序设计,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。Keil C51集成开发环境主要由菜单栏、工具栏、源文件编辑窗口、工程窗口和输出窗口五部分组成。工具栏为一组快捷工具图标,主要包括基本文件工具栏、建造工具栏和调试工具栏,基本文件工具栏包括新建、打开、拷贝、粘贴等基本操作。建造工具栏主要包括文件编译、目标文件编译连接、所有目标文件编译连接、目标选项和一个目标选择窗口。调试工具栏位于最后,主要包括一些仿真调试源程序的基本操作,如单步、复位、全速运行等。在工具栏下面,默认有三个窗口。左边的工程窗口包含一个工程的目标 target)、组 group)和工程文件。右边为源文件编辑窗口,编辑窗口实质上就是一个文件编辑器,我们可以在这里对源文件进行编辑、修改、粘贴等。下边的为输出窗口,源文件编译之后的结果显示在输出窗口中,会出现通过或错误包括错误类型及行号)的提示。如果通过则会生成“HEX ” 格式的目标文件,用于仿真或烧录芯片。基本环境如图 2-1所示:图 2-1 Keil C51软件的运行界面精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 34 页MCS-51单片机软件 Keil C51开发过程为:建立一个工程工程,选择芯片,确定选项。建立汇编源文件或 C源文件。用工程管理器生成各种应用文件。检查并修改源文件中的错误。编译连接通过后进行软件模拟仿真或硬件在线仿真。2.2 仿真软件 Proteus ISIS Proteus 软件是来自英国 Labcenter electronics公司的 EDA 工具软件。该软件有十几年的历史,在全球广泛使用,除了其具有和其它 EDA工具一样的原理布图、 PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,为用户建立了完备的电子设计开发环境。Proteus ISIS的工作界面是一种标准的 Windows界面。主要包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。主要功能是在图形编辑窗口做出所需的电路图。软件的应用设计界面如图2-2所示:图 2-2 Proteus软件的运行界面精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 34 页4 / 34 Proteus 还提供了诸多资源,如下所述:Proteus 可提供的仿真元器件资源:仿真数字和模拟、交流和直流等数千种元器件,有 30多个元件库。Proteus 可提供的仿真仪表资源:示波器、逻辑分析仪、虚拟终端、SPI调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。理论上同一种仪器可以在一个电路中随意的调用。除了现实存在的仪器外,Proteus 还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。这些都尽可能减少了仪器对测量结果的影响。Proteus 可提供的调试手段 Proteus 提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 34 页5 / 34 3 总体设计方案论证3.1 开发方案举例该系统主要由温度测量和数据采集两部分电路组成,实现的方法有很多种,下面将列出两种在日常生活中和工农业生产中经常用到的实现方案。3.1.1 热敏电阻由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。热敏电阻的外观如图3-1所示。图 3-1 热敏电阻外观图3.1.2数字温度芯片DS1621 采用数字温度芯片 DS1621 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0100摄氏度时,最大线形偏差小于1摄氏度。 DS1621 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 34 页6 / 34 的最大特点之一采用了单总线的数据传输,由数字温度计DS1621和微控制器 AT89C51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。控制工作,还可以与 PC 机通信上传数据,另外 AT89S51 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。该系统利用 AT89C51芯片控制温度传感器 DS1621进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用 AT24C16芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过MAX232 芯片与计算机的 RS232接口进行串口通信,方便的采集和整理时间温度数据。从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。测温电路的总体设计方框图如图3-2所示,控制器采用单片机 AT89C51,温度传感器采用 DS1621,用5位LED数码管以串口传送数据实现温度显示。3.2 数据通信技术目前,常用的微机和外设之间数据传输的串行总线有I2C总线、 SPI总线等,其中,I2C总线采用同步串行双线 一根时钟线,一根数据线)方式,而SPI总线采用同步串行三线时钟线,输入线,数据输入线)方式。这两种总线需要至少两根或两根以上的信号线。 I2C是PHILIPS公司推出的一种串行总线。它是目前使用较广泛的芯片间的串行图 3-2 测温电路的总体设计方框图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 34 页7 / 34 扩展总线。该总线用两条连线实现全双工同步数据传送。它可以使具有I2C总线的单片机直接与具有 I2C总线接口的各种扩展器件连接。本次课程设计就采用这种通信方式。美国达拉斯半导体公司推出了一项特有的单线技术。该技术于上述总线不同,它采用单根信号线,即可传输时钟,又能传输数据,而且数据传输时是双向的,因而这种单线技术具有线路简单,硬件开销少,成本低廉,便于扩展的优点。4 系统各部分电路的选择和设计4.1 系统的工作原理本温度数据采集系统的主要功能是测量温度,并显示温度测量结果,并附带了单片机和 PC机之间通讯接口。系统结构包括单片机部分、温度传感器、显示电路、通讯接口电路等几个部分。图4-1为系统的总体结构框图。系统工作原理是:电路在上电后,最先单片机利用模拟总线I2C对DS1621进行寻址,单片机在接收到 DS1621应答后,单片机将设置 /状态寄存器的值通过 I2C总线写入该寄存器,之后 DS1621在单片机控制下进行温度测量,然后DS1621把所采集的温度 50摄氏度 100摄氏度,精度为 0.5摄氏度)传输给单片机,最后单片机把温度数据送到LED上显示。系统中附带的串行接口以供备用。系统详细的电路原理图可见附录部分。4.2 AT89C51 简介4.2.1 概述对于单片机的选择,可以考虑使用8031与8051系列,由于 8031没有内部 RAM ,系图 4-1 测温系统的总体结构框图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 34 页8 / 34 统又需要大量内存存储数据,因而不适用。所以,我们选用51系列单片机 AT89C51。AT89C51是美国ATMEL 公司生产的低功耗,高性能CMOS8位单片机,片内含 4KB的可编程的 Flash只读程序存储器,兼容标准8051指令系统及引脚,并集成了Flash 程序存储器,既可在线编程ISP),也可用传统方法进行编程,因此,低价位AT89C51单片机可应用于许多高性价比的场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。单片机 AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。 AT89C51的主要特性如下:与MCS-51 兼容;4K字节可编程闪烁存储器;三级程序存储器锁定;128 8位内部 RAM ;32根可编程 I/O线;两个 16位定时器 /计数器;5个中断源;可编程串行通道;片内振荡器和时钟电路。4.2.2 AT89C51 引脚功能单片机芯片 AT89C51为40引脚双列直插式封装。其各个引脚功能介绍如下,芯片AT89C51的引脚排列和逻辑符号如图4-2 所示。各引脚分别为:VCC:供电电压GND:接地P0口P0口为一个 8位漏级开路双向 I/O口,每个管脚可吸收 8TTL门电流。当 P1口的管脚写 1时,被定义为高阻输入。 P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在 FLASH编程时, P0口作为原码输入口,当FLASH进行校验时, P0输出原码,此时 P0外部电位必须被拉高。P1口精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 34 页9 / 34 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)。4.2.3 复位电路的设计单片机的复位电路如图 4-3所示。该复位电路采用手动复位与上电复位相结合的方式。当按下按键S1时,VCC通过R2电阻给复位输入端口一个高电平,实现复位功能,即手动复位。上电复位就是VCC通过电阻 R2和电容 C构成回路,该回路是一个对电容C1充电和放电的电路,所以复位端口得到一个周期性变化的电压值,并且有一定时间的电压值高于CPU复位电压,实现上电复位功能。图 4-2 AT89C51 的引脚排列图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 34 页10 / 34 4.3 数字温度传感器4.3.1 DS1621 的技术指标DS1621是美国 DALLAS 公司生产的一种功能较强的数字式温度传感器和恒温控制器。数字接口电路简单,与I2C总线兼容,且可以使用一片控制器控制多达8片的DS1621。其数字温度输出达 9位,精度为 0.5摄氏度。 DS1621可工作在最低 2.7V电压下,适用于低功耗应用系统。DS1621的引脚排列图如图 4-4所示,引脚功能描述如表4-1所示。引脚符号功能描述1 SDA 2线I2C 串行数据输入 /输出2 SCL 2线 I2C 串行时钟端图 4-3 单片机的复位电路图 4-4 DS1621 的引脚排列图表 4-1 DS1621 的引脚功能表精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 34 页11 / 34 4.3.2 DS1621 的工作原理DS1621的构成原理框图如图 4-5所示,在测量温度时使用了独有的在线温度测量技术。它通过在一个由对温度高度敏感的振荡器决定的计数周期内对温度低敏感的振荡器时钟脉冲的计数值的计算来测量温度。 DS1621在计数器中预置了一个初值,它相当于50摄氏度。如果计数周期结束之前计数器达到 0,已预置了此初值的温度寄存器中的数字就会增加,从而表明温度高于55摄氏度。与此同时,计数器斜坡累加电路被重新预置一个值,然后计数器重新对时钟计数,直到计数值为0。通过改变增加的每 1内的计数器的计数,斜坡累加电路3 TOUT温度上下限超出输出4 GND 地5 A2A0 片选地址输入 A2A0 6 VDD电源端 +2.75.5V)图 4-5 DS1621 的构成原理框图斜坡累加电路重预置比较器计数温度低敏感振荡器重预置电路温度寄存器温度低敏感振荡器计数器=0 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 34 页12 / 34 可以补偿振荡器的非线性误差,以提高精度,任意温度下计数器的值和每一斜坡累加电路的值对应的计数次数须为已知。DS1621通过计算可以得到 0. 5摄氏度的精度,温度输出为9位,在发出读温度值请求后还会输出两位补偿值。表2给出了所测的温度和输出数据的关系。这些数据可通过2线制串行口连续输出, MSB在前,LSB在后。4.4 单片机和 DS1621接口电路前面已经介绍了 DS1621温度传感器以 8位数字输出,数据输出与 I2C总线兼容,可以方便地通过 SDA,SCL以串行方式与单片机相连。而AT89C51面向主/从功能字节的 I2C总线串行 I/O口,所以多路温度数字量可以通过I2C总线直接送 GAS97C2051单片机。I2C总线Inter IC BUS)是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总线主要由软件设置来实现其功能。4.5 七段 LED数码显示电路采用七段 LED数码显示, LED显示器内部由 7段发光二极管组成,因此亦称之为七段LED显示器,由于主要用于显示各种数字符号,故又称之为LED数码管。每个显示器还有一个圆点型发光二极管,用于显示小数点。在单片机AT89C51接收到 DS1621所采集的温度数据后,单片机把所读到的数据送给数码管显示。系统具体的显示电路如精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 34 页13 / 34 图4-6所示。显示电路中单片机 AT89C51的P0口直接驱动 8段数码管 其中需要给 P0外接上拉电阻)完成字形码的输出 字形选择)。而 P2.1-P2.5控制6位LED进行分时选通,这样在任一时刻,只有一位LED是点亮的,但只要扫描的频率足够高 一般大于 25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是我们常说的动态扫描电路。图 4-6 七段 LED数码管显示电路精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 34 页14 / 34 5 系统软件设计5.1 编程语言选择51的编程语言常用的有两种,一种是汇编语言,一种是C语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,C 语言很好的结构性和模块化更容易阅读和维护,用C 编写程序比汇编更符合人们的思考习惯,开发者可以更专心的考虑算法而不是考虑一些细节问题这样就减少了开发和调试的时间,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。5.2 主程序的设计主程序的主要功能是负责多点温度数据的实时采集、传输,处理和显示。其程序流程如图 5-1所示。初始化N 启动转换向设置 /状态寄存器设置为连续工作方式生成地址字节 1001000,循环次数 3次地址字节加 02H 循环次数减 1为0?精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 34 页15 / 34 5.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上显示。详细程序可见附录2。5.4 温度计算模块设计计算温度子程序将从 DS1621中读取的温度值进行 BCD码的转换运算,并进行温度精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 34 页16 / 34 值正负的判定,其程序流程图如图5-2所示。5.5 串行总线编程在本系统中,单片机 AT89C51 作为主控器件, 3个DS1621作为被控器,所以我们只要考虑主方式下的状态处理模块,即考虑 AT89C51主发送和主接收方式下的状态处理模块。该电路中为了简化电路设计在I2C总线的时钟和数据上各加了一个上拉电阻,以获取一定的上拉电流使信号采集可靠。本系统中挂在 I2C总线上的各电路模块都有其节点地址。AT89C51作为主控器其节点地址无意义,作为被控器的3个DS1621都有其节点地址,其地址为1001A2A1A0 ,其中,1001是器件编号,已由芯片生产厂家规定,A2A1A0 为DS1621的3个引脚,在电路中分别接高低电平决定 2个DS1621的不同地址。 2个DS1621的地址分别为 10010001001010。本系统中的 I2C总线的寻址方式为的广播寻址,即AT89C51对挂在 I2C总线上所有的DS1621的广播呼叫寻址。AT89C51发出开始信号 S后的第一个字节确定由 AT89C51所选择的一个 DS1621的地址,然后在第一个字节以后开始数据传送。具体实现寻址的方法是:由AT89C51发出启动位 S后紧跟着发送从器件 DS1621的7位地址码,即 S+SLA,在节点地址寻址中 SLA为被寻址的从节点地址,主控设备在发送数据前,在时钟为高时,在数据线上发送一个由高到低的信号来表示开始传送数据开始温度零下 ? 温度值取补码置 “”标志计算小数位温度BCD值计算整数位温度BCD值结束置“+”标志N Y 图 5-2 温度计算流程图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 34 页17 / 34 ,DS1621 接收到开始信号时,移入后续8 位高7 位地址线和一个 R/W 位)来确定进行如何操作,R/W 位为0 表示写,为 1 表示读。读写操作完成后,在时钟为高时,在数据线上发送一个由低到高的信号表示传送结束。具体数据格式如图5-3所示,时序如图 5-4所示。6 软硬件调试结果分析本设计应用 Proteus 及Keil软件,首先根据自己设计的电路图用Proteus 软件画出电路模型,关于这个软件的使用通过查一些资料和自己的摸索学习;然后用Keil软件对所编写的程序进行编译、链接,如果没有错误和警告便可生成程序的hex文件,调试好程序后将目标文件导入 Proteus 的AT89C51芯片中进行软件调试。最后进行三路温度的对比测试。数字温度计的仿真电路图如图6-1所示。图 5-3 串行通信的数据格式图 5-4 串行通信的时序图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 34 页18 / 34 图 6-1 仿真图仿真结果分析:不断调整三路DS1621的温度值,发现 LED显示器上的数值和 DS1621屏幕上的标准值相差无几,在误差允许的范围之内。当某一路的温度不在50-80 范围时,两个 LED同时发光,表示告警信息。经调试,证明开发者最终设计出结构合理、美观,主要电气指标良好,性能稳定可靠的电路。7 总结不知不觉中,一周的课程设计实习已经接近尾声了。可能是假期快到的缘故,总感觉这次实习特别短暂。此刻,真是感慨万千啊!现在我可以自豪的说,这次实习我达到了预期的目标。因为在实习期间,我每天都在接触新的东西,每天都会有新的问题等待我去探讨去解决,每天都有新收获。回想课设第一天,我们做点电脑前,不知道自己能干点什么,对于指导老师的讲精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 20 页,共 34 页19 / 34 解也是云里雾里的。因为头一回接触Proteus 和Keil 这两个软件。但是我相信,只要自己用心了,没有办不成的事。于是,我静下心来,仔细研究老师下发的教程。我珍惜每一次的上机机会,勤加练习,课下积极研究手册和相关书籍。两天过后,才算有点眉目了。到这时心里才算稍微安稳了一些,再加上以前学过名为Protel的电路设计软件,所以我的自信心加强了。在这次设计过程中,体现出自己单独设计电路的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。在此感谢我们的郝志华,田红霞,张国旭老师,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次简易数字温度计设计的每个实验细节和每个数据,都离不开老师您的细心指导。而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。参考文献1 马忠梅等 .单片机的 C语言应用程序设计.北京 :北京航空航天大学出版社,2007 2 周坚 .单片机 C语言轻松入门.北京 :北京航空航天大学出版社,2007 3 何立民 .单片机应用技术大全.北京 :北京航空航天大学出版社,1994 4 袁希光 .传感器技术手册.北京 :国防工业出版社,1986 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 21 页,共 34 页20 / 34 5 冯英 .传感器电路原理与制作.成都 :成都科技大学出版社,1997 6 行开先 ,叶济民 .热敏电阻器 .北京 :机械工业出版社,1981 7 丁元杰 .单片微机原理及应用 /延时函数 for (。t0。t-。 / scan( /LED 扫描函数 uchar k。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 24 页,共 34 页23 / 34 for(k=0。k discan=scan_conk 。 /控制位送 P2口 DiSdata=dis_7displayk。 /数据位送 P0口 if (k=3DIN=1 。 else DIN=0。 /小数点显示 delay_us(150 。 / void delay(void /延时函数 _nop_(。 _nop_(。 _nop_(。 _nop_(。 _nop_(。 _nop_(。 / void i_start(void /开始 Sda=1。 Scl=1。 delay(。 Sda=0。 delay(。 Scl=0。 / void i_stop(void /终止 Sda=0。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 25 页,共 34 页24 / 34 Scl=1。 delay(。 Sda=1。 delay(。 Scl=0。 Sda=0。 / bit i_clock(void / 应答信号 bit sample。 Scl=1。 delay(。 sample=Sda 。 _nop_(。 _nop_(。 Scl=0。 delay(。 return(sample 。 / void i_ack(void Sda=0。 i_clock(。 Sda=1。 / bit i_send(uchar i_data /发送 uchar i。 for(i=0。i Sda=(bit(i_data & 0 x80。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 26 页,共 34 页25 / 34 i_data=i_data。 Sda=1。 return(i_clock(。 / uchar i_receive(void /I2C接收 uchar i_data=0 。 uchar i。 for(i=0。i i_data。 Scl=1。delay( 。 i_data|=Sda 。 Scl=0。 delay(。return(i_data。 / bit start_temperature_T(unsigned char d / 开始转换命令 uchar t1。 t1=DDd 。 i_start(。 if(i_send(t1 if(i_send(0 xee i_stop(。 delay(。 return(1。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 27 页,共 34 页26 / 34 else i_stop(。 delay(。 return(0。 else i_stop(。 delay(。 return(0。 / bit read_temperature_T(unsigned char *p,unsigned char d unsigned char t1,t2 。 t1=DDd 。 t2=DDd+0 x01 。 i_start(。 if(i_send(t1 if(i_send(0 xaa i_start(。 if(i_send(t2 *(p+1=i_receive(。 i_ack(。 *p=i_receive(。 i_stop(。 delay(。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 28 页,共 34 页27 / 34 i_send(t1。i_send(0 x22。delay(。 return(1。 else i_stop(。 delay(。 return(0。 else i_stop(。 delay(。 return(0。 else i_stop(。 delay(。 return(0。 bit ds1621(unsigned char d unsigned char t1 。 t1=DDd 。 i_start(。 if(i