EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——以前怼的一个基于89C52的PM2.5空气检测仪发出来相互学习一下
8 Q8 V# O4 l; k: m0 e0 {! V8 B, \1
1 N; ?' u: ^5 x; o8 o | 蜂鸣器
, l3 X1 I/ N6 c3 L | 5V 有源蜂鸣器 " j4 N) [ r; t
| BU1 ( a5 z( I2 _: G$ q) v2 l
| 插件
- H4 o6 B1 M# u$ t! _2 h2 x5 o | 1 # [3 L% D0 y+ F5 C+ A1 U
| 2
: U% D3 v4 _& `. m5 x | 电解电容
1 I! s3 v' p% v" I. i) d | 10uF , @* N# S6 [) i: t2 L) d* Q
| C1 % A9 v1 G5 d% m# R' n8 b
| 插件 5 R( ?+ f b, ~/ j* G3 z+ p$ J
| 1 - d- H+ ~" f, g3 L) r6 F
| 4 1 {9 {4 J5 s2 j, t- i. V7 v( o s
| 无极电容
% f5 }6 k4 v0 W& b' E* y% _ | 22P
+ }: K+ e" C% D1 ?9 g/ _ | C2C3
( r6 z' R7 e" }& F- H | 插件
* x; k* q5 G) |! \. B) w. _ | 2
2 n& X- @2 ^3 K$ F | 5
' y1 u: e+ n6 B# L9 o | 发光二极管
8 q1 `2 j) c( z) E0 ^+ }6 K" b | LED
8 U9 w6 O) F5 Z0 s: `) `2 q | D2 " q$ F6 F! {4 G% B
| 插件 ; o3 E+ a* s. G; L
| 1 % q3 n9 |$ B( i: P. V
| 6 ( @; l. Q: U7 x2 G* r
| 液晶屏 $ m/ J, Q' i0 G2 }3 a0 p5 V
| LCD1602液晶显示
/ E6 X/ ~# r: I" I | LCD1
* t# `- Y3 J! w. C7 m& f | 插件
* i J' A9 _/ W- e3 W | 1
4 A+ x$ u8 k2 G | 7
4 B" i( k1 h' ~; K$ o- E | 电源座
) b8 E- r5 E' \% U# Y& U+ U6 R | 5.4*2.1mm电源座
* ]. ^3 f9 H6 Q1 L( ~ | P1
; Z ]* _9 S/ G* G | 插件 ! R6 S3 c/ f. |7 ]" ?& b7 @9 t
| 1 % T- |3 D3 Q3 u' ]
| 8
" E7 n! V8 M s9 G' B9 B | 三极管 g, K0 B$ [+ T4 @ w
| 8550 PNP管
3 k3 z! F. ]9 F; A! B! j | Q1 9 B1 s+ G9 g; J! t6 f3 N% }
| TO-92 1 Y- F: K- H9 L: D( G" [
| 4
: s8 D* ?+ S' u. K- J7 | | 9 + S# F, W4 e1 a9 O
| 三极管 ' X( {' @8 ?4 [# M9 u' m: U8 T
| S8050 NPN管
5 O& k7 E& |! h q, T/ Z0 t# n- ` | Q2 7 B8 o7 H% _4 f3 J" {6 s
| TO-92
) }1 Z6 M$ I. b5 A3 z3 \ I | 1
+ b& ~# e2 h. W | | 电阻
7 m' ~% i8 ?5 k) w" e- y | 10K
" m! q# @' ], \3 r* F1 J' G | R2, R4, R5 7 V6 S# A( N U+ Q
| 插件
0 Q' b' K8 F0 X4 k2 n* S; z3 ^ | 1
" a8 \$ J: V# h5 F# L | 11 1 T# F& \9 ?; ?6 h* {* Z
| 电阻 1 T; K+ G$ @( f1 X \
| 150R 0 l/ @/ `4 X; G0 i5 c
| R3 5 t+ v8 o% {+ w
| 插件
5 _8 O9 C+ l2 I% U | 1 , u2 u2 u$ H) w4 }! `! h# y
| 12
8 K1 A. Z, n; n' r% }' ]# s& i | 电阻
7 {- m- C9 [* v- M7 v | 1K # V; H/ V4 { k, K$ Q8 k
| R6, R7,
# Y& u4 n9 m* p; l | 插件
6 E$ J: o' }7 {6 m6 p2 X | 1 # T1 @- R* @8 y9 x* j* i
| 13
0 v' E" P0 _8 d1 {3 _6 {+ U& v | 排电阻
( c3 A0 d9 f4 \$ e A' v* Q | 8*10K排电阻
/ Y( m' o7 V' O( Q9 k. P# D | RP1
7 R6 [& j) K p& w8 M- U% i. K | 插件 7 e% `6 E* O4 T/ p# e: b
| 3
3 [$ V H& o* I+ [ | 14
1 V, }# ^+ ? \& n+ b! H# ] | 可调电阻 # {- G8 M# R7 ]: c2 r m. w: e. t, g
| 10K
5 L9 e3 L& F7 C3 d( ?& { | RV1 2 h; V* u3 F2 i( ^3 f7 m
| 插件 % l5 Y" Z* u1 C8 u
| 1
! }( ]4 w' ~# b9 s- Q5 n | 15 / [; c% @4 \ n# Q7 R: n
| % ?% D! L" W- ]7 G) t
| STC89C52 1 N$ d& X9 b' [+ h4 o9 A
| U1
& f5 {; v g) @- c1 A* W: l2 c | PDIP40 % m/ U9 J- L2 u7 {
| 2 - t* z3 c/ m S6 v- B1 b
| 16
. g: I4 ], W) F' m! Y' Q | IC座
4 d( L1 e) [6 s z# y4 b | DIP-40
7 h- _# C2 {6 S6 y | 5 d S6 a! N2 L, [
| # p; q9 D3 [. A& s$ X
| 1 7 f& G0 r1 ~% q/ ?! F7 |
| 17
# v) h+ g B. h. \" H | AD转换芯片 v3 O7 A1 m! M" Q6 \, Z) F3 ]
| ADC0832
' D3 _2 I! }9 }. B* ] | U2 - @5 w1 ^ H" Z' g
| DIP-8
" T5 D' M3 y6 ] V2 Z | 1 7 U6 u7 c) o8 _" X( I0 T( l' f
| 18 $ }3 W8 Y* d1 s
| 粉尘传感器
6 @6 P. E& \8 n) @ | GP2Y1010AU0F 6 x9 s" e' x, a* Q4 X1 \9 t
| U3
6 P0 W% [# I. r2 e: P | 1 T- _; @& r) R- B* I* J; Z
| 1
5 c4 X- M( n+ Z0 I( m- | | 19 ' B% m3 f; b5 D& t6 ~
| 晶振 ! x' W" @3 X' z* V) s% Q' C
| 12MHz * O" {( ?& U8 H* k4 Y
| Y1 " f% m: z$ A0 y# C$ @( J& ]! }
| 插件 , G/ h, N2 N9 [3 r. B
|
" w, T7 G! ~/ m: b | 20 3 K% k7 h1 F7 _' Y$ K" Q+ h
| 万能板
4 |+ z, c% L$ q3 b | 9*15cm 0 c. U$ O, E ^; `' f4 l' U9 J# D
|
+ N, V$ x2 s- E. B* _ |
7 N% o! Z9 y9 z9 R+ ? | 1
. I3 a3 Y+ H6 O% d! y | 21 0 S) O) v3 p6 D- g& z
| | | $ K; ^+ K5 F, G' X
| 0 P7 z: Z, |$ q* H/ Y4 b
| |
, C/ Y2 a% ~+ t8 H/ h | 22 3 H# y6 r S* F: l
| |
$ Y e) v ~0 |, {0 ? | | | | ; O' V' ]4 H& d. s5 z' C
| 23 $ n$ @5 _- ^4 _' s8 ?
| | | | | |
6 P! m+ ~' l* Y r" z8 { |
2 ~4 o( w8 g" N/ y+ _ C
" q" e! L" e7 p. @% l1 s
3 r: G2 E0 y4 c9 q8 Y, I$ W! `/ p* u2 `
# ^) E: q- [4 n; S/ u e元器件清单 1
$ a2 f+ T/ B) d# Q% J e( u | 蜂鸣器
$ L/ f' i( ~; M/ \4 O; K0 S | 5V 有源蜂鸣器
8 t7 ^8 d7 [& D3 m/ F | BU1 $ P/ c: U, w) u9 `# a; ?, w# Z
| 插件 0 x" @, C3 P6 M6 q7 _1 u
| 1
" y7 Q3 m2 |! i7 M* ` | 2 ' Y5 @+ v( _/ C1 c
| 电解电容 # I4 H0 R8 ^5 ]* o( Q
| 10uF + x1 A) h0 _- h& u
| C1
' V8 z: B) t( L8 T( |) h, E8 m, O | 插件 8 n; C: T' }/ a, @. W, {
| 1 8 X$ B* m; B1 j7 p8 J! P
| 4
) z+ y2 w1 b) O3 M _4 T | 无极电容
# \3 m9 m0 G% N- D9 ` w& l | 22P
8 v' Y. h4 Q' r X | C2C3 F8 t+ }) u" }# A4 I9 E
| 插件 - G# i8 _ m" U# j
| 2
0 E8 P! b8 U0 ~3 Z2 @ | 5 6 z1 H) E Z( `' R w8 ^) V
| 发光二极管 6 [' O) N Y0 ]: s! E
| LED ; \( l2 A; m) O; R. T
| D2
" ^7 N- e, G, H: v' U | 插件
9 |5 W7 h0 g3 y& u | 1 * C* j% V# l0 h3 ]% |9 l: ~8 \; S
| 6 & d; j$ e! |3 G% `1 p
| 液晶屏 ; E0 i( n9 f% S8 L3 I( S; h% w
| LCD1602液晶显示 & B3 P8 k; P+ j- t) N# M" r. c
| LCD1 8 j3 p8 }9 E4 q) I
| 插件 / U7 f; R, D0 \) j4 ~; m
| 1 5 V" l) ~% @! i4 f/ n# R4 \
| 7 ! j: b1 @7 x$ ?: U7 c" x" s
| 电源座 F' b/ \2 h0 O9 v9 @
| 5.4*2.1mm电源座 : t/ |3 P8 o9 O! T. T
| P1
3 Z& f, A7 \% ]* _9 _ | 插件 1 M# l7 B0 [2 {3 n9 N- k
| 1 % j1 |/ U8 [, ]8 b6 o1 [, m4 r0 h
| 8
0 P0 m' w V/ |7 _" r" ` | 三极管 9 {7 N/ d a9 t$ W3 H$ Y
| 8550 PNP管
( _" E9 r! I7 u3 f- e | Q1
* E) |: I# c- n0 w$ X | TO-92
- `, a6 ]* {0 v: E8 v | 4 2 O' t9 n! T, s) l" I
| 9 7 s, I A4 Q/ T9 t" [% f- G9 [
| 三极管
5 U6 ?5 {* O* q8 a2 U9 R | S8050 NPN管 1 _8 y/ Y7 I! C" ]: H0 U
| Q2
; ]( c( X; s6 n5 z8 g3 `, m2 u | TO-92
2 T& b' @$ U. \3 H2 `9 y8 q | 1 . D) Z6 L ?1 E* W
| | 电阻 0 S2 b2 x9 J! s7 Q# @! g
| 10K
, W3 R2 S! K$ B1 o | R2, R4, R5 7 t! {- {- d5 j$ B- u9 P7 L( G0 C+ r c
| 插件
! o q6 y5 I9 l, u. K" V6 @ | 1 7 g" Z0 B$ J, l7 `; P7 J, c2 l
| 11
+ G/ ~2 o/ i6 r! u | 电阻 8 F$ }& h/ b7 g
| 150R 0 C# @. R0 B7 Q0 l8 ]
| R3
; {! d8 x& |) v8 z. O) {% @ | 插件 0 _: M# r/ M' s: [% F7 Y
| 1
& H C% H5 x" ]2 ?/ T | 12 # o# ~1 l3 z* C! H) k/ y% Q
| 电阻
) ~+ z! E+ n3 w& b( ] | 1K
' Z/ {4 u* |- ~* x) y: U | R6, R7, 3 t1 }5 G7 O+ ~
| 插件 " Y1 B9 M+ y+ o9 g3 m+ J
| 1
! V1 l1 H2 d; C; v2 w* k- ^" F | 13 / S2 _4 c, `* ^
| 排电阻
* U% i3 V5 x9 [& w; s | 8*10K排电阻
2 h [- _% n" W | RP1 - r: f! X- _% j$ l7 c; ]0 [
| 插件 3 O' X. O: h% I/ E/ f
| 3 % g) I3 u/ f! L% H" M: b: |; y
| 14
' \; f9 t8 O# Z+ _+ h- Z | 可调电阻
. O, P" q& i6 L) x/ [ | 10K
( K% D/ n) E( G | RV1 & `- j9 W& {/ ^; h5 D1 h
| 插件
' y# }* ?( J- G2 x( d* K5 Z2 s- Q* i | 1
' Q% S5 l. G5 n( _ F$ D, ~! F | 15 9 p) z$ f0 d- `; w
| 单片机 4 x2 s$ b8 C* Z2 [$ d$ V9 |2 S, u
| STC89C52
; x2 c1 B0 t6 F; P | U1
$ D- Y- _7 \ F | PDIP40 0 z' P8 \6 |# z7 b, ?. c0 \
| 2
/ E* G8 y& Y& R Y1 O! a" {9 N/ ] | 16 , i* z. n$ l$ _3 q d, V
| IC座 % p( w( z# v; d
| DIP-40 , q; F$ @# v2 o; Z
| 0 f8 n4 F |" s7 i; F
|
- B" {! [: k( O1 l* i | 1
\% i) w# h9 z6 y5 i | 17 # x% V$ Z1 M0 T- \
| AD转换芯片 1 w) S/ u5 ?1 b8 a7 q7 ^
| ADC0832 4 `/ _- |2 l6 N6 n: g6 N" W+ k
| U2
, v& z' G. W6 W3 x. { U7 E5 G. L( c | DIP-8 ) X1 Z' @# N8 |, R2 g" @4 c) J' ~5 F
| 1
0 L/ Q) P1 k0 N | 18
' j2 I" m a: m* t | 粉尘传感器 3 _1 e9 e8 p& @4 w8 j/ ?
| GP2Y1010AU0F
' Y( [' m/ m& V' _/ P1 B4 K | U3
+ g2 C& l1 r1 l | + Q0 x) x6 S/ a+ m4 r ?
| 1
9 n" V: h$ m9 x | 19
, d# N* C* ^, z0 m5 e | 晶振 " w5 `6 U1 e! B1 {% X
| 12MHz
! B7 Y2 y; d6 g5 U3 v | Y1 / h! I0 m T3 M
| 插件 $ a7 g1 Z; y8 U: B( r' k
| 8 x7 e `9 C2 j/ `
| 20
S8 q1 g5 \, ]) T) t( Y. u/ ? | 万能板 5 e. x" L, ? g' A
| 9*15cm
7 @; x( |& i' Y& D |
$ V, Q. b' z8 \$ f0 n | 9 ]% F9 f/ |# _7 N) I2 M3 H
| 1
: i) a5 D, u9 y( T7 r. k | 21
0 q) G7 k- H- w; ^6 c4 L: o. `& T. y4 _' } | | |
. r6 g9 t: x$ [! F |
: I( f' L" a' F% t6 @ | |
! U, R) q- Q/ O: J$ i/ V | 22
, @& R$ ?. w: X/ y, P3 q | |
' t$ `* f& R ]+ d; W$ u' P3 x( ] | | | |
% V- R" w- b4 @% b' N4 v7 y | 23 2 ]' C: v/ U6 H0 L
| | | | | | : |; P7 M8 h: D, u, r |
|
8 D* n3 _0 i1 ?8 R( r
5 |% y$ R' D2 \; C; y7 ]% C4 b: E$ K
: c- o: O/ t9 Y. n9 G7 o& l
! k' I: j3 @$ C* D% ?
8 N z4 E* ]5 o4 a7 w* L7 `. S: w, H. `. R: c3 n9 @) f6 `# P
程序及注解 #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;
/ u+ m# F( c1 Yh=(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*****/ - B5 \; B# z" b# J
|