基于单片机的酒精测试仪设计文档格式.docx
- 文档编号:22330453
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:28
- 大小:80.15KB
基于单片机的酒精测试仪设计文档格式.docx
《基于单片机的酒精测试仪设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的酒精测试仪设计文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
当采用外部振荡器时,此引脚接外部振荡源。
3.控制或与其它电源复用引脚RST/VPD,ALE/和/Vpp
(1)RST/VPD当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位在Vcc掉电期间,此引脚可接下图8051引脚排列图上备用电源,由VPD向内部提供备用电源,以保持内部RAM中的数据。
(2)ALE/正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,ALE引脚以不变的频率(振荡器频率的)周期性地发出正脉冲信号。
因此,它可用作对外输出的时钟,或用于定时目的。
但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE端可以驱动(吸收或输出电流)八个LSTTL电路。
对于EPROM型单片机,在EPROM编程期间,此引脚接收编程脉冲(功能)。
(3)外部程序存储器读选通信号输出端,在从外部程序存储取指令(或数据)期间,在每个机器周期内两次有效,同样可以驱动八LSTTL输入。
(4)/Vpp、/Vpp为内部程序存储器和外部程序存储器选择端。
当/Vpp为高电平时,访问内部程序存储器,当/Vpp为低电平时,则访问外部程序存储器。
对于EPROM型单片机,在EPROM编程期间,此引脚上加21伏EPROM编程电源(Vpp)。
4、输入/输出引脚-,-,-,-。
(1)P0口(-)是一个8位漏极开路型双向I/O口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。
(2)P1口(-)是一个带有内部提升电阻的8位准双向I/O口。
能驱动(吸收或输出电流)四个LSTTL负载。
(3)P2口(-)是一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。
P2口可以驱动(吸收或输出电流)四个LSTTL负载。
(4)P3口(-)是一个带有内部提升电阻的8位准双向I/O口。
模数转换器模块
ADC0809性能的介绍
模数转换电路的功能是将连续变化的模拟量转换为离散的数字量,是架起模拟系统跟数字系统之间连接的桥梁。
对于本系统而言,就是用于快速、高精度地对输入的酒精浓度信号进行采样编码,将其转换成单片机所能够处理的数字量。
模数转换电路是本系统的关键部分,其性能的好坏直接影响整个系统的质量。
根据A/D转换器的工作原理可将A/D转换器分成两大类:
一类是直接型A/D转换器;
另一类是间接型A/D转换器。
在直接型A/D转换器中,输入的模拟电压被直接转换成数字代码,不经任何中间变量。
在间接型A/D转换器中,首先把输入的模拟电压转换成某种中间变量(时间、频率、脉冲宽度等等),然后再把这个中间变量转换为数字代码输出。
1.主要特性
(1)8路8位A/D转换器,即分辨率8位。
(2)具有转换起停控制端。
(3)转换时间为100μs。
(4)单个+5V电源供电。
(5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
(6)工作温度范围为-40~+85摄氏度。
(7)低功耗,约15mW。
2.内部结构
ADC0809由4部分逻辑结构构成,如图所示。
ADC0809是CMOS单片型逐次逼近式A/D转换器,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近寄存器、三态输出锁存器等其它一些电路组成。
因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。
输入输出与TTL兼容。
3.外部特性(引脚功能)
ADC0809芯片有28条引脚,采用双列直插式封装,如图所示。
下面说明各引脚功能。
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:
地。
4.ADC0809的工作原理
ADC0809的工作过程是:
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
图ADC0809系统内部结构框图和外部引脚图
酒精传感器模块
传感器性能分析
TGS822气体传感器的敏感材料是金属氧化物,最具代表性的是SnO2。
金属氧化物晶体如SnO2在空气中被加热到一定高的温度时,氧被吸附在的带一个负电荷的晶体表面。
然后,晶体表面的供与电子被转移到吸附的氧上,结果在一个空间电荷层留下正电荷。
这样,表面势能形成一个势垒,从而阻碍电子流动。
在传感器的内部,电流流过SnO2微晶的结合部位(晶粒边界)。
在晶粒边界,吸附的氧形成一个势垒阻止载流子自由移动,传感器的电阻即缘于这种势垒。
还原性气体出现时,带有负电荷的氧的表面浓度降低,导致晶粒边界的势垒降低。
降低了的势垒使传感器的阻值减小了。
传感器阻值和还原性气体浓度之间的关系可由下面的一定范围气体浓度方程表示:
Rs=A[C]-α
这里:
Rs=传感器电阻A=常数[C]=气体浓度α=Rs曲线的斜率
费加罗气体传感器的气敏素子,使用在清洁空气中电导率低的SnO2。
当存在检知对象气体时,传感器的电导率随空气中气体浓度增加而增大。
使用简单的电路即可将电导率的变化,转换为与该气体浓度相对应的输出信号。
TGS822传感器对酒精、有机溶剂灵敏度高,在酒精检测器等方面得到广泛使用。
相同特性的TGS823,采用了陶瓷底座,可以在200℃的高温气氛中使用。
表TGS822性能参数一览表
型号
素子类型
TGS822
8系列
标准封装
对象气体
塑料、SUS双重金属网
酒精、有机溶剂
检测范围
50—5000ppm
标准回路
条件
标准试验条件下的电学特性
加热器电压
VH
+DC/AC
回路电压
VC
MAX24V
Ps≤15mw
负载电压
RL
RH
可变
38+(室温)
加热器功率
PH
660+50mwVH=
传感器电阻
RS
300ppm乙醇中1-10k
灵敏度(Rs的变化率)
+
Rs(EtOH:
300ppm)
50ppm)
标准试验
试验气体条件
回路条件
20+2℃,65+5%RH
VC=+DC/AC
VH=+DC/AC
预热条件
七天以上
下图中纵坐标也以传感器电阻比(Rs/Ro)表示,这里的Rs,Ro定义如下:
Rs=含300ppm乙醇、各种温/湿度下的电阻值
Ro=含300ppm乙醇、20℃65%.下的电阻值
图不同浓度气体对应的阻值
呼出酒精气体浓度与血液酒精浓度关系
表血液与呼气酒精含量换算一览表
序号
呼出气体中酒精
浓度mg/L
浓度10ˉ6
血液中酒精
浓度mg/100mL
1
5
2
10
3
15
4
20
25
6
30
7
35
8
40
9
45
50
11
55
12
60
13
65
14
70
75
16
80
17
85
18
90
19
95
100
21
150
22
200
车辆驾驶人员血液中的酒精含量大于或等于80mg/100ml的驾驶行为。
表血液酒精含量临界值一览表
行为类别
对象
临界值(mg/100ml)
饮酒驾驶
车辆驾驶人员
醉酒驾驶
由表血液酒精含量临界值可以进行定量的分析车辆驾驶人员酒后驾驶后血液中的酒精浓度,进而对于该司机的酒驾行为类别进行定性,如血液酒精浓度低于20mg/100ml,则认为是饮酒驾驶,可以对其酌情处理;
如若血液酒精浓度超过了20mg/100ml且低于80mg/100ml,则认为是醉酒驾驶,应按照国家交通法规对其处理。
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’。
图LCD1602外部引脚图
第4章系统软件
整机系统流程图
程序流程图
否否
是
单片机对ADC进行初始化,使其能进入正常工作状态,通过判断ADC转换判断标志EOC,看其是否转换完毕,如果没有,则继续判断,如若完成则将ADC转换的数据由单片机读取并计算,然后进入下一环节。
LCD程序流程图
是是
否
单片机对LCD进行初始化,使其能进入正常工作状态,然后判断LCD是否处于忙碌状态,如果是则继续判断,如若不是则将从ADC转换后计算出来的结果通过输出指令输出,并判断计算出的结果处于哪种状态,并输出。
附录1酒精测试仪程序
#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<
time)
{n++;
return;
bitlcd_bz()//LCD判忙
bitresult;
rs=0;
rw=1;
ep=1;
result=(bit)(P0&
0x80);
ep=0;
returnresult;
lcd_wcmd(unsignedcharcmd)//写指令数据到LCD
while(lcd_bz())
rw=0;
P0=cmd;
lcd_pos(unsignedcharpos)//设定显示位置
lcd_wcmd(pos|0x80);
lcd_wdat(unsignedchardat)//写入显示数据到LCD
while(lcd_bz());
rs=1;
P0=dat;
lcd_init()//LCD初始化
lcd_wcmd(0x38);
delay
(1);
lcd_wcmd(0x0c);
lcd_wcmd(0x06);
lcd_wcmd(0x01);
Init_DS18B20(void)//DS18B20初始化
unsignedcharx=0;
DQ=1;
delay2(8);
DQ=0;
delay2(85);
delay2(14);
delay2(20);
ReadOneChar(void)//向DS18B20读一字节数据
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
delay2
(1);
dat>
=1;
if(DQ)
dat|=0x80;
delay2(4);
return(dat);
WriteOneChar(unsignedchardat)//向DS18B20写一字节数据
DQ=dat&
0X01;
delay2(5);
ReadTemperature(void)//向DS18B20读温度值
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
delay2(125);
WriteOneChar(0xbe);
tempL=ReadOneChar();
tempH=ReadOneChar();
temperature=((tempH*256)+tempL)*;
delay2(200);
return(temperature);
main()
floatx,y,k;
unsignedintda,n,temp1,temp2,i,gw,sw,bw,kw,xw;
light=0;
//数据初始化
lcd_init();
delay(3);
lcd_pos(0);
i=0;
while(dis1[i]!
='
\0'
)//显示开始工作
lcd_wdat(dis1[i]);
i++;
lcd_pos(0x41);
while(dis2[i]!
)//显示开始测试
lcd_wdat(dis2[i]);
delay(32);
while
(1)//无限循环测试
//初始化LCD
ale=0;
//初始化ADC0809
start=0;
adda=0;
//定义TGS822信号输入引脚号
addb=0;
adc=0;
ale=1;
//启动ADC0809
start=1;
while(eoc==0);
//判断ADC0809是否转换完毕
oe=1;
//打开ADC0809数据锁存
da=P1;
//读取转换后数据
oe=0;
y=(2550/da-10)/;
//代入传感器性质公式进行计算
if(y>
x=if(y>
x=*y;
elseif(y>
2)
x=//取出所得数据个、十、百、千每位上的数,并转换对应的ASCII表中数据便于输出
temp1=n/10;
sw=temp1%10+0x30;
temp2=temp1/10;
bw=temp2%10+0x30;
kw=temp2/10+0x30;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 酒精 测试仪 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)