毕业设计(论文)基于AT89S52单片机的智能温度系统的设计与制作_第1页
毕业设计(论文)基于AT89S52单片机的智能温度系统的设计与制作_第2页
毕业设计(论文)基于AT89S52单片机的智能温度系统的设计与制作_第3页
毕业设计(论文)基于AT89S52单片机的智能温度系统的设计与制作_第4页
毕业设计(论文)基于AT89S52单片机的智能温度系统的设计与制作_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、北北 京京 电电 子子 科科 技技 职职 业业 学学 院院 beijingbeijing electronicelectronic sciencescience andand technologytechnology vocationalvocational collegecollege 毕 业 设 计 设计题目智能温度系统的设计与制作 系 部 电子工程系 专 业 应用电子技术 班 级 08 应用电子技术 姓 名 指导教师 2011 年 4 月 基于单片机温度控制电路的设计与制作基于单片机温度控制电路的设计与制作 摘 要:单片机在检测和控制系统中得到广泛的应用, 温度则是系统常需要测 量、控制

2、和保持的一个量。本设计以 at89s52 单片机为控制核心,由实时时钟 芯片 ds1302 和数字温度传感器 ds18b20 构成了一个高温和低温时,分别对相应 的器件进行控制的系统。详细地介绍了整个系统的硬件组成结构、工作原理和 系统的软件程序设计,重点阐述了时钟模块、显示模块、温度检测模块及相关 控制模块等的模块化设计思路与制作。系统采用液晶 lcd1602 作为显示器,具 有实时时间显示、环境温度显示,显示系统连续工作前 24 小时整点的温度值。 关键词:at89s52 单片机;ds1302;ds18b20;lcd1602;ad;智能温控; abstract:microcomputer

3、in the detection and control system has been widely used in the temperature is system, usually need to be measurement, control and maintain a quantity. this design with at89s52 microcontroller as control core, by real time clock chip ds1302 and digital temperature sensor ds18b20 constitute a high te

4、mperature and low temperature respectively on the corresponding device to control system. introduced the whole systems hardware structure, working principle and system software program design in detail, expounds the clock module, display module, temperature detecting module and related control modul

5、e of modularization design and production. system adopts lcd monitor, lcd1602 as with real-time time display, environmental temperature display, display the system worked 24 hours before the temperature on the hour value. key words: at89s52single-chip; ds1302;ds18b20; lcd1602;ad;intelligent temperat

6、ure controller ; 目录目录 第一章 单片机介绍 . 1.1 单片机. 1.2 单片机的特点. 1.3 单片机的分类. 1.4 单片机的发展. 第二章 设计方案 . 2.1 硬件设计方案. 2.2 软件设计方案 . 第三章 系统硬件设计 . 3.1 总体电路框图. 3.2 单元电路设计. 3.2.1 单片机模块. 3.2.2 时钟模块. 3.2.3 温度采集模块. 3.2.4 液晶显示模块. 3.2.5 电源电路 . 第四章 系统软件设计 . 4.1 总体软件设计图. 4.2 时钟驱动程序:. 4.3 温度数据采集:. 4.4 液晶驱动程序:. 第五章 综合调试 . 第六章 总结

7、 . 附录 . 第一章单片机介绍第一章单片机介绍 1.1 单片机 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理 能力的中央处理器 cpu 随机存储器 ram、只读存储器 rom、多种 i/o 口和中断系 统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多 路转换器、a/d 转换器等电路)集成到一块硅片上构成的一个小而完善的计算 机系统。 1.2 单片机的特点 1、芯片虽小,五脏俱全,是单片机主要特点之一。其内部设有程序存储器、数 据存储器、各种接口电路。而大型的处理器运算速度较高,运算器位数较 多,处理能力较强,但需要在外部配置接口电路。 2、单片机

8、主频一般在100mhz 以下,适合用于独立工作的小型产品之中,引脚 数量从几个到百余个。 3、应用简单、灵活,可用汇编语言及 c 语言开发单片机产品。 1.3 单片机的分类 1. 按应用领域可分为:家电类,工控类,通信类,个人信息终端类等等; 2. 按通用性可分为:通用型和专用型。 通用型单片机的主要特点是:内部资源比较丰富,性能全面,而且通用 性强,可履盖多种应用要求。所谓资源丰富就是指功能强。性能全面通用 性强就是指可以应用在非常广泛的领域。通用型单片机的用途很广泛,使 用不同的接口电路及编制不同的应用程序就可完成不同的功能。小到家用 电器仪器仪表,大到机器设备和整套生产线都可用单片机来实

