文档库 最新最全的文档下载
当前位置:文档库 › 温度测量与语音播报系统毕业论文文库

温度测量与语音播报系统毕业论文文库

本文由sadkingson贡献

doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。

编号:编号:

本科毕业设计(论文)本科毕业设计(论文)

题目:中文)(中文题目:中文)温度测量与语音播报系统设计((英文)Temperature measurement and 英文) voice broadcast system

分院专业班级学号姓名指导教师完成日期

理工分院电气工程与自动化 06 自动化(1)班自动化() 064171308 顾开凯李宏职称副教授

2010 年 5 月 15 日

宁波大学科学技术学院本科毕业设计(论文)

诚信承诺

我谨在此承诺:本人所写的毕业论文《温度测量与语音播报系统设计》均系本人独立完成,没有抄袭行为,凡涉及其他作者的观点和材料,均作了注释,若有不实,后果由本人承担。

承诺人(签名):承诺人(签名)顾开凯 2010 年 4 月 15 日

I

温度测量与语音播报系统设计

【摘要温度测量技术在工农业生产和科学研究中应用广泛。摘要】本文设计了一个基于 51 单片机的温度测量和语音播摘要报系统。该系统利用数字式温度传感器 DS18B20 测量环境温度,将测量到的温度值显示,并通过 APR9600 语音芯片将温度值播报。该系统温度测量准确,系统结构简单、且抗干扰能力强。

【关键词关键词】单片机;温度测量;语音播报;DS18B20;APR9600;关键词

II

宁波大学科学技术学院本科毕业设计(论文)

Temperature measurement and voice broadcast system Abstract

【ABSTRACT】Temperature measurement in industrial and agricultural production and is widely used in scientific research. This article is designed based on 51 single-chip temperature measurement and voice broadcast system. The system uses digital temperature sensor measuring ambient temperature DS18B20, The measured temperature display, by APR9600 broadcast voice chip temperature. The system temperature measurement accuracy, the system is simple, and anti-jamming capability.

【KEYWORDS】SCM;

temperature measurement;

voice broadcast;

DS18B20;

APR9600

III

温度测量与语音播报系统设计

摘要...... II Abstract ...... III 目录...... IV 1 绪论...... 1 1.1 引言 (1)

1.2 温度测量技术现状及发展趋势…… 1 1.

2.1 温度测量技术现状…… 1 1.2.2 温度测量技术的发展趋势…… 2 1.3 温度传感器的发展史…… 3 1.4 单片机…… 4 1.4.1 单片机的发展史…… 4 1.4.2 单片机的特点…… 5 1.4.3 单片机的应用…… 5 1.5 小结…… 6 2 方案论证…… 7 2.1 温度传传感器部分…… 7 2.1.1 方案一:采用模拟输出温度传感器…… 7 2.1.2 方案二:采用逻辑输出温度传感器…… 7 2.1.3 方案三:采用二极管传感器…… 7 2.1.4 方案四:采用数字式温度传感器 DS18B20…… 7 2.2 主控部分…… 8 2.2.1 方案一:采用 PC 机…… 8 2.2.2 方案二:采用 DSP 或 ARM 芯片……

8 2.2.3 方案三:采用 51 单片机...... 8 2.3 语音芯片部分...... 10 2.3.1 方案一:采用OTP 语音芯片...... 10 2.3.2 方案二:采用 WT588 语音芯片...... 10 2.3.3 方案三:采用APR9600 语音芯片...... 10 2.4 小结...... 10 3 硬件电路设计...... 11 3.1 系统框图...... 11 3.2 单片机的时钟电路和复位电路设计...... 11 3.3 DS18B20 温度测量电路设计...... 12 3.3.1 单总线...... 12 3.3.2 DS18B20 的单总线命令...... 12 3.3.3 DS18B20 的概述...... 14 3.3.4 DS18B20 的内部结构...... 15 3.3.5 DS18B20 的测温原理 (18)

3.3.6 DS18B20 与单片机的接口设计...... 19 3.4 APR9600 语音录放电路设计 (20)

3.4.1 APR9600 语音芯片的介绍...... 20 3.4.2 APR9600 录音电路 (21)

IV

宁波大学科学技术学院本科毕业设计(论文)

3.4.3 由单片机控制的放音电路...... 22 3.5 LED 数码显示电路...... 22 3.6 系统整体电路...... 23 3.7 小结...... 23 4 软件设计...... 24 4.1 主程序流程图...... 24 4.2 DS18B20 温度测量程序...... 24 4.2.1 DS18B20 的时序...... 24 4.2.2 DS18B20 的复位程序...... 25 4.2.3 DS18B20 启动温度转换程序...... 25 4.2.4 DS18B20 读温度程序 (26)

4.3 数码管显示程序...... 26 4.4 语音播报程序...... 27 4.5 小结...... 28 5 数据测试及分析...... 29 5.1 温度数据测量...... 29 5.2 语音模块测试...... 30 5.3 小结...... 30 6 设计总结...... 31 7 参考文献...... 32 致谢...... 33 附录一:程序...... 34 附录二:硬件电路 (2)

V

宁波大学科学技术学院本科毕业设计(论文)

1

1.1 引言

绪论

温度是一个基本物理量。温度的宏观概念是冷热程度的表示,或者说,互为热平衡的两物体,其温度相等。温度的微观概念是大量分子运动平均强度的表示。分子运动愈激烈其温度表现越高。自然界中几乎所有的物理化学过程都与温度紧密相关,因此温度是工农业生产,科学试验以及日常生活中需要普遍进行测量和控制的一个重要物理量。温度测量是现代检测技术的重要组成部分,在保证产品质量、节约能源和安全生产等方面起着关键的作用。因此,能够确保快速、准确地测量温度的技术及其装置普遍受到各国的重视。近年来,利用数字式温度传感器以实现温度信息的在线检测已成为温度检测技术的一种发展趋势[10]。随着电子技术的发展,将组成 CPU 的部件集成在一块半导体芯片上,这个具有 CPU 功能的大规模集成电路芯片就称之为微处理器。把微处理器部件像其他集成电路一样嵌入到电子系统中,使电子系统具有可编程序的智能化特点,开辟了计算机技术在电子技术领域应用的广阔大地。将微处理器、存储器、I/O 电路集成到一块半导体芯片的技术再次推动了这种嵌入式技术的发展,单片机是这种设计技术中的一个典型代表。单片机适用于测量和控制领域,它以芯片形式嵌入到电子产品或系统中起到“电脑”作用。本设计主要采用单片机 AT89S52 为控制核心,通过 DS18B20 数字式温度传感器实现温度测量,温度显示在数码管上,并控制

语音芯片实现温度的播报。

1.2

温度测量技术现状及发展趋势

1.2.1 温度测量技术现状随着国内外工业的日益发展,温度检测技术也有了不断的进步,目前的温度检测使用的温度计种类繁多,应用范围也较广泛。按照所用方法之不同,温度测量分为接触式和非接触式两大类[9]。一:接触式温度测量技术接触式测温法的特点是测温元件直接与被测对象相接触,两者之间进行充分的热交换,最后达到热平衡,这时感温元件的某一物理参数的量值就代表了被测对象的温度值。(1)利用物体热胀冷缩原理制成的温度计。膨胀式测温是一种比较传统的温度测量方法,它主要利用物质的热胀冷缩原理即根据物体体积或几何形变与温度的关系进行温度测量。膨胀式温度计

1

温度测量与语音播报系统设计

结构简单,价格低廉,可直接读数,使用方便,并且由于是非电量测量方式,适用于防爆场合。但准确度比较低,不易实现自动化,而且容易损坏。膨胀式温度计主要包括玻璃液体温度计、双金属膨胀式温度计和压力式温度计。(2)利用热电效应技术制成的热电式温度计,此技术制成的温度检测元件主要是热电偶。热电偶的原理是两种不同材料的金属焊接在一起,当参考端和测量端有温差时,就会产生热电势,根据该热电势与温度值关系就可以测量温度。热电偶发展较早,比较成熟,至今仍为应用最广泛检测元件之一。 (3) 利用热阻效应技术制成的热电阻温度计。热电阻是根据材料的电阻和温度的关系来进行测量的,导体的电阻值随温度的变化而变化,通过测量其电阻值推算出被测量物体的温度,主要用于-200-500℃温度范围内的温度测量。 (4) 利用石英晶体测温。石英温度传感器是以石英晶体的固有频率随温度而变化的特性来测量温度的。石英晶体温度传感器稳定性很好,可用于高精度和高分辨率的测量场合。 (5) 集成芯片式测温。随着电子技术的发展,可以将感温元件和相关电子线路集成在一个小芯片上,构成一个小型化、一体化及多功能化的专用集成电路芯片,输出信号可以是电压、频率,或者是总线数字信号,使用非常方便,适用于便携式设备。

