ImageVerifierCode 换一换
格式:DOC , 页数:34 ,大小:409KB ,
资源ID:6897446      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-6897446.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(精确温度显示的温控自动风扇系统05090.doc)为本站会员(yjrm16270)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

精确温度显示的温控自动风扇系统05090.doc

1、1精准温度显示的温控自动风扇系统戴邵池 周 斌 罗德知(赣南师范学院 江西赣州 341000)摘要:本设计为一种温控风扇系统,具有灵敏的温度感测和显示功能,系统AT89C5 单片机作为控制平台对风扇转速进行控制。可由用户设置高、低温度值,测得温度值在高低温度之间时打开风扇弱风档,当温度升高超过所设定的温度时自动切换到大风档,当温度小于所设定的温度时自动关闭风扇,控制状态随外界温度而定。所设高低温值 保存在温度传感器DS18B20内部E2ROM 中,掉电后仍然能保存上次设定值,性能 稳定,控制准确。关键词:自动控制 单片机 温控 风扇1 引言生活中,我们经常会使用一些与温度有关的设备。比如,现在

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

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

4、现风扇的温度控制,需要有较高的温度变化分辨率和稳定可靠的换档停机控制部件。21 温度传感器的选用温度传感器可由以下几种方案可供选择:方案一:选用热敏电阻作为感测温度的核心元件,通过运算放大器放大由于温度变化引起热敏电阻电阻的变化、进而导至的输出电压变化的微弱电压变化信号,再用 AD 转换芯片 ADC0809 将模拟信号转化为数字信号输入单片机处理。方案二:采用热电偶作为感测温度的核心元件,配合桥式电路,运算放大电路和 AD 转换电路,将温度变化信号送入单片机处理。方案三:采用数字式集成温度传感器 DS18B20 作为感测温度的核心元件,直接输出数字温度信号供单片机处理。对于方案一,采用热敏电阻

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

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

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

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

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

10、AD0832 产生模拟信号控制晶闸管的导通角,从而配合无级调速电路实现温控时的自动无级风力调节。方案二:采用继电器,继电器的接有控制晶闸管导通角的电阻的接入电路与否由单片机控制,根据当前温度值在相应管脚送出高/低电平,决定某个继电器的导通角控制电阻是否接入电路。 (详见 4.2.4)对于方案一,该方案能够实现在风扇处于温控状态时也能无级调速,但是D/A 转换芯片价格较高,与其温控状态下无级调速功能相比性价比不高。对于方案二,虽然在温控状态下只能实现弱/大风两级调速,但采用继电器价格便宜,控制可靠,且出于在温控状态时无级调速并不是特别需要的功能,综合考虑采用方案二。3 系统简述4本系统由集成温度

11、传感器、单片机、LED 数码管、继电器、双向晶闸管、蜂鸣器及一些其他外围器件组成。使用具有价廉易购的 AT89S52 单片机编程控制,通过修改程序可方便实现系统升级。系统的框图结构如下:温度传感器DS18B20单片机AT89S52数码管显示无级调速器 被控对象(风扇)人工控制图 1 系统框图4 硬件设计系统主要部件包括DS18B20温度传感器、AT89S52单片机、双向晶闸管、五位LED数码管和风扇。辅助元件包括继电器、蜂鸣器、电阻、晶振、电源、按键和拨码开关等。41、本系统各器件简介4、DS18B20 单线数字温度传感器简介DS18B20 单线数字温度传感器是Dallas 半导体公司开发的世

12、界上第一片支持“一线总线”接口的温度传感器。它具有3 引脚TO92 小体积封装形式。温度测量范围为-55+125,可编程为9 位12 位A/D 转换精度,测温分辨率可达0.0625。被测温度用符号扩展的16 位数字量方式串行输出。工作电压支持3V5.5V 的电压范围,既可在远端引入,也可采用寄生电源方式产生。DS18B20 还支持“一线总线”接口,多个DS18B20可以并联到3 根或2 根线上,CPU 只需一根端口线就能与诸多DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。它还有存储用户定义报警温度等功能。DS18B20 内部结构及管脚DS18B20 内部结构如图所示

