[毕业论文]温控自动风扇系统论文_第1页
[毕业论文]温控自动风扇系统论文_第2页
[毕业论文]温控自动风扇系统论文_第3页
[毕业论文]温控自动风扇系统论文_第4页
[毕业论文]温控自动风扇系统论文_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、精准温度显示的温控自动风扇系统方振杰 06电信1班 3060432035摘 要本设计为一种温控风扇系统,具有灵敏的温度感测和显示功能,系统at89c5 单片机作为控制平台对风扇转速进行控制。可由用户设置高、低温度值,测得温度值在高低温度之间时打开风扇弱风档,当温度升高超过所设定的温度时自动切换到大风档,当温度小于所设定的温度时自动关闭风扇,控制状态随外界温度而定。所设高低温值保存在温度传感器ds18b20内部e2rom中,掉电后仍然能保存上次设定值,性能稳定,控制准确。关键词: 自动控制;单片机;温控;风扇目 录摘 要1目 录21引言32 方案论证42.1 温度传感器的选用42.2 控制核心的

2、选择52.3显示电路52.4调速方式62.5控制执行部件63 系统简述74 硬件设计84.1、本系统各器件简介84.1.1 ds18b20 单线数字温度传感器简介84.1.2 at89c52 单片机简介94.1.3 八段led 数码管114.2 各部分电路设计124.2.1 电源电路124.2.2 数码管显示电路124.2.3 声响、温度采集、温度设定以及复位电路134.2.4 温控自动电路144.2.5无级调速电路155 软件设计176 安装调试19参考文献20附录1 程序流程图21附录2 源程序281引言生活中,我们经常会使用一些与温度有关的设备。比如,现在虽然不少城市家庭用上了空调,但在

3、占中国大部分人口的农村地区依旧使用电风扇作为降温防暑设备,春夏(夏秋)交替时节,白天温度依旧很高,电风扇应高转速、大风量,使人感到清凉;到了晚上,气温降低,当人入睡后,应该逐步减小转速,以免使人感冒。虽然电风扇都有调节不同档位的功能,但必须要人手动换档,睡着了就无能为力了,而普遍采用的定时器关闭的做法,一方面是定时时间长短有限制,一般是一两个小时;另一方面可能在一两个小时后气温依旧没有降低很多,而风扇就关闭了,使人在睡梦中热醒而不得不起床重新打开风扇,增加定时器时间,非常麻烦,而且可能多次定时后最后一次定时时间太长,在温度降低以后风扇依旧继续吹风,使人感冒;第三方面是只有简单的到了定时时间就关

4、闭风扇电源的单一功能,不能满足气温变化对风扇风速大小的不同要求。又比如在较大功率的电子产品散热方面,现在绝大多数都采用了风冷系统,利用风扇引起空气流动,带走热量,使电子产品不至于发热烧坏。要使电子产品保持较低的温度,必须用大功率、高转速、大风量的风扇,而风扇的噪音与其功率成正比。如果要低噪音,则要减小风扇转速,又会引起电子设备温度上升,不能两全其美。为解决上述问题,我们设计了这套温控自动风扇系统。本系统采用高精度集成温度传感器,用单片机控制,能显示实时温度,并根据使用者设定的温度自动在相应温度时作出小风、大风、停机动作,精确度高,动作准确。2 方案论证本系统实现风扇的温度控制,需要有较高的温度

5、变化分辨率和稳定可靠的换档停机控制部件。2.1 温度传感器的选用温度传感器可由以下几种方案可供选择:方案一:选用热敏电阻作为感测温度的核心元件,通过运算放大器放大由于温度变化引起热敏电阻电阻的变化、进而导至的输出电压变化的微弱电压变化信号,再用ad转换芯片adc0809将模拟信号转化为数字信号输入单片机处理。方案二:采用热电偶作为感测温度的核心元件,配合桥式电路,运算放大电路和ad转换电路,将温度变化信号送入单片机处理。方案三:采用数字式集成温度传感器ds18b20作为感测温度的核心元件,直接输出数字温度信号供单片机处理。对于方案一,采用热敏电阻有价格便宜、元件易购的优点,但热敏电阻对温度的细

