基于89c51单片机空调变频器的设计毕业设计论文_第1页
基于89c51单片机空调变频器的设计毕业设计论文_第2页
基于89c51单片机空调变频器的设计毕业设计论文_第3页
基于89c51单片机空调变频器的设计毕业设计论文_第4页
基于89c51单片机空调变频器的设计毕业设计论文_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计课题基于单片机的空调变频器设计学生姓名学号专业电子信息工程班级院(系)机械与电子信息工程学院指导教师职称二0一四年十一月三十日毕业设计真实性承诺及指导教师声明学生毕业设计真实性承诺本人郑重声明:所提交的毕业设计是本人在指导教师的指导下,独立进行研究工作所取得的成果,内容真实可靠,不存在抄袭、造假等学术不端行为。除文中已经注明引用的内容外,本设计不含其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。如被发现设计中存在抄袭、造假等学术不端行为,本人愿承担相应的法律责任和一切后果。学生(签名): 日期:指导教师关于学生毕业设计真实性审核的声明本人郑重声明:已经对学生毕业设计所涉及的内容进行严格审核,确定其成果均由学生在本人指导下取得,对他人论文及成果的引用已经明确注明,不存在抄袭等学术不端行为。指导教师(签名): 日期: 注:此声明由指导教师和学生本人亲笔签名。摘要传统定速空调的压缩机转速是恒定不变的,所以制冷量大小也是始终一样的,压缩机依靠其不断地“开、停”来调整室内温度,其一开一停之间容易造成室温忽冷忽热,消耗较多电能,从而我们用到了变频器。变频器(Variable-frequencyDrive,VFD)是应用变频技术与微电子技术,通过改变电机工作电源频率方式来控制交流电动机的电力控制设备。变频器主要由整流(交流变直流)、滤波、逆变(直流变交流)、制动单元、驱动单元、检测单元微处理单元等组成。变频器靠内部IGBT的开断来调整输出电源的电压和频率,根据电机的实际需要来提供其所需要的电源电压,进而达到节能、调速的目的,另外,变频器还有很多的保护功能,如过流、过压、过载保护等等。同时也就克服了定速空调的不足。变频空调则依靠压缩机转速的快慢达到控制室温的目的,室温波动小、电能消耗少,其舒适度大大提高。而运用变频控制技术的变频空调,可根据环境温度自动选择制热、制冷和除湿运转方式,使居室在短时间内迅速达到所需要的温度并在低转速、低能耗状态下以较小的温差波动,实现了快速、节能和舒适控温效果。同时运用STC89C52单片机,用编写好的程序,和温度传感器DS18B20所采集的温度,把数据传输到LCD18B20液晶显示屏上面,从而到达到目的。关键词STC89C52LCD1602DS18B20abstractTraditional

fixedspeedair-conditioning

compressorspeed

isconstant,

so

therefrigeratingoutput

is

always

thesame,

compressoronitscontinuing"open,stop"toadjusttheindoortemperature,

theopeningbetweenthestopis

easytocausethetemperature

sometimeshotandsometimescold,

consumemorepower,

so

we

usethe

frequencyconverter.Thefrequencyconverter

(Variable-frequency

Drive,

VFD)

istheapplicationoffrequencyconversiontechnology

andmicroelectronictechnology,

electricalcontrolequipment

bychangingthemotorpowerfrequency

tocontrolACmotor.

Theconverter

ismainlycomposedofarectifying

(ACtoDC),

filter,inverter

(DCtoACconverter),

braking

unit,

driveunit,

detectionunit,

amicroprocessingunit

etc..

Theinverter

byinternal

IGBT

onvoltageand

frequencyoff

toadjusttheoutput

ofpowersupply,

thepowersupplyvoltage

needed

toprovide

accordingtotheactualneed

ofthemotor,

andthepurposesofenergysaving,

thepurposeofspeed,

inaddition,

inverter

and

many

protectionfunctions,

suchas

over-current,

over-voltage,

overloadprotection

andsoon.Atthesametimealso

overcomestheshortcomingsof

fixedspeedair-conditioning.Inverterairconditionerwilldependonthe

rotationalspeedofthecompressorspeed

tocontrolroomtemperature,

roomtemperaturefluctuationissmall,

lowpowerconsumption,

comfortgreatly

improved.

Whiletheuseof

variablefrequency

airconditioning

frequencyconversioncontroltechnology,itcanautomaticallyselect

heating,

refrigerating

and

dehumidifyingoperation

modeaccordingtothe

