毕业设计基于AT89S5单片机的暖风机设计

上传人:仙*** 文档编号:64271311 上传时间:2022-03-21 格式:DOC 页数:73 大小:926.50KB
收藏 版权申诉 举报 下载
毕业设计基于AT89S5单片机的暖风机设计_第1页
第1页 / 共73页
毕业设计基于AT89S5单片机的暖风机设计_第2页
第2页 / 共73页
毕业设计基于AT89S5单片机的暖风机设计_第3页
第3页 / 共73页
资源描述:

《毕业设计基于AT89S5单片机的暖风机设计》由会员分享,可在线阅读,更多相关《毕业设计基于AT89S5单片机的暖风机设计(73页珍藏版)》请在装配图网上搜索。

1、湖州职业技术学院毕毕 业业 论论 文文题题 目目: 基于基于 AT89S5 单片机的暖风机设计单片机的暖风机设计学学 生生 黄方亮 专专 业业 应 用 电 子 技 术 指导教师指导教师 赵高峰 讲师 完成日期完成日期 2010 年 1 月 摘摘 要要本文设计了一种以 AT89S52 单片机为核心的低成本、高精度、微型化 LED显示温湿度监测系统,并使用一些常用芯片如:DS18B20、GHS-20E 等。系统由单片机、温度检测电路、电机驱动电路、报警电路以及显示电路构成。由芯片AT89S52 控制温湿度传感器检测到的温湿度值进行存储转换,从而在显示电路中数码管中显示出来。本系统具有易安装检测、软

2、件功能完善,工作可靠、准确度高等优点。本文论述了单片机技术研制成功的暖风机的监测系统的基本原理,温湿度传感器信号采集通过单片机来实现方案。采用软件校正,提高了测量精度和整机的可靠性。实际使用表明,极大的提高了安全性、可靠性和准确度。关键词:暖风机,温湿度传感器,单片机 AT89S52 目 录摘要 .I目 录 .II第 1 章 概述 .201.1 选题背景 .201.2 设计过程及工艺要求 .201.3 设计的重点与难点 .20第 2 章 方案论证与比较 .212.1 温度传感器的选择 .212.2 湿度传感器的选择 .21第 3 章 系统总体设计 .233.1 系统设计 .233.2 芯片 A

3、T89S52 介绍 .233.3 传感器的介绍 .263.3.1 传感器的定义及作用.263.3.2 传感器的特性.263.3.3 温度传感器 DS18B20 .263.3.4 湿度传感器 GHS-20E .313.3.5 A/D 转换 TLC549 .313.4 温湿度采集电路设计 .333.5 显示电路的设计 .343.6 报警电路的设计 .353.7 按键电路的设计 .36第 4 章 系统调试 .374.1 软硬件的调试 .374.2 系统软件设计 .37总 结 .40致 谢 .41参 考 文 献 .42附 录 .43第 1 章 概述1.1 选题背景带液晶显示屏的暖风机,越来越受到用户的

4、欢迎,配合液晶屏显示,可显示环境温度及设定状态,大大方便了产品的使用。目前,各大厂商为了在市场上占有一席之地,纷纷在遥控型暖风机的性能参数标准,重量,体积,厚度,色彩,价格大大下功夫。如:海宝驰的 奔驰暖风取暖器NSB-200遥控型暖风机,SANYO的三洋暖风机R-P201MR等,样式新颖,都占有很高的性价比。消费者可以量身挑选适合自己的。1.2 设计过程及工艺要求一、基本功能 吹出恒定的暖风 检测温度 显示温度 过限报警二、主要技术参数 温度检测范围 : 0-+50 测 量 精 度 : 0.5 检 测 精 度 : 1%RH 显 示 方 式 : 温度:二位显示 湿度:四位显示 报 警 方 式

5、: 三极管驱动的蜂鸣音报警1.3 设计的重点与难点本设计的任务是设计一个暖风机系统,可以应用于温湿度有一定要求的区域。测量时能够清晰稳定地显示出监测结果。系统组成的设计:各部分硬件的选取很有讲究,要十分合理。设计的难点是:1、温度湿度模块设计2、电机驱动模块3、显示电路设计4、流程图及程序的设计第 2 章 方案论证与比较当将单片机用作测控系统时,系统总要有被测信号懂得输入通道,由计算机拾取必要的输入信息。对于测量系统而言,如何准确获得被测信号是其核心任务;而对测控系统来讲,对被控对象状态的测试和对控制条件的监察也是不可缺少的环节。传感器是实现测量与控制的首要环节,是测控系统的关键部件,如果没有

6、传感器对原始被测信号进行准确可靠的捕捉和转换,一切准确的测量和控制都将无法实现。工业生产过程的自动化测量和控制,几乎主要依靠各种传感器来检测和控制生产过程中的各种参量,使设备和系统正常运行在最佳状态,从而保证生产的高效率和高质量。2.1 温度传感器的选择方案一:采用热电阻温度传感器。热电阻是利用导体的电阻随温度变化的特性制成的测温元件。现应用较多的有铂、铜、镍等热电阻。其主要的特点为精度高、测量范围大、便于远距离测量。铂的物理、化学性能极稳定,耐氧化能力强,易提纯,复制性好,工业性好,电阻率较高,因此,铂电阻用于工业检测中高精密测温和温度标准。缺点是价格贵,温度系数小,受到磁场影响大,在还原介