6、微变化不敏感,在信号采集、放大、转换过程中还会产生失真和误差,并且由于热敏电阻的r-t关系的非线性,其本身电阻对温度的变化存在较大误差,虽然可以通过一定电路予以纠正,但不仅将使电路复杂稳定性降低,而且在人体所处温度环境温度变化中难以检测到小的温度变化。故该方案不适合本系统。对于方案二,采用热电偶和桥式测量电路相对于热敏电阻其对温度的敏感性和器件的非线性误差都有较大提高,其测温范围也非常宽,从-50摄氏度到1600摄氏度均可测量。但是依然存在电路复杂,对温度敏感性达不到本系统要求的标准,故不采用该方案。对于方案三,由于数字式集成温度传感器ds18b20的高度集成化,大大降低了外接放大转换等电路的

7、误差因素,温度误差很小,并且由于其感测温度的原理与上述两种方案的原理有着本质的不同,使得其温度分辨力极高。温度值在器件内部转换成数字量直接输出,简化了系统程序设计,又由于该传感器采用先进的单总线技术(1-wrie),与单片机的接口变的非常简洁,抗干扰能力强。关于ds18b20的详细参数参看下面“硬件设计”中的器件介绍。2.2 控制核心的选择方案一:采用电压比较电路作为控制部件。温度传感器采用热敏电阻或热电偶等,温度信号转为电信号并放大,由集成运放组成的比较电路判决控制风扇转速,当高于或低于某值时将风扇切换到相应档位。方案二:采用单片机作为控制核心。以软件编程的方法进行温度判断,并在端口输出控制

8、信号。对于方案一,采用电压比较电路具有电路简单、易于实现,以及无需编写软件程序的特点,但控制方式过于单一,不能自由设置上下限动作温度,无法满足不同用户以及不同环境下的多种动作温度要求,故不在本系统中采用。对于方案二,以单片机作为控制器,通过编写程序不但能将传感器感测到的温度通过显示电路显示出来,而且用户能通过键盘接口,自由设置上下限动作温度值,满足全方位的需求。并且通过程序判断温度具有极高的精准度,能精确把握环境温度的微小变化。故本系统采用方案二。2.3显示电路方案一:采用五位共阳数码管显示温度,动态扫描显示方式。方案二:采用液晶显示屏lcd显示温度对于方案一,该方案成本低廉,显示温度明确醒目

9、,在夜间也能看见,功耗极低,显示驱动程序的编写也相对简单,这种显示方式得到广泛应用。不足的地方是扫描显示方式是使五个led逐个点亮,因此会有闪烁,但是人眼的视觉暂留时间为20ms,当数码管扫描周期小于这个时间时人眼将感觉不到闪烁,因此可以通过增大扫描频率来消除闪烁感。对于方案二,液晶体显示屏具有显示字符优美,不但能显示数字还能显示字符甚至图形的优点,这是led数码管无法比拟的。但是液晶显示模块价格昂贵,驱动程序复杂,从简单实用的原则考虑,本系统采用方案一。2.4调速方式方案一:采用变压器调节方式,运用电磁感应原理将220v电压通过线圈降压到不同的电压,控制风扇电机接到不同电压值的线圈上可控制电

10、机的转速,从而控制风扇风力大小。方案二:采用晶闸管构成无级调速电路。对于方案一,由于采用变压器改变电压调节,有风速级别限制,不能适应人性化要求。且在变压过程中会有损耗发热,效率不高,发热有不安全因素。对于方案二,以电位器控制晶闸管的导通角大小,可实现由最大风速到关闭的无级别调速,可将风力调节在关闭无风到最大风之间的任意风力,实现“自由风”。且在调速环节中基本无电力损耗。故本系统采用方案二。2.5控制执行部件方案一:采用数模转换芯片ad0832控制,由单片机根据当前温度值送出相应数字量到ad0832,由ad0832产生模拟信号控制晶闸管的导通角,从而配合无级调速电路实现温控时的自动无级风力调节。

