课程设计——酒精检测仪设计

更新时间:2024-05-21 23:30:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

重庆三峡学院

专业综合课程设计报告

题 目 51单片机酒精浓度测试仪设计

系 别 电子与信息工程学院 专 业 电子信息工程 班 级 ****级*班 姓 名 XXX 学 号 201107014115

2014年 12 月 12 日

酒精浓度检测仪的设计

一、设计目的

近年来,我国越来越多的人有了自己的私家车,而酒后驾车造成的交通事故也频繁发生。为此,我国将酒驾列入刑法范围内,所以需要设计一智能仪器能够检测驾驶员体内酒精含量。本课程设计研究的是一种以气敏传感器和单片机A/D转换器为主,检测驾驶员呼出气体的酒精浓度,并具有声光报警功能的空气酒精浓度监测仪。其可检测出空气环境中酒精浓度值,并可根据不同的环境设定不同的阈值,对超过的阈值进行声光报警来提示危害。

本课题分为两部分:硬件设计部分和软件设计部分。硬件部分为利用MQ3气敏传感器测量空气中酒精浓度,并转换为电压信号,经A/D转换器转换成数字信号后传给单片机系统,由单片机及其相应外围电路进行信号的处理,显示酒精浓度值以及超阈值声光报警。程序采用模块化设计思想,各个子程序的功能相对独立,便于调试和修改。而硬件电路又大体可分为单片机小系统电路、A/D转换电路、声光报警电路、LED显示电路,按键电路,各部分电路的设计及原理将会在硬件电路设计部分详细介绍。

二、设计方案

1、酒精浓度检测仪总设计方案

设计时,考虑酒精浓度是由传感器把非电量转换为电量,传感器输出的是0-5伏的电压值且电压值稳定,外部干扰小等。因此,可以直接把传感器输出电压值经过A/D转换器转换得到数据送入单片机进行处理。此外,还需接人LED数码管显示,键盘设定,报警电路等。

其总体框图如图1所示。

声光报警电路 被测 环境 气敏 传感器 A/D转换电路 单片机 LED显示 键盘

图1 基本工作原理图

三、设计内容

1、 酒精浓度检测仪设计要求分析

设计的酒精浓度测试仪应具有如下特点:

(1)数据采集系统以单片机为控制核心,外围电路带有LED显示以及键盘响应电路,

2

无需要其他计算机,用户就可以与之进行交互工作,完成数据的采集、存储、计算、分析等过程。

(2)系统具有低功耗、小型化、高性价比等特点。

(3)从便携式的角度出发,系统成功使用了数码管显示器以及小键盘。由单片机系统控制键盘和LED显示来实现人机交互操作,界面友好。

(4)软件设计简单易懂。 2、设计内容要求

(1)传感器TGS822的电压模拟输出范围为0-5V;

(2)模数转换芯片ADC0809采样电压范围为0-5V,分辨率为8位,采样精度为5/256V,达到256个量化级的数字电压,其工作频率为1MHz;

(3)单片机AT89C52工作频率为6 MHz;传感器LCD显示输出单片机数字输出控制输出模数转换模拟输出

(4)LCD显示器用50K的可调电阻调节使其清晰显示。 四、电路设计与描述 1、硬件设计 1.1 传感器的选择

本系统直接测量的是呼气中的酒精浓度,再转换为血液中的酒精含量浓度,故采用气敏传感器。考虑到周围空气中的气体成分可能影响传感器测量的准确性,所以传感器只能对酒精气体敏感,对其他气体不敏感,故选用MQ3型气敏传感器。其有很高的灵敏度、良好的选择性、长期的使用寿命和可靠的稳定性。MQ3型气敏传感器由微型Al2O3,陶瓷管和SnO2敏感层、测量电极和加热器构成的敏感元件固定在塑料或不锈钢的腔体内,加热器为气敏元件的工作提供了必要的工作条件。传感器的标准回路有两部分组成。其一为加热回路,其二为信号输出回路,它可以准确反映传感器表面电阻值的变化。传感器的表面电阻RS的变化,是通过与其串联的负载电阻RL上的有效电压信号VRL输出面获得的。负载电阻RL可调为0.5-200K。加热电压Uh为5v。上述这些参数使得传感器输出电压为0-5V。MQ3型气敏传感器的结构和外形、标准回路、传感器阻值变化率与酒精浓度、外界温度的关系图如图4所示。为了使测量的精度达到最高,误差最小,需要找到合适的温度,一般在测量前需将传感器预热5分钟。

