多功能酒精测试仪
多功能酒精测试仪
论文
课题名称基于单片机的酒精测试仪
武汉工程大学邮电与信息
目录
一.摘要与系统原理 (3)
二.功能指标 (4)
三.整机原理图 (5)
四.软件流程 (6)
五.MCS-51单片机引脚功能 (7)
六.ADC0809资料 (9)
七.酒精传感器TGS822 (11)
八.LCD资料 (12)
九.整机程序 (13)
摘要
本作品是基于单片机控制ADC0809对TGS822酒精浓度取样来反映人体血液酒精浓度;以及对DS18B20获取温度
系统框图
实现原理
TGS822对酒精浓度的变化,其阻值产生相应的变化,然后通过取样电阻分压的变化表现出来;人体血液酒精浓度的不同,其呼出的气体中酒精浓度也不同。通过TGS822对呼出气体中酒精浓度的反应以取样电压的形式送入到ADC0809,进行A/D转换后并将转换的数据送入单片机进行分析处理,并判断是否醉酒驾车,再通过液晶板显示出来。
DS18B20其自身的温度传感器所产生的温度数字数据存入其自身的存储器,单片机对其控
制读出温度数据,然后经过计算处理,将当前环境温度由液晶板输出。
作品亮点
该作品结构简单,功能多样,可扩展性强,成本低廉,便于携带,适用范围广。功能指标
车辆驾驶人员血液中的酒精含量大于或等于80mg/100ml的驾驶行为。
血液酒精含量临界值:
血液与呼气酒精含量换算
车辆驾驶人员呼气酒精含量检验结果可按标准GA307换算成血液酒精含量。
整机原理图 软件流程图
MCS-51单片机引脚功能
MCS 单片机都采用40引脚的双列直插封装方式。下图为引脚排列图,40条引脚说明如下:
1、主电源引脚Vss 和Vcc ①Vss 接地
②Vcc 正常操作时为+5伏电源
2、外接晶振引脚XTAL1和XTAL2
①XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。
②XTAL2内部振荡电路反相放大器的输出端。是外接晶体的另一端。当采用外部振荡器时,此引脚接外部振荡源。
3、控制或与其它电源复用引脚RST/VPD,ALE/,和/Vpp
①RST/VPD当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位
在Vcc掉电期间,此引脚可接下图8051引脚排列图
上备用电源,由VPD向内部提供备用电源,以保持内部RAM中的数据。
②ALE/正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,ALE引脚以不变的频率(振荡器频率的)周期性地发出正脉冲信号。因此,它可用作对外输出的时钟,或用于定时目的。但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE端可以驱动(吸收或输出电流)八个LSTTL电路。对于EPROM型单片机,在EPROM编程期间,此引脚接收编程脉冲(功能)
③外部程序存储器读选通信号输出端,在从外部程序存储取指令(或数据)期间,在每个机器周期内两次有效。同样可以驱动八LSTTL输入。
④/Vpp、/Vpp为内部程序存储器和外部程序存储器选择端。当/Vpp为高电平时,访问内部程序存储器,当/Vpp为低电平时,则访问外部程序存储器。
对于EPROM型单片机,在EPROM编程期间,此引脚上加21伏EPROM编程电源(Vpp)。
4、输入/输出引脚P0.0-P0.7,P1.0-P1.7,P2.0-P2.7,P3.0-P3.7。
①P0口(P0.0-P0.7)是一个8位漏极开路型双向I/O口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。
②P1口(P1.0-P1.7)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载。。
③P2口(P2.0-P2.7)是一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。P2口可以驱动(吸收或输出电流)四个LSTTL 负载。
④P3口(P3.0-P3.7)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载
ADC0809资料
1.主要特性
1)8路8位A/D转换器,即分辨率8位。
2)具有转换起停控制端。
3)转换时间为100μs
4)单个+5V电源供电
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度
7)低功耗,约15mW。
2.内部结构
ADC0809是CMOS单片型逐次逼近式A/D转换器,它由8路模拟开关、地址锁存与译
码器、比较器、8位开关树型D/A转换器、逐次逼近
寄存器、三态输出锁存器等其它一些电路组成。因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。输入输出与TTL兼容。3.外部特性(引脚功能)
ADC0809芯片有28条引脚,采用双列直插式封装,如图13.23所示。下面说明各引脚功能。
IN0~IN7:8路模拟量输入端。
2-1~2-8:8位数字量输出端。
ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。
ALE:地址锁存允许信号,输入,高电平有效。
START:A/D转换启动信号,输入,高电平有效。
EOC:A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。
REF(+)、REF(-):基准电压。
Vcc:电源,单一+5V。
GND:地。
ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,
EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
酒精传感器TGS822资料
特点:应用:
?对乙醇等有机溶剂有高灵敏度?酒精检测器
?长期稳定性优良?工厂、干洗店、半导体产业的
?长寿命、低成本有机溶剂检知
?以简单电路即可使用
费加罗气体传感器的气敏素子,使用在清洁空气中电导率低的二氧化锡(SnO2)。当存在检知对象气体时,传感器的电导率随空气中气体浓度增加而增大。使用简单的电路即可将电导率的变化,转换为与该气体浓度相对应的输出信号。
TGS822传感器对酒精、有机溶剂的灵敏度高,在酒精检测器等方面得到广泛应用。
相同特性的TGS823,采用了陶瓷底座,可以在200℃的高温气氛中使用。
下
纵坐标以传感器电阻比(Rs/Ro)表示,Rs,Ro的定义如下:
Rs=不同浓度气体中的电阻值
Ro=300ppm乙醇中的电阻值
灵敏度特性:
图中纵坐标也以传感器电阻比(Rs/Ro)表示,这里的Rs,Ro定义如下:
Rs=含300ppm乙醇、各种温/湿度下的电阻值
Ro=含300ppm乙醇、20℃65%R.H.下的电阻值
LCD资料
1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线
VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:
引脚符号功能说明
1VSS一般接地
2VDD接电源(+5V)
3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
5R/WR/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
6EE(或EN)端为使能(enable)端,下降沿使能。
7DB0底4位三态、双向数据总线0位(最低位)
8DB1底4位三态、双向数据总线1位
9DB2底4位三态、双向数据总线2位
10DB3底4位三态、双向数据总线3位
11DB4高4位三态、双向数据总线4位
12DB5高4位三态、双向数据总线5位
13DB6高4位三态、双向数据总线6位
14DB7高4位三态、双向数据总线7位(最高位)(也是busyflang)
15BLA背光电源正极
16BLK背光电源负极
寄存器选择控制表即为ASCII码表
RSR/W操作说明
00写入指令寄存器(清除屏等)
01都busyflag(DB7),以及读取位址计数器(DB0~DB6)值
10写入数据寄存器(显示各字型等)
11从数据寄存器读取数据
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。
整机程序
#include
#include
sbitrs=P2^4;//LCD液晶引脚定义,p0接DB0_DB7
sbitrw=P2^7;
sbitep=P2^6;
sbitale=P2^0;//ADC0809引脚定义
sbitstart=P3^7;
sbitoe=P3^5;
sbiteoc=P3^6;
sbitadda=P2^5;
sbitaddb=P2^2;
sbitadc=P2^3;
sbitlight=P3^0;//报警输出
sbitDQ=P3^3;//DS18B20输入脚定义
sbitDE=P3^1;
unsignedchartempL=0; unsignedchartempH=0; floattemperature; unsignedcharcodedis1[]={"WORKSTART"}; unsignedcharcodedis2[]={"ALCOHOLTEST"}; unsignedcharcodedis3[]={"mg/100ml"}; unsignedcharcodedis4[]={"SAFEDRIVING"}; unsignedcharcodedis5[]={"DRINK-DRIVING"}; unsignedcharcodedis6[]={"DRUNKDRIVING"}; voiddelay(unsignedcharms)//延时1 {unsignedchari,j;
while(ms--)
{for(i=0;i<250;i++)
for(j=0;j<50;j++)
{_nop_();
_nop_();
}
}
}
voiddelay2(unsignedinttime)//延时2 {
unsignedintn;
n=0;
while(n