毕业设计(论文)基于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 in the detect

3、ion 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 temperature and

4、 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 module of modulari

5、zation 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 temperature controlle

6、r ;目录目录第一章 单片机介绍 .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 液晶驱动程序:.第五章 综合调试 .第六章 总结 .附录 .第一章单片机介绍第一章单片机介绍1.1 单片机单片机

7、是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器 cpu 随机存储器 ram、只读存储器 rom、多种 i/o 口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、a/d 转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。 1.2 单片机的特点1、芯片虽小,五脏俱全,是单片机主要特点之一。其内部设有程序存储器、数据存储器、各种接口电路。而大型的处理器运算速度较高,运算器位数较多,处理能力较强,但需要在外部配置接口电路。2、单片机主频一般在100mhz 以下,适合用于独立工作的小型产品之中,引脚数量从几个到百余个。3

8、、应用简单、灵活,可用汇编语言及 c 语言开发单片机产品。1.3 单片机的分类1. 按应用领域可分为:家电类,工控类,通信类,个人信息终端类等等;2. 按通用性可分为:通用型和专用型。 通用型单片机的主要特点是:内部资源比较丰富,性能全面,而且通用性强,可履盖多种应用要求。所谓资源丰富就是指功能强。性能全面通用性强就是指可以应用在非常广泛的领域。通用型单片机的用途很广泛,使用不同的接口电路及编制不同的应用程序就可完成不同的功能。小到家用电器仪器仪表,大到机器设备和整套生产线都可用单片机来实现自动化控制。 专用型单片机的主要特点是:针对某一种产品或某一种控制应用而专门设计的,设计时已使结构最简,

9、软硬件应用最优,可靠性及应用成本最佳。专用型单片机用途比较专一,出厂时程序已经一次性固化好,不能再修该的单片机。例如电子表里的单片机就是其中的一种。其生产成本很低。3.按总线结构可分为总线型和非总线型。如我们常常见到的89c51单片机就是总线结构。89c51单片机内部有数据总线,地址总线,还有控制总线(wr,rd,ea,ale 等)。1.4 单片机的发展与前景现在可以说单片机是百花齐放,百家争鸣的时期,世界上各大芯片制造公司都推出了自己的单片机,从 8 位、16 位到 32 位,数不胜数,应有尽有,有与主流 c51 系列兼容的,也有不兼容的,但它们各具特色,互成互补,为单片机的应用提供广阔的天

10、地。纵观单片机的发展过程,可以预示单片机的发展趋势,大致有:1.低功耗 cmos 化 mcs-51 系列的 8031 推出时的功耗达 630mw,而现在的单片机普遍都在100mw 左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了 cmos(互补金属氧化物半导体工艺)。象 80c51 就采用了 hmos(即高密度金属氧化物半导体工艺)和 chmos(互补高密度金属氧化物半导体工艺)。cmos虽然功耗较低,但由于其物理特征决定其工作速度不够高,而 chmos 则具备了高速和低功耗的特点,这些特征,更适合于在要求低功耗象电池供电的应用场合。所以这种工艺将是今后一段时期单片机发展