13、,主要由4 部分组成:64 位ROM、温度传感器、非挥发的温度报警触发器TH 和TL、配置寄存器。其管脚排列如图所示,DQ 为数字信号端,GND 为电源地,VDD 为电源输入端。5图1 DS18B20 内部结构图2 DS18B20外形及管脚412 AT89C52 单片机简介AT89C52 是一种带4K字节闪存可编程可擦除只读存储器(FPEROM)256B片内RAM的低电压,高性能CMOS8 位微处理器。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51 指令集和输出管脚相兼容。由于将多功能8 位CPU 和闪烁存储器组合在单个芯片中,ATMEL 的AT89C52 是一

14、种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C52 单片机管脚AT89C52单片机管脚如图3所示。6图3 AT89C52单片机管脚各管脚功能:VCC:供电电压。GND:接地。P0 口:P0 口为一个8 位漏级开路双向I/O 口,每脚可吸收8TTL 门电流。当P1 口的管脚第一次写1 时,被定义为高阻输入。P0 能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH 编程时,P0 口作为原码输入口,当FIASH 进行校验时,P0输出原码,此时P0 外部必须被拉高。P1 口:P1 口是一个内部提供上拉电阻的8 位双向I/O 口,P1 口缓冲器能接

15、收输出4TTL门电流。P1 口管脚写入1 后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1 口作为第八位地接收。P2 口:P2 口为一个内部上拉电阻的8 位双向I/O 口,P2 口缓冲器可接收,输出4 个TTL 门电流,当P2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2 口当用于外部程序存储器或16 位地址外部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存

16、储器进行读写时,P2 口输出其特殊功能寄存器的内容。P2 口在FLASH 编程和校验时接收高八位地址信号和控制信号。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外

17、部输入);P3.6:/WR(外部数据存储器写选通);P3.7:/RD(外部数据存储器读选通)。P3 口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用7作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE 脉冲。如想禁止ALE 的输出可在SFR8EH 地址上置0。此

18、时,ALE 只有在执行MOVX,MOVC 指令是ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。但在访问外部数据存储器时,这两次有效的/PSEN 信号将不出现。/EA/VPP:当/EA 保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1 时,/EA 将内部锁定为RESET;当/EA 端保持高电平时,此间内部程序存储器。在FLASH 编程期间,此引脚也用于施加12V 编程电源(VPP)。XTAL1:

19、反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。41.3 八段LED 数码管本系统使用五个七段LED数码管作为温度显示,公共阳极。42 各部分电路设计421 电源电路电源电路采用LM7805集成稳压器作为稳压器件,用典型接法,220V电源整流滤波后送入LM7805稳压,在输出端接一个470U和0.1U电容进一步滤除纹波,得到5V稳压电源。电路如图4所示。图4 电源422 数码管显示电路显示部分包括如下图 5: 5 个八段(共阳)数码管、PNP 型三极管、电阻等。其连接方式如下:应用单片机 P0 口连接八段数码管,用 P2 口的 P2.3P2.7五个端口作为数码管

20、的片选信号输出端口,其中要用 8550(PNP 型)三极管做驱动。又因为 P0 口做 I/O 口时要加上拉电阻,所以我们给 P0 各位各加一个 10K的电阻到电源。为了防止烧坏数码管,所以给数码管各段各加一个 300 欧姆的限流电阻。要显示的数据通过 P0 口送给数码管显示,通过 P2 口的 P2.7P2.3五个端口分别对数码管进行位选,事实上数码管是间断被点亮的,只是其间断时间十分短,扫描周期在 20ms 以下,利用人眼视觉暂留,我们基本看不出它们的闪烁。8图 5 显示电路423 声响、温度采集、温度设定以及复位电路电路如图 6 所示,这一部分主要是由 DS18B20,四个按键、一个电容一个

21、三极管和一个蜂鸣器等构成。声响电路在每按下按键时会响一声,当没有把 DS18B20 接入到电路中时,单片机就会通过蜂鸣器发出报警声音。温度采集电路主要是由 DS18B20 构成,它可以把采集的温度数据转化成二进制数,经过单片机处理后输出送数码管显示。温度设定主要是通过按键 S1、S2|、S3 来设定的。按键 S1、S2、S3 分别接入单片机的P1.4、P1.5、P1.6 脚。S3 是设定键。用于对风速调节的上限和下限值 TH、TL 的设置。当按下 S1 时,可以加 1,长按可以快速加 1,当按下 S2 时,可以减 1, 长按可以快速减 1。9图 6 声响、温度采集、温度设置及复位电路424 温