11、方案二:采用继电器,继电器的接有控制晶闸管导通角的电阻的接入电路与否由单片机控制,根据当前温度值在相应管脚送出高/低电平,决定某个继电器的导通角控制电阻是否接入电路。(详见4.2.4)对于方案一,该方案能够实现在风扇处于温控状态时也能无级调速,但是d/a转换芯片价格较高,与其温控状态下无级调速功能相比性价比不高。对于方案二,虽然在温控状态下只能实现弱/大风两级调速,但采用继电器价格便宜,控制可靠,且出于在温控状态时无级调速并不是特别需要的功能,综合考虑采用方案二。3 系统简述本系统由集成温度传感器、单片机、led数码管、继电器、双向晶闸管、蜂鸣器及一些其他外围器件组成。使用具有价廉易购的at8

12、9s52单片机编程控制,通过修改程序可方便实现系统升级。系统的框图结构如下:温度传感器ds18b20单片机at89s52数码管显示无级调速器被控对象(风扇)人工控制图1 系统框图4 硬件设计系统主要部件包括ds18b20温度传感器、at89s52单片机、双向晶闸管、五位led数码管和风扇。辅助元件包括继电器、蜂鸣器、电阻、晶振、电源、按键和拨码开关等。4.1、本系统各器件简介4.1.1 ds18b20 单线数字温度传感器简介ds18b20 单线数字温度传感器是dallas 半导体公司开发的世界上第一片支持“一线总线”接口的温度传感器。它具有3 引脚to92 小体积封装形式。温度测量范围为-55

13、+125,可编程为9 位12 位a/d 转换精度,测温分辨率可达0.0625。被测温度用符号扩展的16 位数字量方式串行输出。工作电压支持3v5.5v 的电压范围,既可在远端引入,也可采用寄生电源方式产生。ds18b20 还支持“一线总线”接口,多个ds18b20可以并联到3 根或2 根线上,cpu 只需一根端口线就能与诸多ds18b20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。它还有存储用户定义报警温度等功能。ds18b20 内部结构及管脚ds18b20 内部结构如图所示,主要由4 部分组成:64 位rom、温度传感器、非挥发的温度报警触发器th 和tl、配置寄存器。其管脚

14、排列如图所示,dq 为数字信号端,gnd 为电源地,vdd 为电源输入端。图1 ds18b20 内部结构图2 ds18b20外形及管脚4.1.2 at89c52 单片机简介at89c52 是一种带4k字节闪存可编程可擦除只读存储器(fperom)256b片内ram的低电压,高性能cmos8 位微处理器。该器件采用atmel 高密度非易失存储器制造技术制造,与工业标准的mcs-51 指令集和输出管脚相兼容。由于将多功能8 位cpu 和闪烁存储器组合在单个芯片中,atmel 的at89c52 是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。at89c52 单片机管脚at89

15、c52单片机管脚如图3所示。图3 at89c52单片机管脚各管脚功能:vcc:供电电压。gnd:接地。p0 口:p0 口为一个8 位漏级开路双向i/o 口,每脚可吸收8ttl 门电流。当p1 口的管脚第一次写1 时,被定义为高阻输入。p0 能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在fiash 编程时,p0 口作为原码输入口,当fiash 进行校验时,p0输出原码,此时p0 外部必须被拉高。p1 口:p1 口是一个内部提供上拉电阻的8 位双向i/o 口,p1 口缓冲器能接收输出4ttl门电流。p1 口管脚写入1 后,被内部上拉为高,可用作输入,p1 口被外部下拉为低电平时,

16、将输出电流,这是由于内部上拉的缘故。在flash 编程和校验时,p1 口作为第八位地接收。p2 口:p2 口为一个内部上拉电阻的8 位双向i/o 口,p2 口缓冲器可接收,输出4 个ttl 门电流,当p2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,p2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。p2 口当用于外部程序存储器或16 位地址外部数据存储器进行存取时,p2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,p2 口输出其特殊功能寄存器的内容。p2 口在flash 编程和校验时接收高八位地址信号

