EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——以前怼的一个基于89C52的PM2.5空气检测仪发出来相互学习一下% H& {) P; y w1 u) Z& I% }
1 6 n( Z) ?0 C1 X. Q0 h$ T
| 蜂鸣器
- Y; Z. Z6 |+ e) Z" I | 5V 有源蜂鸣器 ( l2 M. }$ _- K! b
| BU1
# x2 p& o3 t, f' h& G. Q; L | 插件 - M: U3 r9 H: n! z# r
| 1
, ~ k( l/ s; B5 L/ F7 f | 2
9 n9 Q( C! t$ \; n" N | 电解电容
5 B) h" O4 W6 J: N6 M1 [( s | 10uF
Q- V9 {! D9 f& l2 `. S/ F7 x: ]8 P | C1
( b" F6 |! P/ N% C- W | 插件
* D, g+ \; s5 o7 q* W2 y | 1
! q, Y9 y: Y* `, T | 4
) s: a8 _) M% o4 v | 无极电容 : o0 _: F' b$ S( U8 I g
| 22P
U! ]8 {3 H* f e | C2C3 . u- I3 u/ I3 r0 M* j4 E! c' r
| 插件 ) |/ b3 m; Z- \+ [7 ]/ C0 _- d+ J
| 2
, O. J7 n3 N0 w3 B- D | 5
+ D9 F4 p' E6 }/ W- t | 发光二极管 % r5 X6 n; C0 ?* a1 ~" o% B
| LED 4 L2 ~8 K3 S7 J$ N
| D2 9 Y3 N/ C5 u" o" G o# D
| 插件 ; {6 W2 d* L t0 `1 @
| 1
9 H- v% f) A" u4 f0 i- r$ s | 6 , s6 v5 b# N8 G# K, S8 @* w1 C
| 液晶屏 3 w8 }8 o$ P7 W
| LCD1602液晶显示 8 m2 r2 y$ v+ R3 U( [$ P1 N+ o
| LCD1
' O- y# o- Y1 N- T9 v | 插件
: t2 S# ~; J1 y' H. o# M X% U/ r* q | 1 " d& ~0 }; _2 {. g3 H- V& y
| 7
% Z+ e+ p. {; l) r8 n. R0 a | 电源座 & K/ ]% O$ I& P4 R% k
| 5.4*2.1mm电源座
+ v! C8 E2 D9 }3 w+ B6 z, { | P1 & \- K! T4 i& n* b5 c- x( }6 ~; E" T
| 插件
$ B0 _7 | e' ]) B: ? | 1
' Z4 p) ]3 A% ~7 r& n( Q6 X | 8 % l" C$ e2 O% M. {1 S/ S+ \$ P
| 三极管 5 R& P6 C0 |) m* ?/ N! s1 s' M, T- q
| 8550 PNP管 8 l& q& l& I( | b: v: O' B
| Q1 # ]$ ~5 J0 i! M( i
| TO-92 & {( }! v, w$ B; h1 \3 e
| 4
7 V: v& W+ ?' L/ @# W# e" D' I6 M6 R | 9
+ M4 |+ L1 ]$ |2 w4 \ | 三极管
! r+ X Y8 W/ M. V7 C& c | S8050 NPN管
" e9 t+ }4 p7 _4 ` | Q2
6 z; x0 o1 \ _% M! d | TO-92
* X! E# D3 S2 O7 }' c | 1
( n S$ w) y4 E9 I* B( u# @) } | | 电阻
2 A! B$ [3 f9 l; W. J0 v8 @ | 10K
: L8 t$ s* s( l$ T' n | R2, R4, R5 / d; e, L+ R5 Y( G w( L2 `
| 插件
# @" Z# A3 u7 ^* r! @5 R* E! Z | 1
3 j. N( r: y. T* h( ?7 j' f0 E | 11 % E0 [/ z1 k* F& l9 l$ m% C
| 电阻 ' G. ?9 S+ \$ N$ o+ t) R) y
| 150R / S8 M' i9 P6 ^' c( N
| R3
, U: y8 D: b- K! J5 |9 b | 插件
. ^1 f$ R# {' x" |4 D, |- w$ f | 1
7 T0 h2 w1 V, }7 m' U6 Z, i | 12
+ s" k, n5 ^/ {# k& Z; A$ N7 Q2 A | 电阻 * U0 Z. T9 p' V
| 1K
% `" E8 u; c; @& |9 ~3 S/ _ | R6, R7,
: x/ H5 e: S/ T) l+ n | 插件 1 o# ]* G) c" j' j- F' O' `
| 1
( q! L: ?" k8 U | 13
/ Y0 A9 K j( \& B8 @ | 排电阻
/ Y' @+ }* c9 ]: e/ ? | 8*10K排电阻 ) K2 x \( ]$ Y3 g4 o
| RP1 9 T7 p4 S4 Q7 G0 |* Q$ A
| 插件
4 [# J. Z1 } Y: ]% ? | 3
, n+ F x0 I! v! A, o3 } | 14
7 S9 k4 O% f, g. `# u6 i+ \3 z7 H | 可调电阻
* x I( q( x1 O | 10K
( ?5 ?+ u4 V7 t0 z | RV1
, {4 A# S: b. c2 ^; g | 插件 . w9 I+ E% b7 C/ _0 t+ }7 y" E5 Y
| 1 : v- e/ {' N# x9 a3 ?, A6 v$ x' K6 W
| 15 7 w# K; k% L3 w' m# o8 ~3 Q+ V
| 8 L9 q0 ]0 \: v' N4 l
| STC89C52 9 t/ ]( s! S2 O$ u' T# j
| U1 ) H" h' ]2 ]3 @5 B
| PDIP40 2 \0 C3 \5 f/ b, h( s
| 2 T8 j! }, k! D
| 16 6 g+ C8 n2 B S5 Z: e; `2 }5 {
| IC座 ' A: N( P& _* e8 w$ _7 \5 Y+ ^- K6 `
| DIP-40
8 H' [9 T2 X& F1 K: D& G; e8 ` | * i, K9 Y) X2 F% S' t) Y
| # K# H9 e6 W, e5 r
| 1 + [% L$ ]( a) U4 B
| 17 ' b) I; f- C% [, K
| AD转换芯片
% I. n% q! s; d' V. Y9 X | ADC0832 / e/ `& c8 Y6 s6 @5 F' j
| U2
/ W. i9 x0 c" D# [" j, F# g7 R | DIP-8
/ B5 M8 [( u% V' n6 R0 @2 [9 ^ | 1
. I& u' i: M" ]! ], v% I* r, z | 18 5 U7 T1 q' g, `* P4 ~* _# |0 a+ y
| 粉尘传感器
3 O8 k; A% M$ n7 a; z4 A2 h | GP2Y1010AU0F
: K% g$ H4 Q4 f+ y$ s$ T- p5 ? [' I | U3 1 ^ U+ y3 l4 ]" b, a
|
* I: L0 m$ L* @+ P; i( N | 1
8 i2 j4 e6 P% T0 k# o% p1 e5 ^' [ | 19
# L1 [# V8 s' V9 g4 x p | 晶振 0 u! ?& B+ H" V, B i3 L
| 12MHz 6 k9 O4 `3 C3 E8 a# `$ U
| Y1 1 I0 N% M7 Q; k- E( \
| 插件 6 z$ X: V7 K* j
| }+ X1 @4 i' h# w
| 20
% C9 O; y% ` e- y9 l w. I | 万能板
/ g3 x! X" \" ~- y1 U" K | 9*15cm }8 s' u% ?! f# ]4 i/ e U
| 1 C r& f$ r o( D' i
|
& s( M9 p; {/ ~& e | 1 4 c; a; u4 j7 H! H3 }% q' l3 V9 G; _0 v
| 21
5 c0 P% J8 k/ Y6 n. ]( D+ r* g | | |
0 l0 E5 Y# x- s3 U |
# W1 ]6 U/ b1 Z | | 8 x N/ ]( Z! q2 w' t% E
| 22 , J8 I7 d6 l7 G' v
| | V3 t* S* Z2 R
| | | | & ~; u: f8 Z& Q4 h
| 23
/ w8 s1 V: k* v3 v7 T3 W | | | | | | ) Y% S) N$ N4 O9 P
|
: j; B" X0 r) K9 o
9 @- J0 u$ U& c$ j- ?+ o3 M2 M# |: T; E
- Q/ |3 r* |7 N
* z: r0 ]) d, |& Y) z
元器件清单 1 4 @1 h5 n- B# w/ K+ v& R* c
| 蜂鸣器 3 w3 S5 ?7 E% L1 c9 u
| 5V 有源蜂鸣器
0 k' N* v. ?' G9 J6 ] | BU1 7 `% J1 b' y1 G3 C r
| 插件 & e& S) L1 ^# j+ n' Q0 |/ i
| 1
; B, v7 A7 m. @ | 2 ( m7 R7 m7 j: J/ o7 f
| 电解电容
! x) A9 z$ x. M$ R. B0 s | 10uF 2 t. Q, f" n. k' }1 p4 v
| C1
9 U9 q6 m, y6 h6 d | 插件
5 Y; w$ j9 P$ L* N4 i4 A# g# P | 1
3 m) V0 B' M+ Z$ c/ j4 S* q | 4 e3 ~% J5 l0 N7 G' y
| 无极电容
& t" E+ _6 W7 Y* Z | 22P
N/ W. u" i- H | C2C3
! w, h/ W, p- x0 c- _7 ` | 插件 / ?% G. K5 X/ T, F j
| 2 5 k i& d6 k2 E+ S( D/ Z$ X
| 5 9 s# P5 o, f. Z0 S( d
| 发光二极管
( K9 q& g! y& g; p | LED 1 n8 d. w' b% z0 s
| D2 ) @' r' u3 k( K' z# e; J
| 插件 2 t0 v! @$ m# \, d2 m$ Y6 f
| 1 ; s" J) K1 |7 Q5 [! `
| 6 * p6 X; h6 e: s- z& _0 j
| 液晶屏
% U" d+ ~) m4 r | LCD1602液晶显示
0 S& h k t; e6 ]% O | LCD1
8 j8 a* O0 w, i1 e" @2 x z( L8 Q | 插件
) M3 J. J! E4 R+ S% J( g | 1 7 c u5 A( y2 a# y7 r4 O
| 7 7 Y) _8 G1 W& P
| 电源座
: I0 |4 K3 E, m- C H1 h | 5.4*2.1mm电源座
/ [; {9 K: O* X- a | P1 f7 _- M( Y, ~- l9 r `% P) D
| 插件
$ @9 l) [2 R/ s1 v2 S# n0 z | 1 . r3 d' ^ l/ Q4 z6 h0 m: @
| 8 / J8 n& y1 q+ ?1 y
| 三极管
0 k, P5 O b# p; z- _# j$ ], b) J | 8550 PNP管
! t' {! ~2 |2 f; C2 ] | Q1
; u$ m( ~* x7 W3 p6 S | TO-92
/ m3 g" l; V3 w* U4 @ | 4
# Z& g7 y+ H) {# D | 9
2 R- a8 P0 ?, r' A" J | 三极管 $ e# L* ?" L: j0 F* j
| S8050 NPN管 . _" d! U5 O5 V9 j& H* w
| Q2 + m$ V. h2 A$ S& e- d
| TO-92 ( W4 k2 T5 b" ? W% S+ f9 H
| 1 ' e; Z8 h5 I9 N c& h% c* e3 G
| | 电阻
" h, ?7 P- R9 w( v" c | 10K
0 J: G7 j- k8 z* X" h | R2, R4, R5
0 \9 t. a' G9 h7 f& s | 插件 # f9 |: R, |7 Y
| 1 . ?( [. C5 W% U* C( H3 v N' n
| 11 7 i5 p& C9 R1 E# U2 ^
| 电阻
! h6 L/ h0 d( p5 o' h u0 ` | 150R 4 G, _( H$ D$ S
| R3 # S( _8 K8 g0 b! T( @
| 插件 ( o5 o/ z- }; D" B* I W$ F+ q
| 1 / l1 ^) n' ~' C
| 12
* a! i1 V( K5 E/ @ ]; X | 电阻 # E2 i6 O' p# F& k1 B; e
| 1K 1 c! ^* A% D+ H. ~" U( W: r2 a
| R6, R7,
; B& G! Z% S- G. v; f | 插件
4 w: l0 |# y; G! n8 m | 1 1 ?& K5 |2 m" I6 R, R/ P6 D7 b% c
| 13 ! o* E# d2 x$ \) o& Y! m. H @
| 排电阻
7 A9 B7 Q. X1 r) d% E; _ | 8*10K排电阻
0 ^/ y0 ]" @3 M | RP1 & U9 m1 f5 C$ z4 Q1 M9 Z
| 插件 9 c: R) S' g$ X: L. J7 I
| 3 + O0 U2 e) j" g; F" M: S7 f; f% b
| 14
' w: \( V$ x, g1 ?0 j | 可调电阻
1 E" r; `# k6 M+ b6 C | 10K $ y/ O( S4 Y. \ [4 {; Z5 X
| RV1 $ ?* M( K1 b" t1 E+ g: m
| 插件 ) J5 f ]# b1 V0 v. K8 c: t+ k
| 1
8 i- r/ m' M* P1 i" k* j | 15
0 `; G1 v6 w# o% T* b | 单片机
( K7 h5 ]) u) s+ j+ T2 z% J | STC89C52 6 U: ^. [6 s8 H2 u; ~
| U1
* [- Q O* @8 J# m* u | PDIP40
0 i. E, x2 c7 f; s | 2
. V# v2 N1 P. Y9 o8 b | 16 : M, Z/ K+ X$ _& e0 z( Q* A
| IC座 7 u: k* m7 B/ n0 A
| DIP-40 & T% V) C6 y9 }" ~
| m8 X: O- J) o7 T3 F/ @# L# k
|
# T1 O9 j; _6 B* `& B7 T | 1
+ v% D1 V/ A; g* j! X6 k% M( o1 q | 17
% o" S3 i+ }' @. Q& { | AD转换芯片
, p O' P- H$ q: @5 \# O. K | ADC0832 # S0 D; l5 ^, o3 q7 u
| U2 8 o7 K# @( { H/ r
| DIP-8 ) @* s( e' e, g3 q
| 1 . q: b& H6 T5 T# d$ m2 y
| 18
# Z- z& L3 w( [. Z' u- g | 粉尘传感器
6 `3 k% ?+ ~( g( M6 Y, D1 I | GP2Y1010AU0F $ _" g/ Z4 T$ ?+ l/ {; F0 Q
| U3 + C$ J; A0 ]% h6 h* w7 A( i
|
, a0 l$ q% [! m- U/ K5 A6 o | 1 v+ @7 n" F. C" s! E" s
| 19 - |1 B, f) b/ p
| 晶振 # c' }$ v0 k. _
| 12MHz
4 r) g% m8 t0 ~0 J | Y1 ; J# k( @& e q% D3 s% \: h1 B$ g
| 插件
% s" p- I1 j# Q' i7 ?& d9 D | 0 l# s4 X3 o" }# S
| 20 1 a) f2 R) N( ?1 @+ p
| 万能板
; m' c6 m" r- N. h D" \- } | 9*15cm
; z+ [# t# M+ a |
4 E+ ]' W! N( a' A |
9 o, N* `6 R6 U- r9 @ | 1
; B1 `! Z# G: Y2 y5 x) s | 21 ! i+ F* a/ H; W8 L/ Z* t! |
| | |
) A4 p5 S( _/ a$ e |
. |5 I$ _/ }) K% R | | 1 ~' S6 l: t- q
| 22 , J2 c3 V! L% ^5 J
| | . c, L1 o0 i S
| | | |
* y# R4 f7 ?+ ?6 d7 p* z | 23
/ k, C Y7 I2 @- |$ T | | | | | |
! @- _- x" Z- w7 v1 Y2 r |
( I6 t) L: X2 u% P1 y) A5 U0 f- s* [/ r
) ^8 S0 [: T3 y! V
5 r! t. k3 r; A$ M s: W
- O8 }& q+ ~8 |8 ]; C$ A6 D; f( N
! y3 E! p2 {- A% `% J1 Y; c
3 \6 w, K8 L- M& H5 i {5 Q
程序及注解 #include <AT89X52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char //宏定义 sbit RS=P2^5;//液晶接口 sbit RW=P2^6; sbit EN=P2^7; sbit LED1 = P2^3;//指示灯接口 sbit LED2 = P2^0;//绿灯接口 sbit LED3 = P2^1;//黄灯接口 sbit LED4 = P2^2;//红灯接口 sbit LED = P1^1;//粉尘传感器控制接口 sbit ADCS = P1^4;//AD0832接口 sbit ADCLK = P1^0; sbit ADDI = P1^2; sbit ADDO = P1^ 2; sbit SET= P3^3;//按键接口 sbit ADD= P3^4; sbit DEC= P3^5; 46/55页 sbit BEEP=P3^6;//蜂鸣器接口 uchar set_st; uchar tab[4]; uint DUST_SET=35; //固体颗粒的阈值 bit shanshuo_st; //闪烁间隔标志 bit beep_st; //蜂鸣器间隔标志 uchar x=4; //计数器 //定义标识 uchar FlagStart = 0; float DUST_Value; uint DUST; uchar num=0; uchar mm; uchar abc; uchar ADC_Get[10]={0}; //定义AD采样数组 uchar str[5]={0}; /*****初始化定时器0*****/ void InitTimer(void) { TMOD = 0x01; TL0 = (65536-10000)/256; //定时10ms TH0 = (65536-10000)%256; TR0 = 1; ET0 = 1; EA = 1; } /*************************lcd1602程序**************************/ void delay1ms(uint ms)//延时1毫秒 { uint i,j; for(i=0;i<ms;i++) for(j=0;j<100;j++); } unsigned char rolmove(unsigned char m) { unsigned char a,b,c,d,e,f,g,h; a=(m&0x01)<<7; b=(m&0x02)<<5; c=(m&0x04)<<3; d=(m&0x08)<<1; e=(m&0x10)>>1; f=(m&0x20)>>3; g=(m&0x40)>>5; $ R. v" | ~& }9 o
h=(m&0x80)>>7; m=a|b|c|d|e|f|g|h; return m; } void wr_com(uchar com)//写指令// { delay1ms(1); RS=0; RW=0; EN=0; P0=rolmove(com); delay1ms(1); EN=1; delay1ms(1); EN=0; } void wr_dat(uchar dat)//写数据// { delay1ms(1);; RS=1; RW=0; EN=0; P0=rolmove(dat); delay1ms(1); EN=1; delay1ms(1); EN=0; } /*****************************液晶初始化 *********************************************/ void lcd_init()//初始化设置// { delay1ms(15); wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); wr_com(0x80); wr_dat('P');// wr_com(0x81); wr_dat('M');//: wr_com(0x82); wr_dat('2');// wr_com(0x83); wr_dat('.');//: 48/55页 wr_com(0x84); wr_dat('5');//: wr_com(0x85); wr_dat(':'); wr_com(0x8b); wr_dat('m'); wr_com(0x8c); wr_dat('g'); wr_com(0x8d); wr_dat('/'); wr_com(0x8e); wr_dat('m'); wr_com(0x8f); wr_dat('3'); wr_com(0xc0); wr_dat('A'); wr_com(0xc1); wr_dat('l'); wr_com(0xc2); wr_dat('a'); wr_com(0xc3); wr_dat('r'); wr_com(0xc4); wr_dat('m'); wr_com(0xc5); wr_dat(':'); wr_com(0xcb); wr_dat('m'); wr_com(0xcc); wr_dat('g'); wr_com(0xcd); wr_dat('/'); wr_com(0xce); wr_dat('m'); wr_com(0xcf); wr_dat('3'); } /*****************显示函数******************************/ void disp(unsigned int Data)//PM2.5值显示 { uint Temp; Temp=Data%10000; str[0]=Temp/1000+0x30; //千位 Temp%=1000; str[1]='.'; str[2]=Temp/100+0x30; //百位 Temp%=100; str[3]=Temp/10+0x30; //十位 str[4]=Temp%10+0x30; //个位 wr_com(0x87); wr_dat(str[0]); wr_com(0x88); wr_dat(str[1]); wr_com(0x89); wr_dat(str[2]); wr_com(0x8a); wr_dat(str[3]); } /************************报警值显示************************************/ void baojing() { wr_com(0xc7); wr_dat(tab[0]+0x30); wr_com(0xc8); wr_dat(tab[1]); wr_com(0xc9); wr_dat(tab[2]+0x30); wr_com(0xca); wr_dat(tab[3]+0x30); } /*****延时子程序*****/ void Delay(uint num) { while( --num ); } /**************************按键检测 *******************************************/ void checkkey() { if(SET==0) { Delay(2000); do{}while(SET==0); set_st++; if(set_st>1)set_st=0; } if(set_st==0) { } else if(set_st==1) { if(DEC==0) { Delay(2000); do{}while(DEC==0); if(DUST_SET>0)DUST_SET--; if(DUST_SET==0)DUST_SET=0; } if(ADD==0) { Delay(2000); do{}while(ADD==0); DUST_SET++; if(DUST_SET>80)DUST_SET=80; } } tab[0]=DUST_SET/100; tab[1]='.'; tab[2]=DUST_SET%100/10; tab[3]=DUST_SET%100%10; } /*****报警子程序*****/ { if(x>=10){beep_st=~beep_st;x=0;} if(DUST/10>DUST_SET&&beep_st==1)BEEP=1; else BEEP=0; if(DUST/10>0&&DUST/10<10){LED2=0;LED3=1;LED4=1;} if(DUST/10>=10&&DUST/10<30){LED2=1;LED3=0;LED4=1;} if(DUST/10>=30){LED2=1;LED3=1;LED4=0;} } /**************************AD0832转换程序 ***********************************************/ uchar ADC0832(bit mode,bit channel) //AD转换,返回结果 { uchar i,dat,ndat; ADCS = 0;//拉低CS端 _nop_(); _nop_(); ADDI = 1; //第1个下降沿为高电平 ADCLK = 1;//拉高CLK端 _nop_(); _nop_(); ADCLK = 0;//拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADDI = mode; //低电平为差分模式,高电平为单通道模式。 ADCLK = 1;//拉高CLK端 _nop_(); _nop_(); ADCLK = 0;//拉低CLK端,形成下降沿2 _nop_(); _nop_(); ADDI = channel; //低电平为CH0,高电平为CH1 ADCLK = 1;//拉高CLK端 _nop_(); _nop_(); ADCLK = 0;//拉低CLK端,形成下降沿3 ADDI = 1;//控制命令结束(经试验必需) dat = 0; //下面开始读取转换后的数据,从最高位开始依次输出(D7~D0) for(i = 0;i < 8;i++) { dat <<= 1; ADCLK=1;//拉高时钟端 _nop_(); _nop_(); ADCLK=0;//拉低时钟端形成一次时钟脉冲 _nop_(); _nop_(); dat |= ADDO; } ndat = 0; //记录D0 if(ADDO == 1) ndat |= 0x80; //下面开始继续读取反序的数据(从D1到D7) for(i = 0;i < 7;i++) { ndat >>= 1; ADCLK = 1;//拉高时钟端 _nop_(); _nop_(); ADCLK=0;//拉低时钟端形成一次时钟脉冲 _nop_(); _nop_(); if(ADDO==1) ndat |= 0x80; } ADCS=1;//拉高CS端,结束转换 ADCLK=0;//拉低CLK端 ADDI=1;//拉高数据端,回到初始状态 if(dat==ndat) return(dat); else return 0; } /*****定时器0中断服务程序*****/ void timer0(void) interrupt 1 { uint j; TL0 = (65536-10000)/256; //定时10ms TH0 = (65536-10000)%256; LED=1; //开启传感器的LED x++; for (j=0;j<30;j++); //0.28ms //延时0.28ms abc=ADC0832(1,0); //开启ADC采集 FlagStart=1; TR0 = 0; //先关闭定时器0 EA = 0; LED1=~LED1;//工作指示灯 LED=0;//关闭传感器LED } //中值滤波 //算法:先进行排序,然后将数组的中间值作为当前值返回。 uchar Error_Correct(uchar *str,uchar num) { unsigned char i=0; unsigned char j=0; uchar Temp=0; //排序 for(i=0;i<num-1;i++) { for(j=i+1;j<num;j++) { if(str<str[j]) { Temp=str; str=str[j]; str[j]=Temp; } } } //去除误差,取中间值 return str[num/2]; } /*****主函数*****/ void main(void) { InitTimer(); //初始化定时器 LED=1; LED2=1; LED3=1; LED4=1; BEEP=0; lcd_init();//初始化显示 delay1ms(100); lcd_init();//初始化显示 delay1ms(100); while(1) { checkkey();//按键检测 if(set_st==0) { wr_com(0x0c); if(FlagStart==1) //1次数据采集完成 { num++; ADC_Get[num]=abc; if(num>9) { num=0; DUST=Error_Correct(ADC_Get,10); //求取10次AD采样的值 DUST_Value=(DUST/256.0)*5000; //转化成电压值MV DUST_Value=DUST_Value*0.17-0.1; //固体悬浮颗粒浓度计算 Y=0.17*X-0.1 X--采样电压V if(DUST_Value<0) DUST_Value=0; if(DUST_Value>760) DUST_Value=760; //限位 DUST=(uint)DUST_Value; } TL0 = (65536-10000)/256; TH0 = (65536-10000)%256; TR0 = 1; //开启定时器0 EA = 1; FlagStart=0; } Alarm(); //报警检测 } disp(DUST);//显示粉尘浓度值 baojing();//显示报警值 if(set_st==1)//报警值闪动 { wr_com(0xca); wr_com(0x0d); delay1ms(150); } } }/*****END*****/
8 A+ ^* J [. [; ]0 {2 W& | |