资源描述
武汉理工大学检测系统综合设计课程设计说明书前 言 温度是一种最基本的环境参数,日常生活和工农业生产中经常要检测温度。传统的方式是采用热电偶或热电阻,但是由于模拟温度传感器输出为模拟信号,必须经过AD转换环节获得数字信号后才能与单片机等微处理器接口,使得硬件电路结构复杂,制作成本较高。近年来,美国DALLAS公司生产的DSI18B20为代表的新型单总线数字式温度传感器以其突出优点广泛使用于仓储管理、工农业生产制造、气象观测 、科学研究以及日常生活中。 随着科学技术的不断进步与发展,温度传感器的种类日益繁多,数字温度传感器更因适用于各种微处理器接口组成的自动温度控制系统具有可以克服模拟传感器与微处理器接口时需要信号调理电路和A/D转换器的弊端等优点,被广泛应用于工业控制、电子测温计、医疗仪器等各种温度控制系统中。其中,比较有代表性的数字温度传感器有DS1820、MAX6575、DS1722、MAX6635等。智能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的。它是微电子技术、计算机技术和自动测试技术(ATE_)的结晶。目前,国际上已开发出多种智能温度传感器系列产品。智能温度传感器内部包含温度传感器、A/D传感器、信号处理器、存储器(或寄存器)和接口电路。有的产品还带多路选择器、中央控制器(CPU)、随机存取存储器(RAM)和只读存储器(ROM)。智能温度传感器能输出温度数据及相关的温度控制量,适配各种微控制器(MCU),并且可通过软件来实现测试功能,即智能化取决于软件的开发水平。为了准确获取现场的温度和方便现场控制,本系统采用了软硬件结合的方式进行设计,利用LED数码管显示温度,利用DS18B20检测当前的温度值,通过和设定的参数进行比较,若实测温度高于设定温度,则通过555定时器产生频率可变的报警信号,若实测温度低于设定温度,则加热电路自动启动,到达设定温度后停止。在软件部分,主要是设计系统的控制流程和实现过程,以及各个芯片的底层驱动设计已达到所要求的功能。在近端与远端通信过程中,采用串行MAX232标准,实现PC机与单片机间的数据传输。 目 录前 言1目 录21. 总体方案设计31.1 系统的工作原理31.2 系统的方案比较41.3 系统方案的确定41.3.1 单片机芯片的选择41.3.2 显示模块的选择51.3.3数据采集系统的选择51.3.4 复位电路61.3.5 通信接口电路的选择71.3.6 电路设计最终方案72 系统硬件设计82.1 系统硬件概述82.2 AT89S52最小系统模块设计82.3 振荡源和复位电路设计112.3.1 复位电路112.3.2 振荡源电路122.4 显示模块设计122.5 串行接口模块设计142.6 温度采集模块设计152.7 报警电路设计172.8 加热电路设计183.系统软件设计193.1 主程序流程图193.2 外部中断的应用203.3 延时程序的处理214. 心得体会22参考文献23附录1:程序24附录2:英文资料翻译301. 总体方案设计随着电子产业的高速化发展,电子产品的集成化程度也越来越高,智能化的产品也日渐增多,温度测控系统也从传统化的产品向智能化的产品方向发展。 本次课程设计中,我设计的就是一个温度控制系统,其设计思想是利用单片机作为主要的控制器件,LED数码管做为电路的显示部分,外加报警电路和自动加热电路,当温度低于设定值20度时,加热器加热。加热到20度时,加热器自动停止加热。当温度高于设定值25度时,报警电路报警。从而实现自动控制温度在20到25度之间。1.1 系统的工作原理在温控系统中,需要将温度的变化转化为对应的电信号的变化,选用AT89S52单片机为中央处理器,通过温度传感器对空气进行温度采集,将采集到的温度信号传输给单片机,再由单片机控制显示器,并比较采集温度与设定温度是否一致,然后驱动电机加热或降温循环对空气进行处理,从而模拟实现空调控制单元的工作情况。工作流程说明如下: 开始,先接通电源,LED就自动显示出当前温度。当温度值低于设定值20度时,加热器加热。加热到20度时,加热器自动停止加热。当温度高于设定值25度时,报警电路报警。系统的主要技术指标如下:测温范围:-10+100;温度分辨率:正负0.5.系统的原理框架图,如图1所示。单片机显示器报警电路加热电路温度传感器PC机图1 系统原理框图1.2 系统的方案比较在日常生活中,测量温度的方案有很多,智能温度测控系统的设计方法也不胜枚举。有工业级别的温度控制系统,有商业的温度控制系统以及民用的温度控制系统。由于身边的条件以及元器件的限制,在这里选择设计民用的智能温度控制系统。方案一:以热电偶作为温度传感器,AD模数转换,LED作为显示器,采用矩阵键盘,用AT89C51作为主控芯片。在该方案中,热电偶的测量范围广,而且精度也很好,其灵敏度也很高,但是其价格高,还需要增加相应的外围电路,给硬件电路的设计带来了一定的困难,该温度传感器实用于工业级别的温度控制,而本系统是民用级别的,测量的范围也不高;AD模数转换的转换速率和分辨率也会给测量的温度值带来一定的影响;LED显示,则过于传统化,价格也较贵,其显示的位数很有限,若要增加功能,会给设计带来很大的困难。方案二:以DS18B20作为温度传感器,LED数码管作为显示屏,用AT89S52作为主控芯片。在该方案中,温度传感器DS18B20在日常生活中应用很广泛,器价格较之热电偶也很便宜,测量的精度也能达到民用的要求,其集成化的程度更高,不需要外围的处理电路。即可将模拟信号转换为电信号;LED数码显示屏读数方便,而且比较清晰;主控芯片采用AT89S52的兼容的电平兼容性更好,可利用的资源也更多。1.3 系统方案的确定1.3.1 单片机芯片的选择 在单片机控制中,常用的ATMEL公司单片机种类有AT89C51、AT89C52、AT89S51、AT89S52,都兼容MCS-51单片机。对于AT89C51,是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,1288位内部RAM,32可编程I/O线,两个16位定时器/计数器,5个中断源等主要特性。相比而言,AT89C52有8K的ROM,256B的RAM,还增加一个定时器/计数器2,自然价格比C51略高。而相对而言,S系列的单片机具有在线编程下载(ISP)功能和看门狗,而且运行的速度的最高频率达到33MHZ,使得运行速度更快,自然价格比C 系列的要高2元左右。但是当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,S系列的不需要对芯片多次拔插,节省了调试的时间。综合考虑以上种种因素,由于考虑到产品的成本,在同样能完成我们所要求的功能时,自然会选择容易操作和扩展的AT89S52,这样更容易把产品推向市场。但是在实验室的的调试中,我们依然可以用AT89C51,这样就方便了我们的硬件调试,同样降低了开发产品的成本。1.3.2 显示模块的选择常见的文字、图像显示屏主要有LED(Light Emitting Diode )显示屏,LCD(Liquid Crystal Display),LED点阵数码管显示。LED显示器与LCD显示器相比,LED在亮度、功耗、可视角度和刷新速率等方面,都更具优势。LED与LCD的功耗比大约为10:1,而且更高的刷新速率使得LED在视频方面有更好的性能表现,能提供宽达160的视角,可以显示各种文字、数字、彩色图像及动画信息,也可以播放电视、录像、VCD、DVD等彩色视频信号,多幅显示屏还可以进行联网播出。因此本次显示模块设计中选用LED数码显示管。1.3.3数据采集系统的选择本课程设计要求对温度进行测量,待测量一般不能直接被转换成数字量,通常要进行放大、特性补偿、滤波等环节的预处理。被测信号往往因为幅值较小,而且可能还含有多余的高频分量等原因,不能直接送给A/D转换器,需对其进行必要的处理,即信号调理。如对信号进行放大、衰减、滤波等。为减少电路的繁复,故本测控系统数据采集系统中采用集成温度采集元件与A/D转换元件配合使用。硬件选择为DS18B20数字温度传感器。数据采集方式有顺序控制数据采集和程序控制数据采集。方案一:顺序控制数据采集,顾名思义,它是对各路被采集参数,按时间顺序依次轮流采样。系统的性能完全由硬件设备决定。在每次的采集过程中,所采集参数的数目、采样点数、采样速率、采样精度都固定不变。若要改变这些指标,需改变接线或更换设备方能实现。方案二:程序控制数据采集,由硬件和软件两部分组成。,据不同的采集需要,在程序存储器中,存放若干种信号采集程序,选择相应的采集程序进行采集工作,还可通过编新的程序,以满足不同采样任务的要求。由于顺序控制数据采集方式缺乏通用性和灵活性,所以本设计中选用程序控制数据采集方式。1.3.4 复位电路 1.复位电路 单片机在开机时都需要复位,以便中央处理器CPU以及其他功能部件都处于一个确定的初始状态,并从这个状态开始工作。AT89S51的RST引脚是复位信号的输入端。复位电平是高电平有效,持续时间要有24个时钟周期以上。本系统中单片机时钟频率为12MHz则复位脉冲至少应为2us。 方案一:上电复位电路上电瞬间,RST端的的电位与Vcc相同,随着电容的逐步充电,充电电流减小,RST电位逐渐下降。上电复位所需的最短时间是振荡器建立时间加上二个机器周期,在这段时间里,振荡建立时间不超过10ms。复位电路的典型参数为:C取10uF,R取8.2k,故时间常数=RC=10108.210=82ms以满足要求。 方案二:外部复位电路按下开关时,电源通过电阻对外接电容进行充电,使RES端为高电平,复位按钮松开后,电容通过下拉电阻放电,逐渐使RET端恢复低电平。 方案三:上电外部复位电路 典型的上电外部复位电路是既具有上电复位又具有外部复位电路,上电瞬间,C与Rx构成充电电路,RST引脚出现正脉冲,只要RST保持足够的高电平,就能使单片机复位。一般取C=22uF,R=200,Rx=1k,此时=2210110=22ms当按下按钮,RST出现5=4.2V时,使单片机复位。本设计采用方案三。2.振荡源 在AT89S52内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1(19)、XTAL2(18)分别是此放大器的输入端和输出端。方案一:内部方式与作为反馈元件的片外晶体或陶瓷谐振器一起组成一个自激振荡器。方案二:外部方式外部振荡器信号的接法与芯片类型有关。CMOS工艺的MCU其XTAL1端接外部时钟信号,XTAL2端可悬空。HMOS工艺的MCU则XTAL2端接外部时钟信号,XTAL1端须接地。本设计采用方案一。1.3.5 通信接口电路的选择1.传输方式的选择串行通信有同步和异步两种工作方式。方案一:同步方式要求发送与接受保持严格同步,由于串行传输逐位按顺序进行,为了约定数据是由哪一位开始传输,需设定同步字符。此方式传输速度快,但硬件复杂。方案二:异步方式,规定了数据传输格式,每个数据均以相同的帧格式传送,每帧信息由起始位、数据位、奇偶效验位和停止位组成。帧与帧间用高电平分隔开,但每帧均需附加位,降低了传输效率。异步通信依靠起始位、停止位保持通信同步。对硬件的要求低,实现起来比较简单、灵活,适用于数据的随机发送/接收,一般适用于509600bps的低速串行通信。2.电平转换芯片选择RS-232规定的电平和一般微处理器的逻辑电平不一致,必须进行电平转换。方案一:采用MCl488和MCl489芯片的转换接口MCl488和MCl489芯片为早期的RS-232至TTL逻辑电平的转换芯片,需要12V电压,并且功耗较大,不适合用于低功耗的系统。方案二:采用MAX232芯片的转换接口MAX232是MAXIM公司的产品,包含两路驱动器和接收器的RS-232转换芯片。芯片内部有一个电压转换器,可以把输入的+5V电压转换为RS-232接口所需的10V电压,尤其适用于没有12V的单电源系统。由于RS-232信号电平与MSC-51型单片机信号电平(TTL电平)不一致,因此在本次设计中选用MAX232芯片。1.3.6 电路设计最终方案综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统;LED数码显示器作为显示,DS18B20用来采集温度信息,附带加热电路和报警电路,采用MAX232芯片的串行接口电路,以及单向桥式直流稳压电路构成的电源。2 系统硬件设计2.1 系统硬件概述本电路是由AT89S52单片机为控制核心,具有可编程功能,低功耗,能在3V超低压工作;单线集成温度传感器独特的单线接口只需1 个接口引脚即可通信,多点能力使分布式温度检测应用得以简化,不需要外部元件,可用数据线供电,不需备份电源;温度显示部份由LED数码显示屏显示;报警电路采用555产生变化的频率,在通过功率放大器驱动蜂鸣器;加热电路采用电机驱动。2.2 AT89S52最小系统模块设计AT89S52是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和 128 bytes 的随机存取数据存储器(RAM),器件采用 ATMEL 公司的高密度、非易失性存储技术生产, 兼容标准 MCS-51 指令系统,片内置通用 8 位中央处理器(CPU)和 Flash 存储单元,功能强大 AT89S52 单片机可为您提 供许多高性价比的应用场合,可灵活应用于各种控制领域。 图2-1 AT89S52管脚图主要性能参数:与 MCS-51 产品指令系统完全兼容4k字节可重擦写 Flash 闪速存储器1000 次擦写周期全静态操作:0Hz24MHz三级加密程序存储器1288 字节内部 RAM32 个可编程 IO 口线2 个 16 位定时计数器6 个中断源可编程串行 UART 通道低功耗空闲和掉电模式功能特性概述:AT89S52 提供以下标准功能:4k 字节 Flash 闪速存储器,128 字节内部 RAM,32 个 IO 口线,两个 16 位定时计 数器,一个 5 向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89S52 可降至 0Hz 的静态逻 辑操作,并支持两种软件可选的节电工作模式。空闲方式停止 CPU 的工作,但允许 RAM,定时计数器,串行通信口及 中断系统继续工作。掉电方式保存 RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。引脚功能说明:Vcc:电源电压GND:地 P0 口:是一组 8 位漏极开路型双向 IO 口,也即地址数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动 8 个 TTL 逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低 8 位)和数据总线复用,在访问期间激活内部上 拉电阻。在 FIash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1 口:P1 是一个带内部上拉电阻的 8 位双向 IO 口,P1 的输出缓冲级可驱动(吸收或输出电流)4 个 TTL 逻辑 门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉 电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。FIash 编程和程序校验期间,P1 接收低 8 位地址。P2 口:P2 是一个带有内部上拉电阻的 8 位双向 IO 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个 TTL 逻 辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上 拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或 16 位地址的外部数据存储器(例如执行 MOVXDPTR 指令)时,P2 口送出高 8 位地址数据。在访问 8 位地址的外部数据存储器(如执行 MOVXRI 指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中 R2 寄存器的内容),在整个访问期间不改变。Flash 编程或校验时,P2 亦接收高位地址和其它控制信号。P3 口:P3 口是一组带有内部上拉电阻的 8 位双向 IO 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个 TTL 逻辑门电路。对 P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的 P3 口将用 上拉电阻输出电流(IIL)。,P3 口除了作为一般的 IO 口线外,更重要的用途是它的第二功能,如下表所示:端口引脚第二功能P3.0RXD(串行输入口) P3.1TXD(串行输出口) P3.2INT0(外中断 0) P3.3INT1(外中断 1) P3.4T0(定时计数器 0 外部输入) P3.5T1(定时计数器 1 外部输入) P3.6WR(外部数据存储器写选通)P3.7 P3.7RD(外部数据存储器读选通) 表1 P3口第二功能P3 口还接收一些用于 Flash 闪速存储器编程和程序校验的控制信号。RST:复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将使单片机复位。ALEPROG: 当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低 8 位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的 l6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个 ALE 脉冲。如有必要,可通过对特殊功能寄存器(SFR)区中的 8EH 单元的 DO 位置位,可禁止 ALE 操作。该位置位后,只有一条 MOVX 和 MOVC 指令 ALE 才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置 ALE 无效。EAVPP:外部访问允许。欲使 CPU 仅访问外部程序存储器(地址为 0000HFFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位 LB1 被编程,复位时内部会锁存 EA 端状态。如 EA 端为高电平(接 VCC 端),CPU 则执行内部程序存储器中的指令。Flash 存储器编程时,该引脚加上+12V 的编程允许电源 Vpp,当然这必须是该器件是使用 12V 编程电压 Vpp。XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端。2.3 振荡源和复位电路设计2.3.1 复位电路单片机的复位是靠外部电路实现的。无论是HMOS还是CHMOS型,在振荡器正运行的情况下,RST引脚保持二个机器周期以上时间的高电平,系统复位。在RST端出现高电平的第二个周期,执行内部复位,以后每个周期复位一次,直至RST端变低。本文采用上电外部复位电路,如图2-4所示,相关参数为典型值。图2-2 复位电路2.3.2 振荡源电路内部方式时钟电路如图2-5所示。外接晶体以及电容、构成并联谐振电路,接在放大器的反馈回路中,内部振荡器产生自激振荡,一般晶振可在212MHz之间任选。对外接电容值虽然没有严格的要求,但电容的大小多少会影响振荡频率的高低、振荡器的稳定性、起振的快速性和温度的稳定性。外接晶体时,和通常选30pF左右;外接陶瓷谐振器时,和的典型值为47pF。 图2-3 振荡电路2.4 显示模块设计本次设计中显示模块部分选择的是LED数码显示屏。液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。发光二极管(Light Emitting Diode,LED)是一种由某些特殊的半导体材料制作成的PN结。当正向偏置时,由大量的电子空穴复合,LED释放出热量而发光。LED的正向工作压降一般为1.2-2.6V,发光工作电流为5-20mA,发光强度基本上与正向电流成正比。LED显示器由发光二极管构成,具有工作电压低、体积小、寿命长(约10万小时)、响应速度快(小于1us),颜色丰富(红、黄、绿等)等特点,是只能仪器最常用的显示器。LED显示器分为断码式显示器和点阵式显示器。1.断码式LED显示器由数个LED组成一个阵列,并封装于一个标准尺寸的管壳内,就形成了LED数码字符显示器。这类显示器的结构主要有:有7个LED(加上一个小数点为8个LED)构成的“日”字形7段(或8段)数码显示器;由12个LED构成的“田”字形数码显示器;由16个LED构成的“米”字形数码显示器。LED显示器的显示方式有静态显示和动态显示之分。 (1)静态显示方式是指显示器在显示某一字符时,相应段的发光二极管恒定导通或截止,使显示字符的字段连续发光。在静态方式中,每位数码管都应有各自的驱动器件。为了便于程序控制,在选择LED驱动器件时,往往选择带锁存功能的器件,用以锁存各自待显示数码。因此,静态显示系统在每一次输出后能够保持不变,仅在待显示数码需要改变时,才更新其数字显示器中锁存的内容。这种显示方式的优点是亮度高,控制程序简单,显示稳定可靠;缺点是功耗大,当显示的位数较多时,占用的I/O端口较多,此时可以采用动态显示方式。 (2)动态显示方式:实用于显示位数较多的情况。所有位的段选线并联起来,由一个8位I/O端口控制,而各位的共阳极或共阴极分别由相应的I/O端口控制,形各位的轮流选通,即LED显示部分轮流工作,每次只能使一个器件显示1-5ms。由于人的视觉暂留现象和发光二极管的余晖效应,人眼扔感觉所有的器件都在同时显示,获得稳定的视觉效果。此种显示方式的优点是占用I/O端口少,随着高亮度LED数码管的出现,动态显示同样可以打到很好的显示效果。动态显示方式的实现有程序控制扫描和定时中断扫描两种。程序控制扫描方式要占用许多CPU时间,在计算机的任务较重时,将影响CPU的工作效率,所以在实际应用中常采用定时中断扫描方式。这种方式是每隔一定时间让一位数码管显示,假设有8位数码管,则显示扫描周期为8ms。2.点阵式LED显示器:8段LED显示器显示的数码和符号比较简单,显示更多种类且字符逼真的字符则比较困难。点阵式LED显示器是以点阵格式进行显示的,其优点是显示的符号比较逼真,更易识别,不足之处是接口电路以及控制程序比较复杂。点阵式显示器一般有4x7、5x7、7x9点阵等形式。最常用的是5x7点阵,它由35个发光二极管组成5列x7行的矩阵。用多个点阵式LED显示器可以组成大屏幕LED显示屏,用来显示汉字、图形和表格,而且能产生各种动画效果。这是新闻媒介和广告宣传的有力工具,其应用也越来越普遍。在本次设计中使用的是点段式动态显示LED数码管显示器。2.5 串行接口模块设计AT89S52有一个全双工的串行口,所以单片机和PC之间可以方便地进行串口通讯。进行串行通信时要满足一定的条件,如PC的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,这里用专用芯片MAX232进行转换,用专用芯片更简单可靠。MAX232如图2-10所示。它包含两路接收器和驱动器,内部有一个电源电压变换器,可以把输入的+5V电压变换位RS-232输出电平所需的+10V电压。所以,用该芯片接口的串行通信只需单一的+5V电源就可以了。其应用性更强。上半部电容、及,是电源变换部分。实际应用中,器件对电源噪声很敏感。因此,对地需要加去耦电容,其值为1.0uF。电容、取同样数值的电解电容,以提高抗干扰能力。 图2-4 MAX232引脚图 串口通信的硬件连接采用三线制连接串口,就是说和PC的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对本设计来说已经足够了,MAX232的第11脚和单片机的11号引脚连接,第12脚和单片机的10脚连接,第15脚和单片机的20脚连接。MAX232的第14脚和PC机串口的2号引脚连接,第13脚和PC机串口的3号引脚连接,第15脚和PC机串口的5号引脚连接。通信接口电路如图6所示。 图2-5 通信接口电路通信接口电路在本次设计中起到的作用是把温度值传送到单片机上,最后在显示器上进行显示。2.6 温度采集模块设计采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P1.5与DS18B20的DQ口连接加一个上拉电阻,VCC接电源,GND接地。接口电路,如图7所示。 图2-6 温度采集模块接口电路各管脚功能:DQ为数字信号输入/输出端;GND为电源地;VCC为外接供电电源输入端(在寄生电源接线方式时接地)。高速暂存器:高速暂存存储器由9个字节组成,其分配如表-6所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。第九个字节是冗余检验字节。高速暂存器地址分布,如表4所示。表2高速暂存器地址分布:根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行 复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后 释放,当DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。ROM指令介绍:主要有5条指令,如下表3所示。表3 ROM指令表RAM指令:主要有4条指令,涉及到温度的转换到存储的一个简单过程。表4 RAM指令表2.7 报警电路设计报警电路主要由555定时器、功率放大器、蜂鸣器以及一些相应的原件构成,当温度高于设定值时,报警电路报警在该设计中报警电路是不可缺少的。由于设计的是实时检测系统的温度,作为恒温控制的。当温度高于设定值时,555定时器工作于多谐振荡器状态,产生可变的频率,由于555定时器不能直接驱动蜂鸣器,故由555定时器输出的信号,需要功率放大来驱动蜂鸣器。接口电路设计,如图9所示。 图2-7 报警电路模块设计2.8 加热电路设计 加热电路设计,是电路的主要功能部分,作为整个电路的执行部分,当测量温度高于设定值时,并在液晶显示屏上显示制冷符号“;当测量温度低于设定值时,电机正转加热,并且在液晶显示屏上显示加热符号“+”。由于电机需要高电压控制,因此在设计中有一个光电耦合电路,起到低电压控制高电压的作用。其与单片机的接口电路,如图10所示。 图2-8 加热电路模块设计图中LED作为电机运行的指示灯,当电机运行时,灯亮。便于电路的检修。注意加热电路与单片机的接口部分不能直接相连,因为两者的电平不兼容,需要加一个反相缓冲器。3.系统软件设计3.1 主程序流程图由于本课程设计主要针对作为数据采集与控制的单片机系统而非PC机,故软件编程为单片机系统编程。系统采用模块化编程,将各部分功能分别实现,主要的功能子程序有:温度采集、LED显示。主程序流程图如图10所示。开始初始化调用温度采集子程序调用LCD显示子程序判断温控标志位 图3-1 主程序流程图3.2 外部中断的应用温度传感器所测得的信号经过电路处理后产生了中断信号,作为单片机的外部终断源,中断处理过程分为四个部分:中断请求、中断响应、中断服务、中断返回。CPU执行程序时,在每一个指令周期的最后一个T周期都要检查是否有中断请求,如果没有中断请求程序将执行后面的程序。在本系统的程序中,启动计时器后,外部中断必须在运算程序执行之前,所以需要加一个等待中断请求的延时程序。在中断响应阶段,CPU会判断多个中断请求的优先级,中断优先级的设置由中断优先级管理寄存器IP。如果几个中断请求的IP均为0或者1,则将有内部查询确定优先级。本设计已经用到定时器T0中断,而外部中断的作用就是为了停止计时器工作,提取时间T。所以可以选用比T0中断优先级高的外部中断0,这样可以暂停定时器中断,并把定时器T0关闭,又因为查询顺序在T0之前所以不必对IP进行设置。本程序中,当温度低于20时,产生中断。由P3.3口控制加热器加热。加热到20后停止加热。对中断的设置为外部中断1开启;当温度高于25时,产生中断,由P3.2口控制报警电路报警。这些设置可以通过对寄存器IE进行总体设置。根据电路设计外部中断的触发方式下降沿触发与低电平出发均可,故采用下降沿触发,即IE=0x83。3.3 延时程序的处理延时时间约为18ms的延时程序。C语言程序: void delay18ms(void) unsigned char i,j; for(i=90;i0;i-) for(j=98;j0;j-) 该程序采用for语句的嵌套式循环设计,利用累减赋值的执行时间实现程序上的延迟。但是分析具体的延时时间转换成汇编语言分析会更加清楚明了。产生的汇编程序如下: MOVR6,#TIME1 /TIME1为i的16进制数值 LOOP2:MOVR5,#TIME2 /TIME2为j的16进制数值 LOOP1:DJNZR5,LOOP1DJNZR6,LOOP2RET4. 心得体会在这次课程设计中,我们运用到了以前所学的专业课知识,虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名测控专业的学生,单片机的课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。我认为这个收获应该说是相当大的。觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。本次课程设计能够顺利完成,离不开黎水平老师的指点和帮助,在此表示十分感谢。参考文献1 Operational Amplifiersdata. sheet .intersil,19972 LM567 data sheet .intersil,19973 康华光.电子技术基础模拟部分(第五版).高等教育出版社.2006.4 康华光.电子技术基础数字部分(第五版).高等教育出版社.2006.5 赵建领,薛园园.51单片机开发与应用技术详解.电子工业出版社.2009.6 史建芳.智能仪器设计基础.电子工业出版社.2009.7 李广弟,朱月秀,王秀山.单片机基础(修订本).2002.8 谭浩强.C语言程序设计(第三版).清华大学出版社.2005.9 张国雄.测控电路.机械工业出版社.200210 李刚.现代测控电路.高等教育出版社.2004.11 赵茂泰.智能仪器原理及应用.电子工业出版社.1999附录1:程序#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include#include #include#define uchar unsigned char#define uint unsigned int;/*/* 定义端口 */*/sbit seg1=P20;sbit seg2=P21;sbit seg3=P22;sbit DQ=P13;/ds18b20 端口sfr dataled=0x80;/显示数据端口/*/* 全局变量 */*/uint temp;uchar flag_get,count,num,minute,second;uchar code tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /7段数码管段码表共阴 uchar str6;/*/* 函数声明 */*/void delay1(uchar MS);unsigned int ReadTemperature(void); void Init_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);void delay(unsigned int i);void UARTinit(void) SCON = 0x50; /* SCON: 模式 1, 8-bit UART, 使能接收 */ TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */ TH1 = 0xFD; /* TH1: reload value for 9600 baud 11.0592MHz */ TR1 = 1; /* TR1: timer 1 run */ /EA = 1; /*打开总中断*/ /ES = 1; TI = 1; /*/* 主函数 */*/main()unsigned int TempH,TempL;TMOD|=0x01;/定时器设置TH0=0xef;TL0=0xf0;IE=0x82;TR0=1;UARTinit();P2=0x00; count=0;while(1) str5=0x39; /显示C符号 str1=tabTempH/100; /百位温度 str2=tab(TempH%100)/10; /十位温度 str3=tab(TempH%100)%10|0x80; /个位温度 str4=tabTempL; /带小数点 if(flag_get=1) /定时读取当前温度 temp=ReadTemperature(); if(temp&0x8000) str0=0x40;/负号标志 temp=temp; / 取反加1 temp +=1; else str0=0; TempH=temp4; TempL=temp&0x0F; TempL=TempL*6/10;/小数近似处理 printf(%d.%dn,TempH,TempL); flag_get=0; /*/* 定时器中断 */*/void tim(void) interrupt 1 using 1/中断,用于数码管扫描和温度检测间隔TH0=0xef;/定时器重装值TL0=0xf0;num+;if (num=200) num=0; flag_get=1;/标志位有效 second+; if(second=60) second=0; minute+; count+;if(count=1) P2=0; dataled=str0;/数码管扫描if(count=2) P2=1; dataled=str1;if(count=3) P2=2; dataled=str2; if(count=4) P2=3; dataled=str3; if(count=5) P2=4; dataled=str4; if(count=6) P2=5; dataled=str5; count=0;/*/* 延时函数 */*/void delay(unsigned int i)/延时函数 while(i-);/*/* 初始化 */*/void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位 delay(8); /稍做延时 DQ = 0; /单片机将DQ拉低 delay(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay(10); x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(5);/*/* 读一个字节 */*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay(5); return(dat);/*
展开阅读全文