|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机防酒后驾驶 MQ-3酒精检测系统的仿真
* A, y! c3 U) s( k
* f' ?* f, i5 h, w4 G% I; Z. |
. Q0 b9 a' l& `3 W9 v基于单片机的防酒后驾驶控制系统的仿真图:
+ u* T) L1 o5 }$ o1 s ! e O/ _0 e- {# U( M0 {
% n: _1 ~& B; n+ a& x/ Y- ]课题任务的内容和要求 (1) 学习气体测量传感器的原理和使用,并完成数据采集、调理电路的设计; (2) 学习单片机系统的设计及编程,完成系统整体设计; (3) 通过不同颜色显示灯及触发措施,对应三种酒精含量范围(醉酒状态、少量饮酒状态、正常状态),; (4) 测量结果动态显示。
: G1 e/ K# c; G1 U* T酒精传感器采集酒精浓度信息,将其转化为变化的电压信号。电压信号经过处理后通过A/D转换电路实现对信号的模数转换,然后送至单片机系统进行逻辑判断处理。如果驾驶员未饮酒,LED显示绿灯,汽车正常启动;如果驾驶员处于少量饮酒状态,LED显示黄灯,且会发出声光报警;如果驾驶员处于醉酒状态时,LED显示红灯,且会控制继电器动作,自动切断汽车启动系统电源,从而使汽车无法启动,有效的防止驾驶员酒后驾车。 流程图: ![]()
7 e( M4 Q0 {( |* y$ A" y, G
5 ~; w& j5 g/ \5 G! b! G
3 A& N* d( m: y- h4 _$ D8 p' w 5 ~, R8 X! P. r# D1 |
8 I2 O: f7 }1 x7 ~; LMQ-3模块的资料:
8 I, P ^4 x7 _$ b
2 K0 Z- C, {. h4 K1 P% }5 J' G4 l6 n; {5 J+ t+ V$ t
单片机源程序:8 l& L* d* `- d0 D
#include, t; N+ a1 x# m% F! E) E, y
#include<1602.h>: Z- \" W$ f1 R( T+ k6 @
sbit CL=P2^2;: p+ u; i# ^' x u- E
sbit ST=P2^3;9 A! V1 B$ H$ ^2 N. l( E
sbit OE=P2^5;5 L( t; A& Z; k8 x8 p8 q! G
sbit EOC=P2^4; //这四个是定义AD转换器的; S% F, }, K+ y+ V& K0 s, b
sbit DOUT=P3^2; //传感器TTL输出接单片机外部中断0$ A. `5 E7 Z- z) R4 A
sbit SK=P2^6; //蜂鸣器
! D# q) M) |8 X- d( p7 Z uchar code WU[]=" Welcome use ";3 ^& g" ?- x, O7 [$ \" U
uchar code TS[]="Alcohol Tester";
: b! K9 O, u; m- P3 ? uchar code YC[]=" You Can Drive!";" T; y# O8 y t
uchar code YN[]=" It's Dangerous!";- `! h& T. N' h% j( Q+ Z7 f
uchar code GD[]="Drive carefully"; ( Y P1 j0 f$ Q
uchar code AP[]="Watch out,Please";& h% b) @3 ~! t g: Q% K
uchar code YD[]=" You have drunk";5 X6 d5 }6 {3 m( e5 Q$ P# s( ]
uchar code FS[]="Forbidden Start!";
O) i+ B# c9 b; f+ P2 [3 j' v uchar nd[]="Alcohol: ppm ";! n5 i- t5 [- D; F1 }
uchar i=0,flag=0;5 ^0 v9 p/ w1 L2 ]8 V3 D
uint Z;! d1 C2 e, B' [4 r5 o7 R8 r$ W/ A
/*******************蜂鸣器报警**************/
% p& V9 T- [! f3 W- A void Beep(uchar t)9 V* w% o' {, x1 q
{! ? }! N+ P6 s4 w# P6 |: E
uchar i,j;! \5 k {) X6 `+ Z
for(i=0;i<200;i++)
/ {/ a1 M* d, D6 A9 B {
y" D- N$ l8 i7 S1 ]0 g SK=~SK;
1 ]7 O4 \+ Y7 M2 v for(j=0;j<t;j++);
! A! A, p. b. A4 l/ W }
1 r5 U9 l9 `. V4 O" s0 D8 D SK=1;( Q& |, S* f1 ^2 s" V. v
}
, B) l2 i* S# t$ d: r/ i k/*******************AD转换**************/
1 c& [% K, L! c3 Z% s# k& _- ]' ?7 x void AD0809()
5 p/ W8 v9 J* A+ l( s {5 n- @+ o# i n+ [" q$ e/ ]
ST=0;( ~; A! q8 i; L1 k) \( r3 p
ST=1; T- o2 c8 y4 A H1 I: \
ST=0; // 启动ADC0809
J+ r! a4 E( [& k. T1 E while(EOC==0); // 等待数据转化
% H+ M3 V- T2 E& \ OE=1; // 传输数据
. ~' R' J7 t, W; p' A) B; t3 i& a: i Z=P1;* ?& S0 T9 _1 k2 F
OE=0; // 关闭传输数据7 c% D7 j3 y0 y
delay(1);
! g* [% }! N( e: _3 p. N* e Z=Z*500.0/255;5 \) x, O! J G& Z7 u0 Q& Q* O5 v
nd[10]=(Z/100-1)*2+Z%100/10/5+'0';
9 r3 L4 G& T: b% C a' h/ S+ v nd[11]=(Z%100/10%5)*2+'0';+ n' q5 Y. F! f. d
nd[12]='0';
5 H7 O$ ~& j ~: o/ s* K: u }0 a1 n/ ]" ?/ E3 a1 t
/*******************主函数**************/- Q8 j D' S: v/ m0 Q
void main()
, w; B A! d9 P" G1 |& z, | {
2 l# [) L8 X# i lcd_init();
# `+ g, t) G2 D" C1 C0 G J lcd_pos(0);
S! N3 A# I/ b; i dis_date(WU);
9 z5 I) k5 e9 z. P! j lcd_pos(0x41);3 K: B0 K' R. ]7 z
dis_date(TS);: C* o9 P+ ^6 G" g1 ^9 ?
delay(2000);
2 Q/ B# u3 D& d$ B EA=1; // 开放总中断% |3 m$ E$ \7 Z7 v' N
EX0=1; // 允许外部中断0
# L p1 ?$ Q& M1 c ET0=1; // 允许定时器0中断7 O* n$ i! Z- W) X; {
TCON=0x01; // 外部中断0下降沿触发) E3 |3 P0 H4 }0 g- q
TMOD=0X01; // 定时器工作方式1- s: n2 S* P* E8 h, |8 ]$ t0 h
TR0=1; // 打开定时器0) k. E0 x5 Y/ X. t
TH0=(65536-100)/256;7 W# @9 V! Q) o2 a
TL0=(65536-100)%256; //设置T0工作频率5 m1 G* K6 _2 n q
OE=0;
7 v1 t. ?, x3 L- O* z2 D while(1)
( t3 `, F6 V( Z" H) \9 h, [- g, K! {5 B { ) B. o' m* Q }8 T
AD0809();" q5 c; E+ N7 e T6 S
if(flag==1) // 进入酒精检测模式
, }" U4 Z2 r: k2 L8 q6 h {
/ _. M3 y, p; c lcd_pos(0);! D- O# W8 T b* J4 n
dis_date(nd);
5 d: b: @6 n9 o4 | if(nd[10]>0x32)4 y4 f! U, u8 C# x# c& j
{* [& Q1 Z* q* { X5 a- N
P3=0x3b; // 醉酒饮酒 2 _ G, r2 `" x7 I& s7 v
lcd_pos(0x40);) i) |, s/ M3 e" _4 b% w* ]9 c" }: m
dis_date(FS);
, s+ O, F$ W) R* W! I5 W }2 _ z6 F% o- y ~& O
else
8 R2 u: i/ x( X2 `; ?8 B* v2 W {
/ A! n, p) ^; {4 A6 s* d$ o$ P P3=0xdb; //少量模式) y" m2 c1 q1 |: j: ^" r F
lcd_pos(0x40);7 M3 T" Y, F2 y8 n! C/ ?9 D! h$ t
dis_date(YN);: {( x% L" e3 @. R2 ^5 q# {
! h# f& N$ U8 M+ h: c; \' S6 n
3 f' [( q: Z, S; A7 e
* v \/ \' H# q) X! \8 x…………限于本文篇幅 余下代码请下载附件…………+ Q# \. }: O! x* }, i2 d1 ~' b
5 A% Y4 a% J3 u" X
5 T5 D B3 Z' L0 d% }1 t9 z- p& L
8 @8 g# `% {: k0 N& v0 }
9 l. ~# c5 a6 Z1 ^9 e7 {下载:
: k$ E1 c% | D. v; ^+ B8 A2 }& N1 N# q1 q6 S$ W! f
8 ?% U, w' S- F: M
( S& k7 t( Q- q; B0 B, L
|
|