22、控自动电路该电路为控制风速的人工控制与温控两种方式之温控模式时的控制电路,当选择为温控时,单片机默认为弱风,当当前温度低于所设的温度下限 TL 时继电器 1 吸合,关闭风扇,当当前温度高于所设的温度上限时继电器 2 吸合,切换到强风档。电路如图 7。图 7 温控自动电路425无级调速电路此电路如图 8 所示,包括:双向可控硅,双触发二极管、滑动变阻器、电容。该电路为无级调速电路,通过调节滑动变阻器的阻值来改变通过双向二极管的电流,控制双向晶闸管的导通角,从而控制电机的转速。可实现由最大风速到关闭的无级别调速,可将风力调节在关闭无风到最大风之间的任意风力,实现“自由风” 。图8 无级调速电路10

23、本系统的总电原理图为:11图9 总电原理图5 软件设计程序实现的功能是上电复位时检测温度传感器DS18B20是否存在或它工作是否正常,当不存在或工作不正常时从蜂鸣器发出报警声,提示用户检查DS18B20,安装或者更换。这部分功能由DS18B20复位与检测子程序RESET完成。当检测到传感器工作正常后,发出温度转换命令及读取温度值命令,将从DS18B20读取的二进制温度值转换为七段码在LED上显示出来。显示功能由温度显示子程序DISP1子程序实现。在温控自动状态,本系统可由用户根据需要自由设置大小风档的切换温度值TH,TL,硬件设计上为通过3个按键,由按键扫描子程序KEYSCAN子程序提供软件支

24、持。按下一次设置键K3,进入低温关风扇温度值TL设置状态,此时按下“加”键K1,TL值加一,长按K1不放可实现快速加1,按下“减”键K2,TL值减1,长按K2不放可实现快速减1。再按一次设置键K3,进入高温切换大风档温度值TH设置状态,此时按下“加”键K1,TH值加一,长按K1不放可实现快速加1,按下“减”键K2,TH值减1,长按K2不放可实现快速减1。下限动作温度值TL和上限动作温度值的设置范围为0-120摄氏度,满足一般使用要求。再按一次设置键K3退出上下限温度设置状态,恢复到当前温度显示状态。在当前温度显示状态,按下“加”键K1一次显示当前TL设定值,再按一下显示当前TH设定值,如此循环

25、,按设置键K3退回到当前温度显示状态。每次设定的TL、TH值均拷备到DS18B20的EEROM内,在单片机掉电后设定值不会丢失,在再次上电时从DS18B20的EEROM中读回上次设定的上下限动作温度值TH、TL,用户要实现根据当前温度实时的控制风扇的状态,需要在程序中不时的判断当前温度值是否超过设定的动作温度值范围,此部分功能由比较控制子程序TEMP_COMP来完成。由于单片机的工作频率高达12MHz,在执行程序时不断将当前温度和设定动作温度进行比较判断,当超过设定温度值范围时及时的转去执行超温处理和欠温处理子程序,控制继电器的吸合、断开状态,从而控制风扇实时的切换到关闭、弱风、大风三个状态。

26、在没有超过设定的TL、TH值时默认将风扇置为弱风档。该比较控制程序又由温度比较程序、超温处理子程序和欠温处理子程序构成。显示驱动程序以查七段码取得各数码管应显数字,逐位扫描显示。主程序和个主要子程序的流程图如附录1所示。6 安装调试将本电路用硬件做出来,用编程器将KEIL软件对源程序编译生成的.HEX文件烧入AT89C52单片机,将单片机插入到目标板中,连好线。将“控制模式”开关选择在“温控”,打开电源,风扇工作在弱风档,数码管正常显示当前的温度21.6摄氏度,第五位数码管闪烁显示“O”,表示当前温度在TL和TH值之间,没有欠温或超温。按“设置”键及“加”“减”键将下限动作温度值TL设为20摄