environment

temperature,

theroomquicklyinashorttime

toreachtherequiredtemperatureandat

lowspeed,

lowenergy

statetoasmallertemperaturefluctuations,

realizesfast,

energy-savingandcomfortabletemperaturecontrol

effect.Atthesametime,

theuseofSTC89C52microcontroller,

usingthe

compiledprogram,

andthetemperaturesensor

DS18B20acquisitionofthetemperature,

thedatatransmissiontothe

LCD18B20liquidcrystal

screenabove,

soasto

achievethepurposeof.KeywordsSTC89C52

LCD1602

DS18B20目录摘要1Abstract2第一章方案的论证与设计51.1设计目标和实现方法51.2方案论证与设计5第二章硬件的介绍62.1运算模块62.2基于STC89C52单片机72.3DS18B20温度传感器92.4LCD1602各个引脚及作用142.5输入模块17第三章软件的设计183.1各个头文件的源代码主程序18第四章仿真及调试25第五章总结26参考文献27附录28附录1原理图28附录2PCB图29附录3实物图30致谢31第一章方案的论证与设计1.1设计目标和实现方法为了制作一个简易的空调变频器,我从单片机和电路作手,没有选择以往的空调变频,而是采用了用单片机和电机,温度传感器,以及液晶显示器,蜂鸣器为核心,来实现其工程的。设计仿真和调试要用到Protues、Keil等软件。1.2方案论证与设计根据功能和指标要求,本系统选用MCS52单片机为主控机。通过扩展必要的外围接口电路,实现对抽奖机的设计。主要设计方法如下:第一步:画好原理图及PCB图第二部:用PROTEUS进行软件仿真第三部:焊接第四步:软件及硬件调试根据需要我们可以采用自上而下的程序设计方法,此方法先从主程序开始设计,然后再编制各从属程序和子程序,层层细化逐步求精,最终完成一个复杂程序的设计。这种方法比较符合人们的日常思维,缺点是一级的程序错误会对整个程序产生影响第二章硬件的介绍本电路主要由主要分这几大模块电路,分别是电源模块,单片机主控制电路模块,DS18B20模块,1602显示模块,LED显示灯模块,运算模块。下面我对各个模块或芯片一一介绍,电源模块主要是USB供电。2.1运算模块MCS-52单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以进行很快地实现运算功能,如图2-1所示:图2-1AT89C51芯片2-2单片机外观图2.2基于STC89C52单片机单片机是我们电子产品实现自动化、智能化必不可少的电子元器件,它的外观如图2-2所示:上图是它们的引脚配置:40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。电源引脚:Vcc40脚正电源脚,工作电压为5V,另有AT89C51工作电压则是2.7-6V,引脚功能一样。GND20脚接地端。外接晶体引脚。外接晶体引脚如图2-3所示:图2-3外接晶体管引脚Pin19:时钟XTAL1脚,Pin18:时钟XTAL2脚,XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。

