EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——以前怼的一个基于89C52的PM2.5空气检测仪发出来相互学习一下
3 ?: x% ?" _3 o9 \1 ( |% q, H# ^) D
| 蜂鸣器
5 l! E! n4 h# ]. Z2 i | 5V 有源蜂鸣器
7 U3 q. R$ T. f | BU1 " w% i3 Z% O b0 g1 {
| 插件 , ?- [5 [7 O$ f0 {
| 1
* l g2 n; ^+ K! K7 D% A( Y" ~ | 2
4 ? [' s+ t4 s, S' t+ y | 电解电容 $ Z& R% t# f- H) r- s; G: Q
| 10uF
" C$ a( B5 W7 c0 h& \/ r | C1 _# e# y& g) X: A7 V
| 插件 1 x# F) k( Z! ]
| 1
9 ?5 j: w# W/ l) W+ X6 F4 O | 4
9 }1 b8 s% J7 c9 y | 无极电容 . X- }5 L$ k, w8 Q
| 22P
: ?! D- Q. m) h% `& v0 w8 ? | C2C3 1 @, ^/ Z" j: l9 p% _
| 插件
4 f- M. {" b4 ^7 P/ f# o/ A | 2
5 t* F: l6 U- Y) w4 v1 ? | 5
; `1 d3 s- |. F( Q | 发光二极管 - s( o0 T" f- n4 U6 U
| LED
: H- X; {" P1 D0 A8 h | D2 * F1 _+ S' ~0 J$ j9 p! [, ? ^
| 插件
( }: M& F1 N4 _ | 1
; M# E2 P) c& T, E. ] | 6 ) @- I8 ~) e- d, i8 ?8 f( c5 y+ @
| 液晶屏 v2 y. T/ M8 I. x* H) }3 o
| LCD1602液晶显示
: _: J/ i, i1 B0 Q" d# J% Z& Z | LCD1 3 F9 ^" j, Z- f0 ?/ F2 n3 D
| 插件 + ~8 e9 n3 D! L+ {1 q% K
| 1
4 M6 r c% N' b {! r, W | 7
( A8 d# V8 z! k7 P! t5 \8 G | 电源座
2 |0 z9 T1 z$ j- i1 Z; e4 u | 5.4*2.1mm电源座 9 Z/ Y/ T: C, C, Y3 j$ b
| P1 $ M% }* ^6 ?; ?" t% {% Q) J
| 插件
; N" z9 t9 Z( |! \* B \. y2 g | 1 ( q+ U5 q J) J7 M
| 8 * T7 w- c- V8 ]
| 三极管 0 m; t, O& W3 [1 }! h" |2 D1 _' C+ I
| 8550 PNP管
2 L6 B- b6 X& P" a5 b* h$ \ | Q1
6 s' V- A" @3 k2 ~ | TO-92
- b* T# d5 n! S/ F1 l | 4
E. i* B; U; P' }! E, V, y | 9 ; L; [+ n' N& H8 u- ~% V
| 三极管
; J, M4 k/ {6 g | S8050 NPN管
& y: G( X) C2 U) ^& u4 n | Q2 + f% ?; h# U; ^( D L
| TO-92 : L% H% C! y! k4 T( C4 J/ r4 }' F
| 1
) d& F8 B) e5 A& P$ K" B8 f | | 电阻
! t2 |) ?! g3 d8 E7 h | 10K - k* d. a5 s t H! N* D7 e; Y
| R2, R4, R5 ' O8 S6 P/ l( @# J* P6 I
| 插件 3 \ U: B( w B' E
| 1 + A4 U) r4 H t, q0 }
| 11
' j3 [3 B% R4 a3 u | 电阻 : h$ `+ ~; R7 o& n" x
| 150R
; y7 v# h+ t u' X9 `6 T3 d% J | R3 . n* j; ?) h4 V
| 插件
: v* s5 p4 o8 T, x; \7 o, V | 1
! i! Y; s& K# y, d( M" }2 @ | 12 0 g9 r1 K) Y" A) t
| 电阻 $ o3 E9 }7 u& n0 g4 l/ a6 Q7 [
| 1K 6 Y' {" o& Z5 g, d
| R6, R7,
, L1 E6 `6 X7 l/ d$ P | 插件 & p4 j1 z# I' Z- ^
| 1 2 q5 a6 s+ ~3 i/ v# b
| 13
* A9 T1 Q) _. j2 ^/ w1 ^9 d6 s | 排电阻
! R4 B& \' Q; l | 8*10K排电阻
; x% R$ A2 N! V9 N" _' Z3 z2 w | RP1 + z7 M$ u- F3 y. h) D9 G
| 插件 ! U: s l9 T8 ? i% e+ t
| 3
& {' a, b2 P* b! y8 x | 14 7 b) r* |8 L7 T: m" S6 g
| 可调电阻
- y4 n1 q# W3 A! B5 s: {) b+ x | 10K 9 f0 p; J& M' {+ s# K
| RV1 6 g) I, U% j9 h" Y6 X
| 插件
# k. I" x5 j8 B- y, ^) J7 G | 1 & v I4 K( ]* w/ C4 s
| 15
' C% D* e$ O4 e" [! S8 r; F/ m' r' V | t( h1 s, J/ J) s% G0 p
| STC89C52 8 [+ v3 o+ {$ Z6 E8 X7 D$ W0 r7 u
| U1 0 b( z& z# l( C+ j) ^1 v
| PDIP40 " A$ M, U1 X" r- e
| 2 # D T/ o4 i, |1 `
| 16 ! `+ Q' r* |( ~
| IC座 ! w. w( a. Q- V2 j5 t# {5 v( e6 Z; _1 L
| DIP-40
% w+ P* }% z( j$ e |
8 _/ ?3 @. F& I) h4 s- w( b |
' V! ^) E, e8 v | 1 , k# Y' N4 ^ [% J' D! W" ~9 T1 C
| 17 ) d' w; H( o# N1 P: W( b; H( B; c
| AD转换芯片
& h. y* A, J( U" X0 x2 V. w; t( ` | ADC0832
% x7 g6 Q V, l/ Q$ `9 R6 Q | U2 : Z J2 w e# J7 b6 q: V
| DIP-8 % A* S! s3 y2 X' t" e
| 1 7 A+ ]$ C$ `( l5 j) Z
| 18
5 e( o, A/ Y; `7 p& O1 ]7 U | 粉尘传感器 6 ]1 K* D9 {' p" M m! x5 T; l
| GP2Y1010AU0F 2 C' n* V! t3 |8 V
| U3
5 C& y8 z- j& [0 u) I | ' X6 W) T' h1 n6 B O
| 1 2 R. O; Z* q+ B/ V: `
| 19 3 S$ @0 |0 z9 u. R L( |$ `" @
| 晶振
+ c7 w: a3 I$ v( z y# E7 Z% [7 ] | 12MHz ; {1 Q* l# ] K j/ t8 w K
| Y1
5 s! ?; }. k+ `- Y: w% X {) | | 插件
+ d0 G0 k6 Z, Y2 E- r0 [/ | | : n2 K' x& q- R$ i" r9 C8 i, A
| 20 ( d9 t: [. G. y& Z
| 万能板
, m1 ?1 B1 X8 H7 f. v- N* r, u# V1 b | 9*15cm 4 ?- G* ~4 n4 _5 I6 I
|
* S8 _1 M; ]" w; D [ | " C/ j; f( x6 J
| 1 8 r5 R: b6 T! B3 B- |2 |
| 21
! j/ u) |& Z/ _ ^ | | | , \$ {. H1 s) W0 e
|
, |; v! C, p/ f1 P+ F4 I, O | |
2 X9 T. G% t9 R9 \0 _5 K" K1 m | 22 * t! s& k, R2 u; W! A0 C
| | 4 K, G* J, k! T: m( M; F
| | | |
/ W$ V3 O; p5 ]+ @3 [# p | 23
, N2 N+ m4 S1 h/ t5 |, j4 ` | | | | | | 9 D2 g6 F/ n! y3 m% @* a
|
' c. e1 ^2 S T8 e) f6 p! {& C
! D% Q' m3 v1 @2 H. A- h8 P: H
% @1 q" R! L1 i) L% {+ K z4 o% Q- X/ U: C7 |# u( q; p% ?: k
7 _& y* t' t/ H: U. R; Z元器件清单 1
; z4 F4 I4 M P1 Q* q | 蜂鸣器 0 n. h+ G: I5 p7 x# g' W' J! o
| 5V 有源蜂鸣器 / x: W$ z) b# K
| BU1 . a6 ? {2 O2 r8 q, h! }
| 插件 % p6 a: M5 x5 h
| 1 ( ~1 D5 F) W3 @( D* i% v! c
| 2 9 k1 E" o( M$ C# Z- v
| 电解电容 ) C! Q# a8 ?) z) J: N1 l$ g( b
| 10uF
# ]4 r; T0 c7 m5 `* } | C1
/ X9 r# ^, M$ e0 I9 V) v4 Y7 G1 F( x | 插件
& G4 w4 x3 |, }+ s | 1
( W7 k Q# y7 a/ E2 P e | 4
5 B: `) h2 Y- Z0 M. W8 j | 无极电容 ' g M# k2 K/ a0 F/ g: K
| 22P ( _- r. m# U! Y5 K* Y, @1 |
| C2C3 " w5 d. }* O) O+ b8 s6 c3 U1 O
| 插件
; }! z/ m9 Y( s. y' q" c | 2 $ X9 |1 r, `6 _2 } V
| 5 8 N, G l6 l+ @& T2 S2 X- k
| 发光二极管 ( y0 O8 h" p7 V6 ]" G+ M
| LED ) Q7 l8 `* w$ R; w
| D2 8 H1 \9 U4 f4 Y7 p& e
| 插件 |. v/ X3 W; t/ Z8 _+ e0 ~+ X
| 1 1 N$ V$ N2 w7 n9 X+ \ z2 ^
| 6
i8 |0 q" l% M; ]2 d | 液晶屏 ' L( H5 m& w3 A
| LCD1602液晶显示
3 R- ]* ^5 m; m% S* u6 F$ r/ X | LCD1
/ y9 u4 [1 [- [ J6 c8 X- } | 插件 . c3 J% k* F, ? P- [ l
| 1 # e# z% W6 E8 [3 F; Z
| 7 2 B5 z3 G4 g8 Y' X- T
| 电源座 * u1 P! E7 q6 l
| 5.4*2.1mm电源座 " ?. l6 U G# p, r! B, K
| P1 ) {, f! J& N' x) A; J9 h, F0 W
| 插件 4 A; V# f3 T' l( l7 F- ^
| 1
0 v2 \ H3 O( K$ o1 R9 { | 8 {: m% a# o* ^1 D
| 三极管
, q1 q3 T4 v% @ | 8550 PNP管
. c U/ w. Z ~7 l* g | Q1 8 P# w$ z! J% s" r
| TO-92
4 e* v/ \1 _3 l- f. i; W | 4 6 y) K8 B7 }/ W& d
| 9 6 l2 ?) e+ l% z6 P
| 三极管 - Z: }5 i$ @ U# q3 |6 q, S$ J
| S8050 NPN管
% t6 a% V$ Y8 e) ~+ T | Q2 : C0 Q3 B. W/ E' V9 S% `1 l
| TO-92 . N/ W, {8 H; K( K1 l
| 1
2 G) z' J7 q1 D. }0 \ | | 电阻
0 v7 W9 {+ k0 f7 M5 o | 10K
( F/ {. E8 E3 M5 C+ W& C | R2, R4, R5 1 f Y8 y& X/ n% a( D1 ~4 {% W0 m
| 插件
/ N, v" C: _3 N5 ~ | 1
6 o2 p L) R9 `) b6 A | 11
4 B+ [. t* X2 @- D8 h9 F | 电阻
: l$ ~' }% G i/ C- E7 N | 150R
8 U6 A/ E% l! H( w9 G: g | R3
, W4 G+ h" r- T+ b/ d8 S0 m | 插件 6 R8 `) x" m1 m) C7 d: s
| 1 1 D1 j0 |; h& l5 p- ]/ Y
| 12 ( Z1 y7 g- x7 j. x& c
| 电阻
g, A9 v$ o/ j7 k | 1K x$ C& H4 t- [' T1 J
| R6, R7, ! W) S- q) g2 ^4 n9 k* N2 ~
| 插件
' |' j# R! C [" S | 1
7 n) n! o# D" X Y& n! w8 j | 13
8 P& H- a4 h! A. X5 i1 O+ s; q | 排电阻
; a. ?# k" `2 v/ ^- F1 t. r. C | 8*10K排电阻
3 X9 |- v8 \3 l+ D | RP1 . A: z: o! m: a& ]9 E
| 插件
1 v- P- k) M5 e" z8 R | 3 * h& d$ Q( F* U7 k G" j$ K$ k
| 14
" l9 `8 t0 P( z9 u | 可调电阻 . [% F; F0 X4 F2 r8 R- }1 L9 H+ {
| 10K
7 ]1 F% [6 A6 T$ T e6 n2 Y | RV1
+ H' _9 j e* ~: ?9 @0 r/ i | 插件 . W+ u. J2 c# U& L
| 1
! {0 O8 l' G+ f& o | 15 / O/ d3 }9 x" `
| 单片机
- ^. k0 j! t' V: b, E& n | STC89C52
( ^% \- O: P% T4 }+ z F | U1 ?0 g) N, V6 g" |* ?1 g
| PDIP40
4 d! x, c( V5 A7 d3 U o | 2
0 \ N) E% l( Q- B5 p& }7 c0 h# R | 16 3 ]- l q' s. [, O+ N9 S, a$ X8 r
| IC座 ( C( h+ h0 N9 \
| DIP-40 2 {# ?& b8 j, X/ {# q& \) ~
| % S0 J7 R8 `7 Q( N
|
( ]2 y7 n0 z" `$ @8 L2 D2 m0 ` | 1 3 y1 t' l* D' {% \* l* @
| 17
, u! r6 l1 r+ Q1 o6 E | AD转换芯片
" S( q+ `- f5 X3 ^1 S | ADC0832 4 G q5 [: l8 C! n; `. D6 s
| U2
: o9 o! P& S: F | DIP-8 6 J- u9 N; _$ S9 Q* [# g1 T
| 1 ' N4 K/ {, J+ r% J5 q& A
| 18 5 f* \% \% Q% `7 b- m. r/ [. i
| 粉尘传感器 ' q6 t8 ]% W/ z: \: e7 u
| GP2Y1010AU0F
) @, y) L: i( `8 q* O6 A | U3 / o- H/ g8 d+ L+ m; @7 F
| 0 W: E( c# x* U7 O; S2 A5 [" s
| 1 . D0 ]+ `# E& m" S; ?
| 19
" \. i* v+ _$ Z1 Q | 晶振 # p5 @; p8 m6 y; e
| 12MHz
9 A8 [* p& Z. g! e: N | Y1
! G% |8 B6 p( v$ A | 插件 4 s; b B* U- g: [. a/ Q
| # W8 A }; j, [7 a2 \
| 20
" ]; ]$ O' ~( k+ J! {5 r# \# J | 万能板
7 L" A3 Y4 A7 i3 P0 C | 9*15cm 5 O* X: t9 A' j
| 5 T) I3 _% b' V! d, y; |* t) T3 k
| * i" y, m& E$ B4 W6 m7 L
| 1 & |- u* s: a! y& G% d8 ?2 Y8 Z: H. `
| 21 + ^6 f8 L G$ U
| | | # ^- V8 o/ M% Q/ A0 \5 d+ Q
| * ~) g/ T$ K5 R& a
| |
+ T+ ]- i% |( z+ h" M8 ? | 22 3 `- ]6 n! i; k, L+ L
| |
1 U( q2 F- L6 `' {: } | | | | M. Y" A) F6 I' V) e2 e) @) C. H; @
| 23
8 x. c! {4 u" C | | | | | | ' ]7 l J; z9 K3 q! b) y$ ]7 @
|
2 q3 |* c9 t" J9 x. s) e( J; {, t2 }& c' J5 l, k
/ `2 X$ J. `- X; b
1 E" H- F9 q! o- |6 ~. t8 g5 t8 Z
[, r9 n, _+ O( z5 ?
~5 h5 K# O+ Z3 ?程序及注解 #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; / e, _1 x! b; X6 f1 H8 Y
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*****/
$ |6 ?7 k0 Y1 b& E$ x+ \- R |