温控器课程设计_第1页
温控器课程设计_第2页
温控器课程设计_第3页
温控器课程设计_第4页
温控器课程设计_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于89C51单片机的温度控制器的设计摘要温度控制器是一种提供温度显示、语音报温和报警的装置。基于89C51单片机设计,测温探头采用DS18B20数字温度传感器,测量现场温度,语音播放装置采用ISD1420语音芯片,实现语音定时报温和报警功能,使用7段码显示器显示当前温度,蜂鸣器提供报警功能。该装置可以实现上下位机通信,上位机设置报警温度,实现控温目的,并且根据下位机测量的温度绘出温度变化曲线。关键字:单片机(89C51); DS18B20; ISD1420; 7段码显示器;蜂鸣器AbstractThetemperaturecontrollerisaprovidetemperaturedisplay,voicealarmdeviceformild.Basedonthe89C51singlechipdesign,measurementtemperatureprobeusingdigitaltemperaturesensorDS18B20,measuringthetemperature,speechbroadcastdeviceadoptsISD1420voicechip,realizevoicesettimesmildalarmfunctions,use7bitcodedisplayshowsthecurrenttemperaturebuzzer,providealarmfunction.Thisdevicecanachieveamachineandcommunication,PCsetalarmtemperature,temperaturecontrol,andachievepurposeaccordingtoamachine.Keyword:SCM(89C52);DS18B20;ISD1420;7bitcodedisplays;sounders目录TOC\o"1-5"\h\z摘要 1目录 2\o"CurrentDocument"第一章引言 3\o"CurrentDocument"第二章硬件系统设计 4\o"CurrentDocument"硬件系统 4\o"CurrentDocument"单片机模块 5温度传感器模块 5\o"CurrentDocument"语音模块 6LED显示模块 7\o"CurrentDocument"RS232通讯模块 8蜂鸣器模块 9\o"CurrentDocument"芯片介绍 10\o"CurrentDocument"STC89C52RC芯片 10\o"CurrentDocument"DS18B20芯片 12\o"CurrentDocument"ISD1420芯片 16\o"CurrentDocument"MAX232芯片 19\o"CurrentDocument"第三章软件系统设计 21\o"CurrentDocument"参数信息 21\o"CurrentDocument"程序设计 22\o"CurrentDocument"主程序设计 22温度处理程序设计 23录放音程序设计 24\o"CurrentDocument"中断程序设计 26\o"CurrentDocument"第四章性能测试与结果分析 28\o"CurrentDocument"串口通讯工具 28\o"CurrentDocument"串口通讯程序 29\o"CurrentDocument"串口通讯界面 29\o"CurrentDocument"串口通讯 30\o"CurrentDocument"4.2.1发送功能 30\o"CurrentDocument"接收功能 30\o"CurrentDocument"绘制温度曲线 31\o"CurrentDocument"第五章课程设计总结 32\o"CurrentDocument"5.1问题与解决 32\o"CurrentDocument"心得体会 32\o"CurrentDocument"参考文献 34\o"CurrentDocument"附录 35第一章引言温度是许多领域控制中主要的被控参数之一,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足轻重的作用。随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。单片机应用在温度测量与控制方面,控制简单方便,测量范围广,精确度较高。它具有处理能力强,运行速度快,功耗低等优点。本课题是设计一个温度控制系统。其原理是所测量的温度信号直接通过数字温度传感器检测到温度后,送到单片机中,单片机把检测的温度同上位机设定的温度进行比较,并显示在显示器上(如果温度高于设定值,语音提示且蜂鸣器报警),再由单片机将温度发送到上位机,绘制温度变化曲线,观察温度变化,根据控制策略给出温度设定值,从而构成温度控制系统。本设计的主要内容分为两部分:硬件部分和软件部分。硬件部分内容分为:电源电路的选择、单片机的选择用的是STC89C52RC单片机、数字温度传感器DS18B20、数码管的显示设计、报警电路的设计和语音芯片ISD1420等。软件部分分为:基于keil编译环境的单片机应用软件的编写与调试、基于java编译环境的上下位机的通信功能实现。第一章为引言,粗略地介绍此次课设的主要内容。第二章为硬件系统设计,主要介绍硬件构成图和各硬件部分的功能,以及DS18B20、ISD1420、STC89C52RC、RS232的内部结构功能、硬件系统中对应芯片接线、工作方式以及初始化编程。另外,从LED显示器的设定的原理、编程进行详细的描述。第三章为软件系统设计,主要介绍各种参数、流程图以及代码。第四章为课程设计总结,主要包括心得体会、问题与解决和程序清单。

