基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc

上传人:聆听****声音 文档编号:474777 上传时间:2023-04-29 格式:DOC 页数:22 大小:861KB
下载 相关 举报
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第1页
第1页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第2页
第2页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第3页
第3页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第4页
第4页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第5页
第5页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第6页
第6页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第7页
第7页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第8页
第8页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第9页
第9页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第10页
第10页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第11页
第11页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第12页
第12页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第13页
第13页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第14页
第14页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第15页
第15页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第16页
第16页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第17页
第17页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第18页
第18页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第19页
第19页 / 共22页
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc

《基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc》由会员分享,可在线阅读,更多相关《基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc(22页珍藏版)》请在冰点文库上搜索。

基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc

3.设备便于携带,操作简单。

4.实现单片机控制的智能化。

3系统硬件电路设计

3.1主控器AT89C52

实物图:

AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。

AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。

 AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

兼容MCS51指令系统

·

8k可反复擦写(>

1000次)FlashROM

  32个双向I/O口·

256x8bit内部RAM

  ·

3个16位可编程定时/计数器中断,时钟频率0-24MHz

2个串行中断·

可编程UART串行通道

2个外部中断源·

共6个中断源

2个读写中断口线·

3级加密位

全双工增强型UART。

3个16位定时/计数器,T0、T1(标准80C51)和增加的T2(捕获和比较)。

全静态工作方式:

0~24MHz。

3.2模数转换电路ADC0809

3.2.1ADC0809的性能特性

ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。

它是逐次逼近式A/D转换器,可以和单片机直接接口。

ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。

多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。

三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

ADC0809各脚功能如下:

D7-D0:

8位数字量输出引脚。

IN0-IN7:

8位模拟量输入引脚。

VCC:

+5V工作电压。

GND:

地。

REF(+):

参考电压正端。

REF(-):

参考电压负端。

START:

A/D转换启动信号输入端。

ALE:

地址锁存允许信号输入端。

(以上两种信号用于启动A/D转换).

EOC:

转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。

OE:

输出允许控制端,用以打开三态数据输出锁存器。

CLK:

时钟信号输入端(一般为500KHz)。

A、B、C:

地址输入线。

C

B

A

选择的通道

IN0

1

IN1

IN2

IN3

IN4

IN5

IN6

IN7

3.2.2ADC0809数据操作原理

ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。

其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。

ADC0809对输入模拟量要求:

信号单极性,电压范围是0-5V,若信号太小,必须进行放大;

输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。

地址输入和控制线:

4条

ALE为地址锁存允许输入线,高电平有效。

当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进入转换器进行转换。

A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。

通道选择表如下表所示。

ST为转换启动信号。

当ST上跳沿时,所有内部寄存器清零;

下跳沿时,开始进行A/D转换;

在转换期间,ST应保持低电平。

EOC为转换结束信号。

当EOC为高电平时,表明转换结束;

否则,表明正在进行A/D转换。

OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。

OE=1,输出转换得到的数据;

OE=0,输出数据线呈高阻状态。

D7-D0为数字量输出线。

CLK为时钟输入信号线。

因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,VREF(+),VREF(-)为参考电压输入。

3.3甲醛检测电路的设计

3.3.1甲醛传感器工作原理

其实物图如下:

主要参数如下:

一、尺寸:

32mmX22mmX27mm长X宽X高

二、主要芯片:

LM393、MQ-138甲醛传感器

三、工作电压:

直流5伏

四、特点:

1、具有信号输出指示。

2、双路信号输出(模拟量输出及TTL电平输出);

3、TTL输出有效信号为低电平。

(当输出低电平时信号灯亮,可直接接单片机);

4、模拟量输出0~5V电压,浓度越高电压越高;

5、对醛、醇、酮芳族化合物具有很高的灵敏度;

对醛、醇、酮、芳族化合物具有很高的灵敏度对醛、醇、酮、芳族化合物具有很高的灵敏度;

对醛、醇、酮、芳族化合物具有很高的灵敏度;

6、具有长期的使用寿命和可靠的稳定性;

7、快速的响应恢复特性;

3.3.2甲醛传感器与ADC0809模数转换器的接口电路

3.4显示电路的设计

实物图如下:

LCD1602液晶操作原理:

工业字符型液晶,能够同时显示16x02即32个字符。

(16列2行)

注:

为了表示的方便,后文皆以1表示高电平,0表示低电平。

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。

它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

 

LCD1602引脚图

1602采用标准的16脚接口,其中:

第1脚:

VSS为电源地

第2脚:

VCC接5V电源正极

第3脚:

V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4脚:

RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:

RW为读写信号线,高电平

(1)时进行读操作,低电平(0)时进行写操作。

第6脚:

E(或EN)端为使能(enable)端,高电平

(1)时读取信息,负跳变时执行指令。

第7~14脚:

D0~D7为8位双向数据端。

第15~16脚:

空脚或背灯电源。

15脚背光正极,16脚背光负极。

其与单片机的连线情况如下:

3.5系统报警电路设计

当电路检测到甲醛浓度超过国标的限制时,将产生一个信号给报警电路。

使报警电路报警从而提醒工作人员注意,超限报警电路如图7所示。

它是有AT89C52单片机控制的,当传感器检测到的浓度超过程序设定的浓度值时,P0.4就会出现一个高电平,经过一个达林顿管以后,P0.4又出现一个低电平,电路接通,蜂鸣器开始发声。

图7报警电路

4系统软件部分设计

对于单片机的开发应用中,逐渐引入了高级语言,C语言就是其中的一种。

汇编语言的可控性较高级语言来说更具优越性。

程序编写语言比较常见的有C语言、汇编语言。

汇编语言的机器代码生成效率高,控制性好,但就是移植性不高。

C语言编写的程序比用汇编编写的程序更符合人们的思考习惯。

还有很多处理器都支持C编译器,这样意味着处理器也能很快上手。

且具有良好的模块化、容易阅读、维护等优点,且编写的模块程序易于移植[8]。

基于C语言和汇编语言的优缺点,本系统采用C语言编写方法。

1.主程序流程图:

5误差分析及改进方法

由于实验室条件限制,无法购买先进的甲醛检测设备进行校准,因此会出现无法校验和误差较大的现象,且本次设计采用的是8位的AD转换芯片ADC0809,精度在应用中算是中等,这方面在以后改进中可以加以校验、提升。

6设计总结

通过本次课程设计,使我收获很多,从最初的对元器件的初步认识,再到图书馆以及网上找了很多有关元器件的使用方法,把本次课程设计所有用到的元器件都有一个比较系统的认识,然后就根据本次设计要求设计出实现该功能的原理图。

本次课程设计通过亲自上网找资料,亲自去电子市场购买元器件以及亲自焊接实物及调试整个过程,从遇到问题,到分析问题,再到解决问题整个过程亲自体会了一遍,使我深深地体会到了要做出一样成功的作品有多么的不容易。

它需要严谨的治学态度,细心耐心的钻研精神。

致谢

本次课程设计是在肖慧荣老师的悉心指导下完成的。

老师严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范,平易近人的人格魅力对我影响深远。

不仅使我树立了远大的学术目标、掌握了基本的研究方法,还使我明白了许多待人接物与为人处世的道理。

在此,谨向肖老师表示崇高的敬意和衷心的感谢!

参考文献

[1]潘政华.浅论甲醛对人体健康的影响及治理措施[J].《现代农业》,2011.

[2]石靖芳.手术室人员职业危险因素分析及防护[J].《齐齐哈尔医学院学报》,2009.

[3]田清华.基于电化学敏感电极的甲醛测试仪的研[D].燕山大学,2007.

[4]宏晶科技《STC12C5A60S2系列单片机》数据手册[S].2010.

[5]长沙太阳人电子有限公司《SMC1602A》数据手册[S].2006.

[6]DART公司《甲醛传感器》数据手册[S].2004.

[7]葛化敏,叶小岭.基于MSP430F449的甲醛检测仪设计[J]-工业仪表与自动化装置,2009(3).

[8]马忠梅等.《单片机的C语言应用程序设计》[M].北京航空航天大学出版社,1997.

[9]刘刚等.Multisim在漏电开关保护技术设计中的应用[J].《计算机仿真》,2010.

附录一:

总原理图

附录二:

总程序

#include<

reg52.h>

intrins.h>

#include"

ds18b20.h"

#defineucharunsignedchar

#defineuintunsignedint

//adc0809模块接线

#defineucharunsignedchar

sbitSTR=P0^0;

//单片机P1.0接模块STR引脚,启动转换信号

sbitEOC=P0^1;

//单片机P1.1接模块EOC,转换结束信号,高电平有效

sbitOE=P0^2;

//单片机P1.2接模块OE,输出允许信号,高电平有效

sbitCLK=P0^3;

//单片机P1.3接CLK,ADC0809时钟,输入50-800KHZ的频率

//一般选用500K

#defineadc0809_dataP3//ADC0809模块的D0-D7分别接P3.0-P3.7