7、质中易被玷污变脆。按IEC 标准测温范围-200650,百度电阻比 W(100)=1.3850 时,R0 为100 和 10,其允许的测量误差 A 级为(0.15+0.002 |t|) ,B 级为(0.3+0.005 |t|) 。铜电阻的温度系数比铂电阻大,价格低,也易于提纯和加工;但其电阻率小,在腐蚀性介质中使用稳定性差。在工业中用于-50180测温。方案二:采用 DS18S20,独特的单线接口,多点能力使分布式温度检测应用简单,不需要外部元件和备份电源,可用数据线供电,测量范围从-55+125,增量值为 0.5,并且以 9 位数值方式读出温度且可在 1 秒内把温度变成数字。综合比较方案一与

8、方案二,方案二更为适合于本设计系统对于温度传感器的选择。2.2 电机选择与论证方案一:采用步进电机,步进电机的一个显著特点就是具有快速启停能力,如果负荷不超过步进电机所能提供的动态转矩值,就能够立即使步进电机启动或反转。另一个显著特点是转换精度高,正转反转控制灵活。但是步进电机价格昂贵。方案二: 采用直流伺服电机,直流伺服电机具有优良的速度控制性能,它输出较大的转矩,直接拖动负载运行,同时它又受控制信号的直接控制进行转速调节,在很多方面具有优越性,但是直流伺服电机价格昂贵,且不易购买。 方案三: 采用普通的直流电机,直流电动机具有优良的调速特性,调速平滑、方便,调整范围广;过载能力强,能承受频

9、繁的冲击负载,可实现频繁的无级快速启动、制动和反转;能满足各种不同的特殊运行要求,且价格实惠,容易购买。由于普通的直流电机价廉物美,且能完成所需的功能,故我们采用方案三作为小车的动力源。2.2 测速模块测速模块:方案 1:采用采用霍尔开关元器件 A44E 检测轮子上的小磁铁从而给单片机中断脉冲,达到测量速度的作用。霍尔元件具有体积小,频率响应宽度大,动态特性好,对外围电路要求简单,使用寿命长,价格低廉等特点,电源要求不高,安装也较为方便。霍尔开关只对一定强度的磁场起作用,抗干扰能力强,因此可以在车轮上安装小磁铁,而将霍尔器件安装在固定轴上,通过对脉冲的计数进行车速测量。2.3.2 方案 2:采

10、用红外传感器进行测速。但无论是反射式红外传感器还是对射式红外传感器,他们对都对外围环境要求较高,易受外部环境的影响,稳定性不高,且价格较为昂贵。通过对方案 1、方案 2 的比较其优缺点,综合多方面因素决定选用方案 1,其原理图接线如(图 5)所示:(图 5)第 3 章 系统总体设计3.1 系统设计本设计是基于单片机对数字信号的高敏感和可控性、温湿度传感器可以产生模拟信号,和 A/D 模拟数字转换芯片的性能,我设计了以 AT89S52 基本系统为核心的一套检测系统,其中包括 A/D 转换、单片机、复位电路、温度检测、按键及显示、报警电路、系统软件等部分的设计。见图 3.1 所示:红外传感器TLC

11、549单片机AT89S52串行口LED 显示DS18B20温度传感器报警电路图 3.1 系统总体框图 本设计由信号采集、信号分析和信号处理三个部分组成的。(一) 信号采集 由红外传感器、DS18B20 及 TLC549 组成; (二) 信号分析 由 A/D 转换器 TLC549、单片机 89S52 基本系统组成;(三) 信号处理 由串行口 LED 显示器和报警系统等组成。3.2 芯片 AT89S52 介绍AT89S52 是一种低功耗、高性能 CMOS 8 位微控制器,具有 8K 在系统可编程 Flash 存储器。使用 ATMEL 公司高密度非易失性存储器技术制造,与工业 80C51 产品指令和

12、引脚完全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程Flash,使得 AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。由于此单片机应用在仓库温湿度检测上,所以本设计选用了低功耗、高性能、低价格、小管脚(40 脚)的 AT89S52 单片机。如图 3.2 所示:图 3.2 AT89S52 芯片引脚图AT89S52 具有以下标准功能:8k 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2级中断结构,全双工

13、串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。引脚功能介绍 1.Vcc:电源电压。2.GND:地。3. P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动 8 个 TTL 逻辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。在这种模式下,P0具有内

14、部上拉电阻。 在 flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。4. P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动 4 个 TTL 逻辑电平。对 P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL) 。 此外,P1.0 和 P1.2 分别作定时器/计数器 2的外部计数输入(P1.0/T2)和时器/计数器 2 的触发输入(P1.1/T2EX) ,具体如表 3.1 所示: 在 flash 编程和校验时,P

15、1 口接收低 8 位地址字节。 表 3.1 P1 口的第二功能引脚号第二功能P1.0T2(定时器/计数器 T2 的外部计数输入),时钟输出P1.1T2EX(定时器/计数器 T2 的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用)5.P2 口:P2 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动 4 个 TTL 逻辑电平。对 P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL) 。在访问外部程序存储器或用

