基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx

上传人:b****6 文档编号:8567597 上传时间:2023-05-11 格式:DOCX 页数:25 大小:239.51KB
下载 相关 举报
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第1页
第1页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第2页
第2页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第3页
第3页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第4页
第4页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第5页
第5页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第6页
第6页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第7页
第7页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第8页
第8页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第9页
第9页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第10页
第10页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第11页
第11页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第12页
第12页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第13页
第13页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第14页
第14页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第15页
第15页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第16页
第16页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第17页
第17页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第18页
第18页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第19页
第19页 / 共25页
基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx

《基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx(25页珍藏版)》请在冰点文库上搜索。

基于51单片机的酒精测试仪设计DOCWord格式文档下载.docx

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、输入/输出引脚P0.0-P0.7,P1.0-P1.7,P2.0-P2.7,P3.0-P3.7。

(1)P0口(P0.0-P0.7)是一个8位漏极开路型双向I/O口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。

(2)P1口(P1.0-P1.7)是一个带有内部提升电阻的8位准双向I/O口。

能驱动(吸收或输出电流)四个LSTTL负载。

(3)P2口(P2.0-P2.7)是一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。

P2口可以驱动(吸收或输出电流)四个LSTTL负载。

(4)P3口(P3.0-P3.7)是一个带有内部提升电阻的8位准双向I/O口。

3.3模数转换器模块

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部分逻辑结构构成,如图3.3所示。

ADC0809是CMOS单片型逐次逼近式A/D转换器,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近寄存器、三态输出锁存器等其它一些电路组成。

因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。

输入输出与TTL兼容。

3.外部特性(引脚功能)

ADC0809芯片有28条引脚,采用双列直插式封装,如图3.3所示。

下面说明各引脚功能。

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输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。

图3.3ADC0809系统内部结构框图和外部引脚图

3.4酒精传感器模块

3.4.1传感器性能分析

TGS822气体传感器的敏感材料是金属氧化物,最具代表性的是SnO2。

金属氧化物晶体如SnO2在空气中被加热到一定高的温度时,氧被吸附在的带一个负电荷的晶体表面。

然后,晶体表面的供与电子被转移到吸附的氧上,结果在一个空间电荷层留下正电荷。

这样,表面势能形成一个势垒,从而阻碍电子流动。

在传感器的内部,电流流过SnO2微晶的结合部位(晶粒边界)。

在晶粒边界,吸附的氧形成一个势垒阻止载流子自由移动,传感器的电阻即缘于这种势垒。

还原性气体出现时,带有负电荷的氧的表面浓度降低,导致晶粒边界的势垒降低。

降低了的势垒使传感器的阻值减小了。

传感器阻值和还原性气体浓度之间的关系可由下面的一定范围气体浓度方程表示:

Rs=A[C]-α

这里:

Rs=传感器电阻A=常数[C]=气体浓度α=Rs曲线的斜率

费加罗气体传感器的气敏素子,使用在清洁空气中电导率低的SnO2。

当存在检知对象气体时,传感器的电导率随空气中气体浓度增加而增大。

使用简单的电路即可将电导率的变化,转换为与该气体浓度相对应的输出信号。

TGS822传感器对酒精、有机溶剂灵敏度高,在酒精检测器等方面得到广泛使用。

相同特性的TGS823,采用了陶瓷底座,可以在200℃的高温气氛中使用。

表3.3.1TGS822性能参数一览表

型号

素子类型

TGS822

8系列

标准封装

对象气体

塑料、SUS双重金属网

酒精、有机溶剂

检测范围

50—5000ppm

标准回路

条件

标准试验条件下的电学特性

加热器电压

VH

5.0+0.2VDC/AC

回路电压

VC

MAX24V

Ps≤15mw

负载电压

RL

RH

可变

38+3.0(室温)

加热器功率

PH

660+50mwVH=5.0V

传感器电阻

RS

300ppm乙醇中1-10k

灵敏度(Rs的变化率)

0.4+0.1

Rs(EtOH:

300ppm)

50ppm)

标准试验

试验气体条件

回路条件

20+2℃,65+5%RH

VC=10.0+0.1VDC/AC

VH=5.0+0.05VDC/AC

预热条件

七天以上

下图3.3.1中纵坐标也以传感器电阻比(Rs/Ro)表示,这里的Rs,Ro定义如下:

Rs=含300ppm乙醇、各种温/湿度下的电阻值

Ro=含300ppm乙醇、20℃65%R.H.下的电阻值

图3.3.1不同浓度气体对应的阻值

3.3.2呼出酒精气体浓度与血液酒精浓度关系

表3.3.2血液与呼气酒精含量换算一览表

序号

呼出气体中酒精

浓度mg/L

浓度10¯

6

血液中酒精

浓度mg/100mL

1

0.0227

11.85

5

2

0.0454

23.69

10

3

0.0681

35.53

15

4

0.0909

47.43

20

0.1136

59.28

25

0.1363

71.13

30

7

0.1591

83.02

35

8

0.1818

94.86

40

9

0.2045

106.71

45

0.2272

118.56

50

11

0.2500

130.45

55

12

0.2727

141.26

60

13

0.2954

154.15

65

14

0.3181

166.00

70

0.3409

177.89

75

16

0.3636

189.72

80

17

0.3863

201.15

85

18

0.4091

213.43

90

19

0.4318

225.33

95

0.4515

237.12

100

21

0.6618

355.68

150

22

0.9091

474.24

200

车辆驾驶人员血液中的酒精含量大于或等于80mg/100ml的驾驶行为。

表3.3.2血液酒精含量临界值一览表

行为类别

对 

临界值(mg/100ml)

饮酒驾驶

车辆驾驶人员

醉酒驾驶

由表3.3.2血液酒精含量临界值可以进行定量的分析车辆驾驶人员酒后驾驶后血液中的酒精浓度,进而对于该司机的酒驾行为类别进行定性,如血液酒精浓度低于20mg/100ml,则认为是饮酒驾驶,可以对其酌情处理;

如若血液酒精浓度超过了20mg/100ml且低于80mg/100ml,则认为是醉酒驾驶,应按照国家交通法规对其处理。

3.4LCD显示模块

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’。

图3.4LCD1602外部引脚图

第4章系统软件

4.1整机系统流程图

4.1.1ADC程序流程图

否否

单片机对ADC进行初始化,使其能进入正常工作状态,通过判断ADC转换判断标志EOC,看其是否转换完毕,如果没有,则继续判断,如若完成则将ADC转换的数据由单片机读取并计算,然后进入下一环节。

4.1.2LCD程序流程图

是是

单片机对LCD进行初始化,使其能进入正常工作状态,然后判断LCD是否处于忙碌状态,如果是则继续判断,如若不是则将从ADC转换后计算出来的结果通过输出指令输出,并判断计算出的结果处于哪种状态,并输出。

附录1酒精测试仪程序

#include<

reg51.h>

intrins.h>

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)*0.0625;

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;

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

当前位置:首页 > 法律文书 > 调解书

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

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