/*地址选择A接H

B接H

C接L

选择通到IN3,当然也可以通过软件设置地址

REF+接VCC

REF-接GND

这样AD=256*(VIN-(VREF-))/(VREF+)-(VREF-)

(VREF+)=5V;

(VREF-)=0V;

AD=256*VIN/5

所以IN3口的电压VIN=AD*5/256;

*/

ucharAD_DATA[1];

//保存IN0通道转换后的数据

uintaddata2;

//==============LCD1602接口连接方法=====================

/*-----------------------------------------------------

|DB0-----P0.0|DB4-----P0.4|RW-------P2.6|

|DB1-----P0.1|DB5-----P0.5|RS-------P2.5|

|DB2-----P0.2|DB6-----P0.6|E--------P2.7|

|DB3-----P0.3|DB7-----P0.7|

---------------------------------------------------*/

//================================================*/

#defineLCM_DataP1//LCD1602数据接口

#defineBusy0x80//用于检测LCM状态字中的Busy标识

sbitLCM_RW=P2^6;

//读写控制输入端,LCD1602的第五脚

sbitLCM_RS=P2^5;

//寄存器选择输入端,LCD1602的第四脚

sbitLCM_E=P2^7;

//使能信号输入端,LCD1602的第6脚

//------------------蜂鸣器发声引脚定义--------------------------------------

sbitbuzz=P0^4;

//**************函数声明***************************************

voidWriteDataLCM (ucharWDLCM);

//LCD模块写数据

voidWriteCommandLCM (ucharWCLCM,BuysC);

//LCD模块写指令

ucharReadStatusLCM(void);

//读LCD模块的忙标

voidDisplayOneChar(ucharX,ucharY,ucharASCII);

//在第X+1行的第Y+1位置显示一个字符

voidLCMInit(void);

//LCD初始

voiddelayms(uintms);

//1MS基准延时程序

voiddelay(uchari);

//延时函数2

voidDisplayListChar(ucharX,ucharY,uchardelayms,ucharcode*DData);

voidjudge_xianshi(void);

//显示处理程序

voidbaojing();

//报警函数

voidinit();

//系统初始化设置

voidAD();

//读取AD数据

ucharflag1;

//***********************主程序******************************

main()

{uinttemp;

init();

LCMInit();

while

(1)

{

AD();

if(AD_DATA[0]>

102)

baojing();

judge_xianshi();

delayms(100);

}

}

/*********

系统初始化

***********/

voidinit()

{buzz=0;

EA=1;

//开总中断

TMOD=0x02;

//设定定时器T0工作方式

TH0=216;

//利用T0中断产生CLK信号

TL0=216;

TR0=1;

//启动定时器T0

ET0=1;

STR=0;

OE=0;

}

voidjudge_xianshi()

{

addata2=AD_DATA[0]*100;

//把数据扩大100,为下面求取小数位后2位做准备

//DisplayListChar(0,1,0,"

Lixinguang"

);

//在液晶的第一行显示字符"

Lixinguang"

DisplayListChar(0,0,0,"

AD="

//在液晶的第二行第0位开始显示"

DisplayOneChar(0,3,AD_DATA[0]/100+0x30);

//显示AD数据的百位

DisplayOneChar(0,4,AD_DATA[0]/10%10+0x30);

//显示AD数据的十位

DisplayOneChar(0,5,AD_DATA[0]%10+0x30);

//显示AD数据的各位

DisplayListChar(0,7,0,"

Vin="

//在液晶的第二行第8位开始显示"

//根据VIN=AD*5/256,求取IN3通到输入的电压

DisplayOneChar(0,11,AD_DATA[0]/51+0x30);

//显示输入电压的整数位

DisplayListChar(0,12,0,"

."

//显示小数点

DisplayOneChar(0,13,addata2/51/10%10+0x30);

//显示输入电压小数后1位

DisplayOneChar(0,14,addata2/51%10+0x30);

//显示输入电压小树后2位

DisplayListChar(0,15,0,"

V"

/************报警函数*******/

voidbaojing()

{

inti;

for(i=0;

i<

3;

i++)

{buzz=1;

delayms(200);

buzz=0;

delayms(200);

}

buzz=0;

}

/***********AD

转换函数

**********/

voidAD()

{

STR=0;

//ADDR这样如果不是通道0,可以在这边加一条其他地址的程序

delay(10);

STR=1;

//启动AD转换

while(0==EOC);

//等待转换结束

OE=1;

AD_DATA[0]=adc0809_data;

//读取AD数据,数据范围为0-255

OE=0;

}

/***********T0

中断服务程序

************/

voidt0(void)interrupt1using0

{

CLK=~CLK;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2