二:非接触式温度测量技术非接触式测温方法不需要与被测对象接触,因而不会干扰被测温度场的状态,测量仪器本身也不会受温度场的损伤,动态响应特性一般也很好,但是会受到测量介质物性参数的影响。非接触式温度计又可分为全辐射高温计、亮度式高温计和比色式高温计,由于它们都是以光辐射为基础,故也称为辐射温度计。

1.2.2 温度测量技术的发展趋势随着工业生产效率的不断提高,自动化水平与范围也不断扩大,因而对温度测量技术的要求也越来越高,对于温度测量技术的发展趋势可以归纳以下几方面[11]。 (1) 数字化:传统温度传感器输出的都是电压、电阻等模拟量,测量精度低。传感器与电子技术相结合,可以实现模拟量转换为数字量输出,其最大优点是直观、分辨率高、测量误差小。 (2) 智能化:传统温度传感器的概念已从单纯的测量温度用的敏感元件发展为以温度传感器为基础的测量系统,在集成化的基础上,具有信号测量、处理、存储、误差与自诊断能力,扩大了应用范围,增强抗干扰能力,便于与计算机通讯。 (3) 高精度化:由于自动化程度的不断提高,对测量灵敏度高、精度高、响应速度快的温度传

2

宁波大学科学技术学院本科毕业设计(论文)

感器需求较多。 (4) 扩大测量范围:现在工业上通用的温度检测范围为-200~30000℃,而今后温度计要求能测量超高温与超低温,尤其是极低温度的检测。 (5) 扩大测温对象:温度检测技术将会由点测温发展到点、线、面,甚至立体的测量。应用范围己经从工业领域延伸到环境保护、家用电器、汽车工业及航天工业等领域。

1.3

温度传感器的发展史温度传感器使用范围广,种类多,大致经历了以下 3 个阶段[8]:(1)分立式温度传感器主要是能够进行非电量和电量之间转换。传统的分立式温度传感器—热电偶传感器。热电偶传

感器是工业测量中应用广泛的一种温度传感器,它与被测对象直接接触,不受中间介质的影响,具有较高的精度,测量范围广,可从-50~1600℃进行连续测量。(2)模拟集成温度传感器模拟集成温度传感器是采用硅半导体集成工艺制成的,它将温度传感器集成在一个芯片上、可完成温度测量及模拟信号输出等功能。模拟集成温度传感器的主要特点是功能单一、测温误差小、价格低、响应速度快、体积小、功耗低等。(3)数字温度传感器数字温度传感器是微电子技术、计算机技术和自动检测技术的结晶,目前已开发出多种数字温度传感器系列产品。数字温度传感器内部包含温度传感器、A/D 传感器、信号处理器、存储器和接口电路,有的产品还带多路选择器、中央控制器、随机存储器和只读存储器。数字温度传感器能输出温度数据及相关的温度控制量,适配于各种微控制器,并且可通过软件来实现测试功能,其智能化取决于软件的开发水平。社会的发展使人们对传感器的要求也越来越高,现在的温度传感器正在基于单片机的基础上从模拟式向数字式,从集成化向智能化、网络化,并朝着高精度、多功能、总线标准化、高可靠性及安全性等方向迅速发展。

3

温度测量与语音播报系统设计

1.4

单片机

1.4.1 单片机的发展史计算机的发展经历了从电子管到大规模集成电路等几个发展阶段,随着大规模集成电路技术的发展,使计算机向性能可靠化、微型化、廉价化方向发展,从而出现了单片机。单片机可以定义为:一种把微处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出(I/O)接口电路、定时器/计数器、串行通信接口及中断系统等部件集成在同一块芯片上的,具有完整功能的微型计算机。虽然单片机只有一块芯片,但从其组成和功能上来说,已具有了微型计算机系统的特性。若给单片机配上适当的外围设备和软件,便可构成一个单片机的应用系统。随着单片机位数的提高,功能的增强,由其构成的计算机应用系统的功能也日益增强,它一样可以配用显示器、打印机、绘图仪等外围设备,一样可以联网,从而使单片机应用系统的应用范围更加广泛,它不仅可用于家用电器中,还适用于信息与通信系统、实时控制、智能仪表、自动机床控制等领域。 1974 年 12 月,美国著名的仙童公司推出了世界上第一台单片机 F8。该机由两块集成电路芯片组成,结构新颖,并具有与众不同的指令系统,深受民用电器和仪器仪表领域的欢迎和重视。从此单片机开始迅速发展,应用范围也在不断扩大,现已成为微型计算机的重要分支。单片机的发展大致经历了外围集成、总线完善、功能集成、全方位发展等技术发展阶段,至今已走过了四个阶段[7]。 1.第一阶段(1974—1976)单片机的初级阶段,以仙童公司的 F8 为代表。该时期生产的单片机的点是:字长为 4 位,内部结构简单,制造工艺落后,集成度低。 2.第二阶段(1976—1980)单片机的技术成熟阶段。8 位单片机已经出现,以 Intel 公司的 MCS —48 为代表。该系列的单片机在片内已经集成了 8 位 CPU、并行 I/O 接口、8 位定时器/计数器、RAM 和 ROM 等功能部件,但无串行 I/O 接口,寻址范围不大于 4KB。它性能低、品种少,应用范围也不广。 3.第三阶段(1980—1983)单片机的推广阶段,8 位单片机技术走向成熟。其技术特点是完善了外部总线,确立了单片机的基本控制功能,以 Intel 公司的 MCS—5l 为代表。该阶段的单片机均带有串行 I/O 口,且具有多级中断处理系统。定时器/计数器为 16 位,片内的 RAM 和 ROM 容量相对较大,寻址范围可达 64KB。这一代单片机结束了计算机单片集成的简单形式,真正开创了单片机作为微控制器的发展道路。

4.第四阶段(1983—至今)这是 8 位高性能单片机和 16 位单片机并行发展的阶段。16 位单片机除了 CPU 为 16 位以外,片内的 RAM 和 ROM 容量进一步增大。以 Intel 公司的MCS—96 系列为代表,且片内集成有高速

4

宁波大学科学技术学院本科毕业设计(论文)

I/O 部件、多通道 10 位 A/D 转换器等,网络通信能力也大大提高,且可用于高速的控制系统。当前,单片机正朝着高性能和多品种方向发展。将进一步向着 CMOS 化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方向发展。

1.4.2 单片机的特点单片机有以下几个特点:(1)集成度高、体积小、有很高的可靠性。单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合在恶劣环境下工作。(2)控制功能强。为了满足工业控制要求,一般单片机的指令系统中有极丰富的转移指令、I/O 口的逻辑操作以及位处理功能,其逻辑控制功能及运行速度均高于同一档次微型计算机。(3)低功耗、低电压,便于生产便携式产品。单片机大量应用于携带式产品和家用消费类产品,低电压和低功耗的特性尤为重要。许多单片机已可在

2.2 V 的电压下运行,有的已能在 1.2 V 或 0.9 V 下工作。(4)单片机规格的系列化。属于同一个产品系列、不同型号的单片机,通常具有相同的内核、相同或兼容的指令系统。其主要的差别仅在片内配置了一些不同或不同数量的功能部件,以适用不同的被控对象。(5)单片机的硬件功能具有广泛的通用性。同一种单片机可以在不同的控制系统中,只是其中所配置的软件不同而已。也就是说,给单片机固化上不同的软件,便可形成用途不同的专用智能芯片。

1.4.3 单片机的应用单片机的应用范围很广,可以说覆盖了所有领域。其主要在智能仪器和控制中的应用。(1)单片机在智能仪表中的应用单片机广泛地用于各种仪器仪表,使仪器仪表智能化,并可以提高测量的自动化程度和精度,简化仪器仪表的硬件结构,提高其性价比。(2)单片机在机电一体化中的应用机电一体化是机械工业发展的方向。机电一体化产品是指集成机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品,例如微机控制的车床、钻床等。单片机作为产品中的控制器,能充分发挥它的体积小、可靠性高、功能强等优点,可大大提高机器的自动化、智能化程度。

5

温度测量与语音播报系统设计