17、和控制信号。p3 口:p3 口管脚是8 个带内部上拉电阻的双向i/o 口,可接收输出4 个ttl 门电流。当p3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,p3 口将输出电流(ill)这是由于上拉的缘故。p3 口也可作为at89c51 的一些特殊功能口。p3.0:rxd(串行输入口);p3.1:txd(串行输出口);p3.2:/int0(外部中断0);p3.3:/int1(外部中断1);p3.4:t0(记时器0 外部输入);p3.5:t1(记时器1外部输入);p3.6:/wr(外部数据存储器写选通);p3.7:/rd(外部数据存储器读选通)。 p3 口

18、同时为闪烁编程和编程校验接收一些控制信号。rst:复位输入。当振荡器复位器件时,要保持rst 脚两个机器周期的高电平时间。ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在flash 编程期间,此引脚用于输入编程脉冲。在平时,ale 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ale 脉冲。如想禁止ale 的输出可在sfr8eh 地址上置0。此时,ale 只有在执行movx,movc 指令是ale 才起作用。另外,该引脚被略微拉高。如果微处理器在

19、外部执行状态ale 禁止,置位无效。/psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/psen 有效。但在访问外部数据存储器时,这两次有效的/psen 信号将不出现。/ea/vpp:当/ea 保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1 时,/ea 将内部锁定为reset;当/ea 端保持高电平时,此间内部程序存储器。在flash 编程期间,此引脚也用于施加12v 编程电源(vpp)。xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。xtal2:来自反向振荡器的输出。4.1.3 八段led

20、数码管本系统使用五个七段led数码管作为温度显示,公共阳极。4.2 各部分电路设计4.2.1 电源电路电源电路采用lm7805集成稳压器作为稳压器件,用典型接法,220v电源整流滤波后送入lm7805稳压,在输出端接一个470u和0.1u电容进一步滤除纹波,得到5v稳压电源。电路如图4所示。图4 电源4.2.2 数码管显示电路显示部分包括如下图5: 5个八段(共阳)数码管、pnp型三极管、电阻等。其连接方式如下:应用单片机p0口连接八段数码管,用p2口的p2.3p2.7五个端口作为数码管的片选信号输出端口,其中要用8550(pnp型)三极管做驱动。又因为p0口做i/o口时要加上拉电阻,所以我们

21、给p0各位各加一个10k的电阻到电源。为了防止烧坏数码管,所以给数码管各段各加一个300欧姆的限流电阻。要显示的数据通过p0口送给数码管显示,通过p2口的p2.7p2.3五个端口分别对数码管进行位选,事实上数码管是间断被点亮的,只是其间断时间十分短,扫描周期在20ms以下,利用人眼视觉暂留,我们基本看不出它们的闪烁。图5 显示电路4.2.3 声响、温度采集、温度设定以及复位电路电路如图6所示,这一部分主要是由ds18b20,四个按键、一个电容一个三极管和一个蜂鸣器等构成。声响电路在每按下按键时会响一声,当没有把ds18b20接入到电路中时,单片机就会通过蜂鸣器发出报警声音。温度采集电路主要是由

22、ds18b20构成,它可以把采集的温度数据转化成二进制数,经过单片机处理后输出送数码管显示。 温度设定主要是通过按键s1、s2|、s3来设定的。按键s1、s2、s3分别接入单片机的p1.4、p1.5、p1.6脚。s3是设定键。用于对风速调节的上限和下限值th、tl的设置。当按下s1时,可以加1,长按可以快速加1,当按下s2 时,可以减1, 长按可以快速减1。图6 声响、温度采集、温度设置及复位电路4.2.4 温控自动电路该电路为控制风速的人工控制与温控两种方式之温控模式时的控制电路,当选择为温控时,单片机默认为弱风,当当前温度低于所设的温度下限tl时继电器1吸合,关闭风扇,当当前温度高于所设的