图2 MQ3 结构和外形

3

INRA2220RA1220GNDRL1+5123AFAMQ-3BFB654GND

图3 MQ3 结构图

图4 传感器阻值变化率与酒精浓度、外界温度之间的关系

1.2 A/D转换电路

在单片机应用系统中,被测量对象的有关变化量,如温度、压力、流量、速度等非电物理量,须经传感器转换成连续变化的模拟电信号(电压或电流),这些模拟电信号必须转换成数字量后才能在单片机中用软件进行处理。实现模拟量转换成数字量的器件称为A/D转换器(ADC)。

A/D转换器大致分有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近型A/D转换器,精度、速度、价格适中;三是∑-△A/D转换器。

该设计中选用的是ADC0809属第二类,是8位A/D转换器。0809具有8路模拟信号输入端口,地址线(23-25脚)可决定那一路模拟信号进行A/D转换。22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。6脚为测试控制,当输入一个2μs的高电平脉冲时,就开始A/D转换。7引脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平。9脚为A/D转换数据输出允许端,当OE脚为高电平时,A/D转换数据输出。10脚为0809的时钟输入端。 1.2.1 ADC0809的引脚及功能

逐次比较型A/D转换器在精度、速度、和价格上都适中,是最常用的A/D转换器件。芯片采用的是ADC0809,以下介绍ADC0809的引脚及功能。芯片如图5所示。

4

图5 ADC0809的引脚

ADC0809是一种逐次比较式8路模拟输入、8位数字量输出的A/D转换器。由图可见,ADC0809共有28个引脚,采用双列直插式封装。主要引脚功能如下:

⑴ IN0-IN7是8路模拟信号输入端。 ⑵ D0-D7是8位数字量输入端。

⑶ A、B、C与ALE控制8路模拟通道的切换,A、B、C分别与3根地址线或数据线相连,3位编码对应8个通道地址端口。

ADC0809芯片有28条引脚,采用双列直插式封装,如图所示。下面说明各引脚功能。

IN0~IN7:8路模拟量输入端。 2-1~2-8:8位数字量输出端。

ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路 ALE:地址锁存允许信号,输入,高电平有效。

START: A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。

EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。

OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。

CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。 REF(+)、REF(-):基准电压。 Vcc:电源,单一+5V。 GND:地。

首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。

转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。

(1)定时传送方式

对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。例如

5

ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已 经完成了,接着就可进行数据传送。 (2)查询方式

A/D转换芯片有表明转换完成的状态信号,例如ADC0809的EOC端。因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。 (3)中断方式

把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。 不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。

需要注意的是:ADC0809虽然有8路模拟通道可以同时输入8路模拟信号,但每个瞬间只能换1路,共用一个A/D转换器进行转换,各路之间的切换由软件改变C、A、B引脚上的代码来实现。地址锁存与译码电路完成对 A、B、C 3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接与系统数据总线相连,图6为通道选择表。

图6 通道选择表

⑷ OE、START、CLK为控制信号端,OE为输出允许端,START为启动信号输入端,CLK为时钟信号输入端。

⑸ VR(+)和VR(-)为参考电压输入端。 1.2.2 ADC0809的结构及转换原理

ADC0809的结构框图如图7。ADC0809采用逐次比较的方法完成A/D转换的,由单一的+5V电源供电。片内有锁存功能的8路选1的模拟开关,由C、B、A引脚的功能来决定所选的通道。0809完成一次转换需100μs左右,输出具有TTL三态锁存缓冲器,可直接连接到MCS-51的数据总线上。