型号同样为AT89C51的芯片,在其后面还有频率编号,有12,16,20,24MHz可选。大家在购买和选用时要注意了。如AT89C5112PC就是最高振荡频率为12MHz,40P6封装的普通商用芯片。复位:在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的0000H处开始运行程序。常用的复位电路如下图2-4所示。复位操作不会对内部RAM有所影响。当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。什么叫复位?复位是单片机重新执行程序代码的意思。8051的复位方式可以是自动复位,也可以是手动复位,如图2-5所示。此外,RESET/Vpd还是一复用脚,Vcc掉电期间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失,在本电路中我们不用复位电路,因为复位电路对自己目标的功能没有什么意义。图2-4复位电路图图2-5复位方式输入输出(I/O)引脚:P39-P32为P0.0-P0.7输入输出脚,称为P0口,是一个8位漏极开路型双向I/O口。内部不带上拉电阻,当外接上拉电阻时,P0口能以吸收电流的方式驱动八个LSTTL负载电路。通常在使用时外接上拉电阻,用来驱动LCD1602的数据口。在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,不需要外接上拉电阻。P1-P8为P1.0-P1.7输入输出脚,称为P1口,是一个带内部上拉电阻的8位双向I/0口。P1口能驱动4个LSTTL负载。通常在使用时外不需要外接上拉电阻,就可以直接驱动发光二极管。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。P21-P28为P2.0-P2.7输入输出脚,称为P2口,是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。P10-P17为P3.0-P3.7输入输出脚,称为P3口,是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载,这8个引脚还用于专门的第二功能。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。P1-P3端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。除此之外P3端口还用于一些专门功能,具体请看下表3-1:P3引脚兼用功能P3.0串行通讯输入(RXD)P3.1串行通讯输出(TXD)P3.2外部中断0(INT0)P3.3外部中断1(INT1)P3.4定时器0输入(T0)P3.5定时器1输入(T1)P3.6外部数据存储器写选通WRP3.7外部数据存储器写选通RD表3-1P3口功能表其它的控制或复用引脚:(1)ALE/PROG30访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6)。在访问外部数据存储器时,出现一个ALE脉冲。对Flash存储器编程时,这个引脚用于输入编程脉冲PROG(2)PSEN29该引是外部程序存储器的选通信号输出端。当AT89C51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲即两次有效。但访问外部数据存储器时,将不会有脉冲输出。(3)EA/Vpp31外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。要使AT89S51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。对Flash存储器编程时,用于施加Vpp编程电压。2.3DS18B20温度传感器DS18B20数字温度测量传感器,网上介绍很多,我就不罗嗦了。见图DS18B20与前产品DS1820的不同:DS18B20继承了DS1820的全部优点,并做了如下改进1.供电范围扩大为3.0--5.5V。2.温度分辨力可编程。3.转换速率有很大提高.4.内部存储器映射关系发生变化。5.具有电源反接保护电路。5.体积减小一半。对我们使用来说最大的不同就是DS18B20可以程序设定9~12位的分辨率数字值,而DS1820为固定的9位数字值,且温度转换时的延时时间由2s减为750ms。。电路的接法:DS18B20说明书上介绍了几种电路的接法,但我这里就说最常用的一种先介绍一下DS18B20内部的结构:常规的内部逻辑图我就不说了,只说说跟我们使用直接相关的内容。

DS18B20的内部存储资源分为8个字节的ROM、9个字节的RAM、3个字节的EEPROM如下图:ROM:

在DS18B20内部光刻了一个长度为64bit的ROM,这个编码是器件的身份识别标志。如下图64位光刻ROM的排列是:开始(最低)8位是产品类型标号,对于DS18B20来说就是(28H),接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。RAM:

高速暂存存储器(RAM)由9个字节组成,包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是温度高限TH、温度低限TL暂存区,第五个字节是配置寄存器暂存区,第6、7、8字节是系统保留用,就相当于DS18B20的运算内存,第九个字节是冗余检验字节。其分配如下表所示。对DS18B20的写和读操作;接下来就是主机发出各种操作命令,但各种操作命令都是向DS18B20写0和写1组成的命令字节,接收数据时也是从DS18B20读取0或1的过程。因此首先要搞清主机是如何进行写0、写1、读0和读1的。