23、温度上限时继电器2吸合,切换到强风档。电路如图7。图7 温控自动电路4.2.5无级调速电路此电路如图8所示,包括:双向可控硅,双触发二极管、滑动变阻器、电容。该电路为无级调速电路,通过调节滑动变阻器的阻值来改变通过双向二极管的电流,控制双向晶闸管的导通角,从而控制电机的转速。可实现由最大风速到关闭的无级别调速,可将风力调节在关闭无风到最大风之间的任意风力,实现“自由风”。图8 无级调速电路本系统的总电原理图为:图9 总电原理图5 软件设计程序实现的功能是上电复位时检测温度传感器ds18b20是否存在或它工作是否正常,当不存在或工作不正常时从蜂鸣器发出报警声,提示用户检查ds18b20,安装或者

24、更换。这部分功能由ds18b20复位与检测子程序reset完成。当检测到传感器工作正常后,发出温度转换命令及读取温度值命令,将从ds18b20读取的二进制温度值转换为七段码在led上显示出来。显示功能由温度显示子程序disp1子程序实现。在温控自动状态,本系统可由用户根据需要自由设置大小风档的切换温度值th,tl,硬件设计上为通过3个按键,由按键扫描子程序keyscan子程序提供软件支持。按下一次设置键k3,进入低温关风扇温度值tl设置状态,此时按下“加”键k1,tl值加一,长按k1不放可实现快速加1,按下“减”键k2,tl值减1,长按k2不放可实现快速减1。再按一次设置键k3,进入高温切换大

25、风档温度值th设置状态,此时按下“加”键k1,th值加一,长按k1不放可实现快速加1,按下“减”键k2,th值减1,长按k2不放可实现快速减1。下限动作温度值tl和上限动作温度值的设置范围为0-120摄氏度,满足一般使用要求。再按一次设置键k3退出上下限温度设置状态,恢复到当前温度显示状态。在当前温度显示状态,按下“加”键k1一次显示当前tl设定值,再按一下显示当前th设定值,如此循环,按设置键k3退回到当前温度显示状态。每次设定的tl、th值均拷备到ds18b20的eerom内,在单片机掉电后设定值不会丢失,在再次上电时从ds18b20的eerom中读回上次设定的上下限动作温度值th、tl,

26、用户要实现根据当前温度实时的控制风扇的状态,需要在程序中不时的判断当前温度值是否超过设定的动作温度值范围,此部分功能由比较控制子程序temp_comp来完成。由于单片机的工作频率高达12mhz,在执行程序时不断将当前温度和设定动作温度进行比较判断,当超过设定温度值范围时及时的转去执行超温处理和欠温处理子程序,控制继电器的吸合、断开状态,从而控制风扇实时的切换到关闭、弱风、大风三个状态。在没有超过设定的tl、th值时默认将风扇置为弱风档。该比较控制程序又由温度比较程序、超温处理子程序和欠温处理子程序构成。显示驱动程序以查七段码取得各数码管应显数字,逐位扫描显示。主程序和个主要子程序的流程图如附录

27、1所示。6 安装调试将本电路用硬件做出来,用编程器将keil软件对源程序编译生成的.hex文件烧入at89c52单片机,将单片机插入到目标板中,连好线。将“控制模式”开关选择在“温控”,打开电源,风扇工作在弱风档,数码管正常显示当前的温度21.6摄氏度,第五位数码管闪烁显示“o”,表示当前温度在tl和th值之间,没有欠温或超温。按“设置”键及“加”“减”键将下限动作温度值tl设为20摄氏度,将上限动作温度值th设为23摄氏度,用书对着ds18b20扇动,显示温度逐渐降低,当达到19.9摄氏度时继电器1动作,将风扇关闭,第五位数码管闪烁显示“l”,表示当前温度低于tl值。然后用手握着ds18b2

28、0,显示温度逐步上升,当达到23.1摄氏度时继电器2动作,将风扇切换到大风档,第五位数码管闪烁显示“h”,表示当前温度高于th值。将“控制模式”开关选择在“人控”,这时数码管依然按照上述规律显示,但是不能对风扇进行控制。用手旋动无级调速旋钮,可以将风扇从关闭一直连续调到最大风速,具有无级调节风扇风力的功能。测试结果表明,本系统实现了预期功能。参考文献1 胡汉才.单片机原理及其接口技术.北京:清华大学出版社,20042 吴金戍,沈庆阳,郭庭吉.8051单片机实践与应用.北京: 清华大学出版社,20023 求是科技.单片机典型模块设计实例导航.北京:人民邮电出版社,20044 王化详,张淑英.传感