(3)单片机在实时控制中的应用单片机广泛地用于各种实时控制系统中。例如,在工业测控、航空航天、尖端武器、机器人等各种实时控制系统中,都可以用单片机作为控制器。单片机的实时数据处理能力和控制功能,可使系统保持在最佳工作状态,提高系统的工作效率和产品质量。(4)单片机在分布式系统中的应用在比较复杂的系统中,常采用分布式系统。分布式系统一般由若干个功能各异的单片机组成,各自完成特定的任务,它们通过串行通信相互联系、协调工作。单片机在这种系统中往往作为一个终端机,安装在系统的某些节点上,对现场信息进行实时的测量和控制。单片机的高可靠性和强抗干扰能力,使它可以置于恶劣环境的前端工作。(5)单片机在人类生活中的应用自从单片机诞生以后,它就步入了人类生活,如洗衣机、电冰箱、电子玩具、收录机等家用电器配上单片机后,提高了智能化程度,增加了功能,倍受人们喜爱。单片机将使人类生活更加方便、舒适、丰富多彩。综合所述,单片机已成为计算机发展和应用的一个重要方面。另一方面,单片机应用的重要意义还在于:从根本上改变了传统的控制系统设计思想和设计方法,以前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。

1.5

小结本章节主要介绍了温度测量技术的现状及发展趋势,传感器的发展和单片机的应用。温度测量

技术可以分为接触式测量和非接触式测量,两种方式各有优点,可以用在不同的场合下使用。温度传感器发展经历了三个阶段,并朝着高精度、多功能、总线标准化、高可靠性及安全性等方向迅速发展。单片机以集成度高、体积小、控制功能强等优点被广泛使用,如在智能仪表、机电一体化、分布式系统中的应用。

6

宁波大学科学技术学院本科毕业设计(论文)

2 方案论证

温度测量与语音播报系统的设计主要是在温度传感器的选择、语音芯片的选择和主控单元的设计。 2.1 温度传传感器部分

方案一: 2.1.1 方案一:采用模拟输出温度传感器若采用模拟温度温度传感器,比如AD590,LM35 等,模拟温度传感器采集温度信号,则需要设计信号调理电路、A/D 转换电路及相应的接口电路,才能把传感器输出的模拟信号转换成数字信号送到计算机去处理,这样电路就相对复杂,还要考虑模拟电路的抗干扰问题。

方案二: 2.1.2 方案二:采用逻辑输出温度传感器在某些场合,不需要严格测量温度值,只关心温度是否超出了一个设定范围,一旦温度超出了所规定的范围,则发出报警信号,启动或关闭设备,此时可以选择逻辑输出式温度传感器, LM56。如在本设计中,需要测量具体的环境温度值,要得到具体温度的数字量,所以不能使用此类传感器。

方案三: 2.1.3 方案三:采用二极管传感器半导体材料和器件的许多性能参数,如电阻率,PN 结的反向漏电流和正向电压等,都与温度有着密切的关系。一般电路中,温度会影响电路的稳定工作,所以尽量克服和避免。但半导体温度传感器恰好利用半导体器件的某些性能参数与温度的关系,实现了对温度的检测、控制和补偿。二极管温度传感器就是利用二极管的 PN 结的结电压随温度变化的原理工作的。这类传感器具有较好的线性度、尺寸小、响应快、灵敏度高,主要用在计算机和移动设备内。但价格就相对比较高,用单片机控制起来也不方便。

方案四: 2.1.4 方案四:采用数字式温度传感器 DS18B20 采用单总线数字温度传感器DS18B20 测量温度,直接输出数字信号,便于单片机处理及控制,节省硬件电路。DS18B20 可以通过数据线供电,也可以通过外部电源供电,工作电压范围为 3.0~ 5.5V,适用于几乎所有的单片机。DS18B20 的最大特点之一就是采用了单总线的数据传输方式,用一个线就能实现从机和主机之间的数据交换,操作较为方便。且可以将多个 DS18B20 并联在一条总线上,这样实现了多点温度的测量。综上所述,为了使电路尽量简单,控制尽量方便,测量出的温度值尽量准确,本设计温度传感器采用 DS18B20。

7

温度测量与语音播报系统设计

2.2

主控部分

方案一: 2.2.1 方案一:采用 PC 机 PC 机可在线编程、可在线仿真,这让调试变得方便。CUP 的计算速度比单片机快,而且有良好的人机交互界面,但是 PC 机输出信号不能直接与 DS18B20 通信,需要通过 RS232 电平转换兼容,需要的硬件多,较为繁琐,很不简便。而且在一些环境比较恶劣的场合,PC 机的体积大、价格贵、携带安装不方便、性能不稳定,给工程带来很多麻烦。

方案二: 2.2.2 方案二:采用 DSP 或 ARM 芯片单片机叫 MCU,微控制器,ARM 叫嵌

入式微处理器,DSP 叫数字信号处理器,是专为高速度的海量离散数字信号处理而发展的芯片。他们的发展需求不同导致了他们的内部系统资源和结构的不同。比如,51 单片机是 8 位的,晶振最多 24M,ROM 有 4K,可用 RAM 少于 128 字节,软件主要通过自己来编写;对于信号的处理,如对信号做 FFT,则选择 DSP;ARM 是 32 位的,主频一般在几百 M,内存一般是以 G 为单位,现在的趋势是用于商业上的开发 ARM+LINUX。 51 单片机,ARM,DSP 都是嵌入式系统的核心芯片的选择,要根据控制对象来选择芯片。其中要考虑项目的规模,效率的要求,当然最主要的还是设计成本,DSP 和 ARM 价格相对比较高。本设计中,主控芯片只需控制温度传感器和语音芯片,电路规模比较小,不需要大量的信号进行处理,程序也较为简单,如使用 DSP 或 ARM 做主控芯片会大大增加成本和电路的复杂度。

方案三: 2.2.3 方案三:采用 51 单片机本设计主控部分采用 AT89S52 八位单片机,它兼容标准 8051 指令系统及引脚,可烧写,可擦处,可在线编程。单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。 Atmel 公司的 AT89S52 单片机,基本结构如下[16]:(1)一个 8 位算术逻辑单元(CPU)。(2) 4 组,共 32 个 I/O 口,每个引脚有专用指令,可以单独进行读/写操作。(3)三个 16 位定时/计数器。(4)全双工串行通信口。(5) 6 个中断源,两级中断结构。(6) 256 字节内置 RAM。(7) 8K 在线可编程 Flash 存储器。 AT89S52 单片机的引脚排列如图 2-1。芯片共有 40 个引脚,各引脚功能如下:

8

宁波大学科学技术学院本科毕业设计(论文)

1、主电源引脚(2 根) VCC(40 脚):电源输入,接+5V 电源 GND(20 脚):接地线

2、外部晶振引脚(2 根) XTAL1(19 脚):片内震荡电路的输入端 XTAL2(20 脚):片内震荡电路的输出端

3、控制引脚(4 根) RST/VPP(9 脚):复位引脚,引脚上出现 2 个机器周期的高电平将使单片机复位。 ALE/PROG(30 脚):地址锁存允许信号。 PSEN(29 脚):外部存储器读选通信号。 EA/VPP(31 脚):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。

4、可编程输入/输出引脚(32 根) AT89S52 单片机有 4 组 8 位的可编程 I/O 口,分别为 P0、P1、P2、P3 口,每个口有 8 位(8 根引脚),共 32 根。每一根引脚都可以编程,比如用来控制电机、交通灯、霓虹灯等,开发产品时就是利用这些可编程引脚来实现我们想要的功能。本设计需要用到 15 个 I/O 口:1 根用来控制温度传感器,8 根用来控制 LED 数码管的段选,3 根用来控制位选,还有 3 根来语音芯片。

图 2-1 AT89S52 单片机的引脚排列 9

温度测量与语音播报系统设计

2.3

语音芯片部分

方案一: 2.3.1 方案一:采用 OTP 语音芯片 OTP 是指一次性可编程语音芯片,语音只能烧写一次,不能擦除,适合应用在不需要修改语音、语音长度短的场合。OTP 语音芯片的特点是单芯片方案、价格便宜,适合中小型批量生产。主要应用在中低端玩具、电子琴、电动车等产品上。

方案二: 2.3.2 方案二:采用 WT588 语音芯片 WT588 系类语音芯片是广州创维科技有限公司和台湾华邦共同研发出来的集单片机与语音电路与一体的可编程语音芯片,它有多种控制模式,包括按键控制模式,并口控制模式和串口控制模式。WT588 缺点是不能现场录音,只能通过与电脑连接擦除和改写语音内容,本设计中需要通过外部现场采集语音信息,所以不予采用。

2.3.3 方案三:采用 APR9600 语音芯片方案三: APR9600 是继美国 ISD 公司以后采

用模拟存储技术的又一款音质好、噪音低、不怕掉电、可反复录放的新型语音芯片,单片电路可录放 60 秒,串行控制时可分 256 段以上,并行控制时最大可分 8 段。它较 ISD 系列语音芯片易于控制且价格也较便宜,电路更为简单,能实现现场录音和可擦除语音,所以采用 ARR9600 作为语音播报的芯片。

2.4

小结本章中确定了系统的设计总方案,包括温度传感器,主控部分和语音部分的方案论证。传感器