16、 16 位地址读取外部数据存储器(例如执行 MOVX DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送 1。在使用 8 位地址(如 MOVX RI)访问外部数据存储器时,P2 口输出 P2 锁存器的内容。在 flash 编程和校验时,P2 口也接收高 8 位地址字节和一些控制信号。6. P3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p3 输出缓冲器能驱动 4 个 TTL 逻辑电平。对 P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL) 。 P3 口

17、亦作为 AT89S52 特殊功能(第二功能)使用,如表 3.2 所示。 在 flash 编程和校验时,P3 口也接收一些控制信号。表 3.2 P3 口的第二功能端口引脚第二功能P3.0RXD(串行输入口 )P3.1TXD(串行输出口 )P3.2INTO(外中断 0)P3.3INT1(外中断 1)P3.4TO(定时/计数器 0)P3.5T1(定时/计数器 1)P3.6WR(外部数据存储器写选通 )P3.7RD(外部数据存储器读选通 )此外,P3 口还接收一些用于 FLASH 闪存编程和程序校验的控制信号。RST复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将是单片机复位。ALE

18、/PROG当访问外部程存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低 8 位字节。一般情况下,ALE 仍以时钟振荡频率的 1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个 ALE 脉冲。对 FLASH 存储器编程期间,该引脚还用于输入编程脉冲(PROG) 。如有必要,可通过对特殊功能寄存器(SFR)区中的 8EH 单元的 D0 位置位,可禁止 ALE 操作。该位置位后,只有一条 MOVX 和 MOVC 指令才能将 ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置 ALE 禁止位无效。PSEN

19、程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当 AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次 PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次 PSEN信号。EA/VPP外部访问允许,欲使 CPU 仅访问外部程序存储器(地址为0000H-FFFFH) ,EA 端必须保持低电平(接地) 。需注意的是:如果加密位 LB1被编程,复位时内部会锁存 EA 端状态。如 EA 端为高电平(接 Vcc 端) ,CPU则执行内部程序存储器的指令。FLASH 存储器编程时,该引脚加上+12V 的编程允许电源 Vpp,当然这必须是该器件是使用 12V

20、编程电压 Vpp。3.3 传感器的介绍3.3.1 传感器的定义及作用一、广义地来说,传感器是一种能把物理量或化学量转变成便于利用的电信号的器件。国际电工委员会(IEC:International Electrotechnical Committee)的定义为:“传感器是测量系统中的一种前置部件,它将输入变量转换成可供测量的信号”。按照 Gopel 等的说法是:“传感器是包括承载体和电路连接的敏感元件”,而“传感器系统则是组合有某种信息处理(模拟或数字)能力的传感器”。传感器是传感器系统的一个组成部分,它是被测信号输入的第一道关口。二、传感器的作用1.信息的收集;2.信息数据的交换;3.控制信息

21、的采集。3.3.2 传感器的特性1、灵敏度高、可靠性强、稳定性好; 2、防尘耐湿、耐高低温、耐冲击、耐振动等严酷环境条件;3、收发兼用,使用方便。3.3.3 温度传感器 DS18B20数字温度传感器 DS-18B20 是美国 DALLAS 公司生产的 DS18B20 可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。一、主要特性DS18B20 温度传感器是美国 DALLAS 半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温。这一部分主要完成对温度信号的采集和转换工作,由 DS

22、18B20 数字温度传感器及其与单片机的接口部分组成。数字温度传感器 DS18B20 把采集到的温度通过数据引脚传到单片机。(1) DS18B20 的性能特点如下9:1) 独特的单线接口仅需要一个端口引脚进行通信;2) 多个 DS18B20 可以并联在惟一的三线上,实现多点组网功能;3) 无须外部器件;4) 可通过数据线供电,电压范围为 3.05.5V;5) 零待机功耗;6) 温度以 3 位数字显示;7) 用户可定义报警设置;8) 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;9) 负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。 (2) DS18B20 的

23、内部结构DS18B20 采用 3 脚 PR35 封装,DS18B20 的内部结构,如图 3.3 所示引脚说明:地数据线可选图 3.3 DS18B20 封装 64 位 ROM和单线端口存储器和控制逻辑暂存器温度传感器上限触发 TH下限触发 TL8 位CRC产生器电源控制DQVDD图 3.4 DS18B20 内部结构二 DS18B20 的工作原理1 DS18B20 的工作时序根据 DS18B20 的通讯协议,主机控制 DS18B20 完成温度转换须经过三个步骤:1). 每一次读写之前都必须要对 DS18B20 进行复位;2). 复位成功后发送一条 ROM 指令;3). 最后发送 RAM 指令,这样

24、才能对 DS18B20 进行预定的操作。复位要求主 CPU 将数据线下拉 500 微秒,然后释放,DS18B20 收到信号后等待 1560 微秒左右后发出 60240 微秒的存在低脉冲,主 CPU 收到此信号表示复位成功。其工作时序包括初始化时序、写时序和读时序,具体工作方法见图 3.5,3.6,3.7 所示。(1) 初始化时序响应脉冲60240等待15-60主机最小480主机复位脉冲最小480US图 3.5 初始化时序总线上的所有传输过程都是以初始化开始的,主机响应应答脉冲。应答脉冲使主机知道,总线上有从机设备,且准备就绪。主机输出低电平,保持低电平时间至少 480us,以产生复位脉冲。接着