第二章硬件系统设计2.1硬件系统硬件系统原理图如图2-1-1所示:y..'nNT“ rrH「丰 一厂 1—■:-=-■■■■UI1||:y..'nNT“ rrH「丰 一厂 1—■:-=-■■■■UI1||:-|1!.3■■>■■:■2温度控制器硬件系统由以下六个模块组成:单片机模块、温度传感器模块、语音模块、LED显示模块、RS232通讯模块、蜂鸣器模块。单片机模块单片机采用宏晶科技生产的STC89C52RC单片机作为控制器。STC89C52RC是一个超强抗干扰,高速,低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,工作频率范围:0-40MHz,相当于普通8051的0〜80MHz.实际工作频率可达48MHz.,片上集成1280字节RAM,无需专用编程器。vctcP1AlA2U1单片机模块电路原理图如图2-1-2所示:UHAS47lxTlTlTx11TlTx11ppppppppRED7T1P3J应Tl)P王4的P3_5(Tl)EAT.WvctcP1AlA2U1单片机模块电路原理图如图2-1-2所示:UHAS47lxTlTlTx11TlTx11ppppppppRED7T1P3J应Tl)P王4的P3_5(Tl)EAT.WXT.4L0mL]EESETP3.6i^)P王了両VS£VCC阴D)玖0<TXD)P3.1,ALE{PROG;.PBENoI—I卫『J4-J5-.1—iCL'lQ-Q-'l.Q-Q-PPPPPPPP图2-1-2单片机模块电路图由图2-1-2所示的单片机模块,主要实现硬件系统中各个模块功能之间的相互协调,数据的处理,输出执行,报警设置等功能。其中包括时钟脉冲产生电路、单片机复位电路等。2.1.2温度传感器模块温度传感器采用DS18B20数字温度传感器。DS18B20体积更小、适用电压更宽、更经济。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量;不需要外部元件,直接输出串行数据;可不需要外部电源,直接通过信号线供电,电源电压范围为3.3V〜5V;测温精度高,测温范围为:一55°C〜+125°C,在-10°C〜+85°C范围内,精度为土O.5°C;测温分辨率高,当选用12位转换位数时,温度分辨率可达0.0625°C;

数字量的转换精度及转换时间可通过简单的编程来控制:9位精度的转换时间为93.75ms:10位精度的转换时间187.5ms:12位精度的转换时间750ms;具有非易失性上、下限报警设定的功能,用户可方便地通过编程修改上、下限的数值;可通过报警搜索命令识别哪片DS18B20采集的温度超越上、下限。DS18B20电路原理图如图2-1-3所示:图2-1-3DS18B20电路图DS18B20测量的温度传送到单片机中,在数码管上显示,并与上位机进行通信,绘制温度变化曲线。2.1.3语音模块语音部分采用ISD1420语音芯片。ISD1420芯片采用直接模拟存储技术,

且录放音质极好,并有一定的混响效果;它的外围元件简单,仅需要简单的阻、

容元件即可组成简单的录、放电路;单电源供电,典型电压+5V;待机时低功耗(0.5uA),放音电流15mA;放音时间20s,可扩充级联;可持续放音,也可分段录放,最小分段:20s/160段=0.125s段,可分段160段;录、放次数达10万次;断电信息存储,无需后备电池,信息可存储100年;不需要专用的编程器及语音开发器;高优先级录音,低电平或下降沿放音。ISD1420电路原理图如图2-1-4所示:

图2-1-4ISD1420电路图语音接口作为输出口时,主要用于报告运行状态、运行结果、提示系统操作过程及故障报答等;作为输入时、则主要是语音的记录、语音库的建立和语音的识别。本设计中首先记录关于温度的一些语音,再根据测量温度定时报温。2.1.4LED显示模块LED显示部分采用七段码显示器。DS18B20温度传感器测量现场温度,传送到单片机中,在数码管上显示。LED显示块是由发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是七段LED。这种显示块有共阴极与共阳极两种。共阴极LED显示块的发光二极管阴极共地。当某个发光二极管的阳极为高电平时,发光二极管点亮;共阳极LED显示块的发光二极管阳极并接。LED电路原理图如图2-1-5所示:

图2-1-5LED电路图在单片机应用系统中使用LED显示块构成N位LED显示器。N位LED显示器有N根位选线和8*N根段选线。根据显示方式不同,位选线与段选线的连接方法不同。段选线控制字符选择,位选线控制显示位的亮,暗。LED显示器有静态显示与动态显示两种方式。我们使用的为动态显示LED动态显示方式。在多位LED显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位1/O口控制,而共阴极点或共阳极点分别由响应的I/O口线控制。2.1.5RS232通讯模块MAX232芯片具有功耗低、工作电源为单电源、外接电容仅为0.1uF或1uF、采用双列直插封装形式、接收器输出为三态TTL/CMOS、两路接收器和发送器等特点。RS232电路原理图如图2-1-6所示:

V(:cC610』U4Cl0C:1C1+ VCCV+ GNDCl- T1OUTC2+ R1INC2- R1OUTV- T1INT2OUTT2INR2INR2OUT16(21h1.10’1314104rC54135L2P3.010’1611P317108923;1C?'16寸oomr--e91—110[d<c(AV■r2/\tJJ2DB9图2-1-6MAX232电路图通过这个模块,我们可以实现温度控制器系统与计算机之间的串口通信,实现数据交换,设置温度范围,绘制温度变化曲线。2.1.6蜂鸣器的正极性的一端联接到5V电源上面,另一端联接到三极管的集电极,三极管的基级由单片机的P2.3管脚来控制,当P2.3管脚为低时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。当P2.3管脚为高时,三极管截止,蜂鸣器不发出声音。用户可以通过程序控制P2.3管脚的置低和置高来使蜂鸣器发出声音和关闭。蜂鸣器电路原理图如图2-1-7所示:

通过这个模块,可以实现温度控制系统报警功能,通过上位机设置温度有效范围,温度过高或过低,蜂鸣器报警。2.2芯片介绍此部分从芯片的系统接线、工作方式以及初始化编程方面分别介绍DS18B20、ISD1420、STC89C52RC、MAX232芯片,以及LED显示器。本次课程设计以STC89C52系统为核心,它主要负责控制各个部分的协调工作,在其外围接上复位电路,显示器,语音电路和温度传感器电路等。STC89C52RC芯片1.STC89C52RC芯片的封装STC89C52RC芯片是标准的40引脚双列直插式集成电路芯片,其引脚排列如图2-2-1所示。其中有4个8位I/O并行口共32个引脚、4个控制引脚、两个时钟输入/输出引脚及两个电源引脚。

2.电源引脚Vcc:电源正端,接+5V电源。Vss:接地端。3.1/0口引线51系列单片机有4个I/O端口,每个端口都是8位准双向口,共占32根引脚。每个端口都包括一个锁存器(即专用寄存器P0〜P3)、一个输出驱动器和输入缓冲器。通常把4个端口笼统地表示为P0〜P3。P0口由一个输出锁存器、两个三态输入缓冲器和输出驱动电路及控制电路组成,P0口必须接上拉电阻。P0口既可以作为I/O用,也可以作为地址/数据线用。P1口是一个标准的准双向口,只能作为通用I/O口使用。P1.0和P1.1是多功能的,P1.0作为定时器/计数器2的外部输入端,P1.1作为定时器/计数器2的外部控制输入。P2口可作为I/0口和高8位地址线A8-A15输出口。P3口是一个双功能口,第一功能是通用I/0口,第二功能各位定义见表1:

表1P3口的第二功能引脚第二功能P3.0RXD(串行输入通道)P3.1TXD(串行输出通道)P3.2INTO(外中断0)P3.3INT1(外中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6WR(外数据存储器写选通)P3.7RD(外数据存储器读选通)4.控制线PSEN:片外取指信号(片外程序存储器读)输出端低电平有效,通过P0口读回指令或常数,控制的是片外程序存储器。ALE:地址锁存信号,ALE低电平时,P0口出现数据信息;ALE高电平时,P0口出现地址信息,用下降沿 锁存P0口的低8位地址到外部锁存器。EA:程序存储器选择信号,EA=0时,选外部ROM;EA=1,地址小于4k时,选内部ROM,地址大于4k时,选外部ROM。RESET:复位信号:高电平复位CPU,低电平CPU工作5.时钟引脚XTAL1:片内振荡电路输入端。XTAL2:片内振荡电路输出端。当使用芯片内部的时钟电路时,用于外接石英晶体和微调电容;当使用外部时钟时,用于外接时钟信号。DS18B20芯片图2-2-2DS18B20引脚图I/O:数字信号输入/输出端。GND:电源地端。VCC:外接供电电源输入端(在寄生电源接线时此脚应接地)。2.DS18B20内部结构简要介绍:DS18B20的内部有64位的ROM单元、温度传感器、非易失性温度报警触发器TH和TL和9字节的暂存器单元。64为ROM包含了DS18B20唯一的序列号。内部结构图如图2-2-3所示:图2-2-3DS18B20内部结构图3.DS18B20的温度计算DS18820中的温度传感器完成对温度的测量,输出格式为:16位符号扩展的二进制补码。当测温精度设置为12位时,分辨率为0.0625^,即O.0625°C/LSB。其二进制补码格式见表2:表2DS18B20的数据格式Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0LSB2八32^22^12^02^12^-22=32^-4Bit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8MSBSSSSS2飞2^52^4其中,S为符号位,S=1,表示温度为负值;S=0,表示温度为正值。例如+125C的数字输出为07D0H,-55C的数字输出为FC90H。上表是转化后得到的12位数据,如果温度大于0,只要将测到的数值乘以0.0625即可得到实际温度;如果温度小于0,测到的数值取反加1再乘以0.0625,即可得到实际温度。一些温度值对应的数字输出如表3所示:表3温度值与十六进制输出对照表

温度十六进制输出+12507D0H+850550H+25.0650191H+10.12500A2H+0.50008H00000H-0.5FFF8H-10.125FF5EH-25.065FE6FH-55FC90H3.DS18B20的寄存器分布DS18820中的高速暂存器是一个9字节的存储器,其含意如表4所示表4暂存器分布寄存器内存字节地址温度最低为LSB0温度最高位MSB1高温限值TH2低温限值TL3配置寄存器4保留5保留6保留7CRC校验8开始两个字节为被测温度的数字量;第3、4、5字节分别为TH、TL、配置寄存器的复制,每一次上电复位时被重写;第7字节为测温计数的剩余值;第8字节为测温时每度的计数值;第9字节读出的是前8个字节的CRC校验码,通过此码,可判断通讯是否正确。4.DS18B20的操作指令ROM操作指令读命令(33H):通过该命令主机可以读出DS18820的ROM中的8位系列产品代码、48位产品序列号和8位CRC校验码,该命令仅限于单个DS18B20在线的情况。选择定位命令(55H):当多片DS18820在线时,主机发出该命令和一个64位数,DS18820内部ROM与主机一致者,才响应命令,该命令也可用于单个DS18820的情况。查询命令(0F0H):该命令可查询总线上DS18B20的数目及其64位序列号。跳过ROM序列号检测命令(OCCH):该命令允许主机跳过ROM序列号检测而直接对寄存器操作,该命令仅限于单个DS18820在线的情况。报警查询命令(OECH):只有报警标志置位后,DS18B20才相应该命令。存储器操作指令写暂存器(4EH):该命令可写入寄存器的第2、3、4字节,即高低温寄存器和配置寄存器,复位信号发出之前,三个字节必须写完。读暂存器(OBEH):该命令可读出寄存器中的内容,复位命令可终止读出。温度变换(44H):该命令使DS18B20立即开始温度转换,当温度转换正在进行时,主机这时读总线将收到0;当温度转换结束时,主机这时读总线将收到1。若用信号线给DS18820供电,则主机发出转换命令后,必须提供至少相应于分辨率的温度转换时间的上拉电平。重调(088H):该命令把EEROM中的内容写到寄存器TH、TL及配置寄存器中。DS18820上电时能自动写入。复制暂存器(48H):该命令把寄存器TH、TL及配置寄存器中内容写到EEROM。读供电方式(084H):主机发出该命令后,DS18B20将进行响应,发送电源标志,信号线供电发0,外接电源发1。5.DS18B20时序(1)初始化时序(2)写时序[usvTrec Masterwrite1slotMasterwrite0slot . 点—60usvTx0vl20us读时序MASTERREAD1SLOTMASTERREAD0MASTERREAD1SLOTMASTERREAD0SLOTISD1420芯片1.ISD1420芯片的封装ISD1420芯片封装有DIP硬封装和COB软封装两种形式,均为28引脚,如图2-2-4所示:1AO VCCDAl RECA2 XCLKA3 RECLED282273"26~45~24~6■斗 PLAiE7A5 PLAiLNC NCNC ANAOUTA6 ANAINA7 AGCNC MICREFVSSD MICVSSA VCCASP+ SP-"22~892010191118ipIP13161415图2-2-4ISD1420封装其中,A0-A7为地址或操作模式控制位;VSSD为数字地;VSSA为模拟地;SP+、SP-为音频信号输出端,可以驱动8—16扬声器;VCCA为模拟电源;VCCD为数字电源;MIC为话筒输入端,若不用应悬空;AGC为自动增益控制端,调整芯片内部前置放大器增益,使录入信号不失真;ANAIN、ANAOUT为两端间接电容,该该端用于模拟信号的直接输入、输出;XCLK为外部时钟或接地(一般用户接地即可);REC为录、放音控制,低电平为录音(此时PLAYE或PLAYL=0);PLAYL为电平放音控制(低电平有效),放音时应保持低电平;PLAYE为边沿放音控制,下降沿开始放音;RECLED为录音指示,接发光二极管,录音时亮,放音结束闪烁一下。2.ISD1420的地址模式和操作模式ISD1420地址输入端具有双重功能,根据地址中的A6、A7的电平状态决定AO〜A7的功能。如果A6、A7有一个低电平,A0〜A7输入为地址位,作为起始地址用,此时地址线仅作为输入端,在操作过程中不能输出内部地址信息。根据PLAYE、PLAYL或REC的下降沿信号,地址输入被锁定。如果A6、A7同为高电平时,它们即为操作模式位。ISD1420地址功能表如表5所示:表5ISD1420地址功能表地址状态功能说明DIP开关1 2 3 45 6 7 80N=0,OFF=1地址位AOA1A2A3A4A5A6A71:高电平,0:低电平00000000最长20秒录放音,首地址开始100000008位二进制表示地址,每地址125ms地址模式00000010一段A6地址开始的12s录放音*******0A6,A7有一位=0,处于地址模式******0*00010011循环放音操作操作模式00001011顺序连续分段放音00000011地址指针复位,开始录放第一段10001011按PE键快速选段放音使用操作模式有两点要注意:(1)所有初始操作都是从0地址开始。0地址是ISD1420存储空间的起始端,后面的操作可模拟模式的不同,而从不同的地址开始工作。当电路中录放音转换将进入省电状态时,地址计数器复位为0。(2)当PLAYE、PLAYL或REC变为低电平,同时A6、A7为高电平时,执行地址线所对应的操作模式。这种操作模式一直执行到下一个低电平控制输入信号出现为止。

ISD1420操作模式如表6所示表6ISD1420操作模式模式功能典型应用可组合使用|A0信息检索快进信息A4A1删除EOM信息结束处放置EOMA3A4A3循环从0地址循环放音A1A4连续寻址录放连续多段信息A0A13.录放音时序(1)录音时序(2)放音时序

MAX232芯片1.MAX232芯片的封装MAX232芯片采用DIP封装,双列直插形式,引脚图如图2-2-5所示:W11111116+ vccVf GNDCl\ T1OUTC2+\ R1INC2- )R1OUTV-/ TIINT2QUTT2INR2INR2OUT16215131414IB51216111710891MAX232图2-2-5MAX2332封装C1+:电容倍增充电泵电容正端;C1-:电容倍增充电泵电容正端;C2+:反向充电泵电容正端;C2-:反向充电泵电容负端;V+:充电产生的+5.5V;V-:充电产生的-5.5V;R1IN:RS-232发送器输入1;R2IN:RS-232发送器输入2;T10UT:RS-232发送器输出1;T2OUT:RS-232发送器输出2;TIIN:TTL发送器输入1;T2IN:TTL发送器输入2;R1OUT:TTL接收器输出1;R2OUT:TTL接收器输出2;VCC:电源;GND:地。2.内部结构

内部结构基本可分三个部分:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R10UT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R20UT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DP9插头;DP9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚DNG、16脚VCC(+5v。第三章软件系统设计3.1参数信息//DS18B20//DS18B20输入端//蜂鸣器//数码管段选//数码管位选//录音标志//低电平放音标志//上升沿启动语音芯片标志sbitDQ二P2"2;sbitbeep二P2"3;sbitdula二P2飞;sbitwela二P2“7;sbitREC二P3"5;sbitPL=P3飞;sbitTWR=P3^7;uchardelay;ucharflagbaoshi;ucharaa;uchartime=0;uinttemp;//定时报时标志//存放串口通信数据//温度变量uinttemp2;ucharflag;ucharcount=0;voidTXReset();voidack_18b20();bitread_bit();ucharread_byte();//标志变量//计数标志//DS18B20复位函数//读取数据codeuchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码表codeuchartre[]={0,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c,0x20,0x24,0x28,0x2c,0x30,0x34};voiddel(uintz);voidwrite_bit(uchardat);voidTem_Start();voidReadTem();0x34};voiddel(uintz);voidwrite_bit(uchardat);voidTem_Start();voidReadTem();uintCalTemp();voiddisplay();voidSerial_init();voidrecord(ucharaddress)voidplay(ucharaddress);voidrecord_init();//录音芯片地址表//延时函数//写数据//读取温度值//转换温度//显示函数//初始化函数;//录音函数//放音函数//录入语库函数3.2程序设计此部分包括主程序流程图,温度处理流程图,语音录放处理流程图,处理流程图,3处理流程图,4处理流程图,中断处理流程图以及软件设置各模块能实现的功能。主程序设计1.主程序流程图如图3-2-1所示:2.主程序voidmain(){Serial_init();while(1){if(aa==0x01){aa=0;record_init()}if(flagbaoshi==1)图3-2-1主程序流程图//初始化函数//初始化语音库//录放音函数play(0x34); //当前温度是play(tre[temp/100]);//温度值if((temp%100)/10==0)play(tre[10]);if((temp%100)/10){play(tre[10]);play(tre[(temp%100)/10]);}play(tre[11]); //点play(tre[temp%10]);play(0x3c); //度}}}3.2.2温度处理程序设计1.温度处理程序流程图如图3-3-2所示:图3-2-2温度处理程序流程图2.温度处理程序如下:uintCalTemp() //获取十进制温度{uinttempval,value;uinttpl,tph;floatt;ReadTem(); //读取温度值tpl=read_byte();//获得低八位tph=read_byte();//获得高八位tempval=tph;tempval=tempval<<8;//把以上八位数据从低八位移到高八位tempval二tempval|tpl;//两字节合成一个整型变量value=tempval;t=value*0.0625; //得到真实十进制温度值value=t*10+0.5;returnvalue; //变成位数好显示}3.2.3录放音程序设计1.录音程序设计录音程序流程图如图3-2-3所示图3-2-3录音程序流程图录音程序如下:voidrecord(ucharaddress) //录制对应地址语音信息{Pl=OxcO; //Oxff也行,只要保证前两位是TWR=0;del(10);TWR=1;

//用上升沿将//用上升沿将P1数据打进去,地址复位//在//在address地址录音TWR=0;del(10);TWR=1;del(10);REC=1;//REC低电平开始录音//REC低电平开始录音REC=0;if(address==0x34){del(400); //录制最后一段REC=1;del(400);}else{del(100);REC=1;del(100);}}2.放音程序设计放音程序流程图如图3-2-4所示:图3-2-4放音程序流程图放音程序如下:voidplay(ucharaddress) //播放对应地址的语音信息{TWR=O; //用上升沿将Pl数据打进去P1=address;TWR=l;del(l0);TWR=0;PL=0; //PL为低电平,开始放音if(address==0x34)//播放最后一段del(400);elsedel(l00);PL=1; //PL置高电平,停止放音}中断程序设计1.中断程序流程图如图3-2-5所示:图3-2-5中断程序流程图2.中断程序voidtime0()interrupt1{TH0=(65536-20000)/256;TL0=(65536-20000)%256;Tem_Start();temp=CalTemp();if(temp>BUF*10&&BUF!=0){P1=BUF;beep=0;del(10);beep=1;}display();time++;if(time==50){ES=0;time=0;SBUF=temp/100;while(!TI);//定时器中断//定时器赋初值//开始测温//获得十进制温度值//温度超过范围报警//温度显示//每隔秒扫描一次温度TI=0;SBUF=(temp%100)/10;while(!TI);TI=0;SBUF=temp%10;while(!TI);TI=0;ES=1;}time2++;if(time2==1500){time2=0;flagbaoshi=1;}}完整程序见附录。//30秒定时报温第四章性能测试与结果分析4.1串口通讯工具串口通讯工具的设计采用的是java编程,主要通过使用java自带的串口API实现上位机与单片机之间的通信;java采用的是线程操作,实现了温度监听的实时性;同时用到了java绘图技术,能够将采集到的数据通过坐标图型的方式显示在上位机上。串口通讯工具主要包含温度采集模块,数据处理模块,图像绘制模块和温度设置模块。温度采集模块:采用java自带串口APIcomm•实现接收从单片机发送过来的数据;数据处理模块:由于单片机的sbuf只有8位,范围为:0〜255,而采集的温度可能大于33.3度,这样就超过了sbuf的范围,我们采用的是单片机分3次发送到方式解决此问题,收到的数据要想坐标显示,这样就需要对数据进行处理;图像绘制模块:经过了数据处理模块的数据,就可以直接用来作为上位机绘制坐标图型的数据参数,然后通过java自带的Graphics来动态的绘制温度曲线;温度设置模块:通过上位机对单片机进行发送数据来实现对单片机的控制,程序定义的是发送01表示让单片机录音,还可以设置警戒温度发送给单片机。串口通讯程序初始化选择串口、波特率等W发送01一、二 打开串口——■■二置警戒温度AJ录音I 数据接收并处理匚发送到单片机绘制温度曲线V是否关闭串口*NJY结束图4-1-1串口通讯程序流程图串口通讯界面串口通讯界面如图4-1-2所示:

4.2串口通讯串口通讯的目的是实现上下位机通信,上位机控制单片机部分功能,单片机发送数据给上位机,用来实现要求功能。4.2.1发送功能单片机发送数据如图4-2-1所示:图4-2-1串口接收数据由上图可知,实现了串口的接收功能4.2.2接收功能单片机接收数据如图4-2-2所示:图4-2-2串口发送数据由上图可知,实现了串口的发送功能4.2.3绘制温度曲线温度变化曲线如图4-2-3所示:图4-2-3温度变化曲线第五章课程设计总结5.1问题与解决温度传感器问题编程获取温度传感器测得的温度时,无法得到正确温度值或者得不到温度值,原因是温度传感器时序没有编程正确,初始化时序,读、写时序必须严格按照要求编程,延时的长短直接影响到结果,延时过短无法完成数据的有效传输或者使得温度传感器无法正常工作;另外一个原因是TWR和TRD不是同时接地选通,而是TRD接地,TWR给一个上升沿温度传感器才选通。LED显示问题温度显示在数码管上,当进行语音报温时,数码管就不能正常工作,原因是语音报温占用cpu,数码管显示程序不运行,出现错误。把数码管显示程序放在定时器0中断中,两者不出现冲突,问题解决。语音实现问题语音芯片编程时,录音没有问题,放音出错。原来认为是放音标志PLAYE(下降沿放音)的问题,经过对下降沿、延时、控制模式等的调整,放音还是一直顺序放音。经过老师的讲解、讨论,最终认为无法检测到结束标志EOM,实验出错,使用低电平(PLAYL)放音,问题解决。串口通讯问题串口通讯过程中,刚开始无法实现串口的自动接收功能,经过对程序的认真分析,以及对串口通讯原理的理解,实现了存储在SBUF中的温度在串口工具中的自动接收;5.2心得体会俗话说“好的开始是成功的一半”。说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,选一个自己有兴趣的题目。其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。本次课程设计从总体上来说是对芯片DS18B20、ISD1420,89C52,MAX232的应用。DS18B20是数字温度传感器,用来测得现场温度;ISD1420是语音芯片,用来录放音和语音报警;89C52是设计核心,用来协调各芯片之间的工作;MAX232是串口通讯接口,用来实现上下位机通讯。硬件的设计要我们自己动手去操作,软件的编程也要我们不断的调试,按着设计的思想与要求运动起来。当然,这其中也有很多问题,第一、不够细心比如由于粗心大意接错了线,由于对课本理论的不熟悉导致编程出现错误。第二,是在学习态度上,这次课设是对我的学习态度的一次检验。对于这次课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。。在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。在方案设计选择和芯片的选择上,培养了我们综合应用的能力。还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。并且我们熟练掌握了有关器件的性能及测试方法。再次感谢老师的辅导以及同学的帮助,是他们让我有了一个更好的认识,无论是学习还是生活,生活是实在的,要踏实走路。课程设计时间是三周,我学习了很多的东西,使我眼界打开,感受颇深。参考文献孙涵芳、徐爱卿.MCS-51/96系列单片机原理及应用(修订版).北京航空航天大学出版社,1996:20-180秦志强.C51单片机应用与C语言程序设计(第2版).电子工业出版社,2005:103-148兰吉昌.51单片机应用设计例.北京化学工业出版,2009:80-120程培青.数字信号处理教程.清华大学电子学出版社,1999:10-96周荷琴,吴秀清.微型计算机原理与接口技术(第四版).中国科学技术大学出版社,2008:178-220康华光.电子技术基础(第五版).华中科技大学出版社,2005阎石.数字电子技术基础(第五版).清华大学出版社,2005求是科技。单片机典型外围器件及应用举例。人民邮电出版社,2006:230-401附录附录单片机程序:#include"reg52.h"#include"intrins.h"#defineucharunsignedchar#defineuintunsignedintuchardelay;ucharflagbaoshi;ucharBUF;//uchardelay;ucharflagbaoshi;ucharBUF;//定时报时标志//存放串口通信数据sbitDQ二P2"2;//DS18B20输入端sbitbeep二P2"3;//蜂鸣器sbitdula=P2飞;//数码管段选sbitwela二P2“7;//数码管位选sbitREC二P3"5;//录音标志sbitPL二P3飞;//低电平放音标志sbitTWR=P3^7;//上升沿启动语音芯片标志uchartime=0,time2=0;uinttemp; //温度变量uinttemp2;ucharflag; //标志变量ucharcount=0; //计数标志codeuchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码表codeuchartre[]={0,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c,0x20,0x24,0x28,0x2c,0x30,0x34}; //录音芯片地址表voidTXReset();voidack_18b20();bitread_bit();ucharread_byte();//DS18B20复位函数//读取数据voiddel(uintz);//voiddel(uintz);//延时函数//写数据//读取温度值//转换温度//显示函数//初始化函数voidwrite_bit(uchardat);voidTem_Start();voidReadTem();uintCalTemp();voiddisplay();voidSerial_init();voidvoidvoidrecord(ucharaddress);play(ucharaddress);record_init();//录音函数//放音函数//录入语库函数main()void{Serial_init();while(1){//初始化函数if(BUF==0x01){BUF=0;record_init();}if(flagbaoshi==1){play(0x34);play(tre[temp/100]);if((temp%100)/10==0)play(tre[10]);if((temp%100)/10){play(tre[10]);play(tre[(temp%100)/10]);}play(tre[11]);play(tre[temp%10]);play(0x3c);}//初始化语音库//录放音函数//当前温度是//温度值//点//度}Serial_init()}voidSerial_init(){EA=1;ES=1;REC=1;PL=1;TWR=1;TMOD=0x21;ET0=1;TH0=(655536-20000)/256;TL0=(65536-20000)%256;TH1=0xfd;TL1=0xfd;

TR0=1;TR1=1;SM0=0;SM1=1;REN=1;BUF=35;flagbaoshi=0;TWR=0;P1=0xc0;TWR=1;del(10);}voiddel(uintz){uintj;while(z--)for(j=0;j<125;j++);}voidTXReset(){uchari=120;DQ=0;while(i>0)i--;DQ=1;i=4;while(i>0)i--;}//单片机拉低总线//延时us//拉高总线//延时us//等待应答信号//等待应答信号//延时us//读取数据voidack_18b20(){uchari=4;while(DQ);while(~DQ);while(i>0)i--;}bitread_bit(){bitb;uinti=0;////总线拉低//至少维持usDQ=0;i++;DQ=1;i++;i++;b=DQ;i=8;while(i>0)i--;returnb;}ucharread_byte(void){uinti;ucharj,dat;for(i=0;i<8;i++){j=read_bit(); //读取一位dat=(j<<7)|(dat>>1);//得到温度值(二进制)}returndat;}voidwrite_bit(uchardat){uchari;uintj;bitb;for(i=0;i<8;i++){b=dat&0x01;dat=dat>>1;if(b) //发送的是{DQ=0; //拉低总线j++; //至少维持usj++;DQ=1; //拉高总线j=8;while(j>0)j--;/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论