通过适当的外接电路,0809可对0-5V的模拟信号进行转换。

6

START CLK

8路模拟量开关 8位A/D转换器 地址锁存与密码 三态输出锁存器 IN7 …. IN0

EOC D0 . . . D7 C B A ALE

VCC GND VR(+) VR(-) 图7 ADC0809的结构框图

OE 1.2.3 ADC0809连线图

ADC0809与单片机的连线图如图8:

ADC08091234567891011121314In3In4In5In6In7STARTEOCD3OECLOCKVccVref+GNDD1ADC1ADC0809In2In1In0ADDAADDBADDCALED7D6D5D4D0Vref-D22827262524232221201918171615INGNDSTD7D6D5D4D0STEOCD3OECLK+5D1D2GND图8 ADC0809的连线图

1.3 89C51单片机系统

单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个虽小然而完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。

7

1.3.1 单片机片内结构

51单片机的片内结构如图9所示。它把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。按功能划分,它有如下功能部件组成:

⑴ 微处理器(CPU)。 ⑵ 数据存储器(RAM)。 ⑶ 程序存储器(ROM/EPROM)。

⑷ 4个8位并行I/O口(P0口、P1口、P2口、P3口)。 ⑸ 一个串行口。

⑹ 2个16位定时器、计数器。 ⑹ 2个16位定时器、计数器。 ⑺ 中断系统。

⑻ 特殊功能寄存器(SFR)。

8 XTAL1 XTAL2 CPU (运算器) (控制器) 数据存储器 PP8 程序存储器 ROM/EPRO特殊功能寄存器 (SFR) P8 串 行 口 定时器/计数器 P中断系 8 ALPSEN EA RESE 图9 51单片机片内结构

上述功能部件都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。但CPU对各种功能部件的控制是采用特殊功能寄存器的集中控制方式。

从硬件角度来看,与MCS-51指令完全兼容的新一代AT89CXX系列机,比在片外加EPROM才能相当的8031单片机抗干扰性能强,与87C51单片机技能相当,但功耗小。程序修改直接用+5V或+12V电源擦除,更显方便、而且其工作电压放宽至2.7V-6V,因而受电压波动的影响更小,而且4K的程序存储器完全能满足单片机系统的软件要求,故AT89C51单片机是构造本检测系统的更理想的选择。 1.3.2 89C51芯片介绍

8

掌握MCS-51单片机,应首先了解MCS-51的引脚,熟悉并牢记各引脚的功能,MCS-51系列中各种型号芯片的引脚是互相兼容的。制作工艺为HMOS的MCS-51的单片机都采用40只引脚的双列直插封装方式,如图10所示。

P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST (RXD) P3.0(TXD) P3.1(INT0) P3.2(INT1) P3.3T0 P3.4T1 P3.5(WR) P3.6(RD) P3.7XTAL1XTAL2GNDVccP0.0 (AD0)P0.1 (AD1)P0.2 (AD2)P0.3 (AD3)P0.4 (AD4)P0.5 (AD5)P0.6 (AD6)P0.7 (AD7)EA/VPPALE/PROGPSENP2.7 (A15)P2.6 (A14)P2.5 (A13)P2.4 (A12)P2.3 (A11)P2.2 (A10)P2.1 (A9)P2.0 (A8)PDIP图10 AT89C51芯片管脚图

40只引脚按其功能来分,可分为如下3类: ⑴ 电源及时钟引脚:Vcc、Vss、XTAL1、XTAL2。

电源引脚接入单片机的工作电源。Vcc接+5V电源,Vss接地。