25、主机释放总线,4.7K 上拉电阻将总线拉高,延时 1560us,并进入接受模式,以产生低电平应答脉冲,若为低电平,再延时 480us12。(2) 写时序采样1545采样154511主机写1时序主机写0时序图 3.6 写时序写时序包括写 0 时序和写 1 时序。所有写时序至少需要 60us,且在 2 次独立的写时序之间至少需要 1us 的恢复时间,都是以总线拉低开始。写 1 时序,主机输出低电平,延时 2us,然后释放总线,延时 60us。写 0 时序,主机输出低电平,延时 60us,然后释放总线,延时 2us8。(3) 读时序主机采样主机采样454511主机写1时序主机写0时序 图 3.7 读

26、时序总线器件仅在主机发出读时序是,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要 60us,且在 2 次独立的读时序之间至少需要 1us 的恢复时间。每个读时序都由主机发起,至少拉低总线 1us。主机在读时序期间必须释放总线,并且在时序起始后的 15us 之内采样总线状态。主机输出低电平延时 2us,然后主机转入输入模式延时 12us,然后读取总线当前电平,然后延时 50us4。2 ROM 操作命令当主机收到 DSl8B20 的响应信号后,便可以发出 ROM 操作命令之一,这些命令如表 3.1.3:ROM 操作命令。三 DS18B2

27、0 的测温原理每一片 DSl8B20 在其 ROM 中都存有其唯一的 48 位序列号,在出厂前已写入片内 ROM 中。主机在进入操作程序前必须用读 ROM(33H)命令将该DSl8B20 的序列号读出。程序可以先跳过 ROM,启动所有 DSl8B20 进行温度变换,之后通过匹配 ROM,再逐一地读回每个 DSl8B20 的温度数据。DS18B20 的测温原理如图 3.9 所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器 1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器 2 的脉冲输入,图中还隐含着计数门,当计数门打开时,DS

28、18B20 就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 所对应的基数分别置入减法计数器 1 和温度寄存器中,减法计数器 1 和温度寄存器被预置在-55 所对应的一个基数值。减法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器 1 的预置值减到 0 时温度寄存器的值将加 1,减法计数器 1 的预置将重新被装入,减法计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器 2 计数到 0 时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图 3.5 中

29、的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是 DS18B20 的测温原理。另外,由于 DS18B20 单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对 DS18B20 的各种操作必须按协议进行。操作协议为:初始化 DS18B20(发复位脉冲)发 ROM 功能命令发存储器操作命令处理数据。见图 3.8 所示:初始化DS18B20跳过 ROM匹配温度变换延时 1S跳过 ROM匹配读暂存器转换成显示码数码管显示图 3.8 DS18B20 测温流程减法计数器斜坡累加器减到

30、 0减法计数器预 置低温度系数振 荡 器高温度系数振 荡 器计数比较器预 置温度寄存器减到 0图 3.9 测温原理内部装置3.3.4 TLC549 特性特性一A/D 转换器的特点TLC549 是美国德州仪器公司生产的 8 位串行 A/D 转换器芯片.可与通用微处理器控制器通过 I/O CLOCK CS DATA OUT 三条口线进行串行接口.具有4MHZ 片内系统时钟和软.硬件控制电路.转换时间最长 45500 次/S,TLC549 允许的最高转换速率为. 40000 次/S.TLC549 为 40000 次/S. 总失调误差最大为? +-0.5LSB.典型功耗值为 6MW 采用差分参考电压高

31、阻输入.抗干扰.可按比例量程校准转换范围。为了把湿度检测电路测出的模拟信号转换成数字量送 CPU 处理,本系设计选用了 A/D 转换器 TLC549,它片型小.采样速度快.功耗低.价格便宜. 控制简单。 二TLC549 转换器件简介TLC549 的内部框图和引脚名称如图 3.10 所示:8位模数转换器输出数据寄存器8-1数据选择器和驱动器控制逻辑和输出数据内部系统时钟采样保持REF+REF- 312ANALOG INCS 5886DATAOUT47I/O CLOCK图 3.10 TLC549 转换器的内部逻辑框图TLC549 均有片内系统时钟.该时钟与 I/O CLOCK 是独立工作的.无须特

32、殊的速度或相位匹配其工作时序如图 3.11 所示,当 CS 为高时.数据输出.(DATA OUT).端处于高阻状态.此时 I/O CLOCK 不起作用这种 CS 控制作用允许在同时使用多片 TLC549 时.共用以减少多路.片 A/D 并用时的 I/O 控制端口.一组通常的控制时序为:(1) .将 CS 置低内部电路在测得 下降沿后.再等待两个内部时钟上升沿和一个下降沿后. 然后确认这一变化. 最后自动将前一次转换结果的最高位(D7)位输出到 DATA OUT 端上.(2)前四个 I/O CLOCK 周期的下降沿依次移出第 2.3.4 和第 5 个位(DD6.D5D4.D3)片上采样保持电路在