部分采用数字式温度传感器 DS18B20,它是以单总线方式来传送数据的,控制方便且电路简单。主控部分采用 AT89S52 单片机,不需要处理大量的数据,从成本上考虑采用单片机控制。语音部分采用 ARP9600 语音芯片,它的特点只需外围连接若干个电容和电阻就能组成一个语音录放电路,并能现场录音。

10

宁波大学科学技术学院本科毕业设计(论文)

3 硬件电路设计

3.1 系统框图系统的主要功能包括:现场温度的采集,实时显示温度信息,实时语音播放。硬件设计主要包括主控模块,温度测量模块,显示模块和语音播报模块。系统框图如图3-1 所示。

图 3-1 系统框图

3.2

单片机的时钟电路和复位电路设计单片机工作的时间基准是有时钟电路提供的。在单片机的 XTAL1 和 XTAL2 两个管脚,接一个

晶振及两只电容就构成了单片机的时钟电路。电路中,电容器 C1 和 C2 对振荡频率有微调作用,通常的取值范围为(20~40)PF。石英晶体选择 6MHz 或 12MHz 都可以,结果只是机器周期时间不同,影响计数器的计数初值。本设计时钟电路晶振用 12M,电容用两个20P 的。单片机的 RST 管脚为主机提供一个外部复位信号输入端口,复位信号是高电平有效,高电平有效的持续时间应为 2 个机器周期以上,复位以后,单片机内各部件恢复到初始状态。电阻电容的参考值 R=10K?,C=10μA,RET 按键选择轻触开关。电路如图 3-2 所示。

11

温度测量与语音播报系统设计

VCC VCC 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 VCC 32 31 30 29 28 27 26 25 24 23 22 21

10UF 10K

+

12M

p1.0 vcc p1.1 p0.0 p1.2 p0.1 p1.3 p0.2 p1.4 p0.3 p1.5(mi) p0.4 p1.6(mo) p0.5 p1.7(sck) p0.6 rst p0.7 rxd 89S52 ea txd ale p3.2 psen p3.3 p2.7 p3.4 p2.6 p3.5 p2.5 p3.6 p2.4 p3.7 p2.3 xtal2 p2.2 xtal1 p2.1 gnd p2.0

20P

20P

图 3-2 时钟电路和复位电路

3.3

DS18B20 温度测量电路设计

3.3.1 单总线目前常用的微机与外设之间进行数据传输的串行总线主要有 I2C 总线、

SPI 总线和 SCI 总线。其中 I2C 总线以同步串行 2 线方式进行通信(一条时钟线,一条数据线),SPI 总线则以同步串行 3 线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线),而 SCI 总线是以异步方式进行通信(一条数据输入线,一条数据输出线)的。这些总线至少需要两条或两条以上的信号线。单总线(1-Wire)是 Dallas 公司的一项专有技术,与目前多数标准串行数据通信方式不同,它采用单根信号线,即传输时钟,又传输数据,而且数据传输是双向的。它具有节省 I/O 口资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。单总线采用简单的通信协议,通过一条公共数据线实现主控制器与一个或多个从机之间的半双工、双向通信。

3.3.2 DS18B20 的单总线命令根据 DS18B20 的通讯协议,单片机控制 DS18B20 完成温度转换必须经过三个步骤:第一步:主机先发一个复位脉冲,使总线上的所有 DS18B20 都被复位。第二步:发送 ROM 操作指令,使序列号编码匹配的 DS18B20 被激活,准备接受下面的 RAM 访问指令。第三步:RAM 访问指令控制选中的 DS18B20 工作状态,完成整个温度转换,读取等工作。在 ROM 命令发送之前,RAM 命令不起作用。

12

宁波大学科学技术学院本科毕业设计(论文)

一:初始化基于单总线上的所有传输过程是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道总线上有从机设备,且准备就绪。

二:ROM 命令[15] 在主机检测到应答脉冲后,就可以发出 ROM 命令,这些命令与各个从机设备的唯一 64 位 ROM 代码相关,允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。这些命令还允许主机能够检测到总线上有多少个从机设备以及其设备类型,或者有没有设备处于报警状态。从机设备可能支持 5 种 ROM 命令,每种命令长度为 8 位。主机在发出功能命令之前,必须送出合适的 ROM 命令。DS18B20 有 5 条 ROM 命令:(1)搜索 ROM[F0h]。当系统初始上电时,主机必须找出总线上所有从机设备的 ROM 代码,这样主机就能够判断出从机的数目和类型。主机通过重复执行搜索 ROM 循环以找出总线上所有的从机设备。如果总线只有一个从机设备,则可以采用读 ROM 命令来替代搜索 ROM 命令。在每次执行完搜索 ROM 循环后,主机必须返回至命令序列的第一步进行初始化。(2)读ROM[33h]。该命令仅使适用于总线上只有一个从机设备。它允许主机直接读出从机的 64 位ROM 代码,而无须执行搜索 ROM 过程。如果该命令用于多个节点系统,则必然发生数据冲突,因为每个从机设备都会响应该命令。(3)匹配 ROM[55h]。匹配 ROM 命令跟随 64 位 ROM 代码,从而允许主机访问多节点系统中某个指定的从机设备。当从机完全匹配 64 位 ROM 代码时,才会响应主机随后发出的功能命令。其它设备将处于等待复位脉冲状态。(4)跳跃ROM[CCh]。主机能够采用该命令同时访问总线上的所有从机设备,而无须发出任何 ROM 代码信息。例如,主机通过在发出跳越 ROM 命令后跟随转换温度命令[44h],就可以同时命令总线上所有的 DS18B20 开始转换温度,这样大大节省了主机的时间。值得注意,如果跳越 ROM 命令跟随的是读暂存器[BEh]的命令(包括其它读操作命令),则该命令只能应用于单节点系统,否则将由于多个节点都响应该命令而引起数据冲突。(5)报警搜索[ECh]。除那些设置了报警标志的从机响应外,该命令的工作方式完全等同于搜索 ROM 命令。该命令允许主机设备判断那些从机设备发生了报警,如测量温度过高或过低等。同搜索 ROM 命令一样,在完成报警搜索循环后,主机必须返回至命令序列的第一步进行初始化。

13

温度测量与语音播报系统设计

三:RAM 操作命令 DS18B20 有 6 条操作指令:(1)写 RAM 命令(4EH)。写入开始地址位 TH,随后是 TL 和配置字节,所有写入操作必须在 DS18B20 复位之前完成。(2)读 RAM 命令(BEH)。该命令从字节 0 开始,一直读完所有字节。(3)复制暂存器命令

(48H)。将暂存器内容复制到片内 E2PROM 中。(4)启动温度转换命令(44H)。启动总线上的 DS18B20 进行温度转换。(5)读 E2PROM 命令(B8H)。将 E2PROM 内的数据回读 RAM。(6)读供电模式命令(B4H)。若是寄生电源,返回 0;若是外部电源,返回 1。

