目前随着社会的发展以及人们生活水平的提高,厨房中油烟机的应用越来越广泛。但是传统的油烟机基本上都是人为监控,缺少烟雾浓度和温度的检测模块,从而缺少相应的触发、调节以及控制模块。由此时常会带来一些比如煤气中毒,意外火灾等事故,给人们带来一些本来可以避免的灾难。基于此,我们按照“以人为本”的原则,设计和完善了现有的油烟机控制系统,力求防范灾难于未然,最大限度的保护人们的生命和财产安全。
本文采用温度传感器,气体浓度传感器,单片机芯片,LCD1602显示芯片,模数转换器芯片设计了一种油烟机控制系统。可以实现温度检测,气体浓度检测,温度气体浓度显示,调节报警上限,控制外围驱动电路。文中主要介绍了主控芯片相关知识,外围芯片以及电路的工作原理,各个模块的硬件电路;叙述了主程序以及各子程序的工作流程以及源代码。
关键词:抽油烟机;单片机;传感器;硬件设计
ABSTRACT
With the current development of society and improve people's living standards , the kitchen hood Petroleum widely applied . However, the conventional hood basically human monitoring, lack of concentration and temperature of the smoke detection module , so that the lack of appropriate trigger , regulation and control module. Thus often bring some such gas poisoning , accidental fires and other accidents , to bring some of the disaster could have been avoided . Based on this, we follow the \"people-oriented \" principle , the design and improvement of the existing hood control system , and strive to prevent disaster in the first place , to maximize the protection of people's lives and property safety.
In this paper, temperature sensors, gas concentration sensor , microcontroller chips , LCD1602 display chip , an analog chip design , a smoke machine control system. Can realize temperature detection, detection of gas concentrations , temperature, gas concentration display , adjust the alarm limit , control peripheral drive circuit. This paper introduces the main chip -related knowledge, the working principle of peripheral chips and circuits , each module hardware circuit ; describes the main program and the subroutine workflow and source code.
Key Words:Range hoods; SCM; sensor; software flow
II
目录
引 言 .................................................................................................................................... 2 正 文 .................................................................................................................................... 3
第一章
硬件电路 ........................................................................................................... 3
1.1系统结构框图 .............................................................................................................. 3 1.2微控制器ATC51 ....................................................................................................... 3 1.2.1微控制器ATC51 ................................................................................................... 3
1.2.2 时钟电路 ........................................................................................................ 5 1.2.3 复位电路 ........................................................................................................ 5 1.3 液晶显示模块LCD1602 ..................................................................................... 6 1.4温度传感器DS18B20 ................................................................................................... 8
1.4.1 DS18B20温度传感器 ....................................................................................... 8 1.4.2 DS18B20的工作时序 ....................................................................................... 9 1.4.3 DS18B20的功能命令 ..................................................................................... 10 1.5烟雾气敏传感器MQ-2 ............................................................................................... 10 1.6模数转换器ADC0832 ................................................................................................. 11 1.7 按键控制模块 ........................................................................................................... 12 第二章 软件设计 ................................................................................................. 13 2.1主程序流程图 ............................................................................................................ 13 2.2 键盘中断流程图 ....................................................................................................... 14 2.3 按键调节子程序 ....................................................................................................... 14 2.4 定时器中断模块 ....................................................................................................... 14 结 论 .................................................................................................................................. 16 致 谢 .................................................................................................................................. 17 附 录(程序) ...................................................................................................................... 18 参考文献 .................................................................................................................................. 29
1
引 言
进入21世纪,科学技术极大地方面了我们生活的各个方面,方便了人类的衣食住行。它使得人们的生产生活越来越趋向于自动化智能化,使人类从自然原始的状态更加彻底的出来。
经济的发展以及社会生产力的普遍提高,使得人类对自身的生活条件的要求提高,追求更加舒适洁净的生活场所。而家里的厨房烹饪食物所发出的煤气,油烟,蒸汽,高温不可避免的给我们的生活环境带来了不利因素。人类为了追求更好的生活,20世纪以来,发明了比如空调,暖气,抽油烟机,他们毫无疑问很大程度上方便了生活。但是传统的这些孤立的设备有赖于人的控制,脱离了人的控制,这些东西就会只是这些设备,不能实现他们功能的最大化。
要想实现智能控制,现代控制系统中通常有赖于智能系统的“眼睛”和“鼻子“,这些所谓的“眼睛”和“鼻子“就是我的所说的各种传感器比如温度传感器,烟雾浓度传感器,他们能够代替人类的眼睛和鼻子然后代替人类进行智能控制而且控制的更加经精确,准确,灵敏。传感器将检测的结果传送给微处理器,处理器经过数据转换数据处理,进而控制驱动外围电路,从而达到控制的目的。因此他们比人类更快速,必人类更智能,更重要的是它能够很大程度上使人类得到。
一般而言,作为常用烹饪设备,厨房离不开煤气灶,而使用煤气设备就不可避免的会产生油烟、水汽与乙烷等影响人类健康的甚至有毒的气体,为了生命健康和人类生存的需要,我们通常用通风设备来改善厨房环境。
厨房是家里环境空气污染最为严重的地方,其污染源有以下两方面;一是以煤炭、煤气、液化石油气日常用炊火中释放出的氧化物,氮氧化物等有毒有害气体;二是烹饪食物时产生的油烟以及泄露的煤气。当代流行的厨房装修大多使用开放式的设计,但烹制中餐的过程会不可避免的产生大量油烟,由于厨房的开放性,空气流动空间就会扩大,如果油烟机不能有效的排放做饭产生的油烟,就会很大程度上造成了整个房间油烟和废气的污染。
因此设计一款有效,多功能的油烟机对于每个家庭而言是迫在眉睫的。下面我们将展开我们的设计理念和过程。
2
正 文
第一章 硬件电路
1.1系统结构框图
本文采用ATC51单片机、MQ-2可燃性气体浓度传感器、DS18B20温度传感器、
LCD1602液晶显示模块设计的一种智能抽油烟机控制系统。可以实现温度检测、气体浓度检测、温度浓度显示、按键调节参数数值以及外部电路驱动等功能。具有简单实用,价格低廉,稳定性强,安全可靠等优点,有一定的实用价值。整体设计框图如图1.1所示。
MQ-2烟雾浓度传感器ADC0832模数转换器LCD1602显示模块DS18B20温度传感器51单片机蜂鸣器报警模块按键模块继电器驱动模块
图1.1 系统原理及组成框图
1.2微控制器ATC51
在诸多的控制系统中,都以微控制器作为核心控制器件。
在该控制系统中,微控制器一方面接收烟雾传感器的模拟信号并进行AD转换,检测温度传感器信号并转换成摄氏温度信号;另一方面将实时检测的数据显示在液晶显示屏,控制蜂鸣器实现对外界信号的报警,控制继电器实现对外界电路的驱动。与此同时,通过外部中断对报警的参数进行调节以及手动控制警报,实现智能控制。
基于上述原因,因此我们选用了ATMEL公司生产的ATC51单片机,该种型号的单片机价格适中,运行稳定,易于操作。实践证明它确实能够很好的满足我们的要求。 ATC51单片机正常工作依靠一定的外围电路,也就是单片机最小系统。 ATC51单片机最小系统包括:ATC51单片机、时钟电路、复位电路。 1.2.1微控制器ATC51
ATC51单片机是一种带4K字节Flash的低电压、高性能CMOS8位微处理器。该器
3
件使用Atmel高密度非易失存储器制造技术,与工业标准的MCS-51指令集和输出管脚相兼容,是一种高效微控制器。ATC51单片机拥有强大的中断系统,大大调高了程序的运行效率,能够保证许多不同功能的实现,其程序存储器和数据存储器可以进行外部扩展,从而有更大的空间来存储数据。它可以使用C语言编程控制,为很多嵌入式控制系统提供了一种灵活高性价比的方案,在工业、农业以及生活领域得到了广泛的应用。因此,本设计采用ATC51单片机作为控制核心,具有价格低、易控制以及可实现设计所需的全部功能的特点。 1.内部结构
ATC51单片机由处理器、内部数据存储器、内部程序存储器、定时器/计数器、并行I/O口、串行口、中断控制系统以及时钟电路组成。
(1)处理器:简称CPU,是单片机的核心,能够完成运算和控制功能。ATC 51的CPU可以处理8位的二进制数。
(2)内部数据存储器:简称内部RAM,ATC51的共有256个RAM单元,其中前128
个单元可以被用户自由使用,可以存放数据;其后128个单元供专用寄存器使用。
(3)内部程序存储器:简称内部ROM,ATC51有4KB的掩膜ROM可以存放程序、数 据表格等。
(4)定时器/计数器:ATC51有2个16位的定时器/计数器,可以实现定时和计数 功能。
(5)并行I/O口:实现数据的输入和输出。 (6)串行口:ATC51有一个全双工的串行口,可以实现它与其他相关设备之间的数据传送,也可以作为同步移位器。
(7)中断系统:ATC51有5个中断源,其中外部中断2个,定时器/计数器中断2个以及1个串行中断。全部中断都包高、低级两个优先级别。 2.管脚介绍
ATC51单片机芯片如图1.2所示。 VCC:电源输入,接+5V。 VSS:电源地端。
XTAL1:时钟的反相放大器输入端。 XTAL2:时钟的反相放大器输出端。
RST:复位信号,当输入高电平时间在2个机器周期以上系统立即复位。。 EA/VPP:访问程序存储器控制信号。EA为低电平,对ROM的访问从外部存储器开始; EA为高电平,对ROM的访问从内部程序存储器开始。
ALE:地址锁存控制信号端。系统扩展过程中,ALE把P0口输出的低8位地址锁存, 另外,它还可以输出频率为晶振六分之一的正脉冲。
PSEN:外部程序存储器的读选通信号。单片机读外部ROM时,PSEN低电平有效。 P0.0~P0.7口:8位双向数据输入输出口线。P0口作为一般的I/O口输出时需连 接上拉电阻;当它作为I/O输入时,须先向锁存器写“1”。
P1.0~P1.7口:8位双向数据输入输出口线。P1口作输出无需接上拉电阻,输 入时,也需向锁存器写“1”。
P2.0~P2.7 口:8位双向数据输入输出口线;通常情况下,作为高位地址线使用。 P3.0~P3.7 口:8位双向数据输入输出口线;P3口引脚第二功能:P3.0(RXD),
4
图1.2 ATC51单片机的引脚图
可用于串行通信时数据的接收;P3.1(TXD),可用于串行通信时数据的发送;P3.2(INT0),可用于外部中断0请求;P3.3(INT1),可用于外部中断1请求;P3.4(T0),可用于定时器/计数器0的外部输入;P3.4(T1),可用于定时器/计数器1的外部输入;P3.6(WR),可用于外部RAM的写选通;P3.7(RD),可用于外部RAM的读选通。
1.2.2 时钟电路
单片机的时钟电路用来产生其工作时所需要的特定时钟信号。ATC51单片机内部有一个反相放大器,它的输入端为XTAL1,输出端为XTAL1,XTAL1和XTAL2两端之间需接晶体振荡器和合适的电容,电容起到微调的作用。从而构成时钟电路产生振荡脉冲,振荡脉冲经过触发器进行二分频后,方可作为时钟信号。晶体的振荡频率和单片机的运行速度呈正比,通常ATC51单片机使用的晶体振荡频率为6MHZ,12MHZ,11.0592MHZ,本设计采用的是11.0592MHZ的晶体。单片机时钟振荡电路如图1.3所示。
图1.3 单片机时钟振荡电路
1.2.3 复位电路
单片机的复位是指使CPU或者系统中的其他功能部件停止工作,回归到设定的一个初始状态,然后从这个状态开始工作。系统断电后,再次上电时系统自动复位,在系统
5
运行出故障时,例如运行进入死循环时,可以对其进行复位,然后重新开始工作。 由此可知,复位电路是系统很重要的一部分。
ATC51单片机复位的条件是:RST引脚加上一个持续二个机器周期以上的高电平。单片机的复位电路通常有两种形式,为上电复位和按键复位。本设计采用的是按键复位,如图1.4所示。
图1.4 复位电路
1.3 液晶显示模块LCD1602
字符型LCD专门用于显示数字、字母、图形符号及少量的自定义符号。显示器吧LCD控制器、点阵驱动器、字符存储器等做在一块板上,在与液晶屏一起组成一个显示模块。
液晶显示的原理是利用液晶的物理特性,通过调节电压对显示区域进行控制,只需输入所需的电压就可以显示出字符。LCD能够显示字符的关键在与控制器,目前大部分点阵型LCD都是用HD44780集成电路作为控制器。HD44780的工作原理较为复杂,但是它的使用却相对简单。只要将待显示字符的ASCII码输入到内部数据存储器,内部电路就会自动将字符传送到液晶屏上进行显示。
LCD1602价格适中,显示位数多,灵活,易于编程,反应速度相对较快,具有背光特性,因此应用比较广泛,更为广大电子爱好者所喜爱。
1602型LCD主要技术指标 ●显示容量:16×2个字符 ●芯片工作电压:4.5~5.5V ●工作电流:2.0mA(5.0V) ●标准工作电压:5.0V1602型LCD采用标准的14引脚(无背光)或16引脚(背光)接口,其引脚图如图1.5所示。
图1.5 LCD1602引脚图
6
引脚1(VSS):电源地 引脚2(VDD):电源正极 引脚3(VL):反视度调整,使用可变电阻调整,一般接地 引脚4(RS):寄存器选择,RS=1,选择数据存储器;RS=0,选择指令存储器
引脚5(R/W):读/写选择。R/W=1,读;R/W=0,写 引脚6(E):模块使能端,当E由高电平跳变成低电平时,液晶模块执行指令 引脚7(DB0):双向数据线第0位 引脚8(DB1):双向数据线第1位 引脚9(DB2):双向数据线第2位 引脚10(DB3):双向数据线第3位 引脚11(DB4):双向数据线第4位 引脚12(DB5):双向数据线第5位 引脚13(DB6):双向数据线第6位 引脚14(DB7):双向数据线第7位 引脚15(A):背光显示器电源+5V 引脚16(K):背光显示器接地
(1) 时序图 1602读操作时序
地址表如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 40H 41H 42H 43H 44H 45H 46H 47H 48H 49H 4AH 4BH 4CH 4DH 4EH 4FH 1602写操作时序
7
依据以上论述,LCD1602和51单片机可有如下连接
由于单片机内P0口无上拉电阻,没有驱动负载的能力,因此在驱动LCD1602数据总线时,需要外接上拉电阻。 1.4温度传感器DS18B20
DS18B20温度传感器是美国DALLAS公司推出的单总线器件,它具有很多优点,例如:低功耗、高性能、体积小、线路连接简单等特点,它可以直接把传感器测到的温度数据转换成单片机可以处理的二进制数,并且可以在一根总线上挂接多个温度传感器,实现温度的多点测量。应用范围广泛,可以适应多种复杂的环境。 1.4.1 DS18B20温度传感器
1. DS18B20是DALLAS公司生产的一线式数字温度传感器,具有微型化、低功耗、高性能、抗干扰能力强等优点,可直接将温度转化成串行数字信号给单片机处理,因而可以省去传统的信号放大、A/D转换等外围电路。具有以下特点: (1)只需一个端口引脚就可以进行通信; (2)每个DS18B20上都有唯一的序列号;
(3)其测温范围为-55度~+125度,测温范围广;
(4)其分辨率可在9~12位之间选择,能够满足对温度不同精度的要求; (5)其内部有温度上下限报警的设置;
(6)其把温度转换为二进制数的时间为93.78ms到750ms,显示速度; 2. TO-92封装的DS18B20的如图1.6所示,其引脚功能描述见表2-1:
图1.6 TO-92封装的DS18B20
8
序号 1 2 名称 GND DQ 引脚功能描述 地信号 数字输入输出引脚,单总线接口引脚,如果使用寄生电源时,能够向电源提供电源 3 VDD 电源引脚,如果传感器使用寄生电源工作,该引脚接地 表2-1 DS18B20引脚功能
1.4.2 DS18B20的工作时序
DS18B20的工作时序包括初始化、写时序、和读时序,如图1.6所示:
(a)初始化
(b)读时序
(c)写时序
图1.6 DS18B20的工作时序
9
初始化时序:单片机输出高电平将数据线置位高电平,延时(尽可能短一些);单 片机输出低电平将数据线拉低,延时480~960us后释放,延时等待15~60us,DS18B20会输出一个持续60~240us的低电平脉冲,单片机接收到此应答后就可以进行操作,否则继续重复前面步骤,直到最后检测到低电平脉冲为止,然后将数据线拉高。
写时序:单片机将数据线的数据线先置低电平0。延时确定的时间为15us。从低 位到高位发送数据,一次只发送一位,延时45us后,将数据线拉高,继续重复前面步骤,直到整个字节发送完,最后拉高数据线。
读时序:单片机将数据线从高电平拉低,使读时序初始化,若15us后,单片机检 测到低电平,则从DS18B20读到“0”,若15us后检测到高电平,则从DS18B20读到“1”。 1.4.3 DS18B20的功能命令
DS18B20的功能命令均为8位字长,常见的命令代码如表2-2。
功能描述 代码
启动温度转换 44H
读暂存器内容 读DS18B20的序列号 报警搜索 跳过读序列号的操作 读电源供给方式,0为寄生电源;1为外部电源 匹配ROM 把数据写入暂存器的第2、3字节 表2-2 DS18B20的功能命令
BEH 33H ECH CCH B4H 55H 4EH
1.5烟雾气敏传感器MQ-2
MQ-2气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。 MQ-2气体传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其它可燃蒸汽的检测也很理想。
(1)电气性能:
●输入电压:DC5V
●功耗(电流):150mA
●DO输出:TTL数字量0和1(0.1和5V) ●AO输出:0.1-0.3V(相对无污染),最高浓度电压4V左右 (2)接线方式:
VCC:接电源正极(5V) GND:接电源负极
10
DO:TTL开关信号输出,输出数字信号0和1 AO:模拟信号输出,接模数转换器ADC0832 1.6模数转换器ADC0832
模拟信号经过采样、保持、量化和编码后就可以转换成数字信号,这个转换过程叫做A/D转换。
A/D转换器的主要技术指标
●转换时间:从发出启动转换命令到转换结束获得数字信号为止所需要的时间 ●分辨率:表示转换器对微小输入量变化的敏感程度,通常用转换器输出数字量的位来表示
●转换精度:指转换后的结果相对于实际值的准确度,用满量程的百分比来表示 ADC0832是8引脚双列直插式双通道A/D转换器,它能分别对两路模拟信号实现模/数转换。具有体积小、兼容性强、性价比高、占用I/O口少等优点,因此应用非常广泛。ADC0832引脚图如图1.4所示。
图1.4 ADC0832引脚图
ADC0832引脚图说明如下: CS:片选端,低电平选中芯片 CH0:模拟输入通道0 CH1:模拟输入通道1 GND:芯片接地端
DI:数据信号输入,选择通道控制 DO:数据信号输出,转换数据输出 CLK:芯片时钟输入 VCC:电源输入端
ADC0832的工作时序图如图1.5所示
●当DI依次输入1、0时,只对CH0通道进行点通道转换 ●当DI依次输入1、1时,只对CH1通道进行点通道转换
●当DI依次输入0、0时,将CH0作为正输入端,CH1作为负输入端 ●当DI依次输入1、0时,将CH0作为负输入端,CH1作为正输入端
正常情况下,ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO和DI两个端口的值在通信时并未同时使用,而是由DI端口输入两位数据(0或1)来选择通道控制,再由DO端口输出数据,因此,在I/O口资源紧张时,可以将
11
图1.5 ADC0832的工作时序图
DO和DI并联在一根数据线上使用。
由于该系统需要I/O数量较多,因此我们采用单口连接,以节省单片机端口,其接线方式如图1.6所示
图中CH0接传感器输出信号,要求接入信号强度范围在0到参考电压之间。
图1.6 单片机与ADC0832接口
1.7 按键控制模块
按键控制电路如图1.7所示,系统通过P1.0和P1.1口的按键引发中断,在中断服务程序中设置按键的报警上限,由于51单片机是下降沿触发中断,所以与非门之后还需要接入非门以满足触发要求。
P1.2和P1.3用来控制报警上限的加一和减一,而且只有在系统在执行中断服务程序时才能发挥控制作用,以维持显示屏的显示稳定性。
值得注意的是,由于按键抖动,需要在软件编程时加入去抖动程序。
12
图1.7 按键控制电路
第二章 软件设计
2.1主程序流程图
主程序流程图如图2.1所示。
开始初始化预显示实时烟雾浓度显示实时温度显示否判断是否超出上限是报警控制子程序
图2.1 主程序流程图
主程序中预显示的内容是在显示器上倒计时10秒,这样能够让传感器提前上电预热一段时间,使得之后的显示更加稳定,也能避免温度传感器最初始的85℃。
在烟雾浓度显示模块包括烟雾传感器和模数转换模块,传感器输出0~5V电压,所以该模块的
13
主要功能是A/D转换。
在温度显示模块主要是对温度的实时采集和转换。由于该传感的内部初值的原因使得刚开始显示的数值为85℃,所以在第一次显示之前需让内部初值先读出来,这样可以有效的避免这种系统错误。
由于报警、控制子程序都是些最基础的判断语句,所以下面就不列出流程图了。
2.2 键盘中断流程图
键盘中断流程图如图2.2所示
开始检测按键显示子程序1判断按键显示子程序2结束 图2.2 键盘中断流程图
按键触发中断进入中断服务程序后,系统通过识别具体按键编号来执行不同显示子程序,从而达到调节的目的。
2.3 按键调节子程序
按键调节子程序如图2.3所示
在中断程序中,主体部分重复运行250次,如果在这期间P1.2和P1.3上的按键没有动作,中断函数执行完之后系统会自动返回主函数,中断函数大约会执行两秒,否则中断函数还会继续延时两秒。如果在这期间检测到按键按下,则系统会通过按键调节上限的设定值,并能够在主函数中动态显示出来。
2.4 定时器中断模块
这部分主要用来控制蜂鸣器发声,但输出频率不同时,声音的音调不同,这样人们可以通过区分不同的音调就来判断是温度还是烟雾浓度部分的触发。
定时器模块是通过赋予不同定时初值来调节不同的频率,软件编程包括初始化(包括定时器赋初值)判断触发条件,开(闭)中断,进入中断,定时器赋初值,判断触发条件„„以此顺序循环下去。由于中断程序较少且在多个程序中同时出现,不便写出流程图,这里只做大致描述。
14
开始预显示判断循环变量完全显示是检测按键1否上限加一检测按键2否是上限减一结束
图2.3 按键调节子程序
15
结 论
从上学期就陆续的开始准备毕业设计,到现在为止基本完成了毕业设计所包含的任务,其间,经历了很多,学到了很多,也很有感悟。虽然曾经迷茫过,为难过,但也激起了我对本专业的极大兴趣,激励我朝着这条路一直走下去。
毕业设计一路走来,从写开题报告开始,着手前期资料准备,中期报告,开始硬件电路设计,尝试软件编程,画仿真电路图,调试程序,正式搭建硬件电路,再次调试程序,完成论文。学到了之前没有接触到的东西,开阔了眼界,增长了见识。
因为之前都是编一些相对较小的程序,当突然接触一些很大的程序时,会自然感觉到手足无措,很是为难,可是当自己沉下心来,将每一个程序分开进行研究,各个击破之后,就会对程序的整体有个大致的概念。因为在前期准备阶段看过不少类似这样的程序,随着学习练习的深入,对程序的结构,语法知识,常见算法就会慢慢的熟悉起来,最后编程时自然会得心应手。
以前在学习单片机的时候,接触到的一些接口电路都很基础,也不会涉及驱动电路,滤波电路等典型的模拟电路。但是一些常见的外围器件比如温度传感器DS18B20,烟雾传感器,超声波传感器等一些相对复杂的器件就在我们的掌握范围之外了,这时培养自己的学习能力就显得尤为重要,因为大千世界,各种器件,我们不可能掌握所的东西,但是当我们学会学习的时候,我们就“无敌”了。正所谓“授人以鱼不如授人以渔”。
尽管我准备的还算比较充分,但是还是遇到了好多问题,这里就两个主要的问题作简要说明。 第一,是关于温度传感器的,当我们按照正常的步骤编程后,发现最初显示的温度是85℃,大约会显示一秒,然后恢复正常显示。我本来以为这是系统错误,消除不了,后来通过查找资料,我发现,这是温度传感器初始化的问题,可以通过软件编程的方式加以消除。只需让温度传感器提前工作几秒钟,而液晶显示器不显示此时温度值,然后再恢复正常显示,就会有效的消除这一系统错
误。
第二,当我仿真完成后,就着手开始搭建硬件电路,等我按照仿真电路图搭建电路图时,发现仿真图的器件和实际的器件是由差别的,导致了我刚开始的焊接出现了大量的问题,反复修改,后来我就干脆先把所有用到的元器件全部拿来比对,比较它们之间的差别,然后按照仿真图画实际电路图,最后进行焊接,这样就有效的减少了失误。
由于在本次设计中,好多东西都是第一次接触,所以遇到了好多意想不到的错误,我相信通过以后不断努力的学习,我会更加熟练地掌握所学的知识,并将之用于实践当中,使科学技术转化为生产力,为社会主义建设做贡献。
16
致 谢
经过十三周的学习努力,我终于完成了自己的抽油烟机控制系统的设计,在此首先衷心感谢***老师给予我的指导和帮助。这个设计的题目是老师亲自帮我选的,在毕业设计工作刚开始的时候,我完全处于茫然状态,因为之前一直没有系统性的做过这种相关的课题,所以不知道从哪方面开始,经过耿老师的提示和分析,我很快确定了大概的设计方向,通过查阅相关的资料,我逐步确立了自己的课题的设计目标,从而开始正式着手设计。在毕业设计的后期,耿老师又给我的论文和实物提出了一些建设性的意见,使我的设计更加合理。她的和蔼的态度、严格的要求以及精益求精的工作作风给我留下了深刻的印象,我不仅从她那里学到了很多知识,也学到一些做人的道理。
除此之外,我还要感谢身边的一些同学,他们和我一起并肩学习生活四年,在我需要帮助的的时候都会无私的援助之手,并且给我提出一些建议,使我在大学四年有了很大进步。尤其是毕业设计这段枯燥的时间,他们不仅给予我提供了设计方面的帮助,还给我以精神上的鼓励,使我在这段时间一直过得充实快乐,顺利的完成了毕业设计。
最后,我要深深的感谢我的母校—**大学,是它给我提供了这样一个学习交流的平台,让我在这里能够取得很大的进步和提高。在这个大环境中,一方面,我学习到了自己的专业知识,开发了自己对这个领域的兴趣,通过刻苦学习,提高了自己的专业素养,培养了自己对新事物的学习能力,使自己能够在以后的工作中和接触新事物的过程中做到游刃有余;另一方面,大学提供了很多的锻炼机会,让我能够在锻炼中学到与人、处事的道理,为自己以后的发展奠定了基础。
17
附 录(程序)
#include sbit CS=P2^4; //将CS位定义为P3.4引脚 sbit CLK=P2^6; //将CLK位定义为P1.0引脚 sbit DIO=P2^7; //将DIO位定义为P1.1引脚 sbit LCD_RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚 sbit LCD_RW=P2^1; //读写选择位,将RW位定义为P2.1引脚 sbit LCD_E=P2^2; //使能信号位,将E位定义为P2.2引脚 sbit wendu=P1^0; sbit nongdu=P1^1; sbit DEC=P1^3; sbit INC=P1^2; sbit CT=P1^4; sbit CN=P1^5; sbit sound0=P1^6; sbit sound1=P1^7; char WH=40; char NHH=2; //温度中断控制位 //烟雾浓度中断控制位 //上限加一位 //上限减一位 //温度控制位 //浓度控制位 //温度上限报警位 //烟雾浓度上限报警位 //温度上限值 //烟雾浓度上限整数位 char NHL=50; //烟雾浓度上限小数位 uchar TL; //储存暂存器的温度低位 uchar TH; //储存暂存器的温度高位 uchar TN; //储存温度的整数部分 uchar TD; //储存温度的小数部分 uchar Int,Dec; //分别储存转换后的整数部分与小数部分 void delay1ms() { uchar i,j; } void delaynms(uint n) //延时nms 18 for(i=0;i<10;i++) for(j=0;j<33;j++) ; //延时1ms { uint i; } void delay_n10us(uint n) //延时10微妙,做1602显示用 { uint i; for(i=n;i>0;i--) { _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); } } void LCD_write_command(uchar dat) { delay_n10us(10); LCD_RS=0; LCD_RW=0; LCD_E=1; LCD_DB=dat; delay_n10us(10); LCD_E=0; delay_n10us(10); } void LCD_write_data(uchar dat) { delay_n10us(10); LCD_RS=1; LCD_RW=0; LCD_E=1; LCD_DB=dat; delay_n10us(10); LCD_E=0; delay_n10us(10); } void LCD_disp_char(uchar x,uchar y,uchar dat) //在既定的行列写数据 { uchar address; if(y==1) 19 //写数据 //写指令 for(i=0;i address=0xc0+x; LCD_write_command(address); LCD_write_data(dat); } void LCD_disp_str(uchar x,uchar y,uchar *str) //在既定的行列写字符 { uchar address; if(y==1) address=0x80+x; else address=0xc0+x; LCD_write_command(address); while(*str!='\\0') { LCD_write_data(*str); str++; } } void LCD_init() { delay_n10us(10); LCD_write_command(0x38);//设置8位格式,2行,5x7 delay_n10us(10); LCD_write_command(0x0c);//开显示,关光标,不闪烁 delay_n10us(10); LCD_write_command(0x06);//设定输入方式,增量不移位 delay_n10us(10); LCD_write_command(0x01);//清除屏幕显示 delay_n10us(100); //延时清屏,延时函数,延时约n个10us } unsigned char A_D() { uchar i,dat; CS=1; //一个转换周期开始 CLK=0; //为第一个脉冲作准备 CS=0; //CS置0,片选有效 DIO=1; //DIO置1,规定的起始信号 20 // //LCD初始化 CLK=1; //第一个脉冲 CLK=0; //第一个脉冲的下降沿,此前DIO必须是高电平 DIO=1; //DIO置1, 通道选择信号 CLK=1; //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0 CLK=0; //第二个脉冲下降沿 DIO=0; //DI置0,选择通道0 CLK=1; //第三个脉冲 CLK=0; //第三个脉冲下降沿 DIO=1; //第三个脉冲下沉之后,输入端DIO失去作用,应置1 CLK=1; //第四个脉冲 for(i=0;i<8;i++) //高位在前 { CLK=1; //第四个脉冲 CLK=0; dat<<=1; //将下面储存的低位数据向右移 dat|=(unsigned char)DIO; //将输出数据DIO通过或运算储存在dat最低位 } } sbit DQ=P2^3; uchar time; //设置全局变量,专门用于严格延时 bit Init_DS18B20(void) { bit flag; //储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在 DQ = 1; //先将数据线拉高 for(time=0;time<2;time++) //略微延时约6微秒 ; DQ = 0; //再将数据线从高拉低,要求保持480~960us for(time=0;time<200;time++) //略微延时约600微秒 ; //以向DS18B20发出一持续480~960us的低电平复位脉冲 DQ = 1; //释放数据线(将数据线拉高) for(time=0;time<10;time++) ; //延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲) flag=DQ; //让单片机检测是否输出了存在脉冲(DQ=0表示存在) for(time=0;time<200;time++) //延时足够长时间,等待存在脉冲输出完毕 ; return (flag); //返回检测成功标志 } uchar ReadOneChar(void) { 21 CS=1; //片选无效 return dat; //将读书的数据返回 } WriteOneChar(uchar dat) { uchar i=0; } 22 for (i=0; i<8; i++) { DQ =1; // 先将数据线拉高 _nop_(); //等待一个机器周期 DQ=0; //将数据线从高拉低时即启动写时序 DQ=dat&0x01; //利用与运算取出要写的某位二进制数据, for(time=0;time<10;time++) uchar i=0; uchar dat; //储存读出的一个字节数据 for (i=0;i<8;i++) { DQ =1; // 先将数据线拉高 _nop_(); dat>>=1; //等待一个机器周期 DQ = 0; //单片机从DS18B20读书据时,将数据线从高拉低即启动读时序 _nop_(); //等待一个机器周期 for(time=0;time<2;time++) if(DQ==1) dat|=0x80; //如果读到的数据是1,则将1存入dat else dat|=0x00;//如果读到的数据是0,则将0存入dat DQ = 1; //将数据线\"人为\"拉高,为单片机检测DS18B20的输出电平作准备 ; //延时约6us,使主机在15us内采样 //将单片机检测到的电平信号DQ存入r[i] for(time=0;time<8;time++) ; //延时3us,两个读时序之间必须有大于1us的恢复期 } return(dat); //返回读出的十进制数据 //并将其送到数据线上等待DS18B20采样 ;//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样 DQ=1; //释放数据线 for(time=0;time<1;time++) } ;//延时3us,两个写时序间至少需要1us的恢复期 dat>>=1; //将dat中的各二进制位数据右移1位 for(time=0;time<4;time++) ; //稍作延时,给硬件一点反应时间 void ReadyReadTemp(void) { Init_DS18B20(); //将DS18B20初始化 } void display1() { uchar i,k; LCD_disp_str(0,1,\"current: . \"); LCD_disp_char(13,1,0xdf); LCD_disp_str(14,1,\"C\"); LCD_disp_str(0,2,\"Top: \"); for(k=0;k<250;k++) { LCD_disp_char(8,1,TN/100+'0'); LCD_disp_char(9,1,(TN%100)/10+'0'); LCD_disp_char(10,1,TN%10+'0'); LCD_disp_char(12,1,TD+'0'); LCD_disp_char(4,2,WH/10+'0'); LCD_disp_char(5,2,WH%10+'0'); for(i=0;i<100;i++) { if(WH<99) { if(INC==0) LCD_disp_char(6,2,0xdf); LCD_disp_str(7,2,\"C\"); //分页显示温度 WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 for(time=0;time<100;time++) ; //温度转换需要一点时间 Init_DS18B20(); //将DS18B20初始化 WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器,前两个分别是温度的低位和高位 { delaynms(100); if(INC==0) { k=0; 23 } LCD_disp_str(0,1,\"con : . \"); LCD_disp_str(0,2,\"temp: . \"); LCD_disp_char(10,2,0xdf); } void display2() { uchar i,k; LCD_disp_str(0,1,\"current: . \"); LCD_disp_str(0,2,\"Top: . \"); for(k=0;k<250;k++) { LCD_disp_char(8,1,Int+'0'); LCD_disp_char(4,2,NHH+'0'); LCD_disp_char(6,2,NHL/10+'0'); for(i=0;i<100;i++) { if(NHH<5) { if(INC==0) 24 LCD_disp_char(10,1,Dec/10+'0'); LCD_disp_char(11,1,Dec%10+'0'); //分页显示烟雾浓度 LCD_disp_str(11,2,\"C\"); WH++; } } if(WH>10) } { if(DEC==0) delaynms(100); if(DEC==0) { k=0; WH--; } } } { } { delaynms(100); if(INC==0) { k=0; NHL=NHL+10; if(NHL==100) { NHL=0; NHH++;} } } } if(NHH>0) {if(DEC==0) { delaynms(100); if(DEC==0) { k=0; if(NHL==0) {NHL=100; NHH--;} NHL=NHL-10; } }} } } LCD_disp_str(0,1,\"con : . \"); LCD_disp_str(0,2,\"temp: . \"); LCD_disp_char(10,2,0xdf); LCD_disp_str(11,2,\"C\"); } void main() { uint AD_val; //储存A/D转换后的值 char i; CT=0; //控制位初始化为0 CN=0; sound0=0; sound1=0; 25 EA=1; //中断初始化 EX0=1; IT0=1; LCD_disp_str(0,1,\"con : . \"); LCD_disp_str(0,2,\"temp: . \"); LCD_disp_char(10,2,0xdf); LCD_disp_str(11,2,\"C\"); while(1) { ReadyReadTemp(); //读温度准备 TL=ReadOneChar(); //先读的是温度值低位 26 LCD_disp_char(5,1,Int+'0'); LCD_disp_char(7,1,Dec/10+'0'); LCD_disp_char(8,1,Dec%10+'0'); AD_val= A_D(); //进行A/D转换 Int=(AD_val)/51; //计算整数部分 Dec=(AD_val%51)*100/51; //计算小数部分 LCD_init(); delaynms(5); ReadyReadTemp(); //读温度准备 LCD_disp_str(0,1,\"Please Waiting\"); 、 LCD_disp_str(0,2,\" S \"); for(i=3;i>0;i--) { LCD_disp_char(5,2,i/10+'0'); LCD_disp_char(6,2,i%10+'0'); delaynms(1000); } ET1=1; ET0=1; TMOD=0x11; TH0=0; TL0=0; TH1=(65536-921)/256; TH1=(65536-921)%256; TH=ReadOneChar(); //接着读的是温度值高位 TN=TH*16+TL/16; //实际温度值=(TH*256+TL)/16,即:TH*16+TL/16 //这样得出的是温度的整数部分,小数部分被丢弃了 //这样得到的是温度小数部分的第一位数字(保留1位小数) TD=(TL%16)*10/16; //计算温度的小数部分,将余数乘以10再除以16取整, LCD_disp_char(5,2,TN/100+'0'); LCD_disp_char(6,2,(TN%100)/10+'0'); LCD_disp_char(7,2,TN%10+'0'); LCD_disp_char(9,2,TD+'0'); delaynms(10); if(TN>=WH) {sound1=1;CT=1;TR1=1;} else {sound1=0;CT=0;TR1=0;} if(Int>NHH) {sound0=1;CN=1;TR0=1;} if(Int==NHH) { if(Dec>=NHL) {sound0=1;CN=1;TR0=1;} else {sound0=0;CN=0;TR0=0;} } if(Int } } void int0() interrupt 0 // { uchar key=2; if((P1&0x03)!=0x03) { delaynms(20); if((P1&0x03)!=0x03) { if(wendu==0) key=0; if(nongdu==0) key=1; 27 } } switch(key) { case 0: display1();break; case 1: display2();break; case 2: _nop_();break; } } void time0() interrupt 1 { sound0=~sound0; } void time1() interrupt 3 { sound1=~sound1; TH1=(65536-921)/256; TH1=(65536-921)%256; } // 28 参考文献 【1】 赵负图.传感器集成电路手册.化学工业出版社,2004. 【2】 李华.MCS-51系列单片机实用接口技术,第三版,北京:1997. 【3】 张红润.实用自动控制.成都:科技大学出版社,1990. 【4】 康华光.电子技术基础.北京:高等教育出版社,1983. 【5】 潘新民.微型计算机控制技术.北京:人民邮电技术出版社,1988. 【6】 赵依军.单片机微型接口技术.北京:人民邮电技术出版社,19. 【7】 李广弟.单片机基础.北京:北京航空航天大学出版社,2007. 【8】 胡汉才.单片机原理及其接口技术.北京:清华大学出版社,1996. 【9】 王毅.单片机器件应用手册.北京:人民邮电出版社,1995. 【10】 李朝青,.单片机原理及接口技术. 北京: 北京航空航天出版社, 2002. 29
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务