33、第 4 个 I/O CLOCK 下降沿开始采样模拟输入.(3) 接下来的 3 个 I/O CLOCK 周期的下降沿将移出第6、7、8(D2、D1、D0)个转换位 图 3.11 工作时序图(4)最后. 片上采样保持电路在第 8 个 I/O CLOCK 周期的下降沿将移出第 6、7、8(D2、D1、D0)个转换位保持功能将持续 4 个内部时钟周期,.然后开始进行 32 个内部时钟周期的 A/D 转换 第 8 个 I/O CLOCK 后 CS 必须为高.或 I/O CLOCK 保持低电平.这种状态需要维持 36 个内部系统时钟周期以等待保持和转换工作的完成 如果 CS 为低时 I/O CLOCK 上

34、出现一个有效干扰脉冲.则微处理器/控制器将与器件的 I/O 时序失去同步.若 CS 为高时出现一次有效低电平. 则将使引脚重新初始化. 从而脱离原转换过程。在 36 个内部系统时钟周期结束之前. 实施步骤(1)(4),可重新启动一次新的 A/D 转换.与此同时.正在进行的转换终止.此时的输出是前一次的结果而不是正在进行的转换结果。若要在特定的时刻采样模拟信号应使第 8 个 I/O CLOCK 时钟的下降沿与该时刻对应.因为芯片虽在第 4 个 I/O CLOCK 时钟下降沿开始采样.却在第 8 个 I/O CLOCK 的下降沿开始保存。3.5 显示电路的设计LED 数码显示管有两种,一种是共阳极

35、数码管,其内部是由八个阳极相连接的发光二极管组成;另一种是共阴极数码管,其内部是由四个阳极相连接的发光二极管组成。二者原理不同但功能相同。其外形和内部结构如下图 3.13 所示: 图 3.13 LED 的管脚和电路原理共阳极 LED 数码显示管是将二极管的阳极连接在一起,形成共阳极 LED数码显示块的公共端,该公共端接+5v,在共阳极 LED 数码显示块中如某个发光二极管的阴极为低电平时,该发光二极管被点亮;而共阴极 LED 数码显示块的发光二极管阴极连接在一起,形成该模块的公共端(通常称为位选端) ,因此称为共阴极 LED 数码显示器,8 个数码管的另一端通常称为段选端,当显示器的公共端接低

36、电平,某个发光二极管的阳极接高电平时,该发光二极管被点亮。用单片机驱动 LED 数码管分为静态显示和动态显示。静态显示就是显示驱动电路具有锁存功能,单片机将所要显示的数据送出后就不再控制 LED,直到下次显示时再传送一次新的显示数据。静态显示的数据稳定,占用的 CPU 时间少。静态显示中,每一个显示器都要占用单独的具有锁存功能的 I/O 接口,该接口用于笔划段字型代码。这样单片机只要把显示的字形代码发送到接口电路,该字段就可以显示发送的字形。要显示新的数据时,单片机再发送新的数据。另一种方法是动态扫描显示。由于单片机本生具有较强的逻辑控制能力,所以采用动态扫描软件译码并不复杂。而且软件译码其译

37、码逻辑可随意编程设定,不受硬件译码逻辑限制。采用动态扫描软件译码地方式能大大简化硬件电路结构,降低系统成本。它用分时地方法轮流控制各个显示器地 COM 端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间极为短暂,但由于人的视觉暂留现象及发光二极管的余辉效应,给人的印象就是一组稳定的显示数据。静态显示数据稳定,占用很少的 CPU 时间,但每个显示单元都需要单独的显示驱动电路,使用的电路硬件较少;动态显示需要 CPU 时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的 CPU 时间多,但使用的硬件少,能节省线路板空间。本设计的显示电路采用共阳 LED 四位数码管和二位数码管,位

38、码用 PNP三极管驱动。如图 3.14 所示图 3.14 温湿度 显示电路3.6 报警电路的设计报警器的种类很多,比如:扬声器、蜂鸣器等。本设计中选用压电式蜂鸣器作为报警器。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.515V 直流工作电压),多谐振荡器起振,输出 1.52.5kHZ 的音频信号,阻抗匹配器推动压电蜂鸣片发声。压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。9设计要求定时时间到时要有声音提醒信号产生,可选择一只蜂鸣器来实现

39、这一功能。压电式蜂鸣器工作时约需 10mA 的驱动电流,并设计一个相应的驱动及控制电路。电路设计如图 3.15 所示,蜂鸣器作为三极管 Q1 的集电极负载,当 Q1 导通时,蜂鸣器发出鸣叫声音,VT1 截止时,蜂鸣器不发声。蜂鸣器电路与单片机的接口:Q1 的基极接到单片机 P1 口的 P1.5 引脚,13.5 引脚作为输出口使用。当 P1.6=1 时,Q1 导通时,使蜂鸣器的两个引脚间获得将近 5V 的直流电压,蜂鸣器中有电流通过,而产生蜂鸣音。当 P1.6=0 时,Q5 截止,蜂鸣器的两引脚间的直流电压接近于 0V,蜂鸣器不发声。图 3.15 蜂鸣器报警电路3.7 按键电路的设计本设计在按键