27、氏度,将上限动作温度值TH设为23摄氏度,用书对着DS18B20扇动,显示温度逐渐降低,当达到19.9摄氏度时继电器1动作,将风扇关闭,第五位数码管闪烁显示“L”,表示当前温度低于TL值。然后用手握着12DS18B20,显示温度逐步上升,当达到23.1摄氏度时继电器2动作,将风扇切换到大风档,第五位数码管闪烁显示“H”,表示当前温度高于TH值。将“控制模式”开关选择在“人控”,这时数码管依然按照上述规律显示,但是不能对风扇进行控制。用手旋动无级调速旋钮,可以将风扇从关闭一直连续调到最大风速,具有无级调节风扇风力的功能。测试结果表明,本系统实现了预期功能。参考文献1 胡汉才.单片机原理及其接口技

28、术.北京:清华大学出版社,20042 吴金戍,沈庆阳,郭庭吉.8051单片机实践与应用.北京: 清华大学出版社,20023 求是科技.单片机典型模块设计实例导航.北京:人民邮电出版社,20044 王化详,张淑英.传感器原理.天津:天津大学出版社,20025 荣俊昌.新型电风扇原理与维修.北京:高等教育出版社,20046 王港元.电工电子实践指导.江西:江西科学技术出版社,200513附录1 程序流程图主程序流程图开始初始化蜂鸣报警检测 DS18B20正常?温度转换命令读温度温度 BCD 码处理显示温度按键扫描及处理与设定温度对比及处理NY图11 主程序流程图按键扫描子程序流程图14入口K1 按

29、下 ?蜂鸣器响一声设定的 TL 值转换成各 LED 的显示数字K1 按下 ?蜂鸣器响一声显示 TL 值设定的 TH 值转换成各 LED 的显示数字显示 TH 值K1 按下 ?K2 按下 ?蜂鸣器响一声YNYNYNN15蜂鸣器响一声K3 按下 ?蜂鸣器响一声设定 TH,TL将设定 TH,TL值写入 1820的暂存器将 1820 暂存器值写入EEROM返回YN图 12 按键扫描子程序流程图设置上下限动作温度值 TH,TL 子程序流程图16显示,闪烁入口K1 按下? =121?K3 按下?设置的 TL 加1设置的 TL=0显示 TLK2 按下? 设置的 TL 减1设置的TL=0?设置的 TL=119

30、显示 TL蜂鸣一声 K3 松开?K1 按下? =121?设置的 TH 加1设置的 TH=0显示 THK2 按下? 设置的 TH 减1设置的TH=0?设置的 TL=119显 示 THK3 按下? 蜂鸣一声 返回$YNYNYNNNYNYYNNYN闪烁显示YNNYYNK3 按下?Y17图 13 设置上下限动作温度值 TH,TL 子程序流程图实时温度值与设定 TH,TL 值比较及超、欠温处理子程序流程图入口TH当 前 温 度 ? TH当 前 温 度 ?C1=0,C2=0200ms 定 时 时 间 到 ?第 五 位 LED 灭 ,其 它 四 位 显 示当 前 温 度第 五 位 LED显 示 H, 其它

31、四 位 显 示当 前 温 度C1=0,C2=0200ms 定 时 时 间 到 ?第 五 位 LED 灭 ,其 它 四 位 显 示当 前 温 度第 五 位 LED显 示 H, 其它 四 位 显 示当 前 温 度C1=1,C2=1返回YYYYN NN图 14 实时温度值与设定 TH,TL 值比较及超、欠温处理子程序流程图温度显示子程序流程图18取扫描字入口扫 描 字 P2 输 出取显示数据查段码表从 P0 口输出小数点处理延时指向下一位ACC.3=0?P0,P2 复位返回NY图 15 温度显示子程序流程图DS18B20 复位与检测子程序19600us 复 位 低 脉 冲入口拉 高 总 线总线=0?

32、60us 到?总线=0?存 在 标 志 位 置 1延 时总线拉高存 在 标 志 位 置 0返回NYNYYN图 16 DS18B20 复位与检测子程序20附录 2 源程序;*;精准温度显示温控自动风扇系统 *;*说明: ;* 1、K3 进入设定低温动作温度值 TL 状态:;* 2、K3 进入设定高温动作温度值 TH 状态:;* 3、K3 返回 ;* 4、设定过程: K1 加键 (UP) , K2 减键 (DOWN) ,可快速调; 5、实际温度在 TL 和 TH 之间时,开启弱风档,低于 TL 时,关闭风扇;;高于 TH 时,开启大风档。每次设置的 TH 和 TL 均被保存在 DS18B20 的

