|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
烟雾报警器制作过程及相关程序3 ]8 ?& B' A' ~: Y9 A% m1 I C
//程序头函数
l4 t+ ~7 u# F* g5 F#include <reg52.h>/ S$ G$ S" \$ H. \. |
. T' k p4 H/ \- I5 ^+ t7 l
8 ?/ v R$ j8 ~% X- k0 Z! r9 k- Z# i
. `" c1 W! u5 k5 |% Y. L. s, z
//宏定义
2 E7 {4 s0 B' W% x2 r) T4 `: c#define uint unsigned int- [6 _7 R3 m& e s3 A
#define uchar unsigned char% Q+ R! e4 E1 D, V1 O3 X o5 r
#define Data_ADC0809 P1# a# q/ V$ W$ ^; A0 S p, t! k
# L& _+ S! ^' d4 J$ X% Y" L; |
//管脚声明
" L' o8 Y/ K' f* z/ `sbit Feng = P3^0;
: R {: h7 O" f G& u# u) d, b$ _//ADC0809
5 Q2 D, _# i- h, U8 N! ^8 vsbit ST=P3^3;, P- }9 U3 g* Y
sbit EOC=P3^4;
$ v+ f9 n: S9 q3 Q! ]sbit OE=P3^2;
/ X' a6 o( |$ G' Q9 C//按键
6 }- M8 d; y' Psbit Key1=P3^5;" B* ^3 f' j: C5 w* l* ?4 }+ |
sbit Key2=P3^6;4 v; _ ^% ?; w4 n5 f+ |
sbit Key3=P3^7;
) F: l8 e+ b1 \$ B* G8 r) R, P# Y' S/ S4 y
//显示数组 0-9+F2 L5 A6 {% Z( C5 ^5 I/ m$ N
uchar Data_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x71,0x3f};2 g V" N8 d- H
sbit Wei1 = P2^7;( r% i8 \; d! l; R% `4 ^% z
sbit Wei2 = P2^6;
+ Z& V% H0 e( E( L, usbit Wei3 = P2^5;7 P, u% ~% o4 e* q& r; J$ }
sbit Wei4 = P2^4;8 H" _) a _7 {6 T
//函数声明' H& M# J# O$ I5 Q5 v# S: W
extern uchar ADC0809();
4 n5 z0 G4 w; nvoid Display(uchar X,uchar Data);% ^: n6 L& B: `% g" ~. L
void delay(uint t);! f4 ?0 d% G- y2 \% ]$ J( b4 k( u
6 i4 j [+ o# C//酒精含量变量. J& Z+ O) ^3 w1 p
uchar temp=0;4 [- ]( |" b- r8 j/ N S
//蜂鸣器变量( b5 X2 c6 n7 I6 H3 E: j9 j: ~/ J
uchar FF=10;
* _3 U/ p8 ?8 A( F$ M9 X//显示模式
) S& C' e/ G3 F) x7 n+ _uchar Mode=0;! ? a9 q) N. h' X3 c
uchar p;
% J& N$ q( S! h8 q" }! l3 O! r# H2 _; t. C% H0 U, c- M
void main()
* ^, ?8 z9 }/ } w. z r{; V+ F0 X/ N) S c
: E+ d$ V- s# A5 ]' x" zwhile(1)
# _, T) m# D" _{
3 U ^' h5 \$ i% s2 M8 P//正常模式
9 U+ A6 ^* {6 r- o2 Jif(Mode==0)8 U- ~6 r! M, ?: D) x
{
4 ^# K" A: E4 K C0 V//读取AD值; J, n c4 B. i8 w# T
temp=ADC0809();
" b, J" y& N+ v3 I& t+ ifor(p=0;p<30;p++)
8 G2 R, B- L- k: R: H, w6 j" fDisplay(0,temp);3 @5 e4 x: P) T, C; L
//判断是否报警) O) s& @4 R: ?4 d5 ]3 F( j4 r' g. T5 O
if(temp>FF)
7 Y l( W9 ~- t6 f6 Z; y. W{( w) z; R. A& m1 E' l
Feng=0;1 m! T- E/ X6 G! G8 E
}
# B, i% T3 H2 ]else" o( O: A7 Z) `3 l, d: p+ x% m
{
4 W- F3 ^1 E9 k$ Q$ R) M" x( b' AFeng=1;8 n6 x- D) z4 _
}' s1 P5 a. v9 u6 U' D
}
4 m/ g4 h1 N" [//调整模式/ \$ Z( N# I' }' B$ S1 i
else4 V* }" K$ F1 z6 J& x
{- P8 s" l. Y5 Q; y% o0 c% i
Display(1,FF); R+ `* J& h+ `9 N: [: _1 a
}0 k: x. O+ V0 j; w6 \
//功能键
8 Y' R( [, V! f' W v+ P, ]) kif(Key3==0)& X+ o+ T! ?* Y, m4 K
{ q3 x. B6 `$ f' v6 d$ f b
Feng=0;
& e4 k- j. I9 n: _7 pdelay(100);6 n/ f; t0 p0 R+ E6 K
while(Key3==0). P& E# i9 U& p% Q a- [0 s
{
! w4 W2 B6 c( }% P1 H$ pif(Mode==0)
2 S- s+ P9 V9 Y4 oDisplay(0,temp);
7 {2 \( j& R6 `# N" G4 a% P' uelse! B$ h0 J7 U6 u8 e
Display(1,FF);
. S4 K7 `% X* g6 o; Z. r+ e+ N+ m}
/ G1 y; `6 U* G4 J: ?if(Mode==0)2 x4 ?, z, j8 P6 f( u' i
Mode=1;
% X: w5 s' l% c! l7 k) B9 qelse3 [4 l4 A# o( c/ e+ A# Z0 I
Mode=0;6 u# O, o/ ~$ s* m5 u$ Z
Feng=1;
. j; F+ r/ z) L}
% d# j, c5 S4 C2 u) {8 L. A" i I, L//增加
4 U& @+ e9 \' y0 \9 |if(Key2==0&&Mode==1). z, P4 z) ]/ f9 H
{. [8 b/ t( A* |) P/ u, H! |5 S
Feng=0;
! c% o* v5 o' adelay(100);
@ ]5 Y) f4 E! P) w( ^) Fwhile(Key2==0)+ [& X# e1 _) T5 L) N
{
( `0 C' c- C) [7 d# ]Display(1,FF);
5 j6 w7 I7 p" W2 Y0 O}- l' ^% ]: A9 _- O, q& v
FF++;
7 z9 |$ F: ~2 @- W) oif(FF==251)
* _' y! Z7 M x" ~. |$ ^FF=250; ) t, E4 H8 v8 H2 o: h
Feng=1;
1 g7 E7 } F. H4 @}
& ?! |7 w* _6 \//减少
- [2 n8 z) G9 j) {# Nif(Key1==0&&Mode==1), `7 T2 @% Q5 p L" _# C) n
{
4 }: Z; U. `7 E6 ~Feng=0;7 Q( T9 ]% ? F" i+ J) C" r" y
delay(100);2 b# t$ s; n* t3 t
while(Key1==0)4 E2 i0 ~" g% B3 i: x
{) @+ }, g) ]/ `2 s( p$ ~$ q
Display(1,FF); % Q/ |5 w$ B6 X
}
9 b8 z3 I% w' q+ W/ ?FF--;
/ F/ c) d# d5 T1 U. x7 { wif(FF==0xff)
* J- C4 V ~3 B/ _. X @FF=0; # m( f2 ^5 r1 E+ A1 v/ W1 Q
Feng=1;
: q) u8 f+ Y0 t3 ^/ M8 s8 j}0 C- \* X) U( g! W; w( o
}0 i2 C. j% |+ D/ p. ^, e/ a3 c
}
/ b. W! I7 B8 h3 s//ADC0809读取信息
/ _2 Q! t; Q+ T# X6 R0 ]* ~uchar ADC0809()% _$ F. h' b/ o5 w" h# }
{
6 X& N# D- _7 M$ v+ u$ Ruchar temp_=0x00;( b" [& D) D/ v+ b
//初始化高阻太$ `& W& U) m1 f8 W G3 B$ D
OE=0;" L0 s7 A$ S0 L& @2 _1 t
//转化初始化
' d2 m( F/ Q4 o% GST=0;
8 W+ I& x9 w9 c3 P' q5 [* W7 R//开始转换4 p7 Z T2 q- v# r
ST=1;
& s- N7 \1 s- j k1 X9 JST=0;
! J7 ^3 P* A6 _$ ]//外部中断等待AD转换结束, W. Y$ S/ ^# B7 B
while(EOC==0)' Z1 a4 S ?, r7 {( R
//读取转换的AD值
" b6 q! e9 z6 _' K- zOE=1;8 l1 @( } M* ?& Z8 ^* a+ d0 L) S4 _
temp_=Data_ADC0809;
( o/ E7 s3 H0 n" d: C- FOE=0;
- [9 q1 v, s4 N8 a' l' ~/ Q qreturn temp_; O( }5 T+ v: G5 u: h
}" u3 F$ a5 y# P8 Z' Q6 f
//延时
' x% M. |8 p& ?$ L A2 s1 ]void delay(uint t)
' T% {- |; ^- Y{& A& O5 V( }. v6 B" \
uint i,j;4 P2 x) C- t4 e5 s/ }$ M }, G
for(i=0;i<t;i++)0 |" R, B+ C6 g% i2 g& r1 l0 X
for(j=0;j<10;j++);, N- [/ }& r4 K6 i+ }
}
. H! ?5 f' o( Z) `7 B& ^4 p5 F- T
//显示 X表示状态 Data表示数据# E) H, W4 l; ?2 a4 c& [
void Display(uchar X,uchar Data)% a# K" `5 r% R8 b" C6 f# r# q
{
+ u" C' E2 R7 ^' X, {3 A& @Wei1=1;
, _0 Z' @4 O1 }0 d3 K& hWei2=1;/ t1 v7 P: l: o8 ^( p2 |
Wei3=1;
2 q5 ~! g: K# P' a$ |; H+ cWei4=1;; D- s" i7 F9 X0 N! V2 i! j
P0=0xff;$ [8 l: F4 g+ f+ s! T) _6 G* F
' S: Q/ y; W$ c5 s/ U- G% C6 @- b//正常模式
8 N( E# L9 g' g- s( mif(X==0)
8 u$ k/ s; c% p! A$ _+ ?' ]{- T; F5 @' E8 O. F( J7 t9 X, D) k
P0=~Data_[11];
. J& ^0 ^3 ?" h3 H* P5 _}
9 U$ G# c: d X* v) S% {//非正常4 p" Q- D' B0 v0 t5 @" C
else
9 `6 E1 w; z3 f8 l% c/ e2 g8 p{, G0 A6 F# N' E6 ^
P0=~Data_[10];
; A! [$ u& B& f N& \; b7 _}# L" C7 i2 s- V6 d, I P! U& W1 _3 Q
Wei1=0;/ D/ y- l4 k* p# J. o( P
Wei2=1;
& [+ }( v/ W3 o( ZWei3=1;
$ X3 K- k( Q8 H7 g- \# `& dWei4=1;
8 \/ N w' I6 C0 l |delay(10);
`9 m4 Q) o6 ^' _" @' {" eWei1=1;; G/ b* j# S5 e6 J
Wei2=1;
# j, W8 @2 m+ D; |( UWei3=1;
2 V% _, N) s% b2 U4 gWei4=1;
! A6 V6 _) Q+ _( L2 f9 M) p" c* ?' l( Y* H4 G6 c" D% c
P0=~Data_[Data/100];
0 ^% D4 j9 a1 {* V5 E. PWei1=1;, B3 X9 K3 Q1 \; E, k
Wei2=0;7 X4 j# D; n- c4 ?5 V0 P M
Wei3=1;+ ^3 {5 G, w) ~! ?
Wei4=1;4 a* q$ O( p* l& [; _$ A& E! h8 L7 f
delay(10);8 l% u x1 u7 ^$ m1 r6 T: j& ]+ {
Wei1=1;* |8 _, M, ~" J1 C( @9 l: V3 h
Wei2=1;
3 F9 m, H4 e; v" J4 MWei3=1;/ Y2 v2 M4 z( C6 Z+ \* |! j* t, ~
Wei4=1;
: R/ i7 O* O6 ]
6 M# |) n. _2 K" p3 B$ {0 P2 z: y o* K+ s7 e" b% s3 E
P0=~Data_[Data/10%10];
1 I7 v) G* n3 ^$ L/ I" V. q7 YWei1=1;
3 j; k( X0 A, wWei2=1;. B4 J7 h8 w, v, y# t' d
Wei3=0;
- f/ |: B) N; `/ zWei4=1;
- x5 v2 R9 o* h4 Rdelay(10);
+ S" ~( ^3 x, _9 x! SWei1=1;7 V& ]8 `% M7 M; f" r; `' m
Wei2=1;
a' d- R7 {# J. ^; V) Y9 D0 d* ZWei3=1;
/ T' ]) }8 J( _3 t$ R0 L/ G0 OWei4=1;6 z9 e( T7 s" `4 T0 q z5 f3 K1 `
$ s3 k, w) k4 e0 E: ?
P0=~Data_[Data%10];6 P( |( p9 h/ l: g: f
Wei1=1;% f& W4 r6 D% ?# p0 y; [3 B; U% w
Wei2=1;
+ [& n! M( l4 N9 V' \9 \Wei3=1;0 `, C0 `; D9 M
Wei4=0;8 V9 s9 `/ k7 t
delay(10);- {3 x# Q) i* W# o6 W9 U; @" A
Wei1=1;
6 d5 V' k' [" ?6 f! j4 y/ M8 d7 U- NWei2=1;8 N0 K4 a3 |" f. `4 O
Wei3=1;: z( |* z9 S2 N& l* K3 q8 }
Wei4=1;
5 f& x H. i* `# G; M) B- |. M* F) j: i$ W
}) N$ c' L+ o1 {/ q" L# [
. j C) O4 \2 O& M/ F9 W |
|