40、上运用了按键 1、按键 2、按键 3 分别用于设置、设置+、设置,三个按键与单片机 P3 口的 P3.7、P3.6、P3.5 一一连接,如图 3.16 所示:图 3.16 按键设置电路第 4 章 系统调试4.1 软硬件的调试暖风机系统的制作和调试,利用温度度传感器来采集周围环境的温度。根据设定温度的不同,可适当调整温度正常范围的区间值。当达不到或者超过范围的通过报警电路进行报警。当再正常范围内时则显示出温度的具体温度值。硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据实际情况可以修改温度的 初始范围,以适应不同地方,不同条件下的检测需要。根据所设计的电路参数和程序,温度检测

41、的范围为 0-+50、温度误差再0.5,系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。4.2 系统软件设计本设计就是以 AT89S52 单片机为核心。它采用模块化设计,由主程序、549 读取子程序、DS18B20 读取子程序、键处理子程序、显示子程序等模块组成。该系统的主程序处于键控循环工作方式,当按下测量键时,主程序开始调用 549 读取子程序、DS18B20 读取子程序、键处理子程序,并把测量结果用显示子程序在数码管上显示出来,从而完成整个程序过程。为了增强系统的可靠性,应在软硬件上采用一些特殊措施。主程序框图如下图 4.1 所示:549 读

42、取子程序、DS18B20 读取子程序作用是通过 P1.0 P1.4 端口将采集到的信号发送给单片机进行处理,在单片机内部处理后,通过显示电路显示出温湿度值。549 读取子程序、DS18B20 读取子程序各自完成各自的信号的采集,另外549 读取子程序还需要通过转换后才能让单片机读取来完成信号的采集。DS18B20 读取子程序、549 读取子程序如图 4.2 和图 4.3 所示。 开 始单片机初始化读取 TLC549 湿度值数 据 处 理键 处 理 设 置读取 DS18B20 温度值数 据 处 理显 示结 束温度过限蜂鸣器告警图 4.1 主程序框图 开始总 线 复 位读高位地位字节,并合并数 据

43、 处 理是否满足设限温度?输 出 数 据结 束产生报警YN图 4.2 DS18B20 读取子程序结 束TLC549,cs 置低1.4 微秒后,置 I/O CLOCK 为高读 DATA OUT ,置 I/O CLOCK 为高Cs 置高是第 8 位吗?初始化:cs=0;I/O CLOCK=1,移位计数器为零YN图 4.3 549 读取子程序总 结本设计系统采用了美国 ATMEL 公司生产的单片机 AT89S52 芯片。以及其它常用芯片如:温度传感器 DS18B20、直流电机等来设计暖风机电路,实现了温湿度的读取和显示。本系统具有易安装检测、软件功能完善,工作可靠、准确度高等优点。这次毕业设计给我的

44、感受很深刻,使我第一次系统全面的回顾了大学三年所有的课程:模拟电路、数字电路、编程等等。从中我还体会到了所学理论知识的重要性:知识掌握得越多,设计得就更全面、更顺利、更好。再有学会了怎样查阅资料和利用工具书。由于一个人不可能什么都学过,什么都懂,更加不可能一学就通,因此,当你在设计过程中需要用一些不曾学过的东西时,就要去有针对性地查找资料。在设计过程中,通过大量的查阅资料,认真研究教材,对单片机有了更为深刻的理解,在设计软件时,须仔细的分析硬件电路,画出程序流程图,按着各部分模块编写程序。毕业设计培养了严肃认真和实事求是的科学态度和吃苦耐劳的精神以及严谨的作风,提高了交流沟通和团体协作能力。这

45、些对我以后的工作都非常有帮助的。致 谢此次毕业设计,我遇到很多问题,通过向老师求教、和同学讨论让我知道真正完成一项设计是不容易的,在巩固专业知识的同时也让我学到了坚持和努力,在这里我要谢谢赵高峰老师的悉心指导,帮助解决毕业设计中遇到的许多问题,还不断向我们传授分析问题和解决问题的办法,并指出了正确的努力方向,使我在毕业设计过程中少走很多弯路。从他身上学到了很多东西,他认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我受益非浅。在此表示深深的敬意与感谢。并对多年来教导关心过我的老师表示深深的谢意和敬意。参 考 文 献1李光飞(2005)单片机课程设计实例指导 (第2版)北京航空航天出版社。

46、2张志良(2005). 单片机原理及控制技术(第2版).机械工业出版社。3刘笃仁、韩保君(2003). 传感器原理及应用技术.机械工业出版社。4刘华东(2006).单片机原理与应用(第2版).电子工业出版社。5沙占友(2002).智能化集成温度传感器原理与应用M机械工业出版社。6贾伯年(2000).传感器技术东南大学出版社。7周志文(2007).C语言程序设计机械工业出版社。8夏路易(2002).电路原理图与电路板设计教程.北京希望电子出版社。9赵亮、侯国锐(2003)单片机C语言编程与实例.人民邮电出版社。10 吉雷(2004)Protel99从入门到精通西安电子科技大学出版社。 三、源程序

47、三、源程序#defineucharunsigned char#define uintunsigned int#define ulong unsigned long#include /导入头文件#include /导入头文件#include /导入头文件#include /导入头文件sbit setdown =P35;/设置减sbit setup=P36;/设置加sbit set =P37;/设置sbit jdq =P13;/继电器sbit speak=P15; /报警sbit gwei=P24; /千位sbit swei=P23; /十位sbit bwei=P22; /十位sbit qwei=

