|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机防酒后驾驶 MQ-3酒精检测系统的仿真' Y/ h( w" l' S+ ~8 M5 z4 y+ R6 }
6 k8 W# R! {( |4 C! T' I3 S( P4 ?! M0 q9 `! s6 l
基于单片机的防酒后驾驶控制系统的仿真图:' i2 p; M- V9 E* A6 N, ^ ~% o
- Z5 C! [8 x- I( R8 N; `
# Y& u. @5 H% Z3 ?# r2 H* s* R
课题任务的内容和要求 (1) 学习气体测量传感器的原理和使用,并完成数据采集、调理电路的设计; (2) 学习单片机系统的设计及编程,完成系统整体设计; (3) 通过不同颜色显示灯及触发措施,对应三种酒精含量范围(醉酒状态、少量饮酒状态、正常状态),; (4) 测量结果动态显示。 ' [: @$ y7 b0 u5 l. Y
酒精传感器采集酒精浓度信息,将其转化为变化的电压信号。电压信号经过处理后通过A/D转换电路实现对信号的模数转换,然后送至单片机系统进行逻辑判断处理。如果驾驶员未饮酒,LED显示绿灯,汽车正常启动;如果驾驶员处于少量饮酒状态,LED显示黄灯,且会发出声光报警;如果驾驶员处于醉酒状态时,LED显示红灯,且会控制继电器动作,自动切断汽车启动系统电源,从而使汽车无法启动,有效的防止驾驶员酒后驾车。 流程图: ![]() 9 {' P5 D! F0 I# S; n2 P) F
( c* P; ?- D, E+ j% E5 `! o: w: o" ? {
4 M0 k: q: G `. D
! O! q4 E9 w3 B5 G# w" _
MQ-3模块的资料:8 E, {4 W% {9 [# Y* @9 R+ u: D
' k- `* H: J3 b# m7 ~! P0 K0 X' q
2 M( H/ L) U5 c) N: {5 j W4 N
单片机源程序:
2 f5 H' ]5 M1 _! X% a) Y! N5 O #include
0 e* {. `' A6 y+ \' i* F5 V- B) K #include<1602.h>
" |# I, N+ [7 l( _4 n sbit CL=P2^2;
& T; P, X: [& s( |3 Z4 X& l& Q5 H sbit ST=P2^3;
7 p& D) T# ^$ A' B8 `3 _6 | sbit OE=P2^5;
1 S. V" ]4 r5 p3 l/ C3 s" d" G5 H sbit EOC=P2^4; //这四个是定义AD转换器的' \" `: b! O/ B* f5 X
sbit DOUT=P3^2; //传感器TTL输出接单片机外部中断0! Q) q0 k! Q" p+ S+ n' W' G7 a J# y
sbit SK=P2^6; //蜂鸣器1 d. T% U) I# x' j
uchar code WU[]=" Welcome use ";& s { a) }0 n
uchar code TS[]="Alcohol Tester";: T& `5 j3 F0 \9 U" Z
uchar code YC[]=" You Can Drive!";- b/ k3 b1 X5 F" v5 w/ r
uchar code YN[]=" It's Dangerous!";) x1 B6 y% r' z& _4 B
uchar code GD[]="Drive carefully";
" I4 y( O7 T* S) c uchar code AP[]="Watch out,Please";0 w7 a2 w8 S/ v: w/ d s
uchar code YD[]=" You have drunk";$ H3 ]* I% ]: H, m: m2 \( j
uchar code FS[]="Forbidden Start!";
1 u) B1 H$ q1 X uchar nd[]="Alcohol: ppm ";
- H, P& j# e( G% ]" D uchar i=0,flag=0;
' \' M- i0 t, V$ n, y' V' t; C uint Z;
) g. d: ]5 e- z& U# @! l/*******************蜂鸣器报警**************/
/ m+ O$ j2 t7 _& J& r void Beep(uchar t)
* |$ G! o0 X, X; l$ I { k0 r5 v' ?+ e$ r" W
uchar i,j;
7 x7 X" Q4 p. S, @+ u for(i=0;i<200;i++)
, s6 I3 g# ?% N0 A+ J; e {
! s: P' E8 S+ K/ Q& _. Z; O SK=~SK;' v( z6 I# ^+ \% ]
for(j=0;j<t;j++);! Z! i) b8 g4 d2 Q- C
}0 Q$ m; ]- Z- k/ M) f# G! P- a
SK=1;
7 V; R* V. s. { }5 D6 u; i& f1 M1 }2 _" M5 A
/*******************AD转换**************/
* {2 Y) Y$ G0 \5 C! ]& }3 t9 A void AD0809() E' u0 q. h4 Q. W4 o- I1 A+ {
{
3 `, t7 ?$ K" K" D' D6 Z ST=0;2 j" w t8 ~% V7 o
ST=1;! t& P5 e3 o+ e6 Q3 c" i
ST=0; // 启动ADC0809, i# \& R7 v6 _
while(EOC==0); // 等待数据转化
: ]% c3 j0 o9 h$ c9 s5 ` OE=1; // 传输数据
6 H# K) g- T _+ U Z=P1;
$ K. i: u8 Q+ I- ^ OE=0; // 关闭传输数据
' Q# ]4 N1 T r3 L, x* m, U% r/ h delay(1);
! r, _/ s: ~5 E) ~/ T Z=Z*500.0/255;
3 H& R3 C# W/ L+ ? nd[10]=(Z/100-1)*2+Z%100/10/5+'0';
( C3 ~0 C9 d1 F2 L3 j i" D nd[11]=(Z%100/10%5)*2+'0';' G2 g# i- ^. X, a% j7 d* {
nd[12]='0';
?7 U+ |' B- r }" i* a4 p- ~0 v+ V+ @* m
/*******************主函数**************/2 \1 `- b; B! ], O
void main()
3 j: |/ e2 f- X; z3 C4 y' T {
9 O; ]0 d$ Q( [7 G4 Q9 H, j lcd_init();
- Y# b! _6 E# m. R) a lcd_pos(0);
( ?% \5 X- M% E T6 k2 _ dis_date(WU);* U6 _ @& E- K5 D+ [
lcd_pos(0x41);
1 S3 W5 T3 Z4 j, V9 Q dis_date(TS);( p! E2 \* s$ z8 t. H' {, Z- m( U
delay(2000);9 b% ~0 H/ d6 r/ K$ {6 Q
EA=1; // 开放总中断
7 j+ ?% @ S2 H B _% H- l EX0=1; // 允许外部中断0
" e- R! L5 }$ z1 A) l3 A' ~5 ] ET0=1; // 允许定时器0中断: x/ W" w, \* r8 y: i' Y! h
TCON=0x01; // 外部中断0下降沿触发) m+ I0 I+ f# e/ }: L1 N
TMOD=0X01; // 定时器工作方式1; P1 H. v; W- B0 D. o) M5 l
TR0=1; // 打开定时器04 J/ X r; f9 A% u5 F
TH0=(65536-100)/256;: e& s8 x- b1 H' T3 z" g3 ?0 C
TL0=(65536-100)%256; //设置T0工作频率
& Q1 H5 B- J6 c/ y. v+ K OE=0;
8 G' L0 u9 L4 l6 r s# K while(1)1 F9 w) n! }3 X7 C* [# H; Y f
{
. t; `* t+ Y0 Y; d- B AD0809();
7 g" ^$ `3 d# F. e# _" p/ \ if(flag==1) // 进入酒精检测模式; a' E" n X% ?3 C* n! [$ ~6 _
{
7 A; O: H, c$ g8 j2 g$ x9 P4 B2 C- u lcd_pos(0);
6 \% N+ I4 D1 @: A! \9 @8 Z3 R dis_date(nd);
# U9 [& W' o, |& _; l if(nd[10]>0x32)
1 |. N8 n, ~7 b; Y3 m# x {
& W( i+ e7 b+ Q9 T* ?& G5 [ P3=0x3b; // 醉酒饮酒 " z, e& r4 K# q+ {4 _" d& v
lcd_pos(0x40);
! _+ U2 g# P R" \" e1 d+ d5 T9 e dis_date(FS);
- r7 F& j: \( z, j, I4 T, l& ] }+ k: v+ h, E; q" }% B7 @
else/ [1 _& |6 A; x, R+ @+ s
{ / R! q: H/ W: W8 j
P3=0xdb; //少量模式
: \. F' [& l3 v9 [4 R" W lcd_pos(0x40);( C" u& F% y& k
dis_date(YN);
/ G. f2 M1 M' A: V; E1 ^% j: r5 n 4 _6 i$ f i& @/ e& W% V
, [2 z/ g2 y" v* Q5 \4 R' k* k
- y* W8 x" z* e% _$ ?8 u
…………限于本文篇幅 余下代码请下载附件…………% x9 D) @! o/ B3 F H) x
3 p" h L0 ~3 F; E/ o- d. H1 ^$ D. l
. g4 p0 U/ n3 V* W
( ~6 Y0 R9 N& F. a3 |0 r
下载:
% z z$ T5 h# {- \0 t) C) _7 [
+ ` ^* s. n7 G% S4 s( n& A
6 D0 _' T4 b8 M* D! O+ B- N# Z( r, z _( q5 W4 k) `( @ W
|
|