3.3.3 DS18B20 的概述 DS18B20 是美国 DALLAS 半导体公司推出的一款智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现 9~12 位的数字值读数方式。可以分别在 93.7~750ms 内完成 9~12 位的数字量,并且从 DS18B20 读出的信息或写入 DS18B20 的信息仅需要一根线读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的 DS18B20 供电,而无须额外电源。因而使用 DS18B20 可使系统结构更趋简单,可靠性更高。它在测温精度、转换时间、传输距离、分辨率等方面都给用户的使用带来了方便,效果也令人满意[15]。单总线数字温度传感器 DS18B20 的特点如下:(1)独特的单线接口方式:DS18B20 与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通信。(2)在使用中不需要任何外围元件。(3)可用数据线供电,电压范围:+3.0~+5.5V。(4)测温范围-55~125℃。测温分辨率为 0.5℃。(5)通过编程可实现 9~12 位的数字读数方式。(6)用户可自设定非易失性的报警上下限值。(7)支持多点组网功能,多个 DS18B20 可以并联在唯一的三线上,实现多点测温。(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。 DS18B20 的外形及管脚排列如图 3-3 所示。

14

宁波大学科学技术学院本科毕业设计(论文)

图 3-3 DS18B20 的外形及管脚排列

DS18B20 的引脚定义:(1) DQ 为数字信号输入/输出端。(2) GND 为电源地。(3)VDD 为外接供电电源输入端(在寄生电源接线方式时接地)。

3.3.4 DS18B20 的内部结构 DS18B20 内部结构主要由 64 位 ROM、温度灵敏元件、内部存储器和配置寄存器四部分组成,如图 3-4 所示。

图 3-4 DS18B20 内部结构 15

温度测量与语音播报系统设计

(1)64 位 ROM 64 位光刻 ROM 结构如下:

8 位 CRC 校验码 48 位序列号 8 位产品代码

64 位 ROM 的内容是 64 位序列号,是出厂前被光刻好的,它可以被看做是该 DS18B20 的地址序列码,其作用是使每一个 DS18B20 都各不相同,这样就可以实现一根总线上挂接多个 DS18B20 的目的。这一点很像每一个网卡芯片都有一个各不相同的 MAC 地址。这 64 位ROM 的排列是:开始 8 位是产品类型标号,接着的 48 位是该 DS18B20 自身的序列号,最后 8 位是前面 56 位的循环冗余校验码。

(2)温度灵敏元件温度灵敏元件完成对温度的测量,测量后的结果存储在两个8字节的温度寄存器中,温度存储器高位的前 5 位是符号位,当温度大于零时,这 5 位为 0,而当温度小于零时,这 5 位为 1。高位剩下的 3 位和低位的前 4 位是温度的整数位,低位的后 4 位是温度的小数位,当温度大于零时它们以原码的形式存储,而当温度小于零时以二进制的补码形式存储。当转换位数为 12 位时,温度的精度为 0.0625℃,当转换位数为 11 位时,温度的精度为 0.125℃,依此类推。 DS18B20 的装换精度为 8~12 位可选,为了提高精度采用 12 位。在采用 12 位转换精度时,温度寄存器里的值是以 0.0625 为步进的,即温度值为温度寄存器里的二进制值乘以 0.0625,就是实际的十进制温度值。例如,当转换的最大值 07D0H 对应的温度是+125℃,则+25℃的数字输出为 0190H,-55℃的数字输出为FC90H。由此不难推出 DS18B20 的温度转换值和温度的对照表,如表 3-1 所示。

温度/℃ +125 +85 +25.0625 +10.125 +0.5 0 -0.5 -55 二进制数表示 0000 0111 1101

0000 十六进制数表示 07D0H 0550H 0191H 00A2H 0008H 0000H FFF8H FC90H

0000 0101 0101 0000 0000 0001 1001 0001 0000 0000 1010 0010 0000 0000 0000 1000 0000 0000 0000 0000 1111 1111 1111 1100 1111 1000 1001 0000

表 3-1 DS18B20 的温度转换值和温度的对照表 16

宁波大学科学技术学院本科毕业设计(论文)

因为小数部分是半字节,所以二进制值范围是 0~F,转换成小数值就是 0.0625 的倍数(0~15 倍)。这样需要精确到小数点 4 位,实际不必有那么高的精确度,一般可以精确到0.1℃。表 3-2 就是二进制与十进制的近似对应关系表。

小数部分 0 二进制值十进制值 0 0 1 1 2 3 3 4 5 5 6 6 7 8 8 9 1 2 3 4 5 6 7 8 9 A B C D E F

表 3-2 小数部分二进制和十进制的近似对应关系表

(3)DS18B20 内部存储器 DS18B20 温度传感器的内部存储器包括一个高速暂存 RAM 和一个非易失性的可电擦除的 EEPROM,后者存放高温度和低温度触发器 TH、TL 以及配置寄存器,共 9 位。 DS18B20 温度传感器的内部存储器字节顺序如下:

温度值低位字节 0 温度值高位字节 1 TH 字节 2 TL 字节 3 配置寄存器字节 4 保留字节 5 保留字节 6 保留字节 7 8 位 CRC 字节 8

第 0,1 字节保存温度数值,其中第 0 字节为低位,第 1 字节为高位。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第 0 和第 1 个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。第 2,3 字节锁存器 TH 和 TL 保存非易失性温度报警数据,可以通过软件写入用户报警上下限值。第 4 字节是配置寄存器,其内容用于确定温度值的数字转换分辨率,DS18B20 工作时按此寄存器的分辨率将温度转换为相应精度的数值。该字节各位的定义如下:

TM R1 R0 1 1 1 1 1

该寄存器低 5 位都是 1。TM 是测试模式位,用于设置 DS18B20 在工作模式还是在测试模式,在 DS18B20 出厂时该位被设置为 0(工作模式),不需要改动。R1 和 R0 决定温度转换的精度位数,即是用来设置分辨率的,如表 3-3 所示,DS18B20 出厂时被设置为 12 位。

17

温度测量与语音播报系统设计 R1 0 0 1 1 R0 0 1 0 1 分辨率 9位 10 位 11 位 12 位最大温度转换时间/ms 93.75 187.50 375.00 750.00

表 3-3 温度分辨率设置表

第 5~7 字节未用,全为逻辑 1。第 8 字节读出的是前面所有 8 个字节的循环冗余校验码(CRC),可用来保证通信的正确。CRC 存储在 64 位 ROM 的最高字节中。单片机根据ROM 的前 56 位来计算 CRC 值,并和存入 DS18B20 中的 CRC 值做比较,以判断收到的 ROM 数据是否正确。

3.3.5 DS18B20 的测温原理如图 3-5 所示,图中低温系数的震荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器 1;高温系数振荡器随温度变化其震荡频率明显变化,所产生的信号作为减法计数器 2 的脉冲输入。

斜率累加器预置计数比较器

低温度系数振荡器

减法计数器 1

预置增加

减到 0

温度寄存器停止

高温度系数振荡器

减法计数器 2

减到 0

图 3-5 DS18B20 测温原理图

图中还隐含着计数门,当计数门打开时,DS18B20 就对低温系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置于减法计数器 1 和温度寄存器中,减法计数器 1 和温度寄存器被预置在-55℃所对应的一个基数值。

18

宁波大学科学技术学院本科毕业设计(论文)

减法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器 1 的预置值减到 0 时,温度寄存器的值将加 1,减法计数器 1 的预置将重新被装入,减法计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数。如此循环直到减法计数器 2 计数到0 时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线形性,其输出用于修正减法计数器 1 的预置值,只要计数门仍未关闭就重复上诉过程,直到温度寄存器值达到被测温度值。

3.3.6 DS18B20 与单片机的接口设计在外部电源供电方式下,DS18B20 工作电源由 VDD 引脚接入,由外部电源供电,可以保证转换精度,同时在总线上理论上可以挂接任意多个DS18B20,组成多点测温系统。在外部电源供电方式下,可以充分发挥 DS18B20 宽电源电压范围的优点,即使电源电压 VCC 降到 3V 时,依然能够保证测温精度。本设计就是采用外部供电方式,VDD 接+5V,GND 接地,单片机的 P1.0 口与 DS18B20 的 DQ 端相连。在此方式下,DS18B20 工作稳定可靠,抗干扰能力强,而且电路也比较简单。电路如图 3-6 所示。 VCC DS18B 20 1 2 3 VDD VCC 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 p1.0 vcc p1.1 p0.0 p1.2 p0.1 p1.3 p0.2 p1.4 p0.3 p1.5(mi) p0.4 p1.6(mo) p0.5 p1.7(sck) p0.6 rst p0.7 rxd 89S52 ea txd ale p3.2 psen p3.3 p2.7 p3.4 p2.6 p3.5 p2.5 p3.6 p2.4 p3.7 p2.3 xtal2 p2.2 xtal1 p2.1 gnd p2.0 40 39 38 37 36 35 34 33 32 31 VCC 30 29 28 27 26 25 24 23 22 21 GND

4.7K VCC

图 3-6 外部电源供电方式电路图

19

温度测量与语音播报系统设计

3.4

APR9600 语音录放电路设计

3.4.1 APR9600 语音芯片的介绍 APR9600 语音录放芯片是一款音质好、噪音低、不怕断电、可反复录放的新型语音芯片。它具有:价格便宜,有多种控制方式,分段管理方便、多段控制时电路简单等特点。外部只需配置驻极体传声器、扬声器、开关和少数电阻、电容等元器件,再配 2.4~5.5V 直流电源,就可构成完整的语音录放系统。APR9600 有以下特点[3,17]:(1)APR9600 提供单片高质量固态录音和回放功能,不需软件或微控制器支持;(2)APR9600 片内 Flash ROM 的容量为 256KB,可以灵活多样地处理 32~60s 语音信息;(3)串行按键控制时可分为 256 段语音信息,并行按键控制时最多可分成 8 段独立的语音信息;(4)设有片选端,便于多个 APR9600 级联,以便扩展电路的录放时间长度和语音信息段。 APR9600 引脚功能如表 3-4 所示,APR 引脚排列如图 3-7 所示。

管脚 1、/M1 2、/M2 3、/M3 4、/M4 5、/M5 6、/M6 7、OSCR 8、/M7 9、/M8 10、/BUSY 11、BE 12、VSSD 13、VSSA 14、SP+ 功能第一段控制或连续录放控制(低电平有效)第二段控制或快进选段控制(低电平有效)第三段控制(低电平有效)第四段控制(低电平有

效)第五段控制(低电平有效)第六段控制(低电平有效)振荡电阻第七段控制及片溢出指示(低电平有效)第八段控制(低电平有效)及操作模式选项忙信号输出(工作时出 0,平时为 1)键声选择(接 1 为有键声,0 则无)数字电路电源地模拟电路电源地外接喇叭正端管脚 15、SP16、VCCA 17、MICIN 18、MICREF 19、AGC 20、ANA-IN 21、ANA-OUT 22、STROBE 23、CE 24、MSEL1 25、MSEL2 26、EXTCLK 27、/RE 28、VCCD 表 3-4 APR9600 引脚功能表功能外接喇叭负端模拟电路正电源话筒输入端话筒输入基准端自动增益控制端线路输入端线路输出端工作期间闪烁指示灯输出端复位端(高电平有效) 模式设置端模式设置端外接振荡频率端录放选择端(0 为录音、1 为放音)数字电路正电源图 3-7 APR9600 引脚排列 20

宁波大学科学技术学院本科毕业设计(论文)

3.4.2 APR9600 录音电路 APR9600 的录放控制有多种操作模式,为普通用户使用提供了极大的方便。总的来说分为串行控制和并行控制两种。在本设计中,要通过单片机控制语音芯片要进行选段播放,所以采用此语音芯片的串行控制。在录音时,置 MSEL1、MSEL2 为 0,/M8 置 1,置/RE 端为 0 为录音状态,按住/M1 即开始录第一段,松键即停止。再按住/M1 即录第二段,如此一直分段录音,直到芯片溢出。在本设计中,需要录 12 段语音信息,按次序分别为“十”“点”“℃”“一”“二”“三”“四”“五”“六”、、、、、、、、、“七”“八”“九”、、。 APR9600 录音电路如图 3-8 所示。

图 3-8 APR9600 录音电路

手动测试放音:/M8 置 0 为串行选段控制方式,按一下/M1 播放第一段,这时的/M2 成为快进选段键,每按一下/M2 即向后移动一段,例如现在按了三下/M2,再按/M1 就放音第四段,按/CE 键复位,因此可以实现选段放音。

21

温度测量与语音播报系统设计

3.4.3 由单片机控制的放音电路语音录制完成后,需要对温度值进行选段语音播放,本设计采取的方法是将单片机 3 根 I/O 口线接到 APR9600 语音芯片的 3 个控制管脚,这些管脚中放音端/M1,快进端/M2 是低电平有效,复位端 CE 是高电平有效,只要通过单片机I/O 口给出几个高脉冲和低脉冲,即可对语音芯片进行操控。比如要播报温度值 25.6℃,其单片机控制流程是这样的:二、十、五、点、六、摄氏度、分别在语音芯片的第 5、1、8、2、9、3 段,单片机给/M2 端 5 个低脉冲,这时就停留在了第 5 段,给/M1 端一个低脉冲就能把该段语音播报出来,播第 1 段的时,需要给 CE 端一个高电平进行复位,再给 /M1 端一个低脉冲就能播放第 1 段,以此类推,依次把各段播放出来,这样把要播的每一段语音组合起来就形成一条完成的语音信息。 APR9600 与单片机连接的电路如图 3-9 所示,单片机的 P2.2 口控制播报端/M1,P2.1 口控制快进端/M2,P2.0 口控制复位端 CE。

p1.0 vcc p1.1 p0.0 p1.2 p0.1 p1.3 p0.2 p1.4 p0.3 p1.5(mi) p0.4 p1.6(mo) p0.5 p1.7(sck) p0.6 rst p0.7 rxd 89S52 ea txd ale p3.2 psen p3.3 p2.7 p3.4 p2.6 p3.5 p2.5 p3.6 p2.4 p3.7 p2.3 xtal2 p2.2 xtal1 p2.1 gnd p2.0 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 APR9600 /M 1 /M 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 20 19 18 17 16 15 VCC D /R E EXTCLK M SEL2 M SEL1 C E ANA-OUT ANA-IN AGC 0.1UF VCC A SP-

100K

VCC

44K 100K

OSC R

4.7UF

VCC VCC

B E VSS D VSS A SP+

470K VCC

图 3-9 单片机与 APR9600 的连接电路

3.5

LED 数码显示电路 LED 显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的

段选必须接一个 8 位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用 CPU 时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮

22

2 1

SP

+

宁波大学科学技术学院本科毕业设计(论文)

度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。本设计采用 8 段 4 位共阴极数码管,如图 3-9 所示是一个共阴极接法的 4 位 LED 显示器。其中管脚 a、b、c、d、e、f、g 为 4 位 LED 各段的公共引出端;D1、D2、D3、D4 分别是每一位的共阴极输出端;dp 是小数点引出端。由于 4 位 LED 阴极的各段已经在内部接在一起,所以必须使用动态扫描方式。单片机的 P0.0~P0.7 控制数码管的段选,P2.0、P2.1、P2.2、P2.3 分别控制数码管的位选。比如要在第一位显示 1,先把 P2.0 置零,打开第一位的位选,在把 1 的编码给 P0 口,延时一段时间。

16 15 14 13 12 11 10 9 R 1K DPY a f e RXD TXD ALE PSEN g d 11 7 4 2 1 10 5 3 a

b c d e f g dp a b c dp C0 f e g d b c dp C2 C3 f e a g d b c dp C4 f e a g d b c dp DPY 4-LED P23 12 6 8 9 P00 P01 P02 P03 P04 P05 P06 P07 P00 P01 P02 P03 P04 P05 P06 P07 1 2 3 4 5 6 7 8 5V U1 P10 P11 P12 P13 P14 P15 P16 P17 INT1 INT0 T1 T0 1 2 3 4 5 6 7 8 13 12 15 14 31 19 18 9 RD 17 WR 16 P10 P11 P12 P13 P14 P15 P16 P17 INT1 INT0 T1 T0 EA/VP X1 X2 RESET RD WR P00 P01 P02 P03 P04 P05 P06 P07 P20 P21 P22 P23 P24 P25 P26 P27 VCC GND RXD TXD ALE/P PSEN 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 40 20 10 11 30 29 P00 P01 P02 P03 P04 P05 P06 P07 P20 P21 P22 P23 P24 P25 P26 P27

89C52

LED

P20

P21

图 3-9 数码管动态显示电路

3.6

系统整体电路见附录二(电路原理图)

3.7

小结本章主要是硬件电路的设计。硬件设计主要包括主控模块,温度测量模块,显示模块和语音播

报模块。温度传感器 DS18B20 只需一根线就能与单片机进行数据交换;显示模块采用LED 数码管, P0 口控制段选, P2.0~P2.3 控制位选;语音芯片用 APR9600,它的三个控制端口与单片机的 P2.4~P2.6 相连。

23

P22

温度测量与语音播报系统设计

4 软件设计

4.1 主程序流程图

开始

初始化DS18B20

启动DS18B20

数码管显示

启动定时器

5S到?

语音播报

图 4-1 主程序流程图

4.2

DS18B20 温度测量程序

4.2.1 DS18B20 的时序一:复位时序使用 DS18B20 时,首先需将其复位,然后才能执行其它命令。复位时,主机将数据线拉为低电平并保持 480us~960us,然后释放数据线,由上拉电阻将数据线拉高 15~60us,等待 DS18B20 发出应答脉冲,应答脉冲有效时间为60~40us,这样,就完成了复位操作。二:写时序在主机对 DS18B20 写数据时,先将数据线置为高电平,再变为低电平,该低电平应大于 lus。在数据线变为低电平后 15us 内,根据写“1”或写“0”使数据线变高或继续为低。DS18B20 将在数据线变成低电平后 15us~60us 内对数据线进行采样。要求写入 DS18B20 的数据持续时间应大于

24

宁波大学科学技术学院本科毕业设计(论文)

60us 而小于 120us,两次写数据之间的时间间隔应大于 1us。三:读时序当主机从DS18B20 读数据时,主机先将数据线置为高电平,再变为低电平,该低电平应大于 1us,然后释放数据线,使其变为高电平。DS18B20 在数据线从高电平变为低电平的 15us 内将数据送到数据线上,主机可在 15us 后读取数据线。DS18B20 完成一个读时序过程,至少需要60us。

4.2.2 DS18B20 的复位程序复位程序流程图如图 4-2 所示

开始

总线拉低

void Initial_DS18B20(void) { uint i; DIO=0; //单片机将总线拉低i=103; while(i>0)i--; //延时,最少 480us DIO=1; //拉高总线 i=4; while(i>0)i--; //延时至少 60us }

延时至少480us

总线拉高

延时至少60us

结束

图 4-2 复位流程

4.2.3 DS18B20 启动温度转换程序温度转换命令子程序主要是发温度转换开始命令,温

度转换流程图如图 4-3 所示。

void Temp_Convert() { Initial_DS18B20(); // 初始化delayms(1); //延时write_DS18B20(0xcc); //跳过 ROM write_DS18B20(0x44); //温度转换 } 发 DS18B20 复位命令

发跳过 ROM 命令

发温度转换开始命令

结束图 4-3 温度转换流程

25

温度测量与语音播报系统设计

4.2.4 DS18B20 读温度程序 uint GetTemp(void) { uchar Th,Tl; uint temp=0; float f_temp=0; Initial_DS18B20(); // 初始化DS18B20 delayms(1); //延时write_DS18B20(0xcc); //跳过 ROM write_DS18B20(0xbe); //读暂存器 Tl=Read_DS18B20(); //读低八位Th=Read_DS18B20(); //读高八位temp+=Th; temp<<=8; temp+=Tl; f_temp=temp*0.0625; temp=f_temp*10+0.5; //保留一位小数点和四舍五入 return temp; } 发送DS18B20复位命令

发送跳过ROM命令

发读取温度命令

读出两字节数据TL、TH

移入温度暂存器

返回读取值

图 4-4 温度读取流程图

4.3

数码管显示程序

此程序采用了带小数点的编码:unsigned char code shuma[]= { 0xeb,0x88,0xb3,0xba,0xd8,0x7a,0x7b,0xa8,0xfb,0xfa, //不带小数的编码0~9 0xef,0x8c,0xb7,0xbe,0xdc,0x7e,0x7f,0xac,0xff,0xfe, //带小数的编码 0.~9. }; 浮点数扩大十倍并四舍五入程序,此程序主要为了便于小数位的显示。 temp=f_temp*10+0.5; 本设计采用动态显示方式,数码管显示三位,从左到右依次为百位,十位,小数位。由于前面已经乘以了 10 并四舍五入,分离出的百位 bai=x/100 就是实际温度的十位,十位shi=x%100/10 就是温度的个位,个位 ge=x%100%10 就是温度的小数位,其中个位采用带小数点的编码。如显示 25.1,温度寄存器里面的值乘以 0.0625 是实际的温度值 25.0625,5.0625*10+0.5=251.125,把 251.125 送入显示子程序,251/100=2,251/100%10=5,251%100%10=1,这样就能在数码管上显示三位数 25.1。

26

宁波大学科学技术学院本科毕业设计(论文)

void Display(uint x) { bai=x/100; //十位 we1=0; //打开位 1 P0=shuma[bai]; delayms(10); //延时 we1=1; //关闭位 1 shi=x%100/10; //个位 we2=0; P0=shuma[shi+10]; //带小数点的编码 delayms(10); we2=1; ge=x%100%10; //一位小数位 we3=0; P0=shuma[ge]; delayms(10); we3=1; }

4.4

语音播报程序放音部分由单片机的三个 I/O 口控制,控制语音芯片的三个端口(/M1 放音、/M2 快进、CE 复

位)。已经录好了 12 段语音,依次为“十”“点”“度”“一”“二”“三”“四”“五”“六”、、、、、、、、、“七”“八”“九”、、。一:复位子程序 void rest()

{ CE=1; //CE=1 复位,高电平有效 delay(8); CE=0; } 二:播报子程序 uchar tmp2=13; //全局变量用于存储上一次的播放段位unsigned char code tab[]={1,2,3,4,5,6,7,8,9,10,11,12}; //1~12 的播放段位 void play(unsigned char num) { uchar k,tmp1; num--; tmp1=num; if(tmp1

27

温度测量与语音播报系统设计

{

rest(); //复位for(k=1;k<=num;k++) { M2=0; //快进num 次delay(9); M2=1; delay(154); } M1=0; //放音 delay(9); M1=1; delay(200);

} else //如果这次段位比上次段位大,直接快进(num-tmp2)次至播放段{ num=tmp1-tmp2; for(k=1;k<=num;k++) { M2=0; delay(9); M2=1; delay(154); } M1=0; delay(9); M1=1; delay(200); } tmp2=tmp1; //储存当前播放段 }

4.5

小结本章节主要是软件程序的设计,主程序主要由测温子程序,显示子程序和播放子程序组成。

DS18B20 有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了三种信号的时序:初始化时序、读时序、写时序,在编程中要按时序的要求编写。

28

宁波大学科学技术学院本科毕业设计(论文)

5 数据测试及分析

5.1 温度数据测量测量是为确定被测对象的量值而进行的实验过程,其目的是要知道被测量值的真实大小,但由于环境、器件、人为等因素,测量所得的数据和被测量的真值之间,不可避免的存在着一定的差异,在数值上即表现为误差。温度测量值与标准值之间也存在着误差,本设计中以温度传感器 DS18B20 为温度测量值,以 TES1360 温湿度表的测量值为标准值来进行分析。一:不同时间段的测量值下面是一天三个时间点的环境温度测量值、标准值和误差

表 5-1 2010 年 5 月 15 日上午 8 点测试温度编号 1 2 3 4 5 平局值 TES1360℃19.6 19.5 19.5 19.4 19.5 19.5 DS18B20℃ 19.2 19.3 19.2 19.5 19.6 19.3 误差℃ -0.4 -0.2 -0.3 0.1 0.1 -0.2

表 5-2 2010 年 5 月 15 日下午 3 点测试温度编号 1 2 3 4 5 平局值 TES1360℃21.1 21.2 21.1 21.0 21.3 21.4 DS18B20℃ 21.2 21.4 20.9 21.1 21.5 21.2 误差℃ 0.1 0.2 -0.2 0.1 0.2 -0.2

表 5-3 2010 年 5 月 15 日晚上 8 点测试温度编号 1 2 3 4 5 平局值 TES1360℃19.7 19.6 19.6 19.7 19.7 19.6 DS18B20℃ 19.8 19.6 19.4 19.8 19.5 19.8 误差℃ 0.1 0 -0.2 0.1 -0.2 0.2

分析结果:在三个时间点上,DS18B20 的测量误差小于 1℃,符合系统的要求。

29

温度测量与语音播报系统设计

表 5-3

在不同温度点下的温度测量值 0.1 0.7 0.6 16.9 16.7 -0.2 20.7 20.9 0.2 90.6 89.9 -0.7

TES1360℃ DS18B20℃误差℃

分析结果: DS18B20 在 20℃左右的温度范围误差较小,在低温段和高温段温度误差相

对大一点,分析结果与 DS18B20 数据手册上的典型误差表相一致。

5.2

语音模块测试 DS18B20 测量出来一个温度值后,把温度值送入语音模块播放,温度值有三个数位组成,分别

为十位,个位和小数位。在播放时,若十位为 0,则不播放,直接播放后两位;若个位为 0,则播放十位和小数位;若小数位为 0,则播放前两位;若三位都不为 0,则全播放。模块测试时,温度值取 8.5℃,20.5℃,25.0℃,25.6℃,这几个值进行播放,语音模块播放八点五度,二十点五度,二十五度,二十六点五度,测试结果正确。

5.3

小结本章主要讲了温度测量模块和语音模块的测试,温度测量模块的误差小于 1℃,符合设计的要

求,语音模块在不同温度值下播报准确,整个系统运行结果达到预计的目标。

30

宁波大学科学技术学院本科毕业设计(论文)

6 设计总结

这次毕业设计历时 4 个月,我放弃了去找工作和实习的机会,认认真真的待实验室做设计。也面临着巨大的工作压力,不过我想毕业设计一定是优先于工作的,毕业设计关系到是否能毕业的问题,既然选择了单片机类的硬件设计,就要认真的对待。它不同于其他的设计课题,必须要花大量的时间,而且也有一定的难度。从一开始的确定课题,到后来的资料查找、理论学习,再有就是设计和调试过程,是对单片机和数字电路的一次全面综合。在画原理图、PCB 布线、焊接和调试过程中也遇到了各种问题,这要求保持冷静,联系理论知识和实际情况去分析问题的关键,实在解决不了可以请教同学或指导老师。虽然在制作过程中遇到很多问题,但是最后还是在老师以及同学的帮助下解决了这些问题,很好地完成了本次设计任务。从另一方面想,我通过这 4 个月的设计,边做设计边学习理论,掌握了很多知识,也为以后的工作打在了坚实的基础。。本设计包括硬件的组成和软件的设计,温度测量范围 0~99 摄氏度,分辨率 0.1 摄氏度。该系统可以分为四部分,温度测量部分、温度显示部分、温度播报部分和单片机控制部分。其硬件设计中最为核心的器件是单片机,它采集DS18B20 测量的温度值,通过 LED 数码管显示数值,同时将温度值送到语音芯片,以语音的形式播报测量的温度。整个系统的软件编程是通过 C 语言实现的,这个设计思路清晰、结构紧凑、简单可靠、操作简便。

31

温度测量与语音播报系统设计

7 参考文献

[1] 王庆利,袁建敏.单片机设计案例实战教程[M].北京邮电大学出版社,2008. [2] 梅丽凤.单片机原理及应用[M].清华大学出版社,2008. [3] 王朝南.单片优质语音录放集成电路应用手册[M].机械工业出版社,2005. [4] 楼然苗.李光飞.单片机课程设计指导[M].北京航空航天大学出版社,2007. [5] 王为青,邱文勋.51 单片机应用开发案例精选[M].人民邮电出版社,2007. [6] 汪道辉,单片机系统设计与实践[M].电子工业出版社,2006. [7] 夏易录.单片机技术基础教程与实践[M].电子工业出版社,2008. [8] 钱显毅,传感器原理及应用[M].东南大学出版社,2008. [9] 王魁汉.温度测量技术的现状与展望[J].基础自动化,1997,4(1):1-6. [10] 杨永军.温度测量技术现状和发展概述[J].专题讲座,2009,29(4):62-65. [11] 蔺鹏,柴世红.基于 AT89C51 单片机与 DS18B20 的温度测量系统[J].甘肃科技,2008,24(9):38-40. [12] 赵浪涛,赵永花.DS18B20 芯片在温度测量系统中的应用[J].兰州工业高等专科学校学报, 2009, 16(4):4-7. [13] 张伟强.单片机控制

APR9600 录放音芯片[J].丹东纺专学报,2004,11(2):39-40. [14] DALLAS 公司.DS18B20 数据手册[Z]. [15] Atmel 公司.AT89S51 数据手册[Z]. [16] APR9600 数据手册[Z]. [17] S.Wang,JumingTang,F.Younce.Temperature Measurement[J]. Encyclopedia of Agricultural,Food,and Biological Engineering.2003,978-997. [18] Department of Computer Systems, Technical University –branch Plovdiv. Measurement of temperature and humidity using SHT11/71 intelligent sensor [J]. ELECTRONICS,2004,22-24. [19] S.Wang JumingTang F.Younce. Temperature Measurement[J]. Washington State University, Pullman, Washington,U.S.A.

32

宁波大学科学技术学院本科毕业设计(论文)

致谢

本设计能够顺利的完成得到了院系领导老师的大力支持和帮助,尤其是我的指导老师李宏副教授,在百忙之中能抽出时间,仔细为我为我指导。设计期间,李老师要求我们每个星期汇报设计的进展,并帮助我们分析遇到的各种困难,解答疑难问题。他一直教导我们遇到问题不要退缩,要仔细分析问题,找出问题的关键,要有解决问题的信心。在设计的同时,我也得到了同学们的帮助,相互探讨问题,使我受益匪浅,我也感谢他们!电子信息技术日新月异地飞速发展,人们总是处在不断学习不断进步,再加上我水平有限,所以本设计肯定存在许多不尽如人意的地方,欢迎广大老师和同学批评指正。最后,要感谢信息学院的所有老师,他们精心的栽培为我以后的学习工作打下了坚实的基础。

33

温度测量与语音播报系统设计

附录一:附录一:程序

#include #include #define uint unsigned int // 宏定义 #define uchar unsigned char /***位定义***/ sbit DIO=P1^0; //数据口 sbit we1=P2^4; //数码管位选sbit we2=P2^5; sbit we3=P2^6; sbit we4=P2^7; sbit M1=P2^2; sbit M2=P2^1; sbit CE=P2^0; //第一段控制或连续录放控制(低电平有效) //第二段控制或快进选段控制(低电平有效)//复位/停止键或启动/停止键(高电平有效)

/***全局变量***/ unsigned char code shuma[]= { 0xeb,0x88,0xb3,0xba,0xd8,0x7a,0x7b,0xa8,0xfb,0xfa, //不带小数的编码

0xef,0x8c,0xb7,0xbe,0xdc,0x7e,0x7f,0xac,0xff,0xfe, //带小数的编码}; uchar bai,shi,ge,tt; /***延时函数***/ void delayms(uint xms) { uchar i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); }

void delay(unsigned int z) { unsigned int i,j; for(i=z;i>0;i--) for(j=1500;j>0;j--); }

34

宁波大学科学技术学院本科毕业设计(论文)

/***DS18B20_Initial 函数***/ void Initial_DS18B20(void) { uint i; DIO=0; //单片机将总线拉低 i=103; while(i>0)i--; //延时,最少 480us DIO=1; //拉高总线 i=4; while(i>0)i--; //延时至少 60us }

/***DS18B20_write_byte 函数***/ void write_DS18B20(uchar dat) //向 18B20 写一个字节数据 { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; //字节最低位 dat=dat>>1; //字节向右移一位 if(testb) //写 1 部分 { DIO=0; // 使总线为低电平 i++;i++; //延时 6.51us DIO=1; //拉高总线 i=8;while(i>0)i--; //延时至少60us } else { //写 0 部分 DIO=0; //使总线为低电平 i=8;while(i>0)i--; //延时 60us 以

上 DIO=1; //拉高总线 i++;i++; //延时 6.51us } } }

/***DS18B20_Readbyte 函数***/ bit tempreadbit(void) //读 1 位函数 {

35

温度测量与语音播报系统设计

uint i; bit dat; DIO=0; i++; //延时 3.26us DIO=1; i++;i++; //延时 6.51us dat=DIO; i=8;while(i>0)i--; //延时60us 以上return (dat); //返回dat } uchar Read_DS18B20(void) //读 1 个字节函数 { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tempreadbit(); dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在 DAT 里 } return(dat); //将一字节数据返回 } /***DS18B20_Temp_Convert 启动温度转换函数***/ void Temp_Convert() { Initial_DS18B20(); // 初始化 delayms(1); //延时write_DS18B20(0xcc); //跳过ROM write_DS18B20(0x44); //温度转换} /***DS18B20_GetTemp 读温度函数***/ uint GetTemp(void) { uchar Th,Tl; uint temp=0; float f_temp=0; Initial_DS18B20(); // 初始化DS18B20 delayms(1); //延时write_DS18B20(0xcc); //跳过 ROM write_DS18B20(0xbe); //读暂存器 Tl=Read_DS18B20(); //读低八位 Th=Read_DS18B20(); //读高八位 temp+=Th; temp<<=8; temp+=Tl;

36

宁波大学科学技术学院本科毕业设计(论文)

f_temp=temp*0.0625; temp=f_temp*10+0.5; //保留一位小数点和四舍五入 return temp; } /***LED 显示函数***/ void Display(uint x) { bai=x/100; we1=0; P0=shuma[bai]; delayms(10); we1=1; shi=x%100/10; we2=0; P0=shuma[shi+10]; delayms(10); we2=1; ge=x%100%10; we3=0; P0=shuma[ge]; delayms(10); we3=1; } uchar tmp2=13; //全局变量用于存储上一次的播放段位 unsigned char code tab[]={1,2,3,4,5,6,7,8,9,10,11,12}; //播放段位 /***复位子程***/ void rest() { CE=1; //CE=1 复位/停止键或启动/停止键delay(8); CE=0; /***播报子程序***/ void play(unsigned char num) { uchar k,tmp1; num--; tmp1=num; if(tmp1

//如果这次段位比上次段位小,先复位再快进 num 次至播放段

37

温度测量与语音播报系统设计

for(k=1;k<=num;k++) { M2=0; //快进 num 次 delay(9); M2=1; delay(154); } M1=0; //放音 delay(9); M1=1; delay(200); } else //如果这次段位比上次段位大,直接快进(num-tmp2)次至播放段 { num=tmp1-tmp2; for(k=1;k<=num;k++) { M2=0; delay(9); M2=1; delay(154); } M1=0; delay(9); M1=1; delay(200); } tmp2=tmp1; } /***主函数***/ void main() { EA=1; //开总中断 TMOD=0x01; //定时器工作方式 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; // 装初值,定时 50ms ET0=1; //定时器 T0 中断允许 TR0=1; //启动定数器 while(1) { uint t; Temp_Convert(); //启动温度转换 t=GetTemp(); //读温度

38

宁波大学科学技术学院本科毕业设计(论文)

Display(t);

//显示温度

if(tt==200) //定时 5s { tt=0; play(tab[bai+2]); play(tab[0]); if(shi==0&&ge!=0) { play(tab[1]); play(tab[ge+2]); play(tab[2]); } else if(shi!=0&&ge==0) { play(tab[shi+2]); play(tab[2]); } else if(shi==0&&ge==0) { play(tab[2]); } else { play(tab[shi+2]); play(tab[1]); play(tab[ge+2]); play(tab[2]); } } } } void exter1()

相关文档