29、器原理.天津:天津大学出版社,20025 荣俊昌.新型电风扇原理与维修.北京:高等教育出版社,20046 王港元.电工电子实践指导.江西:江西科学技术出版社,2005附录1 程序流程图主程序流程图开始初始化蜂鸣报警检测ds18b20正常?温度转换命令读温度温度bcd码处理显示温度按键扫描及处理与设定温度对比及处理ny图11 主程序流程图按键扫描子程序流程图入口k1按下?蜂鸣器响一声设定的tl值转换成各led的显示数字k1按下?蜂鸣器响一声显示tl值设定的th值转换成各led的显示数字显示th值k1按下?k2按下?蜂鸣器响一声ynynynn蜂鸣器响一声k3按下?蜂鸣器响一声设定th,tl将设定t

30、h,tl值写入1820的暂存器将1820暂存器值写入eerom返回yn图12 按键扫描子程序流程图设置上下限动作温度值th,tl子程序流程图显示,闪烁入口k1按下?=121?k3按下?设置的tl加1设置的tl=0显示tlk2按下?设置的tl减1设置的tl=0?设置的tl=119显示tl蜂鸣一声k3松开?k1按下?=121?设置的th加1设置的th=0显示thk2按下?设置的th减1设置的th=0?设置的tl=119显示thk3按下?蜂鸣一声返回$ynynynnnynyynnyn闪烁显示ynnyynk3按下?y图13 设置上下限动作温度值th,tl子程序流程图实时温度值与设定th,tl值比较及超

31、、欠温处理子程序流程图入口th当前温度?th当前温度?c1=0,c2=0200ms定时时间到?第五位led灭,其它四位显示当前温度第五位led显示h,其它四位显示当前温度c1=0,c2=0200ms定时时间到?第五位led灭,其它四位显示当前温度第五位led显示h,其它四位显示当前温度c1=1,c2=1返回yyyynnn图14 实时温度值与设定th,tl值比较及超、欠温处理子程序流程图温度显示子程序流程图取扫描字入口扫描字p2输出取显示数据查段码表从p0口输出小数点处理延时指向下一位acc.3=0?p0,p2复位返回ny图15 温度显示子程序流程图ds18b20复位与检测子程序600us复位低

32、脉冲入口拉高总线总线=0?60us到?总线=0?存在标志位置1延时总线拉高存在标志位置0返回nynyyn图16 ds18b20复位与检测子程序附录2 源程序;*;精准温度显示温控自动风扇系统 *;*说明: ;* 1、k3 进入设定低温动作温度值 tl 状态:;* 2、k3 进入设定高温动作温度值 th 状态:;* 3、k3 返回 ;* 4、设定过程: k1 加键 (up), k2 减键 (down),可快速调; 5、实际温度在tl和th之间时,开启弱风档,低于tl时,关闭风扇;;高于th时,开启大风档。每次设置的th和tl均被保存在ds18b20的rom;内,掉不需重新设置. *;* time

33、r_l data 23h timer_h data 24h timer_coun data 25h templ data 26h temph data 27h temp_th data 28h temp_tl data 29h temphc data 2ah templc data 2bh temp_zh data 2ch beep equ p3.7 data_line equ p3.3 c1 equ p3.4 ;c1控制口,接继电器1 c2 equ p3.5 ;c2控制口,接继电器2 flag1 equ 20h.0 flag2 equ 20h.1;- k1 equ p1.4 k2 equ p

34、1.5 k3 equ p1.6;= org 0000h jmp main org 000bh ajmp int_t0;-main: mov sp,#30h mov tmod,#01h ;t0,方式1 mov timer_l,#00h ;50ms定时值 mov timer_h,#4ch mov timer_coun,#00h ;中断计数 mov ie,#82h ;ea=1,et0=1 lcall read_e2 mov 20h,#00h setb beep setb c1 setb c2 mov 7fh,#0ah ;熄灭符 call reset ;复位与检测ds18b20 jnb flag1,m