48、P25; /个位sbit wei6=P26; /位sbit wei5=P27; /位sbit fanled =P31; /sbit hotled =P36; /sbit humiled =P37; /sbit fanjdq =P14; /sbit hotjdq =P15; /sfr XSOUT = 0 x80;/P0=0 x80,P1=0 x90,P2=0 xA0,P3=0 xB0.数据端口sbit TMDAT = P10;/温度uchartmpbuf6;/临时保存 百位,十位,个位,点位,十点位,正负位,为1为负,为0为正 /sbit TMDAT = P10;/温度/uchar code t

49、able=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x00;/显示表/uchar code table=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 x88,0 x83,0 xC6,0 xA1,0 x86,0 x8E;/共阳表uchar code table=0 xA0,0 xBB,0 x62,0 x2A,0 x39,0 x2C,0 x24,0 xBA,0 x20,

50、0 x28,0 x30,0 x25,0 xE4,0 x23,0 x64,0 x74;/共阳表bit xsbz,setbz,setupbz,setdownbz;uchar ms,adjs,setmaxt,setmint,setmaxh,setminh,setmode;uint tmp;/温度/uint admezhi;/uchartmpbuf5;/临时保存/* 549控制引脚宏定义*/ sbitTLC549_SDO =P13;/ 数据 sbitTLC549_CS =P14;/ 片选 sbitTLC549_SCK =P12;/*549时钟*/ uint adzhi; uint adyzhi; ui

51、nt adzzhi; uint admezhi; uint xianzhi; uint sdzhi; bit clbz; uchar js;/AD相关/uint tmp;/温度uchar setzhi; /设定值bit setbz,setkbz,setupbz,setdownbz; /设置标志 void Delay(int useconds) /延时 int s;for (s=0; suseconds;s+);/延时ucharReset_Bus(void) /DS18B20总线复位ucharpresence;TMDAT = 0; /输出为0Delay(29); /延时TMDAT = 1; /输

52、出为1Delay(3); /延时presence = TMDAT; Delay(25); return(presence); void Write_Bit(char bitval) /DS18B20写入一位命令TMDAT = 0; if(bitval=1) TMDAT =1;Delay(5); TMDAT = 1; void Write_Byte(char val) /DS18B20 写入一个字节数 uchari;uchartemp;for (i=0; ii; temp &= 0 x01; Write_Bit(temp); Delay(5);ucharRead_Bit(void) /DS18B

53、20读一位uchari;TMDAT = 0; TMDAT = 1; for (i=0; i3; i+); return(TMDAT); ucharRead_Byte(void) /读一个字节 uchari;ucharvalue = 0;for (i=0;i8;i+) if(Read_Bit() value|=0 x01i; Delay(6); return(value);void DS18B20_Tmp_Read(void) /DS18B20读操作 uint TEMP;ucharTEMP_LSB,TEMP_MSB;Reset_Bus();/DS18B20总线复位Write_Byte(0 xCC

54、); /DS18B20命令Write_Byte(0 x44); /DS18B20命令Delay(20);Reset_Bus();Write_Byte(0 xCC); /DS18B20命令Write_Byte(0 xBE); /DS18B20命令TEMP_LSB = Read_Byte(); /DS18B20 读低字节TEMP_MSB = Read_Byte(); /DS18B20 读高字节TEMP=TEMP_MSB;TEMP=TEMP8;TEMP=TEMP|TEMP_LSB; if(TEMP8)&0 xf0);if(sign=0 xf0)tmp=(tmp)+1; /为负tmpbuf5=1;/e

55、lseSign_Port=1;else tmpbuf5=0;tmpl=(uchar)(tmp&0 x0f);tmph=(uchar)(tmp4)&0 xff);tmpl=tmpl*6.25;tmpbuf4=tmpl%10;tmpbuf3=tmpl/10;tmpbuf2=tmph%10;tmpbuf1=(tmph%100)/10;tmpbuf0=tmph/100;/if(tmpbuf0=0)/ /tmpbuf0=10;/if(tmpbuf1=0)/tmpbuf1=10;/处理doing() uchar tzhi; tzhi=tmpbuf1*10+tmpbuf2; if(tzhisetmaxt)|

56、(tzhisetmaxh)|(sdzhisetmaxt) fanjdq=1;hotjdq=0;fanled=0;hotled=1;speak=1; if(tzhisetmint)&(tzhisetmaxh) humiled=1;speak=1; if(sdzhisetminh) humiled=0;speak=1;/加湿 if(setminhsdzhi)humiled=1;/关 if(tzhisetmint)&(tzhisetmaxt)&(setminhsdzhi) speak=0; */显示处理/xianshi() int abcd=0; if(setmode!=0) goto xsset;

57、abcd=sdzhi; /abcd%=100 ; XSOUT=tablesdzhi/10; wei6=0; Delay(60); wei6=1; XSOUT=tablesdzhi%10; wei5=0; Delay(60); wei5=1; XSOUT=table0; qwei=0; Delay(60); qwei=1; if(tmpbuf5=1) XSOUT=0 x7f; else XSOUT=tabletmpbuf1; bwei=0; Delay(60); bwei=1; XSOUT=tabletmpbuf2; XSOUT&=0 xdf; swei=0; Delay(60); swei=1