9、现自动化控 制。 专用型单片机的主要特点是:针对某一种产品或某一种控制应用而专门 设计的,设计时已使结构最简,软硬件应用最优,可靠性及应用成本最佳。 专用型单片机用途比较专一,出厂时程序已经一次性固化好,不能再修该 的单片机。例如电子表里的单片机就是其中的一种。其生产成本很低。 3.按总线结构可分为总线型和非总线型。如我们常常见到的89c51单片机就 是总线结构。89c51单片机内部有数据总线,地址总线,还有控制总线 (wr,rd,ea,ale 等)。 1.4 单片机的发展与前景 现在可以说单片机是百花齐放,百家争鸣的时期,世界上各大芯片制 造公司都推出了自己的单片机,从 8 位、16 位到

10、32 位,数不胜数,应有 尽有,有与主流 c51 系列兼容的,也有不兼容的,但它们各具特色,互成 互补,为单片机的应用提供广阔的天地。 纵观单片机的发展过程,可以预示单片机的发展趋势,大致有: 1.低功耗 cmos 化 mcs-51 系列的 8031 推出时的功耗达 630mw,而现在的单片机普遍都在 100mw 左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本 都采用了 cmos(互补金属氧化物半导体工艺)。象 80c51 就采用了 hmos(即高密 度金属氧化物半导体工艺)和 chmos(互补高密度金属氧化物半导体工艺)。cmos 虽然功耗较低,但由于其物理特征决定其工作速度

11、不够高,而 chmos 则具备了 高速和低功耗的特点,这些特征,更适合于在要求低功耗象电池供电的应用场 合。所以这种工艺将是今后一段时期单片机发展的主要途径 2.微型单片化 现在常规的单片机普遍都是将中央处理器(cpu)、随机存取数据存储 (ram)、只读程序存储器(rom)、并行和串行通信接口,中断系统、定时电路、 时钟电路集成在一块单一的芯片上,增强型的单片机集成了如 a/d 转换器、 pmw(脉宽调制电路)、wdt(看门狗)、有些单片机将 lcd(液晶)驱动电路都集成 在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单 片机厂商还可以根据用户的要求量身定做,制造出具有自