35、ain1 ;flag1=0,ds18b20不存在 jmp startmain1: call reset jb flag1,start lcall beep_bl ;ds18b20错误,报警 jmp main1start: mov a,#0cch ; 跳过rom匹配 call write mov a,#044h ; 发出温度转换命令 call write call reset mov a,#0cch ; 跳过rom匹配 call write mov a,#0beh ; 发出读温度命令 call write call read ;读温度数据 call convtemp call dispbcd c

36、all disp1 call scankey lcall temp_comp jmp main1;=;ds18b20 复位与检测子程序;flag1=1 ok, flag1=0 error;=reset: setb data_line nop clr data_line mov r0,#64h ;主机发出延时600微秒的复位低脉冲 mov r1,#03hreset1: djnz r0,$ mov r0,#64h djnz r1,reset1 setb data_line ;然后拉高数据线 nop mov r0,#25hreset2: jnb data_line,reset3 ;等待ds18b20

37、回应 djnz r0,reset2 jmp reset4 ; 延时reset3: setb flag1 ; 置标志位,表示ds1820存在 jmp reset5reset4: clr flag1 ; 清标志位,表示ds1820不存在 jmp reset6reset5: mov r0,#064h djnz r0,$ ; 时序要求延时一段时间reset6: setb data_line ret;=;=write: mov r2,#8 ;一共8位数据 clr cywr1: clr data_line ;开始写入ds18b20总线要处于复位(低)状态 mov r3,#09 djnz r3,$ ;总线复

38、位保持18微妙以上 rrc a ;把一个字节data 分成8个bit环移给c mov data_line,c ;写入一个bit mov r3,#23 djnz r3,$ ;等待46微妙 setb data_line ;重新释放总线 nop djnz r2,wr1 ;写入下一个bit setb data_line ret;=;从ds18b20中读出温度低位、高位和动作温度设定值th、tl;存入26h、27h、28h、29h;=read: mov r4,#4 ; 将温度高位和低位从ds18b20中读出 mov r1,#26h ; 存入26h、27h、28h、29hre00: mov r2,#8re

39、01: clr c setb data_line nop nop clr data_line ;读前总线保持为低 nop nop nop setb data_line ;开始读总线释放 mov r3,#09 ;延时18微妙 djnz r3,$ mov c,data_line ;从ds18b20总线读得一个bit mov r3,#23 djnz r3,$ ;等待46微妙 rrc a ;把读得的位值环移给a djnz r2,re01 ;读下一个bit mov r1,a inc r1 djnz r4,re00 ret ;-;200ms对闪动标记取反一次;-int_t0: push acc push

40、psw mov tl0,timer_l mov th0,timer_h inc timer_coun mov a,timer_coun cjne a,#04h,int_end mov timer_coun,#00h cpl flag2int_end: pop psw pop acc reti;=;重新对 ds18b20 初始化;将设定的动作温度设定值写入 ds18b20;=re_18b20: jb flag1,re_18b20a retre_18b20a: call reset mov a,#0cch ;跳过rom匹配 lcall write mov a,#4eh ;写暂存寄存器 lcall

41、write mov a,temp_th ;th(动作上限温度) lcall write mov a,temp_tl ;tl(动作下限温度) lcall write mov a,#7fh ;12位精确度 lcall write ret;=;功能键扫描子程序;=scankey: mov p1,#0f0h jb k1,scan_k2 call beep_blscan_k1: call alert_tl call alert_play jb k1,scan_k1 call beep_blscan_k11: call alert_th call alert_play jb k1,scan_k11 call beep_blscan_k2: jb k2,scan_k3 call beep_blscan_k3: jb k3,scan_end call beep_bl lcall reset_alert lcall re_18b20 lcall write_e2scan_end: ret;=;设置动作温度值tl,th;=reset_alert: call alert_tl call alert_play jnb k3,$ ;k3为位移键 setb tr0reset_tl: call alert_play jnb flag2,r_tl01 mov 75h,7fh ;送入熄灭符 mov 76h,7fh

温馨提示

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

评论

0/150

提交评论