时钟引脚XTAL1、XTAL2外接晶体与片内的反相放大器构成了1个晶体振荡器,它为单片机提供了时钟控制信号。2个时钟引脚也可外接独立的晶体振荡器。XTAL1接外部的一个引脚。该引脚内部是一个反相放大器的输入端。这个反相放大器构成了片内振荡器。如果采用外接晶体振荡器时,此引脚接地。XTAL2接外部晶体的另一端,在该引脚内部接至内部反相放大器的输出端。若采用外部时钟振荡器时,该引脚接受时钟振荡器的信号,即把此信号直接接到内部时钟发生器的输入端。

⑵ 控制引脚:PSEN、ALE、EA、RESET(RST)。此类引脚提供控制信号,有的还具有复用功能。

① RST/VPD引脚:RESET(RST)是复位信号输入端,高电平有效。当单片机运行时,在此引脚加上持续时间大于2个机器周期(24个振荡周期)的高电平时,就可以完成复位操作。在单片机工作时,此引脚应为≤0.5V低电平。VPD为本引脚的第二功能,即备用电源的输入。当主电源发生故障,降低到某一规定值的低电平时,将+5V电源自动接入RST端,为内部RAM提供备用电源,以保证片内RAM的信息不丢失,从而使单片机在复位后能正常进行。

② ALE/ PROG引脚:ALE引脚输出为地址锁存允许信号,当单片机上电正常工作后

9

ALE引脚不断输出正脉冲信号。当单片机访问外部存储器时,ALE输出信号的负跳沿用于单片机发出的低8位地址经外部锁存器锁存的锁存控制信号。即使不访问外部锁存器,ALE端仍有正脉冲信号输出,此频率为时钟振荡器频率的1/6。 PROG为该引脚的第二功能。在对片内EPROM型单片机编程写入时,此引脚作为编程脉冲输入端。

③ PSEN引脚:程序存储器允许输出控制端。在单片机访问外部程序存储器时,此引脚输出脉冲负跳沿作为读外部程序存储器的选通信号。此引脚接外部程序存储器的OE(输出允许端)。

④ EA/VPP引脚:EA功能为片内程序存储器选择控制端。当EA引脚为高电平时,单片机访问片内程序存储器,但在PC值超过0FFFH时,即超出片内程序存储器的4KB地址范围时将自动转向执行外部程序存储器内的程序。当EA引脚为低时,单片机只访问外部程序存储器,不论是否有内部程序存储器。

⑶ I/O口引脚:P0、P1、P2、P3,为四个8位I/O口的外部引脚。P0口、P1口、P2口、P3口是3个8位准双向的I/O口,各口线在片内均有固定的上拉电阻。当这3个准双向I/O口作输入口使用时,要向该口先写1,另外准双向口I/O口无高阻的“浮空”状态。

由于单片机具有体积小、质量轻、价格便宜、耗电少等突出特点,所以本系统采用89C51单片机,硬件设计电路图如图1所示。89C51内部有4KB的EPROM,128字节的RAM,所以一般都要根据所需存储容量的大小来扩展ROM和RAM。本电路EA接高电平,没有扩展片外ROM和RAM。 1.3.3 晶振电路和复位电路

最小系统包括单片机及其所需的必要的电源、时钟、复位等部件,能使单片机始终处于正常的运行状态。电源、时钟等电路是使单片机能运行的必备条件,可以将最小系统作为应用系统的核心部分,通过对其进行存储器扩展、A/D扩展等,使单片机完成较复杂的功能。

89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。用89C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,结构如图11所示,由于集成度的限制,最小应用系统只能用作一些小型的控制单元。

时钟电路 I/

STC89C51单片机 O

口 复位电路

图11单片机最小系统原理框图

(1) 时钟电路

89C51单片机的时钟信号通常有两种方式产生:一是内部时钟方式,二是外部时钟方式。内部时钟方式如图12所示。在89C51单片机内部有一振荡电路,只要在单片机的XTAL1(18)和XTAL2(19)引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。图中电容C1和C2的作用是稳定频率和快速起振,电容值在5~30pF,典型值为30pF。晶振CYS的振荡频率范围在1.2~12MHz间选择,典型