58、; XSOUT=tabletmpbuf3; gwei=0; Delay(60); gwei=1; return;/设置显示xsset: XSOUT=tablesetmode; qwei=0; Delay(60); qwei=1; XSOUT=XSOUT=0 x7f;/横 bwei=0; Delay(60); bwei=1; if(setmode=1) abcd=setmaxt; if(setmode=2) abcd=setmint; if(setmode=3) abcd=setmaxh; if(setmode=4) abcd=setminh; XSOUT=tableabcd/10; swei=

59、0; Delay(60); swei=1; XSOUT=tableabcd%10; gwei=0; Delay(60); gwei=1;void key() if(!set)&(setbz)Delay(10); if(!set) setbz=0;setmode+;if(setmode4) setmode=0; if(set)&(!setbz)Delay(10);if(set) setbz=1; if(!setup)&(setupbz)Delay(10); if(!setup) setupbz=0; if(setmode=1)&(setmaxt99) setmaxt+; if(setmode=2

60、)&(setmintsetmaxt-1)setmint+; if(setmode=3)&(setmaxh99) setmaxh+; if(setmode=4)&(setminhsetmint+1) setmaxt-; if(setmode=2)&(setmint0)setmint-; if(setmode=3)&(setmaxhsetminh+1) setmaxh-; if(setmode=4)&(setminh0)setminh-; if(setdown)&(!setdownbz)Delay(10);if(setdown)setdownbz=1; /定时中断程序/void t0 (void)

61、 interrupt 1 using 0 ms+;if(ms=20)ms=0;xsbz=!xsbz; TH0=(65536-10000)/256; TL0=(65536-10000)%256; TR0=1;/开始计时ET0=1;EA=1; / speek=!speek; /产生报警/* 名称:read549 功能:TLC549驱动模块 输入参数:port通道号 输出参数:ad转换值*/平光滑处理void pfcl() adjs+; admezhi+=adyzhi; if(adjs=10) adjs=0; admezhi/=10; xianzhi=admezhi; admezhi=0; void

62、 read549()uint ad=0,i; TLC549_CS=1; _nop_(); _nop_(); TLC549_SCK=0; _nop_(); TLC549_CS=0; _nop_(); _nop_(); _nop_();for(i=0;i8;i+) TLC549_SCK=1; /上升沿读入 if(TLC549_SDO) ad|=0 x01;/读上次输入 _nop_(); _nop_(); TLC549_SCK=0; _nop_(); _nop_(); ad=1; adyzhi=ad;/return(ad); pfcl(); / 主程序void main(void) uint i;

63、TH0=(65536-10000)/256; TL0=(65536-10000)%256; TR0=1;/开始计时ET0=1; EA=0;/ setmaxt=50; setmint=5; setmaxh=90; setminh=10; set=1; setup=1; setdown=1; speak=0;while(1)read549();sdzhi=xianzhi*1.67;if(sdzhi99) sdzhi=99;ds18b20_cl();/读取温度值for(i=0;i0;x-)for(y=80;y0;y-);3.2.2 液晶显示分数刷新子程序void writsfm(unsigned c

64、har dui,unsigned char fen)unsigned char i,j,k;/用 3 位数显示分数 i=fen/100;j=fen%100/10;k=fen%10;if(0=f|1=f)/上下半场 A,B 两队分数显示 的位置不同 if(0=dui)writcom(0 x80+4);writdata(i+0 x30);writdata(j+0 x30);writdata(k+0 x30);if(1=dui)writcom(0 x80+11);writdata(i+0 x30);writdata(j+0 x30);writdata(k+0 x30);if(2=f|3=f)if(0

65、=dui)writcom(0 x80+11);writdata(i+0 x30);writdata(j+0 x30);writdata(k+0 x30);if(1=dui)writcom(0 x80+4);writdata(i+0 x30);writdata(j+0 x30);writdata(k+0 x30);液晶显示控制分为写数据控制和写命令控制,写数据与写命令分时操作。由于液晶写数据和写命令子函数中都存在延时操作,且液晶写数据命令必须紧跟相应的写命令子函数后执行,所以分数刷新显示函数及下面的定时器中断后的时间刷新显示函数都应放在中断函数外执行,避免正在执行写命令操作时发生中断跳转,从而影

66、响后面的写数据操作。3.2.3 T0 中断程序void tim0() interrupt 1/定时器 0 中断入口 TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa+;if(0=f|1=f|2=f)if(aa=20)aa=0;miao-;if(255=miao)miao=59;fen-;if(0=fen&0=miao)f+;flag=0;fen=time;TR0=0;TR1=1;if(3=f)if(20=aa)aa=0;miao-;if(255=miao)miao=59;fen-;if(0=fen&0=miao)P2_0=0;/全场结束 LED 显示 TR0=0; 3.2.4 设置时间子函数void settime(void)/设置时间函数入口 unsigned char flag;time=0;fen=time;writtime();while(!flag)if(0=key3)delay(20);if(0=key3)while(!key3);flag=1;if(0=key1)delay(20);if(0=key1)while(!key1);

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!