11、的主要途径2.微型单片化 现在常规的单片机普遍都是将中央处理器(cpu)、随机存取数据存储(ram)、只读程序存储器(rom)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如 a/d 转换器、pmw(脉宽调制电路)、wdt(看门狗)、有些单片机将 lcd(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中sm

12、d(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。3.主流与多品种共存 现在虽然单片机的品种繁多,各具特色,但仍以 80c51 为核心的单片机占主流,兼容其结构和指令系统的有 philips 公司的产品,atmel 公司的产品和中国台湾的 winbond 系列单片机。所以 c8051 为核心的单片机占据了半壁江山。而 microchip 公司的 pic 精简指令集(risc)也有着强劲的发展势头,中国台湾的 holtek 公司近年的单片机产量与日俱增,与其低价质优的优势,占据一定的市场分额。此外还有 motorola 公司的产品,日本几大公司的专用单片机。在一定的时期内,这

13、种情形将得以延续,将不存在某个单片机一统天下的垄断局面,走的是依存互补,相辅相成、共同发展的道路。单片机的发展趋势 目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着 cmos 化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。下面是单片机的主要发展趋势。 cmos 化 近年,由于 chmos 技术的进小,大大地促进了单片机的 cmos 化。cmos芯片除了低功耗特性之外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。这也是今后以 80c51 取代 8051 为标准 mcu 芯片的原因。因为单片机芯片多数是采用 cmos(金属栅氧化物)半导体工艺生产。

14、cmos 电路的特点是低功耗、高密度、低速度、低价格。采用双极型半导体工艺的 ttl 电路速度快,但功耗和芯片面积较大。随着技术和工艺水平的提高,又出现了 hmos(高密度、高速度 mos)和 chmos 工艺。chmos 和 hmos 工艺的结合。目前生产的 chmos 电路已达到 lsttl 的速度,传输延迟时间小于 2ns,它的综合优势已在于 ttl 电路。因而,在单片机领域 cmos 正在逐渐取代 ttl 电路。 低功耗化 单片机的功耗已从 ma 级,甚至 1ua 以下;使用电压在 36v 之间,完全适应电池工作。低功耗化的效应不仅是功耗低,而且带来了产品的高可靠性、高抗干扰能力以及产

15、品的便携化。 低电压化 几乎所有的单片机都有 wait、stop 等省电运行方式。允许使用的电压范围越来越宽,一般在 36v 范围内工作。低电压供电的单片机电源下限已可达 12v。目前 0.8v 供电的单片机已经问世。 低噪声与高可靠性 为提高单片机的抗电磁干扰能力,使产品能适应恶劣的工作环境,满足电磁兼容性方面更高标准的要求,各单片厂家在单片机内部电路中都采用了新的技术措施。 大容量化 以往单片机内的 rom 为 1kb4kb,ram 为 64128b。但在需要复杂控制的场合,该存储容量是不够的,必须进行外接扩充。为了适应这种领域的要求,须运用新的工艺,使片内存储器大容量化。目前,单片机内

16、rom 最大可达64kb,ram 最大为 2kb。 高性能化 主要是指进一步改进 cpu 的性能,加快指令运算的速度和提高系统控制的可靠性。采用精简指令集(risc)结构和流水线技术,可以大幅度提高运行速度。现指令速度最高者已达 100mips(million instruction per seconds,即兆指令每秒) ,并加强了位处理功能、中断和定时控制功能。这类单片机的运算速度比标准的单片机高出 10 倍以上。由于这类单片机有极高的指令速度,就可以用软件模拟其 i/o 功能,由此引入了虚拟外设的新概念。 小容量、低价格化 与上述相反,以 4 位、8 位机为中心的小容量、低价格化也是发展

17、动向之一。这类单片机的用途是把以往用数字逻辑集成电路组成的控制电路单片化,可广泛用于家电产品。 外围电路内装化 这也是单片机发展的主要方向。随着集成度的不断提高,有可能把众多的各种处围功能器件集成在片内。除了一般必须具有的cpu、rom、ram、定时器/计数器等以外,片内集成的部件还有模/数转换器、dma 控制器、声音发生器、监视定时器、液晶显示驱动器、彩色电视机和录像机用的锁相电路等。 串行扩展技术 在很长一段时间里,通用型单片机通过三总线结构扩展外围器件成为单片机应用的主流结构。随着低价位 otp(one time programble)及各种类型片内程序存储器的发展,加之处围接口不断进入

18、片内,推动了单片机“单片”应用结构的发展。特别是 i c、spi 等串行总线的引入,可以使单片机的引脚设计得更少,单片机系统结构更加简化及规范化。 第第 2 2 章章. .设计方案设计方案系统硬件设计单片机应用系统的硬件电路设计就是为本单片机温控系统选择合适的、最优的系统配置,即按照系统功能要求配置外围设备,如键盘、显示器、打印机、a/d转换器、设计合适的接口电路等。系统设计应本着以下原则: (1) 尽可能选择典型电路,并符合单片机常规用法。本设计采用了典型的显示电路、a/d 转化电路,为硬件系统的标准化、模块化打下良好的基础。(2) 硬件结构应结合应用软件方案一并考虑。软件能实现的功能尽可能

19、由软件实现,以简化硬件结构。由软件实现的硬件功能,一般响应时间比硬件实现长,且占用 cpu 时间。由于本设计的响应时间要求不高,所以有一些功能可以用软件编程实现,如键盘的去抖动问题。(3) 系统中的相关器件要尽可能做到性能匹配。系统中所有芯片都应尽可能选择低功耗产品。系统软件设计软件设计采用模块化设计,采用模块化设计可以简化系统软件的编写,使软件编写思路更加简单明了。系统软件主要由三大模块组成:主程序模块、功能实现模块和运算控制模块。主程序模块用于实现各个子程序间的跳转。功能实现模块主要由 a/d 转换子程序、键盘处理子程序、显示子程序、继电器控制程序等部分组成。运算控制模块涉及标度转换子程序

20、等。 第三章第三章. .系统的硬件设计系统的硬件设计 3.1 总体电路图 本设计以 at89s52 单片机为主控核心设计的一个温度控制系统,低温时可控制加热设备,高温时控制风扇,超出设定最高温度值时蜂鸣器发出声响报警。硬件方框图如图 3 所示:ds18b20温度检测模块ds1302时钟模块键盘at89s52 单片机lcd 显示模块蜂鸣器继电器光耦可控硅加热设备风扇 总体硬件方框图3.2 单元电路设计 3.21 单片机模块at89s52 单片机资源简介at89s52 是一种低功耗、高性能 cmos8 位微控制器,具有 8k 在系统可编程flash 存储器。使用 atmel 公司高密度非易失性存储

21、器技术制造,与工业8031、80c51 产品指令和引脚完全兼容。片上 flash 允许程序存储器在系统可编程(isp 下载) ,亦适于常规编程器。其引 dip 封装的脚图如下:在单芯片上,拥有灵巧的 8 位 cpu 和在系统可编程 flash,使得 at89s52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。at89s52 具有以下标准功能: 8k 字节 flash256 字节 ram32 位 i/o 口线看门狗定时器2 个数据指针三个 16 位定时器/计数器一个 6 向量 2 级中断结构全双工串行口片内晶振及时钟电路。另外,at89s52 可降至 0hz 静态逻辑操作,支持 2 种

22、软件可选择节电模式。空闲模式下,cpu 停止工作,允许 ram、定时器/计数器、串口、中断继续工作。掉电保护方式下,ram 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器 8k 字节在系统可编程。at89s52 单片机时钟和复位电路时钟电路单片机内部有一个高增益反向放大器,输入端为芯片引脚,输出端1xtal为引脚。而在芯片外部和 之间跨接晶体振荡器和微调电容,2xtal1xtal2xtal从而构成一个稳定的自激振荡器。晶体震荡频率高,则系统的时钟频率也高,单片机运行速度也就快,但反过来运行速度快对存储器的速度要求就高,对印制电路板的工艺要求也高,所以

23、,这里使用震荡频率为 6mhz 的石英晶体。震荡电路产生的震荡脉冲并不直接是使用,而是经分频后再为系统所用,震荡脉冲经过二分频后才作为系统的时钟信号。在设计电路板时,振荡器和电容应尽量靠近单片机,以避免干扰。需要注意的是:电路板时,振荡器和电容应尽量安装得与单片机靠近,以减小寄生电容的存在更好的保障振荡器稳定、可靠的工作电路图如图 2.2 所示复位电路单片机的复位电路分上电复位和按键复位两种方式。 (a)上电复位: 在加电之后通过外部复位电路的电容充电来实现的。当的上升时间不超过 1ms,就可以ccv实现自动上电复位,即接通电源就完成了系统的初始化电路原理图。rst 上的电压必须保证在斯密特触

24、发器的阀值电压以上足够长时间,满足复位操作的要求。 (b) 按键复位:程序运行出错或操作错误使系统处于死锁状态时,为了摆脱困境,也需按复位键以重新启动。rst 引脚是复位信号的输入端,复位信号是高电平有效。按键复位又分按键脉冲复位(图2.3)和按键电平复位。电平复位将复位端通过电阻与相连,按键脉冲复位是利用 rc 分电路产生正脉冲ccv来达到复位的。(c) 注意:因为按键脉冲复位是利用 rc 微分电路产生正脉冲来达到复位的。所以电平复位要将复位端通过电阻与相连.如复位电路中 r、c 的值选择不当,使复位时ccv间过长,单片机将处于循环复位状态。故本设计采用按键复位。3.22 时钟模块 ds13

25、02 的引脚排列,其中 vcc1 为后备电源,vcc2 为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。ds1302 由 vcc1 或 vcc2 两者中的较大者供电。当 vcc2 大于 vcc10.2v 时,vcc2 给 ds1302 供电。当 vcc2 小于 vcc1时,ds1302 由 vcc1 供电。x1 和 x2 是振荡源,外接 32.768khz 晶振。rst 是复位/片选线,通过把 rst 输入驱动置高电平来启动所有的数据传送。rst 输入有两种功能:首先,rst 接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,rst 提供终止单字节或多字节数据的传送手段。当 rst

26、 为高电平时,所有的数据传送被初始化,允许对 ds1302 进行操作。如果在传送过程中 rst 置为低电平,则会终止此次数据传送,i/o 引脚变为高阻态。上电运行时,在vcc2.0v 之前,rst 必须保持低电平。只有在 sclk 为低电平时,才能将 rst 置为高电平。i/o 为串行数据输入输出端(双向),后面有详细说明。sclk 为时钟输入端。 3.23温度采集模块 独特的一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无需外部元件 可用数据总线供电,电压范围为 3.0 v 至 5.5 v 无需备用电源 测量温度范围为-55 c 至+125 。华氏相当于是-67 f 到

27、257华氏度 -10 c 至+85 c 范围内精度为0.5 c温度传感器可编程的分辨率为 912 位 温度转换为 12 位数字格式最大值为 750毫秒 用户可定义的非易失性温度报警设置 应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统描述该 ds18b20 的数字温度计提供 9 至 12 位(可编程设备温度读数。信息被发送到/从 ds18b20 通过 1 线接口,所以中央微处理器与 ds18b20 只有一个一条口线连接。为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。 因为每一个 ds18b20 的包含一个独特的序号,多个 ds18b20s 可以同时存在于一条总

28、线。这使得温度传感器放置在许多不同的地方。它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。 ds18b20 的主要特点:适应电压范围更宽,电压范围:3.05.5v,在寄生电源方式下可由数据线供电;独特的单线接口方式,ds18b20 在与微处理器连接时仅需要一条口线即可实现微处理器与 ds18b20 的双向通讯;ds18b20 支持多点组网功能,多个 ds18b20 可以并联在唯一的三线上,实现组网多点测温;ds18b20 在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;温范围55125,在-10+85时精度为0.5;可编程的分

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

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

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

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

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

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

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

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

37、过程:(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 章章. .综合调试综合调试 硬件调试在本温度控制电路的设计调试中遇到了很多的问题。回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:(1) 开始

38、调试时发现时钟芯片 ds1302 发热很厉害,后来发现电路没有给它加上拉电阻,加上上拉电阻后问题就解决了。(2) 双向可控硅 bta12-600b 高压部分电路,加 104 电容时,发生击穿现象,导致光耦控制部分电路瘫痪,原因是耐压值不够。解决的方法有两种,第一种是更换耐压值更高的电容;由于该电容的作用是吸收可控硅元件的残余电量,使得可控硅能够正常导通截止,而根据使用的负载(交流电机) ,去掉该电容后,该电路能够正常的工作,所以第二种是在电路可以运行的状况下去掉该104 电容相连的电路。我采取的是第二种方法。软件调试 在软件调试时也出现了一些问题,其中主要的问题有以下两个方面:(1) 程序读取

39、温度值时,出现的现象,造成风扇温度在判断时出现错误,使风扇经常性突快突慢变化,蜂鸣器也不断的蜂鸣报警。解决的方法是在读取温度判断时加延时,并且多次判断,防止跳变。(2) 调节系统参数时,液晶光标太快以致调节的时候观察困难,原因是刷新液晶太快。解决的方法是在相应数据更该时,才开始刷新液晶内容。第六章第六章. .总结总结 我的毕业设计课题即将将告一段落。设计实物也基本达到预期的效果,但由于能力和时间的关系,总是觉得有很多不尽人意的地方,譬如功能不全、外观粗糙数不胜数。但我可以自豪的说,这里面的每一段代码,都有我的劳动。当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。我相信

40、其中的酸甜苦辣最终都会化为甜美的甘泉。 毕业设计,也许是我大学生涯交上的最后一个作业了。想借此机会感谢一直以来给我帮助的所有老师、同学,你们的友谊是我人生的财富,是我生命中不可或缺的一部分。我的毕业指导老师王琳娜老师,她一直都以一位长辈的风范来容谅我的无知和冲动,给我不厌其烦的指导。在此,特向她道声谢谢。这次做论文的经历也会使我终身受益,我感受到做论文是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破,那也就不叫论文了。希望这次的经历能让我在以后学习中激励我继续进步。附录电路图程序#include#include#i

41、nclude#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_dq =p15; /定义 ds18b20 通信端口sbit led1=p12;sbit led2=p13;sbit speaker=p11; /蜂鸣器接口sbit fan=p21;/风扇 pwm 输出控制口bit fan_flag=

42、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;/继电器自动手动切换标志uchar switch_flag=0;/继电器液晶设置切换标志int sw_open_temperature=100;/继电器开启的温度值设置 uchar restrict_hour=0;/设定时间风扇不能转uint temp=0; /温度

43、缓存uint fan_count=0;/风扇计数bit fan_auto=0;/自动风扇自动或手动控制标志uchar model_flag=0;/总的模式标志uchar code num_to_char = 0123456789abcdef; /*定义数字跟ascii 码的关系*/uchar data lcd1602_line1= 2010/00/00 tue ; /时间显示缓存数组uchar data lcd1602_line2= 00:00:00 00.0c ; /时间显示缓存数组uchar data lcd1602_line3= 00:00:00set time; /时间设置缓存数组uc

44、har idata temp_record_line1=temperature note;/温度记录显示缓存数组uchar idata temp_record_line2=time 00 t:00.0c ;/温度记录显示缓存数组uchar xdata temp_highter_line1=sw t on/off ;/继电器手动自动切换和自动时开启电压uchar xdata temp_highter_line2=auto t=00.0c ;/继电器手动自动切换和自动时开启电压uchar xdata temp_time_unable_line1=fan time unable; /显示风扇禁止打开

45、的时间段uchar xdata temp_time_unable_line2=f:4 t:7 oclock; /显示风扇禁止打开的时间段uchar code temp_auto_switch6=auto ,manuel; /自动,手动切换值uchar idata temp_record=010000000000000000000000000000000000000000000000000000000000000000000000;/保存每天对应钟点的温度值uchar code weeks4=sun ,mon ,tue ,wed ,thu ,fri ,sat ,sun ; /星期数组/时钟标志u

46、int data year=0; /时间设置标志,数据uchar data set_time=0,time_flag=0,day_flag=0,hour=0,minute=0,second=0,day=0,month=0,week=0;/时间设置标志,数据uint speaker_count=0; /喇叭蜂鸣计数uchar record_hour,record_minute,record_second,record_hour_count=0; /温度记录的时间设置/小延时程序void delay(uint x) while(x-);/*1ms 为单位的延时程序*/void delay_1ms(

47、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(4);return(dat);/写一个字节void writeonechar(uchar dat)uchar i=0;for (i=8; i0; i-)ds18b20_dq = 0;ds18b20_dq= dat&0 x01;delay(5);ds18b20_dq = 1;dat=1;/读取温度readtemperature(void)uchar

48、a=0;uchar b=0;uint t=0;float tt=0;init_ds18b20();writeonechar(0 xcc); / 跳过读序号列号的操作writeonechar(0 x44); / 启动温度转换init_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; /对结果进行

49、4 舍 5 入return(t);/以上是 ds18b20 驱动程序/ /以下是温度高时处理程序void temp_hight(void)if(fan_auto=0) /自动 led1=1; /亮灯说明是自动控制 if(temp230&temp270&temp320&temp400) fan_count=1; temp=readtemperature(); /防止跳变干扰,再读一次温度 delay_1ms(5000); /防止跳变干扰,再读一次温度 if(temp400)tr1=1; /防止跳变干扰,再读一次温度 if(fan_flag=1) /这部分作为 pwm 控制程序 /这部分作为 pw

50、m 控制程序 fan=1; /这部分作为 pwm 控制程序 delay_1ms(fan_count);/控制风扇关闭的时间,以达到控制风扇转速的目的 fan=0; /这部分作为 pwm 控制程序 if(fan_auto=1)/手动 led1=0; /灭灯说明是手动控制 fan=0; /表示风扇一直开着 /以上是温度高时处理程序/以下是温度低时处理程序void temp_low(void) if(sw_flag=0)/自动的时候继电器根据温度值判断开启 led2=1; /亮灯说明是自动控制 if(temp=4&restrict_hour7) /限制的时间为早上 4 点到 7点 fan_flag=

51、0;/允许标志,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_()interrupt 3uchar i;th1=(65536-1000)/256;tl1=(65536-1000)%256;i+;if(i=150)speaker=speaker;i=0; speaker_count+; if(speaker_count=1000)

52、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); /设置时间 fan=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_instructio

53、n(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;i6;i+)temp_highter_line2i=temp_auto_switchsw_flagi;/读取缓存值 temp_highter_line29=num_to_charsw_open_temperature/100; temp_highter_line210=num_to_cha

54、rsw_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_highter_line2); write_instruction(0 xc0); /显示时间 if(model_flag=0) time_restrict(); temp_hight(); temp_low(); if(key_set=0) /风扇自动手动切换 delay_1ms(20); whil

55、e(key_set=0); fan_auto=fan_auto; get1302(time_data_buff); /读取当前时间 temp=readtemperature(); record(); lcd1602_line13 = num_to_chartime_data_buff6/0 x10; lcd1602_line14 = num_to_chartime_data_buff6%0 x10; /*年*/ lcd1602_line16 = num_to_chartime_data_buff4/0 x10; lcd1602_line17 = num_to_chartime_data_buf

56、f4%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+12=weekstime_data_buff5&0 x07i; /*星期*/ lcd1602_line20 = num_to_chartime_data_buff2/0 x10; lcd1602_line21 = num_to_chartime_data_buff2%0 x10; /*时*

57、/ 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; lcd1602_line27 = num_to_chartime_data_buff0%16; /*秒*/ lcd1602_line29 = num_to_char(temp)/100; /*温度*/ lcd1602_line210 = num_to_char(temp)%100/1

58、0; /*温度*/ lcd1602_line212 = num_to_char(temp)%10; /*温度*/ delay_1ms(100); write_string(0 x80,lcd1602_line1); write_string(0 xc0,lcd1602_line2); /以上显示正常运行的时间/以下设置时间 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 xc

59、6); 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) /设置时分秒星期日月年的标志 delay_1ms(20); while(key_left=0); time_flag+;/设置时分秒星期日月年的标志 dis_flag=1; if(time_flag=7)time_flag=0; if(key_right=0) /设置时分秒星期日月年的标志 delay_1ms(20)

60、; while(key_right=0); dis_flag=1; time_flag-; /设置时分秒星期日月年的标志 if(time_flag=-1)time_flag=6; second= (time_data_buff0/0 x10)*10+time_data_buff0%0 x10; / minute= (time_data_buff1/0 x10)*10+time_data_buff1%0 x10; / hour = (time_data_buff2/0 x10)*10+time_data_buff2%0 x10; / day = (time_data_buff3/0 x10)*1

温馨提示

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

评论

0/150

提交评论