10

值为12MHz和6MHz。

C21830pFY1C311.0592MHz1930pF 图12 89C51内部时钟电路

(2) 复位电路

当在89C51单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作(若该引脚持续保持高电平,单片机就处于循环复位状态)。

最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充放电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。

除了上电复位外,有时还需要按键手动复位。本设计就是用的按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST(9)端与电源Vcc接通而实现的。

VCCS49C1R110uF10k 图13 89C51复位电路

(3)89C51中断技术概述

中断技术主要用于实时监测与控制,要求单片机能及时地响应中断请求源提出的服务请求,并作出快速响应、及时处理。这是由片内的中断系统来实现的。当中断请求源发出中断请求时,如果中断请求被允许,单片机暂时中止当前正在执行的主程序,转到中断服务处理程序处理中断服务请求。中断服务处理程序处理完中断服务请求后,再回到原来被中止的程序之处(断点),继续执行被中断的主程序。

图14为整个中断响应和处理过程。

1.4 LED显示电路

LED数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管分为动态显示和静态显示驱动两种,静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个STC89C52的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。数码管动态显示接口是单片机中应用最为广

11

图14 中断响应和处理过程

泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划\的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

本设计利用三极管驱动数码管,用4.7k电阻起到限流作用,使得数码管亮度适中。

数码管显示电路如下 +5R14.7kQ1PNPR24.7kQ2PNPR34.7kQ3PNPR44.7kQ4PNP999D01D12D23D34D45D56D67D78VCCabacdfgbeecfdgdpdpDS1REDCAD01D12D23D34D45D56D67D78VCCabacdfgbeecfdgdpdpDS2REDCAD01D12D23D34D45D56D67D78VCCabacdfgbeecfdgdpdpDS3REDCAD01D12D23D34D45D56D67D78VCCabacdfgbeecfdgdpdpDS4REDCA9 图15 数码管显示电路

1.5键盘电路

本设计采用按键接低的方式来读取按键,单片机初始时,因为为高电平,当按键按下的时候,会给单片机一个低电平,单片机对信号进行处理

单片机键盘有独立键盘和矩阵式键盘两种:独立键盘每一个I/O 口上只接一个按键,按键的另一端接电源或接地(一般接地),这种接法程序比较简单且系统更加稳定;而矩阵式键盘式接法程序比较复杂,但是占用的I/O少。根据本设计的需要这里选用了独立式键盘接法。

独立式键盘的实现方法是利用单片机I/O口读取口的电平高低来判断是否有键按下。将常开按键的一端接地,另一端接一个I/O 口,程序开始时将此I/O口置于高电平,平时无键按下时I/O口保护高电平。当有键按下时,此I/O 口与地短路迫使I/O 口为低电平。按键释放后,单片机内部的上拉电阻使I/O口仍然保持高电平。我们所要做的就

12

是在程序中查寻此I/O口的电平状态就可以了解我们是否有按键动作了。

在用单片机对键盘处理的时候涉及到了一个重要的过程,那就是键盘的去抖动。这里说的抖动是机械的抖动,是当键盘在未按到按下的临界区产生的电平不稳定正常现象,并不是我们在按键时通过注意可以避免的。这种抖动一般10~200毫秒之间,这种不稳定电平的抖动时间对于人来说太快了,而对于时钟是微秒的单片机而言则是慢长的。硬件去抖动就是用部分电路对抖动部分加之处理,软件去抖动不是去掉抖动,而是避抖动部分的时间,等键盘稳定了再对其处理。所以这里选择了软件去抖动,实现法是先查寻按键当有低电平出现时立即延时10~200毫秒以避开抖动(经典值为20毫秒),延时结束后再读一次I/O 口的值,这一次的值如果为1 表示低电平的时间不到10~200 毫秒,视为干扰信号。当读出的值是0时则表示有按键按下,调用相应的处理程序。硬件电路如图16所示:

k1k2k3S2SW SPSTS1SW SPSTS3SW SPSTGND 图16 按键电路

2、软件设计

2.1 原理图如图18所示:

RA2220RA1220GND+5GNDGNDPOWERR14.7kQ1PNPINP121+5RL1+5123AFAMQ-3BFB654+5R24.7kQ2PNPR34.7kQ3PNPR44.7kQ4PNP3S1246FR12.2kQ5PNP246135135999F12D2LEDD1LEDABBUZZERD01D12D23D34D45D56D67D78VCCabacfbdgeecfdgdpdpDS1REDCAD01D12D23D34D45D56D67D78VCCabacfbdgeecfdgdpdpDS2REDCAD01D12D23D34D45D56D67D78VCCabacfbdgeecfdgdpdpDS3REDCAD01D12D23D34D45D56D67D78VCCabacfbdgeecfdgdpdpDS4REDCARL12.2KRL22.2KU1STC89C52GNDADC08091234567891011121314In3In4In5In6In7STARTEOCD3OECLOCKVccVref+GNDD1ADC1ADC0809In2In1In0ADDAADDBADDCALED7D6D5D4D0Vref-D22827262524232221201918171615+5INGNDSTD7D6D5D4D0D0D1D2D3D4D5D6D71234567891011121314151617181920P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RESTP3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDXTAL2XTAL1GNDSTC89C52VCCP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7EAALESPENP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.04039383736353433323130292827262524232221+5J1123456789+5CLK10KD0D1D2D3D4D5D6D7+C310ufSTEOCD3OECLK+5R110KOESTEOCk1k2k3GNDY1k1k29S2SW SPSTD1D212MHZC130PGNDGNDC230PS1SW SPSTk3S3SW SPSTGND 图17 原理图

五、程序设计

1.程序设计的基本思路

13

主程序流程图如下图所示:

结束 图18 主程序框图

Y 设置相应参数 显示设置数值 N 判断按键 是否按下 执行相应 的指示控制 判断当前 酒精范围 读取AD转换酒精值 开始 初始化 2.数据采集子程序程序框图

A/D转换子程序流程图如下图19所示。ADC0809初始化后,把0通道输入的0-5V的模拟信号转换为对应的数字量,然后将对应数值存储到内存单元。

14

开始

启动ADC0809通道,并延时100μs N 转换完?

Y

读出A/D转换结果

结果存入内存单元

返回 图19 数据采集子程序框图

3.程序代码

//程序头函数

#include //宏定义

#define uint unsigned int #define uchar unsigned char #define Data_ADC0809 P1 //ADC0809 sbit ST=P3^3; sbit EOC=P3^4; sbit OE=P3^2;

//显示数组 0-9 - F

uchar Data_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x71,0x3f}; sbit Wei1 = P2^7; sbit Wei2 = P2^6; sbit Wei3 = P2^5; sbit Wei4 = P2^4; //函数声明

extern uchar ADC0809();

void Display(uchar X,uchar Data); void delay(uint t); //酒精含量变量 uchar temp=0; //显示模式

15

uchar Mode=0; uchar p;

void main() //主函数 {

while(1) {

//正常模式 if(Mode==0) {

//读取AD值 temp=ADC0809(); for(p=0;p<30;p++) Display(0,temp); } } }

//ADC0809读取信息 uchar ADC0809() {

uchar temp_=0x00; //初始化高阻太 OE=0;

//转化初始化 ST=0;

//开始转换 ST=1; ST=0;

//外部中断等待AD转换结束 while(EOC==0) //读取转换的AD值 OE=1;

temp_=Data_ADC0809; OE=0;

return temp_; }

//延时

void delay(uint t) {

uint i,j;

for(i=0;i

for(j=0;j<10;j++); }

//显示 X表示状态 Data表示数据 void Display(uchar X,uchar Data) {

Wei1=1;

Wei2=1; Wei3=1;

16

Wei4=1; P0=0xff; //正常模式 if(X==0) {

P0=~Data_[11]; }