12、己特色的单片机芯片。 此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功 耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中 smd(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。 3.主流与多品种共存 现在虽然单片机的品种繁多,各具特色,但仍以 80c51 为核心的单片 机占主流,兼容其结构和指令系统的有 philips 公司的产品,atmel 公司的产 品和中国台湾的 winbond 系列单片机。所以 c8051 为核心的单片机占据了半壁 江山。而 microchip 公司的 pic 精简指令集(risc)也有着强劲的发展势头,中 国台

13、湾的 holtek 公司近年的单片机产量与日俱增,与其低价质优的优势,占据 一定的市场分额。此外还有 motorola 公司的产品,日本几大公司的专用单片机。 在一定的时期内,这种情形将得以延续,将不存在某个单片机一统天下的垄断 局面,走的是依存互补,相辅相成、共同发展的道路。 单片机的发展趋势 目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着 cmos 化、 低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。 下面是单片机的主要发展趋势。 cmos 化 近年,由于 chmos 技术的进小,大大地促进了单片机的 cmos 化。cmos 芯片除了低功耗特性之外,还具

14、有功耗的可控性,使单片机可以工作在功耗精 细管理状态。这也是今后以 80c51 取代 8051 为标准 mcu 芯片的原因。因为单片 机芯片多数是采用 cmos(金属栅氧化物)半导体工艺生产。cmos 电路的特点是 低功耗、高密度、低速度、低价格。采用双极型半导体工艺的 ttl 电路速度快, 但功耗和芯片面积较大。随着技术和工艺水平的提高,又出现了 hmos(高密度、 高速度 mos)和 chmos 工艺。chmos 和 hmos 工艺的结合。目前生产的 chmos 电 路已达到 lsttl 的速度,传输延迟时间小于 2ns,它的综合优势已在于 ttl 电 路。因而,在单片机领域 cmos 正

15、在逐渐取代 ttl 电路。 低功耗化 单片机的功耗已从 ma 级,甚至 1ua 以下;使用电压在 36v 之间,完 全适应电池工作。低功耗化的效应不仅是功耗低,而且带来了产品的高可靠性、 高抗干扰能力以及产品的便携化。 低电压化 几乎所有的单片机都有 wait、stop 等省电运行方式。允许使用的电 压范围越来越宽,一般在 36v 范围内工作。低电压供电的单片机电源下限已可 达 12v。目前 0.8v 供电的单片机已经问世。 低噪声与高可靠性 为提高单片机的抗电磁干扰能力,使产品能适应恶劣的工作 环境,满足电磁兼容性方面更高标准的要求,各单片厂家在单片机内部电路中 都采用了新的技术措施。 大容

16、量化 以往单片机内的 rom 为 1kb4kb,ram 为 64128b。但在需要复杂控 制的场合,该存储容量是不够的,必须进行外接扩充。为了适应这种领域的要 求,须运用新的工艺,使片内存储器大容量化。目前,单片机内 rom 最大可达 64kb,ram 最大为 2kb。 高性能化 主要是指进一步改进 cpu 的性能,加快指令运算的速度和提高系统控 制的可靠性。采用精简指令集(risc)结构和流水线技术,可以大幅度提高运 行速度。现指令速度最高者已达 100mips(million instruction per seconds,即兆指令每秒) ,并加强了位处理功能、中断和定时控制功能。这类 单

17、片机的运算速度比标准的单片机高出 10 倍以上。由于这类单片机有极高的指 令速度,就可以用软件模拟其 i/o 功能,由此引入了虚拟外设的新概念。 小容量、低价格化 与上述相反,以 4 位、8 位机为中心的小容量、低价格化也 是发展动向之一。这类单片机的用途是把以往用数字逻辑集成电路组成的控制 电路单片化,可广泛用于家电产品。 外围电路内装化 这也是单片机发展的主要方向。随着集成度的不断提高,有可 能把众多的各种处围功能器件集成在片内。除了一般必须具有的 cpu、rom、ram、定时器/计数器等以外,片内集成的部件还有模/数转换器、 dma 控制器、声音发生器、监视定时器、液晶显示驱动器、彩色电

18、视机和录像 机用的锁相电路等。 串行扩展技术 在很长一段时间里,通用型单片机通过三总线结构扩展外围器件 成为单片机应用的主流结构。随着低价位 otp(one time programble)及各种 类型片内程序存储器的发展,加之处围接口不断进入片内,推动了单片机“单 片”应用结构的发展。特别是 i c、spi 等串行总线的引入,可以使单片机的引脚设计得更少,单片机系统结 构更加简化及规范化。 第第 2 2 章章. .设计方案设计方案 系统硬件设计 单片机应用系统的硬件电路设计就是为本单片机温控系统选择合适的、最优的 系统配置,即按照系统功能要求配置外围设备,如键盘、显示器、打印机、a/d 转换

19、器、设计合适的接口电路等。系统设计应本着以下原则: (1) 尽可能选择典型电路,并符合单片机常规用法。本设计采用了典型的显示 电路、a/d 转化电路,为硬件系统的标准化、模块化打下良好的基础。 (2) 硬件结构应结合应用软件方案一并考虑。软件能实现的功能尽可能由软件 实现,以简化硬件结构。由软件实现的硬件功能,一般响应时间比硬件实现长, 且占用 cpu 时间。由于本设计的响应时间要求不高,所以有一些功能可以用软 件编程实现,如键盘的去抖动问题。 (3) 系统中的相关器件要尽可能做到性能匹配。系统中所有芯片都应尽可能选 择低功耗产品。 系统软件设计 软件设计采用模块化设计,采用模块化设计可以简化

20、系统软件的编写,使软件 编写思路更加简单明了。系统软件主要由三大模块组成:主程序模块、功能实 现模块和运算控制模块。主程序模块用于实现各个子程序间的跳转。功能实现 模块主要由 a/d 转换子程序、键盘处理子程序、显示子程序、继电器控制程序 等部分组成。运算控制模块涉及标度转换子程序等。 第三章第三章. .系统的硬件设计系统的硬件设计 3.1 总体电路图 本设计以 at89s52 单片机为主控核心设计的一个温度控制系统,低温 时可控制加热设备,高温时控制风扇,超出设定最高温度值时蜂鸣器发出声响 报警。硬件方框图如图 3 所示: ds18b20 温度检测模 块 ds1302 时钟模块 键盘 at8

21、9s52 单片机 lcd 显示模块 蜂鸣器 继电器 光耦可控硅 加热设备 风扇 总体硬件方框图 3.2 单元电路设计 3.21 单片机模块 at89s52 单片机资源简介 at89s52 是一种低功耗、高性能 cmos8 位微控制器,具有 8k 在系统可编程 flash 存储器。使用 atmel 公司高密度非易失性存储器技术制造,与工业 8031、80c51 产品指令和引脚完全兼容。片上 flash 允许程序存储器在系统可 编程(isp 下载) ,亦适于常规编程器。 其引 dip 封装的脚图如下: 在单芯片上,拥有灵巧的 8 位 cpu 和在系统 可编程 flash,使得 at89s52 为众

22、多嵌入式 控制应用系统提供高灵活、超有效的解决方 案。 at89s52 具有以下标准功能: 8k 字节 flash 256 字节 ram 32 位 i/o 口线 看门狗定时器 2 个数据指针 三个 16 位定时器/计数器 一个 6 向量 2 级中断结构 全双工串行口 片内晶振及时钟电路。 另外,at89s52 可降至 0hz 静态逻辑操作, 支持 2 种软件可选择节电模式。空闲模式下, cpu 停止工作,允许 ram、定时器/计数器、 串口、中断继续工作。掉电保护方式下,ram 内容被保存,振荡器被冻结,单 片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器 8k 字节 在系统可编

23、程。 at89s52 单片机时钟和复位电路 时钟电路 单片机内部有一个高增益反向放大器,输入端为芯片引脚,输出端 1 xtal 为引脚。而在芯片外部和 之间跨接晶体振荡器和微调电容, 2 xtal 1 xtal 2 xtal 从而构成一个稳定的自激振荡器。晶体震荡频率高,则系统的时钟频率也高, 单片机运行速度也就快,但反过来运行速度快对存储器的速度要求就高,对印 制电路板的工艺要求也高,所以,这里使用震荡频率为 6mhz 的石英晶体。震荡 电路产生的震荡脉冲并不直接是使用,而是经分频后再为系统所用,震荡脉冲 经过二分频后才作为系统的时钟信号。在设计电路板 时,振荡器和 电容应尽量靠近单片机,以

24、避免干扰。需要注意的是: 电路板时,振荡器和电容应尽量安装得与单片机靠近, 以减小寄生电容的存在更好的保障振荡器稳定、可靠 的工作电路图如图 2.2 所示 复位电路 单片机的复位电路分上电复位和按键复位两种 方式。 (a)上电复位: 在加电之后通过外部复位电路的电容充电 来实现的。当的上升时间不超过 1ms,就可以 cc v 实现自动上电复位,即接通电源就完成了系统的初 始化电路原理图。rst 上的电压必须保证在斯密特触发器的阀值电压以上足够 长时间,满足复位操作的要求。 (b) 按键复位: 程序运行出错或操作错误使系统处于死锁状态时,为了摆脱困境,也需按 复位键以重新启动。rst 引脚是复位

25、信号的输入端,复 位信号是高电平有效。按键复位又分按键脉冲复位(图 2.3)和按键电平复位。电平复位将复位端通过电阻与 相连,按键脉冲复位是利用 rc 分电路产生正脉冲 cc v 来达到复位的。 (c) 注意: 因为按键脉冲复位是利用 rc 微分电路产生正脉冲 来达到复位的。所以电平复位要将复位端通过电阻与 相连.如复位电路中 r、c 的值选择不当,使复位时 cc v 间过长,单片机将处于循环复位状态。故本设计采用按 键复位。 3.22 时钟模块 ds1302 的引脚排列,其中 vcc1 为后备电源,vcc2 为主电源。在主电源关 闭的情况下,也能保持时钟的连续运行。ds1302 由 vcc1

26、 或 vcc2 两者中的较大 者供电。当 vcc2 大于 vcc10.2v 时,vcc2 给 ds1302 供电。当 vcc2 小于 vcc1 时,ds1302 由 vcc1 供电。x1 和 x2 是振荡源,外接 32.768khz 晶振。rst 是复 位/片选线,通过把 rst 输入驱动置高电平来启动所有的数据传送。rst 输入有 两种功能:首先,rst 接通控制逻辑,允许地址/命令序列送入移位寄存器;其 次,rst 提供终止单字节或多字节数据的传送手段。当 rst 为高电平时,所有 的数据传送被初始化,允许对 ds1302 进行操作。如果在传送过程中 rst 置为低 电平,则会终止此次数据

27、传送,i/o 引脚变为高阻态。上电运行时,在 vcc2.0v 之前,rst 必须保持低电平。只有在 sclk 为低电平时,才能将 rst 置 为高电平。i/o 为串行数据输入输出端(双向),后面有详细说明。sclk 为时钟 输入端。 3.23温度采集模块 独特的一线接口,只需要一条口线通信 多点能力,简化了分布式温度传 感应用 无需外部元件 可用数据总线供电,电压范围为 3.0 v 至 5.5 v 无需备 用电源 测量温度范围为-55 c 至+125 。华氏相当于是-67 f 到 257 华氏度 -10 c 至+85 c 范围内精度为0.5 c 温度传感器可编程的分辨率为 912 位 温度转换

28、为 12 位数字格式最大值为 750 毫秒 用户可定义的非易失性温度报警设置 应用范围包括恒温控制,工业系统, 消费电子产品温度计,或任何热敏感系统 描述该 ds18b20 的数字温度计提供 9 至 12 位(可编程设备温度读数。信息被发 送到/从 ds18b20 通过 1 线接口,所以中央微处理器与 ds18b20 只有一个一条 口线连接。为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。 因为每一个 ds18b20 的包含一个独特的序号,多个 ds18b20s 可以同时存在于 一条总线。这使得温度传感器放置在许多不同的地方。它的用途很多,包括空 调环境控制,感测建筑物内温设备或机

29、器,并进行过程监测和控制。 ds18b20 的主要特点: 适应电压范围更宽,电压范围:3.05.5v,在寄生电源方式下可由数据线 供电; 独特的单线接口方式,ds18b20 在与微处理器连接时仅需要一条口线即可实 现微处理器与 ds18b20 的双向通讯; ds18b20 支持多点组网功能,多个 ds18b20 可以并联在唯一的三线上,实现 组网多点测温; ds18b20 在使用中不需要任何外围元件,全部传感元件及转换电路集成在形 如一只三极管的集成电路内; 温范围55125,在-10+85时精度为0.5; 可编程的分辨率为 912 位,对应的可分辨温度分别为 0.5、0.25、 0.125和

30、 0.0625,可实现高精度测温; 在 9 位分辨率时最多在 93.75ms 内把温度转换为数字,12 位分辨率时最多 在 750ms 内把温度值转换为数字,速度更快; 测量结果直接输出数字温度信号,以一线总线串行传送给 cpu,同时可传 送 crc 校验码,具有极强的抗干扰纠错能力; 负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作249-256。 对 ds18b20 的设计外部供电方式单点测温。在这种外部电源供电方式下, ds18b20 工作电源由 vdd 引脚接入,因为由 vdd 接入电源不存在电源电流不足 的问题,可以保证转换精度。不过要注意。在这种外部供电的方式下,ds

31、18b20 的 gnd 脚不能悬空,否则不能转换温度,读取的温度总是 80 oc。ds18b20 的硬 件电路连接如下图 6 所示: ds18b20 原理图 3.24led 显示模块 字符型液晶显示模块是一种专门用于显示字母、数字、版本号等的点阵 式液晶显示模块。它是由若干个 57 或 511 等点阵符位组成的,第一个点阵 字符位都可以显示一个字符。点阵字符位之间有一定点距的间隔,这样就起到 了字符间距和行距的作用。本系统采用字符型液晶显示模块 1602,我设置单片 机驱动 lcd1602 采用并行方式,rs,rw,en 分别接主控单片机的 p25,p26,p27 脚, db0db7 接到主控

32、单片机的 p0 数据接口。bla 接口通过一个+5v 电源,blk 接地。 lcd1602 的硬件连接原理图如图 7 所示: 3.25 电源电路 电源变压器 变压部分其实就是一个变压器,变压器作用是将 220v 的交流电压变换成我 们所需的电压 5v。然后再送去整流和滤波。 整流滤波电路 变压部分其实就是一个变压器,变压器作用是将 220v 的交流电压变换成我 们所需的电压 5v。然后再送去整流和滤波。 稳压电路 整流电路将交流电压变成单向脉动的直流电压;滤波电路用来滤除整流后 单向脉动电压中的交流成份,合之成为平滑的直流电压。滤波电路常见的有电 容滤波电路、电感滤波电路。一般的整流有全波整流

33、、单相半流整流、桥式整 流、及变压整流。 第四章第四章. . 系统软件设计系统软件设计 4.1 总体软件设计图 4.2 时钟驱动 ds1302 是 spi 总线驱动方式。它不仅要向寄存器写入控制字,还需要 读取相应寄存器的数据。下图图 10 是 ds1302 的控制字。 控制字的最高有效位(位 7)必须是逻辑 1,如果它为 0,则不能把数 据写入到 ds1302 中。 位 6:如果为 0,则表示存取日历时钟数据,为 1 表示存取 ram 数据; 位 5 至位 1(a4a0):指示操作单元的地址;位 0(最低有效位):如为 0,表示要进行写操作,为 1 表示进行读操作。控制字总是从最低位开始输

34、出。在控制字指令输入后的下一个 sclk 时钟的上升沿时,数据被写入 ds1302,数据输入从最低位(0 位)开始。同样,在紧跟 8 位的控制字指 令后的下一个 sclk 脉冲的下降沿,读出 ds1302 的数据,读出的数据也是 从最低位到最高位。数据读写时序如下图 11 所示: 图 11 ds1302 读写时序图 4.3 温度数据采集: 根据 ds18b20 的通讯协议,单片机控制 ds18b20 完成温度转换必须经过三个 步骤:每一次读写之前都要对 ds18b20 进行复位操作,复位成功后发送一条 rom 指令,最后发送 ram 指令,这样才能对 ds18b20 进行预定的操作,复位要 求

35、单片机将数据线下拉 50 微秒,然后释放,当 ds18b20 受到信号后等待 1660 微秒左右,然后发出 60240 微秒的存在低脉冲,主 cpu 收到此信号表 示复位成功。 图 10 控制字(即地址和命令字节) 指令约定代码功能 读 rom 33h 读 ds1820 温度传感器 rom 中的编码(即 64 位地址) 符合 rom 55h 发出此命令之后,接着发出 64 位 rom 编码,访问单总 线上与该编码相对应的 bs1820 使之作出响应,为下一 步对该 ds1820 的读写作准备。 搜索 rom ofoh 用于确定挂接在同一总线上 ds1820 的个数和识别 64 位 rom 地址

36、。为操作各器件作好准备。 跳过 rom occh 忽略 64 位 rom 地址,直接向 ds1820 发温度变换命令。 适用与单片工作。 告警搜索命 令 oech 执行后只有温度超过设定值上限或下限的片子才做出 响应。 指令约定代码功能 温度变换 44h 启动 ds1820 进行温度转换 12 位转换时最厂为 750ms(9 位为 93.75ms) 。结果存入内部 9 字节 ram 中。 读暂存器 obeh 读内部 ram 中 9 字节的内容。 写暂存器 4eh 发出向内部 ram 的 3、4 字节写上、下限温度数据命令, 紧跟该命令之后,是传送两字节的数据。 复制暂存器 48h 将 ram

37、中第 3、4 字节的内容复制到 eeprom 中 重调 eeprom ob8h 将 eeprom 中内容恢复到 ram 中的第 3、4 字节。 读供电方式 ob4h 读 ds1820 的供电模式。寄生东佃时 ds1820 发送“0” , 外界电源供电 ds1820 发送“1” 。 4.4 液晶驱动程序 lcd 使用之前须对它进行初始初始化可通过复位完成,也可在复位后完成, 初始化过程如下: (1)清屏。将显示缓冲区 ddram 的内容全部写入空格(ascii20h)。 (2)功能设置。 (3)开/关显示设置。控制显示的开关,当 d=1 时显示,d=0 时不显示。控 制光标开关,当 c=1 时光

38、标显示,c=0 时光标不显示。控制字符是否闪 烁,当 b=0 时字符闪烁,b=0 时字符不闪烁。 (4)输入方式设置。 初始化过程:(1)延时 15ms;(2)写指令 38h(不检测忙信号) ; (3)延时 5 ms;(4)写指令 38h(不检测忙信号) ;(5)延时 5ms;(6)写指令 38h(不检测忙信号) ;(7)以后每次写指令、读/写 数据操作之前均需检测忙信号;(8)写指令 38h:显 示模式设 置;(9)写指令 08h:显示关闭;(10)写指令 01h:显示清屏; (11)写指令 06h:显示光标移动设置;(12)写指令 0ch:显示开及光 标设置。 第第 5 5 章章. .综合

39、调试综合调试 硬件调试 在本温度控制电路的设计调试中遇到了很多的问题。回想这些问题只要 认真多思考都是可以避免的,以下为主要的问题: (1) 开始调试时发现时钟芯片 ds1302 发热很厉害,后来发现电路没有给它加 上拉电阻,加上上拉电阻后问题就解决了。 (2) 双向可控硅 bta12-600b 高压部分电路, 加 104 电容时,发生击穿现象,导致光 耦控制部分电路瘫痪,原因是耐压值不 够。解决的方法有两种,第一种是更换 耐压值更高的电容;由于该电容的作用 是吸收可控硅元件的残余电量,使得可 控硅能够正常导通截止,而根据使用的 负载(交流电机) ,去掉该电容后,该 电路能够正常的工作,所以第

40、二种是在电路可以运行的状况下去掉该 104 电容相连的电路。我采取的是第二种方法。 软件调试 在软件调试时也出现了一些问题,其中主要的问题有以下两个方面: (1) 程序读取温度值时,出现的现象,造成风扇温度在判断时出现错误,使 风扇经常性突快突慢变化,蜂鸣器也不断的蜂鸣报警。解决的方法是在 读取温度判断时加延时,并且多次判断,防止跳变。 (2) 调节系统参数时,液晶光标太快以致调节的时候观察困难,原因是刷新 液晶太快。解决的方法是在相应数据更该时,才开始刷新液晶内容。 第六章第六章. .总结总结 我的毕业设计课题即将将告一段落。设计实物也基本达到预期的效果,但 由于能力和时间的关系,总是觉得有

41、很多不尽人意的地方,譬如功能不全、外 观粗糙数不胜数。但我可以自豪的说,这里面的每一段代码,都有我的劳 动。当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸 福和欣慰。我相信其中的酸甜苦辣最终都会化为甜美的甘泉。 毕业设计,也许是我大学生涯交上的最后一个作业了。想借此机会感谢一 直以来给我帮助的所有老师、同学,你们的友谊是我人生的财富,是我生命中 不可或缺的一部分。我的毕业指导老师王琳娜老师,她一直都以一位长辈的风 范来容谅我的无知和冲动,给我不厌其烦的指导。在此,特向她道声谢谢。 这次做论文的经历也会使我终身受益,我感受到做论文是要真真正正用心去做 的一件事情,是真正的自己学

42、习的过程和研究的过程,没有学习就不可能有研 究的能力,没有自己的研究,就不会有所突破,那也就不叫论文了。希望这次 的经历能让我在以后学习中激励我继续进步。 附录 电路图 程序 #include #include #include #define uchar unsigned char #define uint unsigned int #define lcd_dat p0 /定义 lcd 数据口 sbit lcd_e=p27; /定义 lcd 控制口 sbit lcd_rw=p26; /定义 lcd 控制口 sbit lcd_rs=p25; /定义 lcd 控制口 sbit ds18b20_d

43、q =p15; /定义 ds18b20 通信端口 sbit led1=p12; sbit led2=p13; sbit speaker=p11; /蜂鸣器接口 sbit fan=p21;/风扇 pwm 输出控制口 bit fan_flag=0; sbit key_model=p31;/模式键 sbit key_set=p32;/设置键 sbit key_add=p35;/加键 sbit key_sub=p34;/减键 sbit key_left=p30;/左移键 sbit key_right=p33;/右移键 sbit e_sw=p10;/继电器控制 uchar sw_flag=0;/继电器自

44、动手动切换标志 uchar switch_flag=0;/继电器液晶设置切换标志 int sw_open_temperature=100;/继电器开启的温度值设置 uchar restrict_hour=0;/设定时间风扇不能转 uint temp=0; /温度缓存 uint fan_count=0;/风扇计数 bit fan_auto=0;/自动风扇自动或手动控制标志 uchar model_flag=0;/总的模式标志 uchar code num_to_char = 0123456789abcdef; /*定义数字跟 ascii 码的关系*/ uchar data lcd1602_lin

45、e1= 2010/00/00 tue ; /时间显示缓存数 组 uchar data lcd1602_line2= 00:00:00 00.0c ; /时间显示缓存数 组 uchar data lcd1602_line3= 00:00:00set time; /时间设置缓存数 组 uchar idata temp_record_line1=temperature note;/温度记录显示缓 存数组 uchar idata temp_record_line2=time 00 t:00.0c ;/温度记录显示缓 存数组 uchar xdata temp_highter_line1=sw t on/

46、off ;/继电器手动自动 切换和自动时开启电压 uchar xdata temp_highter_line2=auto t=00.0c ;/继电器手动自动 切换和自动时开启电压 uchar xdata temp_time_unable_line1=fan time unable; /显示风扇 禁止打开的时间段 uchar xdata temp_time_unable_line2=f:4 t:7 oclock; /显示风扇 禁止打开的时间段 uchar code temp_auto_switch6=auto ,manuel; /自动,手 动切换值 uchar idata temp_record

47、=01000000000000000000000000000000000000000000000000000 0000000000000000000;/保存每天对应钟点的温度值 uchar code weeks4=sun ,mon ,tue ,wed ,thu ,fri ,sat ,sun ; /星期数组 /时钟标志 uint data year=0; /时间设置标志,数据 uchar data set_time=0,time_flag=0,day_flag=0,hour=0,minute=0,second=0,day=0,mont h=0,week=0;/时间设置标志,数据 uint spe

48、aker_count=0; /喇叭蜂鸣计数 uchar record_hour,record_minute,record_second,record_hour_count=0; / 温度记录的时间设置 /小延时程序 void delay(uint x) while(x-); /*1ms 为单位的延时程序*/ void delay_1ms(uint x) uchar j; while(x-) for(j=0;j0;i-) ds18b20_dq = 0; / 给脉冲信号 dat=1; ds18b20_dq = 1; / 给脉冲信号 if(ds18b20_dq) dat|=0 x80; delay(

49、4); return(dat); /写一个字节 void writeonechar(uchar dat) uchar i=0; for (i=8; i0; i-) ds18b20_dq = 0; ds18b20_dq= dat delay(5); ds18b20_dq = 1; dat=1; /读取温度 readtemperature(void) uchar a=0; uchar b=0; uint t=0; float tt=0; init_ds18b20(); writeonechar(0 xcc); / 跳过读序号列号的操作 writeonechar(0 x44); / 启动温度转换 i

50、nit_ds18b20(); writeonechar(0 xcc); /跳过读序号列号的操作 writeonechar(0 xbe); /读取温度寄存器等(共可读 9 个寄存器) 前两个 就是温度 a=readonechar(); b=readonechar(); t=b; t=8; t=t|a; tt=t*0.0625; /将温度的高位与低位合并 t= tt*10+0.5; /对结果进行 4 舍 5 入 return(t); /以上是 ds18b20 驱动程序/ /以下是温度高时处理程序 void temp_hight(void) if(fan_auto=0) /自动 led1=1; /亮

51、灯说明是自动控制 if(temp230 temp=readtemperature(); /防止跳变干扰,再读一次温 度 delay_1ms(5000); /防止跳变干扰,再读一次温度 if(temp400)tr1=1; /防止跳变干扰,再读一次温度 if(fan_flag=1) /这部分作为 pwm 控制程序 /这部分作为 pwm 控制程序 fan=1; /这部分作为 pwm 控制程序 delay_1ms(fan_count);/控制风扇关闭的时间,以达到控制风扇转速的 目的 fan=0; /这部分作为 pwm 控制程序 if(fan_auto=1)/手动 led1=0; /灭灯说明是手动控制

52、 fan=0; /表示风扇一直开着 /以上是温度高时处理程序 /以下是温度低时处理程序 void temp_low(void) if(sw_flag=0)/自动的时候继电器根据温度值判断开启 led2=1; /亮灯说明是自动控制 if(temp=4/允许标志,0 表示不允许 else fan_flag=1;fan=1; /t1 用于蜂鸣警报 void t1_set(void) tmod=0x11; th1=(65536-1000)/256; tl1=(65536-1000)%256; ea=1; et1=1; / tr1=0; return; /t1 中断,用于蜂鸣警报 void t1_()i

53、nterrupt 3 uchar i; th1=(65536-1000)/256; tl1=(65536-1000)%256; i+; if(i=150) speaker=speaker; i=0; speaker_count+; if(speaker_count=1000) speaker=1; speaker_count=0; tr1=0; /主函数 void main() uchar i; bit dis_flag=0; t1_set();/初始化定时器,用于高温警报 fan=1; init_lcd();/初始化 lcd /set1302(time_data_buff); /设置时间 f

54、an=1; while(1) /模式设置 if(key_model=0) delay_1ms(20); while(key_model=0); model_flag+; time_flag=0; if(model_flag=5)model_flag=0;write_instruction(0 x0c);cls(); if(model_flag=1) write_string(0 xc8,set time); write_instruction(0 x0c); if(model_flag=3)write_instruction(0 x0e);/这部分是用 于设置继电器的开启状态 for(i=0;

55、i6;i+)temp_highter_line2i=temp_auto_switchsw_flagi;/ 读取缓存值 temp_highter_line29=num_to_charsw_open_temperature/100; temp_highter_line210=num_to_charsw_open_temperature%100/10; temp_highter_line212=num_to_charsw_open_temperature%10; write_string(0 x80,temp_highter_line1); write_string(0 xc0,temp_hight

56、er_line2); write_instruction(0 xc0); /显示时间 if(model_flag=0) time_restrict(); temp_hight(); temp_low(); if(key_set=0) /风扇自动手动切换 delay_1ms(20); while(key_set=0); fan_auto=fan_auto; get1302(time_data_buff); /读取当前时间 temp=readtemperature(); record(); lcd1602_line13 = num_to_chartime_data_buff6/0 x10; lcd

57、1602_line14 = num_to_chartime_data_buff6%0 x10; /*年*/ lcd1602_line16 = num_to_chartime_data_buff4/0 x10; lcd1602_line17 = num_to_chartime_data_buff4%0 x10; /*月*/ lcd1602_line19 = num_to_chartime_data_buff3/0 x10; lcd1602_line110 = num_to_chartime_data_buff3%0 x10; /*日*/ for(i=0;i4;i+) lcd1602_line1i

58、+12=weekstime_data_buff5 /*星期*/ lcd1602_line20 = num_to_chartime_data_buff2/0 x10; lcd1602_line21 = num_to_chartime_data_buff2%0 x10; /*时*/ lcd1602_line23 = num_to_chartime_data_buff1/0 x10; lcd1602_line24 = num_to_chartime_data_buff1%0 x10; /*分*/ lcd1602_line26 = num_to_chartime_data_buff0/16; lcd1

59、602_line27 = num_to_chartime_data_buff0%16; /*秒*/ lcd1602_line29 = num_to_char(temp)/100; /*温度*/ lcd1602_line210 = num_to_char(temp)%100/10; /*温度 */ lcd1602_line212 = num_to_char(temp)%10; /*温度*/ delay_1ms(100); write_string(0 x80,lcd1602_line1); write_string(0 xc0,lcd1602_line2); /以上显示正常运行的时间 /以下设置

60、时间 if(model_flag=1) if(key_set=0) delay_1ms(20); while(key_set=0); set_time+; if(set_time=3)set_time=0; if(set_time=1)write_instruction(0 xc6); write_instruction(0 x0e);/显示光 标 if(set_time=0) write_instruction(0 x0c);/关掉光标 write_string(0 xc8,set time); if(set_time=1) if(key_left=0) /设置时分秒星期日月年的标志 del

温馨提示

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

评论

0/150

提交评论