33、ROM;内,掉不需重新设置. *;*TIMER_L DATA 23HTIMER_H DATA 24HTIMER_COUN DATA 25HTEMPL DATA 26HTEMPH DATA 27HTEMP_TH DATA 28HTEMP_TL DATA 29HTEMPHC DATA 2AHTEMPLC DATA 2BHTEMP_ZH DATA 2CHBEEP EQU P3.7DATA_LINE EQU P3.3C1 EQU P3.4 ;C1 控制口,接继电器 1C2 EQU P3.5 ;C2 控制口,接继电器 2FLAG1 EQU 20H.0FLAG2 EQU 20H.1;-K1 EQU P1.

34、4K2 EQU P1.5K3 EQU P1.6;=ORG 0000HJMP MAINORG 000BHAJMP INT_T021;-MAIN: MOV SP,#30HMOV TMOD,#01H ;T0,方式 1MOV TIMER_L,#00H ;50ms 定时值MOV TIMER_H,#4CHMOV TIMER_COUN,#00H ;中断计数MOV IE,#82H ;EA=1,ET0=1LCALL READ_E2MOV 20H,#00HSETB BEEPSETB C1 setb C2 MOV 7FH,#0AH ;熄灭符CALL RESET ;复位与检测 DS18B20JNB FLAG1,MAI

35、N1 ;FLAG1=0,DS18B20 不存在JMP STARTMAIN1: CALL RESETJB FLAG1,STARTLCALL BEEP_BL ;DS18B20 错误,报警JMP MAIN1START:MOV A,#0CCH ; 跳过 ROM 匹配CALL WRITEMOV A,#044H ; 发出温度转换命令CALL WRITECALL RESETMOV A,#0CCH ; 跳过 ROM 匹配CALL WRITEMOV A,#0BEH ; 发出读温度命令CALL WRITECALL READ ;读温度数据CALL CONVTEMPCALL DISPBCDCALL DISP1CALL

36、 SCANKEYLCALL TEMP_COMPJMP MAIN1;=;DS18B20 复位与检测子程序22;FLAG1=1 OK, FLAG1=0 ERROR;=RESET:SETB DATA_LINENOPCLR DATA_LINEMOV R0,#64H ;主机发出延时 600 微秒的复位低脉冲MOV R1,#03HRESET1: DJNZ R0,$MOV R0,#64HDJNZ R1,RESET1SETB DATA_LINE ;然后拉高数据线NOPMOV R0,#25HRESET2: JNB DATA_LINE,RESET3 ;等待 DS18B20 回应DJNZ R0,RESET2JMP

37、RESET4 ; 延时RESET3: SETB FLAG1 ; 置标志位,表示 DS1820 存在JMP RESET5RESET4: CLR FLAG1 ; 清标志位,表示 DS1820 不存在JMP RESET6RESET5: MOV R0,#064HDJNZ R0,$ ; 时序要求延时一段时间RESET6: SETB DATA_LINERET;=;=WRITE: MOV R2,#8 ;一共 8 位数据CLR CYWR1:CLR DATA_LINE ;开始写入 DS18B20 总线要处于复位(低)状态MOV R3,#09DJNZ R3,$ ;总线复位保持 18 微妙以上RRC A ;把一个字

38、节 DATA 分成 8 个 BIT 环移给CMOV DATA_LINE,C ;写入一个 BITMOV R3,#23DJNZ R3,$ ;等待 46 微妙SETB DATA_LINE ;重新释放总线NOPDJNZ R2,WR1 ;写入下一个 BITSETB DATA_LINE23RET;=;从 DS18B20 中读出温度低位、高位和动作温度设定值 TH、TL;存入 26H、27H、28H、29H;=READ: MOV R4,#4 ; 将温度高位和低位从 DS18B20 中读出MOV R1,#26H ; 存入 26H、27H、28H、29HRE00: MOV R2,#8RE01: CLR CSET