写周期最少为60微秒,最长不超过120微秒。写周期一开始做为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释放总线为高电平。若主机想写1,在一开始拉低总线电平1微秒后就释放总线为高电平,一直到写周期结束。而做为从机的DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。读写时序图对于读数据操作时序也分为读0时序和读1时序两个过程。读时隙是从主机把单总线拉低之后,在1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。完成一个读时序过程,至少需要60us才能完成。(为什么不可以像写时序那样将采样时间放在读周期开始后的第15微秒到45微秒之间呢。

DS18B20的说明书上也说,由于主机拉低总线电平时间Tint、释放总线时的恢复时间TRC与采样时间Tsample之和必须小于15微秒。如下图13。为了使读出数据更可靠,说明书上建议Tint和TRC保持时间尽可能小,把控制器采样时间放到15微秒周期的最后。如下图14。控制器读取”1”时序弄清了如何复位,如何写1写0和读1读0,我们现在就要看看在总线上如何进行实际的运用。

例如,我们做两个操作,第一个是让DS18B20进行一次温度的转换。第二是读取RAM内的温度。

①让DS18B20进行一次温度的转换。前面已经讲过每一个对DS18B20的操作都要有三个步骤。一是复位操作。二是对ROM的操作。三是对RAM的操作。现在我们要做的是让DS18B20进行一次温度的转换,那具体的操作就是:1、主机先作个复位操作,2、主机再写跳过ROM的操作(CCH)命令,3、然后主机接着写个转换温度的操作命令,后面释放总线至少一秒,让DS18B20完成转换的操作。在这里要注意的是每个命令字节在写的时候都是低字节先写,例如CCH的二进制为11001100,在写到总线上时要从低位开始写,写的顺序是“零、零、壹、壹、零、零、壹、壹”。整个操作的总线状态如下图。②读取RAM内的温度数据。同样,这个操作也要接照三个步骤。1、主机发出复位操作并接收DS18B20的应答(存在)脉冲。2、主机发出跳过对ROM操作的命令(CCH)。3、主机发出读取RAM的命令(BEH),随后主机依次读取DS18B20发出的从第0一第8,共九个字节的数据。如果只想读取温度数据,那在读完第0和第1个数据后就不再理会后面DS18B20发出的数据即可。同样读取数据也是低位在前的。整个操作的总线状态如下图:在这里得说明一下,第二步跳过对ROM操作的命令是在总线上只有一个器件时,为节省时间而简化的操作,若总线上不止一个器件,那么跳过ROM操作命令将会使几器件同时响应,这样就会出现数据冲突。2.4LCD1602各个引脚及作用LCD1602做主要显示模块是因为显示方便,电路连接简单,程序更简单,在程序上与数码管相比LCD1602不需要考虑段选与段选的间隔时间,再加上价格也不算太贵。功能简介LCD1602是单片机应用系统中的一宗简单而常用的输出设备,其在系统中的主要作用是显示单片机的输出数据、状态等。因而作为典型的外围器件,LCD1602显示单元是反映系统输出和操作输入的有效器件。LCD1602具备数字接口可以方便的和大年纪系统连接;它的优点是价格低,寿命长,能显示多种字符,并且程序控制简单。因而在单片机应用系统中获得了广泛的应用,所以在此设计中我首先选用了LCD1602作为显示器件。如图3-10所示:图3-2LCD1602显示模块1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。LCD1602是指显示的内容为16X2,即可显示两行,每行16个字符液晶模块(显示字符和数字)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。LCD1602是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。管脚功能:1602采用标准的16脚接口,其中:第1脚:VSS为电源地。第2脚:VCC接5V电源正极。第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。操作控制:1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。指令集如图所示:在单片机编程中还可以用字符型常量或变量赋值,如'A’。因为CGROM储存的字符代码与我们PC中的字符代码是基本一致的,因此我们在向DDRAM写C51字符代码程序时甚至可以直接用P1=‘A’这样的方法。PC在编译时就把'A'先转换为41H代码了。字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。以下是1602的16进制ASCII码表地址:读的时候,先读左边那列,再读上面那行,如:感叹号!的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。2.5输入模块计算器输入数字和其他功能按键要用到很多按键,因为按键较少,所以使用独键的方式。而且这里独立键盘扫描也相对简单。每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。键盘的一端通过电阻接GND而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。当无按键闭合时,P1.0~P1.1之间开路;当有键闭合时,与闭合键相连的两条I/O口线之间短路。图3-1键盘电路第三章软件的设计在LCD1602显示以及LED灯显示程序本人就不过多讲解讲解,对于这次的毕业设计我只是做了一个简易的空调变频,结合实际我将变频这一块实际化,变成了用STC89C52单片机控制,结合温度传感器DS18B20和LCD1602液晶显示器为核心,同时采用蜂鸣器来检测温度,来简易完成的室温测试。当然我也也采用了一个小型电机,进行驱动,虽然不是那么理想化,但是还是能较完善的实现其功能的。3.1各个头文件的源代码主程序LCD1602.h头文件#include<regX52.h>#defineucharunsignedchar#defineuintunsignedintsbitlcden=P2^2;//LCD控制端口sbitlcdrs=P2^0;#definelcd_data_portP0voiddelay(uintz){ uintx,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}voidwrite_com(ucharcom)/*LCD1602命令字写入*/ { lcdrs=0; lcd_data_port=com; delay(5); lcden=1; delay(5); lcden=0;}voidwrite_data(uchardate) /*LCD1602数据字写入*/{ lcdrs=1;lcd_data_port=date; delay(5); lcden=1; delay(5); lcden=0;}voidLCD1602_init() /*LCD1602初始化*/{ lcden=0; write_com(0x38);//显示模式设置 write_com(0x0c); write_com(0x06);//显示光标移动 write_com(0x01);//显示清屏 write_com(0x80+0x1);}delay.h头文件/*************************************************************************************函数名:N微秒延时函数调用:delay_nus(i);参数:1~65535返回值:无结果:占用CPU方式延时备注:应用于普通89C(S)51单片机,系统晶振11.0592MHz/*************************************************************************************/voiddelay_nus(unsignedinti) //延时:i>=12,i的最小延时单12us{ i=i/10; while(--i);}/************************************************************************************函数名:N毫秒延时函数调用:delay_nms(i);参数:1~65535返回值:无结果:占用CPU方式延时备注:应用于普通89C(S)51单片机,系统晶振11.0592MHz/************************************************************************************/voiddelay_nms(unsignedintn) //延时nms { n=n+1; while(--n) delay_nus(900); //延时1ms,同时进行补偿}特殊说明:本来这里要求的晶振的时钟频率要求的是11.0592MHZ但是笔者已经买了12MHZ的晶振,而且设计要求对时钟也不是很精确,所以用这个头文件是可取的。DS18B20头文件源程序/*DS18B20_3.H*/sbitDQ=P1^3;//定义DQ引脚为P1.3/*******************************延时函数*********************************功能:在11.059MHz的晶振条件下调用本函数需要24μs,然后每次计数需16μs**************************************************************************/voidDS18_delay(intuseconds){ints;for(s=0;s<useconds;s++);}/*******************************复位函数********************************功能:完成单总线的复位操作。*复位时间为480μs,因此延时时间为(480-24)/16=28.5,取29μs。*经过70μs之后检测存在脉冲,因此延时时间为(70-24)/16=2.875,取3μs。**************************************************************************/unsignedcharow_reset(void){unsignedcharpresence;DQ=0;//将DQ线拉低DS18_delay(29);//保持480μsDQ=1;//DQ返回高电平DS18_delay(3);//等待存在脉冲presence=DQ;//获得存在信号DS18_delay(25);//等待时间隙结束return(presence);//返回存在信号,0=器件存在,1=无器件}/******************************位写入函数********************************功能:向单总线写入1位值:bitval*************************************************************************/voidwrite_bit(charbitval){DQ=0;//将DQ拉低开始写时间隙if(bitval==1)DQ=1;//如果写1,DQ返回高电平DS18_delay(5);//在时间隙内保持电平值,DQ=1;//DS18_delay函数每次循环延时16μs,因此DS18_delay(5)=104μs}/****************************字节写入函数********************************功能:向单总线写入一个字节值:val*************************************************************************/voidds18write_byte(charval){unsignedchari;unsignedchartemp;for(i=0;i<8;i++){//写入字节,每次写入一位temp=val>>i;temp&=0x01;write_bit(temp);}DS18_delay(5);}/****************************位读取函数*********************************功能:从单总线上读取一位信号,所需延时时间为15μs,因此无法调用前面定义*的DS18_delay()函数,而采用一个for()循环来实现延时。************************************************************************/unsignedcharread_bit(void){unsignedchari;DQ=0;//将DQ拉低开始读时间隙DQ=1;//thenreturnhighfor(i=0;i<3;i++);//延时15μsreturn(DQ);//返回DQ线上的电平值}/****************************字节读取函数********************************功能:从单总线读取一个字节的值*************************************************************************/unsignedcharDSread_byte(void){unsignedchari;unsignedcharvalue=0;for(i=0;i<8;i++){//读取字节,每次读取一个字节if(read_bit())value|=0x01<<i;//然后将其左移DS18_delay(6);}return(value);}/*******************************读取温度函数******************************功能:如果单总线节点上只有一个器件则可以直接掉用本函数。如果节点上有多个器*件,为了避免数据冲突,应使用MatchROM函数来选中特定器件。*注:本函数是根据DS1820的温度数据格式编写的,若用于DS18B20,必须根据*DS18B20的温度数据格式作适当修改。**************************************************************************/unsignedintReadTemperature(void){unsignedcharget[10];unsignedchartemp_lsb,temp_msb;unsignedintt;unsignedchark;ow_reset();ds18write_byte(0xCC);//跳过ROMds18write_byte(0x44);//启动温度转换DS18_delay(5);ow_reset();ds18write_byte(0xCC);//跳过ROMds18write_byte(0xBE);//读暂存器for(k=0;k<2;k++){get[k]=DSread_byte();}temp_msb=get[1];//Signbyte+lsbittemp_lsb=get[0];//Tempdatapluslsbt=temp_msb*256+temp_lsb;t=t&0x0ff0;if(t<0xff&&t>0xf0)t=(-1)*t;returnt>>4;//temp_f=(((int)temp_c)*9)/5+32;//输出华氏温度值第四章仿真及调试在程序设计方法上,模块化程序设计是单片机应用中最常用的程序设计方法。设计的中心思想是把一个复杂应用程序按整体功能划分成若干相对独立的程序模块,各模

温馨提示

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

评论

0/150

提交评论