基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc
- 文档编号:474777
- 上传时间:2023-04-29
- 格式:DOC
- 页数:22
- 大小:861KB
基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc
《基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc》由会员分享,可在线阅读,更多相关《基于单片机的室内甲醛检测仪的设计毕业设计文档格式.doc(22页珍藏版)》请在冰点文库上搜索。
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 室内 甲醛 检测 设计 毕业设计