39、B DATA_LINENOPNOPCLR DATA_LINE ;读前总线保持为低NOPNOPNOPSETB DATA_LINE ;开始读总线释放MOV R3,#09 ;延时 18 微妙DJNZ R3,$MOV C,DATA_LINE ;从 DS18B20 总线读得一个 BITMOV R3,#23DJNZ R3,$ ;等待 46 微妙RRC A ;把读得的位值环移给 ADJNZ R2,RE01 ;读下一个 BITMOV R1,AINC R1DJNZ R4,RE00RET ;-;200ms 对闪动标记取反一次;-INT_T0:PUSH ACCPUSH PSWMOV TL0,TIMER_LMOV T

40、H0,TIMER_HINC TIMER_COUNMOV A,TIMER_COUNCJNE A,#04H,INT_ENDMOV TIMER_COUN,#00HCPL FLAG2INT_END:POP PSWPOP ACC24RETI;=;重新对 DS18B20 初始化;将设定的动作温度设定值写入 DS18B20;=RE_18B20:JB FLAG1,RE_18B20ARETRE_18B20A:CALL RESETMOV A,#0CCH ;跳过 ROM 匹配LCALL WRITEMOV A,#4EH ;写暂存寄存器LCALL WRITEMOV A,TEMP_TH ;TH(动作上限温度)LCALL

41、WRITEMOV A,TEMP_TL ;TL(动作下限温度)LCALL WRITEMOV A,#7FH ;12 位精确度LCALL WRITERET;=;功能键扫描子程序;=SCANKEY:MOV P1,#0F0HJB K1,SCAN_K2CALL BEEP_BLSCAN_K1: CALL ALERT_TLCALL ALERT_PLAYJB K1,SCAN_K1CALL BEEP_BLSCAN_K11: CALL ALERT_THCALL ALERT_PLAYJB K1,SCAN_K11CALL BEEP_BLSCAN_K2: JB K2,SCAN_K3CALL BEEP_BLSCAN_K3:

42、 JB K3,SCAN_ENDCALL BEEP_BLLCALL RESET_ALERTLCALL RE_18B20LCALL WRITE_E225SCAN_END: RET;=;设置动作温度值 TL,TH;=RESET_ALERT:CALL ALERT_TLCALL ALERT_PLAYJNB K3,$ ;K3 为位移键SETB TR0RESET_TL:CALL ALERT_PLAYJNB FLAG2,R_TL01mov 75H,7fh ;送入熄灭符mov 76H,7fhCALL ALERT_PLAYJMP R_TL02R_TL01: CALL ALERT_TLmov 75h,7Eh ;送设

43、定值mov 76h,7DhCALL ALERT_PLAY ;显示设定值R_TL02: JNB K1,K011AJNB K2,K011BJNB K3,RESET_THJMP RESET_TLK011A:INC TEMP_TLMOV A,TEMP_TLCJNE A,#120,K012A ;没有到设定上限值,转MOV TEMP_TL,#0K012A: CALL TL_DELJMP RESET_TLK011B:MOV A,TEMP_TLCJNE A,#00H,K ;没有到设定下限值,转MOV TEMP_TL,#120K: DEC TEMP_TLK012B: CALL TL_DELJMP RESET_T

44、L;-RESET_TH:CALL BEEP_BL26JNB K3,$RESET_TH1:CALL ALERT_PLAYJNB FLAG2,R_TH01mov 75H,7fh ;送入熄灭符mov 76H,7fhCALL ALERT_PLAYJMP R_TH02R_TH01: CALL ALERT_THmov 75h,7Eh ;mov 76h,7DhCALL ALERT_PLAYR_TH02: JNB K1,K021AJNB K2,K021BJNB K3,K002JMP RESET_TH1K021A:INC TEMP_THMOV A,TEMP_THCJNE A,#120,K022A ;没有到设定上限值,转MOV TEMP_TH,#0K022A: CALL TH_DELJMP RESET_TH1K021B:MOV A,TEMP_THCJNE A,#00H,K023B ;没有到设定下限值,转MOV TEMP_TH,#120K023B: DEC TEMP_THK022B: CALL TH_DELJMP RESET_TH

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报