//非正常 else {

P0=~Data_[10]; }

Wei1=0; Wei2=1; Wei3=1; Wei4=1; delay(10); Wei1=1; Wei2=1; Wei3=1; Wei4=1;

P0=~Data_[Data/100]; Wei1=1; Wei2=0; Wei3=1; Wei4=1; delay(10);

Wei1=1; Wei2=1; Wei3=1; Wei4=1;

P0=~Data_[Data/10]; Wei1=1; Wei2=1; Wei3=0; Wei4=1; delay(10); Wei1=1; Wei2=1; Wei3=1; Wei4=1;

P0=~Data_[Data];

Wei1=1; Wei2=1; Wei3=1; Wei4=0; delay(10); Wei1=1; Wei2=1; Wei3=1; Wei4=1; }

六、系统运行、调试和结果分析 1.系统运行中出现的问题

在调试过程中遇到的问题有:

(1) 由于在焊电路之前没有认真的查看89C51的管脚,使得管脚的顺序全部焊错了,

最后只好重新买器件重焊;

(2) 酒精值一直显示很高,经过查阅资料和换元件测试发现,酒精传感器初次使用

得通电几小时以上才可以正常使用,要做老化试验。

(3) 在解码程序的编写过程中,随着理解的深入也作了相应的修改。 2.调试手段(包括异常处理)

调试过程中首先要检测的就是硬件电路的设计原理是否正确、能否达到预期效果以及实现方法是否简便等等;其次在焊接好难有线电路之后,认真检查电路的焊接情况。这次采用的是分块调试的方法,酒精探测电路,控制电路以及单片机控制电路进行调试。

17

在对每个模块的进行调试过程中又采用了由局部到整体,由简单到复杂的调试方法,最后再将各个模块总和成一个整体。 七、设计总结

经过努力,终于完成了课程设计。这是我第一次基于单片机独立设计一个东西,并且老师只给出了大致要求。这对于我来说是很有挑战性的。

首先这是一个基于单片机的课程设计,单片机虽然是学习过的课程,虽然不陌生,但是用起来还发现很多的问题。硬件方面还好解决,弄明白就可以了,但软件方面就非常困难了,虽然以前还做过这方面的实验,但那都是是些简单应用。这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。

其次,就是使用到的各种元器件。这次我使用的基本上都是已经学过的元件,但真正用起来才发现自己还差的很多,所以我又重新对所用到的器件仔仔细细,认认真真的研究了一遍从引脚,到时序,再到最后的电路整体构成,下了非常大的功夫才最后弄出来。

回顾起此次课程设计,我仍感慨颇多。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。这让我学到了很多课本上没有的东西,扩展了自己的视野,增强了自己的动手能力,清醒的认识到自己的不足,培养了小心谨慎的作风,使自己对课题设计了解进一步加深。总之,此次的课程设计使我收获颇丰,也是我上大学来难忘的一次经历。 八、参考文献:

[1]陈权昌,李兴富.单片机原理及应用[M].广州:华南理工大学出版社,2007.8 [2]李庆亮.C语言程序设计实用教程[M].北京:机械工业出版社,2005.3 [3]杨志忠.数字电子技术[M].北京:高等教育出版社,2003.12.

[4]及力.Protel 99 SE原理图与PCB设计教程[M].北京:电子工业出版社,2007.8. [5]徐江海.单片机实用教程[M].北京:机械工业出版社,2006.12 [6]胡宴如.模拟电子技术[M].北京:高等教育出版社,2008.6 [7] 刘宁.单片机多功能时钟的设计[M].浙江:浙江海洋学院,2009. [8] 汪文,陈林.单片机原理及应用[M].湖北:华中科技大学出版社,2007. [9] 康华光.电子技术基础数字部分[M].北京:高等教育出版社,2008.

18

附图

19

本文来源:https://www.bwwdw.com/article/mi27.html

Top