EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——以前怼的一个基于89C52的PM2.5空气检测仪发出来相互学习一下
0 y1 \8 M6 Y# {& ]6 l1 0 w3 b5 a% K5 [3 F. W `/ X
| 蜂鸣器 0 u% ^ q4 B8 w' \/ `) O
| 5V 有源蜂鸣器
; B# i$ F% D3 d' h6 a" Y: y& G: J | BU1
) ?2 |0 t( o' ~* i9 m' W | 插件 5 w* Y- C3 t! m" e$ s/ d6 J
| 1
8 q A* C1 T( [; X0 I5 r | 2
& A% L) _ T/ d9 f$ l% `5 `6 d% q | 电解电容 - `; f6 A8 T$ `# c" f/ J
| 10uF
+ A* G4 ~' [, s" F" Q: \ | C1 : T l' s( Z+ X" I6 X# E
| 插件
. |7 d0 e: }2 J2 e) q1 D | 1 . j# `. m' V* n- \" M
| 4
3 K9 j4 K4 c K: ]: ?1 s: D# ] | 无极电容
( {# Y J7 Q' Y2 S, L | 22P 7 } ~/ P1 ] R1 V' F
| C2C3 2 m! L& K! \$ d$ Q
| 插件
; L% u, l' _$ O: W( V, ^. K6 U4 d | 2 2 A* k( e2 T9 R6 X9 y% G5 n) R
| 5 ! W* M6 g+ L, W- s; r& v
| 发光二极管 * Z. S" V3 a$ m4 f
| LED 4 C4 k" p4 P% F
| D2 . n( q4 E! K# P
| 插件
# T i7 n1 K1 l: k; A: W | 1
7 L% `4 U: O4 c, c' Y: ~" _( a* ?1 t | 6 6 d _3 S2 C# S. j/ G: l
| 液晶屏 7 {2 d3 m3 U! k$ O0 R
| LCD1602液晶显示 : P9 X/ Z! B4 A2 p) p; e
| LCD1 ' W3 U( ]: l# X- d! s7 s V
| 插件
& L! F, H& w+ r | 1 / ?, W- }9 Q! v/ r: G+ Y" H! i
| 7 ' f4 H2 o0 Z1 e/ B2 x
| 电源座
; L \3 x8 _& d4 q' @ | 5.4*2.1mm电源座 % Y8 i1 o; v+ l' j# I/ A
| P1
/ o; i9 q+ [: J" J2 T2 p5 o | 插件 ! O( Y% x7 ~+ q0 ^$ |8 z6 n( O
| 1
' A) @0 T$ T% U6 n0 V5 L' } | 8 % i& @7 X e3 y J& y5 v' A4 q
| 三极管 . r& T& C3 P. u9 p
| 8550 PNP管 8 k( S0 k2 l+ O
| Q1
0 A9 p5 j) W; e# S6 U | TO-92
+ X. m4 h+ r* B | 4
& e3 ~! U% z2 Q. d. h- g5 r | 9 , x6 O3 r+ l. O r
| 三极管
4 e' A: @, F, Z) J$ v, h | S8050 NPN管 5 z5 M6 r! c1 j
| Q2 % H1 @! ?5 D; Q3 Q# M3 Y0 b9 y1 g l
| TO-92 4 l. A* Q! H: C0 S% T
| 1 ) T6 C+ g: w, p9 h* E- q9 K
| | 电阻 % Q0 f8 W2 H D/ o9 B, `
| 10K
" d9 T/ }9 @+ J3 \ | R2, R4, R5 / a* C! K' H# W( ~0 o) U
| 插件 6 n! h2 [. X8 z* E4 @- j, _
| 1 8 O* g* u% v) f- i) x$ M( g1 M
| 11
8 n. L( `8 m) M' e9 e* G | 电阻
7 X" \4 I7 @, M a | 150R
5 K( P. j, j& x" n E) a | R3
7 `$ l# Y$ r6 n# m | 插件
: T" W" g0 c7 f5 e- ^ | 1
# h( K/ n' \* s+ G | 12 % C" f3 a W, L! N7 H
| 电阻 , Y5 p' c: X+ p5 ?
| 1K
6 c0 ]' t8 G; E; t7 x& O | R6, R7, 5 Z+ ? v! i4 L
| 插件
, G& z* ?- l$ J J9 w! l9 e, H | 1
0 K/ h, w) W* D2 i7 M0 c& \ | 13 + h/ z+ Q, Z( t7 _! |7 c6 J' \
| 排电阻 0 d2 S/ M( J) ^( H3 a' v+ g
| 8*10K排电阻 " b& [# x, ]. }3 Q
| RP1
. P6 d* {/ T+ K6 S/ N; U | 插件 , d0 @2 z- H1 z- e
| 3
" `8 C4 V8 A5 M+ O: u7 W2 e9 }. m | 14
; k/ J) {4 I/ K$ S | 可调电阻
# @# H* e( R U. g, D | 10K ( }1 @ l3 O6 H1 D5 k6 L
| RV1
; u4 q, g+ d( [# `, M2 K | 插件
5 ?$ H6 ^% S: ?$ T0 o6 E | 1 . l9 B5 E6 O# |' m
| 15 $ f+ n' W, W: ?& h! d, F
|
/ o0 u4 F; G: \9 k | STC89C52
2 I: \, f9 V6 F% u: a0 v/ P+ f# T: d | U1
8 y8 z( c# w9 e& A5 V7 u | PDIP40 ! }9 R/ {! V2 G$ K
| 2
5 E6 h( j0 [7 U8 A+ v | 16 - e! B# S; y, M3 [% `( V! W
| IC座
: }1 J% e( x3 g% X& J8 Q | DIP-40 Z7 ~2 x {, O% A3 A% V7 [" p
| 3 c9 i# J7 ^# P7 @0 C
| " I7 E3 g+ t5 I
| 1 " v) Q# \$ v0 V4 {& c+ ?" j
| 17 ( l% @1 a2 G7 o- Q: F8 U8 ^* F
| AD转换芯片 ; M" \5 v" Y/ B5 m
| ADC0832 5 p; E8 @% l8 }* \9 D; \
| U2 3 ?0 p& n& L3 ?! D$ }
| DIP-8 3 \9 N. L3 s% s6 b: L1 F
| 1 & y$ @# f# \* T
| 18
" ^, h2 ~! T; b/ Z | 粉尘传感器 - y3 N6 L& |6 }/ |9 V
| GP2Y1010AU0F 1 J+ g1 n/ ]4 N; a
| U3
9 I5 X% T; e {. C5 F | - V f$ `. x+ }4 V+ `* w9 d9 a
| 1 " D$ O4 q4 O6 U2 U+ M/ M
| 19 2 i" B2 f1 ?1 t
| 晶振 6 m+ ]" ~6 [ b) o6 z. x( c
| 12MHz ( g' C1 f/ N" U
| Y1
# d9 K3 f& J5 G2 H2 k | 插件 4 R6 S9 f# N' s: B# [
|
C i: z* W: e+ C6 B | 20 % ^$ A7 ~' D% v3 d0 K. \0 _7 U
| 万能板 * ]" _$ A: R, |' h, a
| 9*15cm
; X1 x# P8 r& K4 ?3 L' Q1 H |
/ Y) Z. ^5 t, Z P | ( i7 Q- \ w% y) c
| 1
G/ o9 v1 } ^- E9 o, ^% z4 i/ t | 21
' T$ Z w: i1 N$ w5 N* h | | |
( p( D0 i& l8 s5 y2 ?5 s | ' p' w/ |- d' y% N3 z- z
| | 0 E$ d! _% t! I& z
| 22 ) s( U* R! u/ z- ?8 ?
| |
% i4 Z% Q$ K) a/ N) s | | | |
& `# }' W1 B7 W$ M) [/ Q% M | 23
P$ W o( m: S( a/ w | | | | | |
& V9 p1 ]0 O9 H' Y+ k+ [ |
: }4 Q) J$ s1 r( V' |3 I N/ e
$ c( l; k, v. u" ~+ \
`; o9 q7 S* O4 w( U
4 ]% \. k4 V5 C! X+ k" o# q; {- B: u4 c6 `6 L7 t% w" v
元器件清单 1 0 w- e( B! b4 L' C: ]2 g/ l
| 蜂鸣器
& I3 u, S9 M5 s1 S( i5 h% H | 5V 有源蜂鸣器 ) }' f6 t i$ e# P
| BU1
: d6 |6 P7 Y4 Q O* i8 C7 i | 插件 8 t: p9 L$ D, U$ ?$ P/ K1 C+ _
| 1
9 K0 o6 ?' c/ T( U; m1 p | 2
0 }8 v7 T0 d9 _2 m | 电解电容
9 |. S3 q4 V& r+ @ | 10uF 1 ]$ M1 s$ |( W0 R( s8 [
| C1 ; q/ r2 u6 D" E8 Z- G& K6 Y2 s4 ]
| 插件 + A! Y- O. _& G7 O9 ^" P# H* K
| 1 0 d2 ^7 {+ y8 _7 N6 |% s
| 4
* r0 Y ? _" f3 }# [ | 无极电容
1 e5 c6 A& R- i" G* Y' D | 22P 5 ?3 F$ k! z9 H4 M( F3 M3 i
| C2C3
7 _/ w7 k4 \# |% Z+ U/ U | 插件
- {7 K6 {, U) V4 c5 c/ { ^ | 2 0 e" z( b% Y/ u8 Y: R
| 5 3 W" d; x% \4 P9 `! U) B1 U! s: d# X
| 发光二极管
0 b" c9 r+ D4 L1 P$ S4 Q4 C! D | LED
# I- J& ]; k4 F | D2 8 V1 W4 T& t, }6 x' P; D
| 插件 7 \0 N- p) }: I+ D5 L
| 1 + W3 F! t& V7 |
| 6 9 ?4 X- d+ m0 H; Y* z
| 液晶屏 8 D- g8 W3 A4 T3 [/ ?
| LCD1602液晶显示
2 |2 ~ I, m% `4 c/ J: @ | LCD1 3 m& h" r# H- H5 |# |$ S3 l
| 插件
6 M, c ?- W3 O x% q: \' f | 1
a, c6 E& w7 e; L | 7
7 Y! S: M: e+ Y1 i: _& d | 电源座 1 W o1 e8 |) W8 f# a
| 5.4*2.1mm电源座
3 s1 W; N' h: o+ V* H( L3 S* s$ Q | P1 # V q F9 W5 ^
| 插件 $ D. N5 M) p( h7 t
| 1
) i7 U' g9 G2 q* z4 @ | 8
% V% ^( {4 S! }( W$ }7 V | 三极管 1 N% m/ _0 c+ S. w
| 8550 PNP管
+ s5 z: [ @; ?. w7 y8 @ | Q1 ! t! b5 ]. n. T# ]3 i
| TO-92 1 q2 }. s. x% K) x% s3 z- A
| 4 $ ?6 H6 t. D% j( U
| 9 ! {5 k+ b! A x/ _
| 三极管
; g2 z- N* }& _ | S8050 NPN管 # \$ t8 A8 @+ K8 d7 k* }- u
| Q2
) _% L$ R& z2 j5 g: ]& A4 t | TO-92 5 G: A2 y1 T4 r% p. w! Q+ r
| 1 ) u& J9 M; m2 ]% W
| | 电阻
- y: q- A0 o( Y9 U | 10K " Y6 @* e9 a* ]0 o1 ~
| R2, R4, R5
% a0 C" G$ X; d | 插件
3 e% Q. A+ g4 Q: e | 1 1 \; V$ R' D! ~8 h) ?
| 11
' F3 b% |' z! ^9 I | 电阻
( R5 T; {5 Y5 R7 \, c, l5 G | 150R 4 S% L3 h1 K; y. |: X
| R3
- i2 a7 z. K: c( `# _+ O, B L& S4 R& K7 X | 插件
8 ~7 m& Q1 z" n | 1
( s& O! d' Y6 P( X8 {% v* d3 b | 12 ( p" S# g' s; k+ l9 G0 V
| 电阻 3 C) l* Q6 d( U ]- e
| 1K
- _7 \9 M$ q/ \# W; y& M | R6, R7,
7 p0 @$ k) e4 o" y$ m | 插件 . w$ F/ N( R# U% R; i' m$ \) N! f
| 1
# I" N* N) l# V | 13
) G& @. M$ N/ E* ~: `* c( ?6 W0 s) _! } | 排电阻
& a- Y% h# E5 w5 F ~6 Q | 8*10K排电阻
$ G9 m1 I( J" {1 [# r | RP1
0 [! h8 J4 u( |- y; o: j: j | 插件
. B7 n$ B( Q" U1 S; Q- j$ b, d | 3 0 R/ u6 _8 `9 y5 t8 e! T
| 14
2 ?% v& a8 o, A | 可调电阻
( _) m9 }( e# s! ?9 Z | 10K
' e0 a: z' a9 z4 a' {2 H* e& j& e+ U | RV1
8 F9 _; L" b5 E% j2 f | 插件
7 h9 B5 y' x3 n* S0 n | 1 $ ?' _! T6 \* T- l
| 15
( i2 O' L( L; u" h! e" d& [ | 单片机
. d8 k( ]% Z* [* W& z7 f! T1 H# r | STC89C52 . Z$ i- j6 u) M8 E' M
| U1 ' p. e$ w. v! b( W! p7 h
| PDIP40
: t4 r, x' S3 ?- @ | 2 ( _2 Z! X/ R( z& x
| 16 , c6 z4 J4 \ w; o& R2 e! L$ O
| IC座 5 Q- F/ c' G7 g% h" y& ]* `" }( U( \* Z
| DIP-40
' ?- R8 `! _8 i9 o, x | # J* U+ c( l) E, t; a) ^/ r9 L
|
2 V a& m; V9 B" Q; \5 I3 [9 h9 d* z | 1
, G7 B# t: Z5 {' Y3 _$ @ | 17
, i- P' Y8 H, V5 E5 }2 L) Q' c" v7 t | AD转换芯片 , c z& N" }4 ~' ?% h/ I
| ADC0832 9 c: v) M7 B0 J- D! t2 I3 {
| U2
" }9 u: W9 `, S$ R/ R) L | DIP-8
3 g0 i" d( h8 f$ t% R1 G3 L | 1 - x5 d2 _0 }: r' U8 |
| 18
& G8 t V+ X2 c @8 K! F' M | 粉尘传感器 / ]2 S& `0 W% W4 A4 t3 u0 L; v
| GP2Y1010AU0F 0 E/ V& n- }4 t i: j0 ^
| U3
; Z [' O1 S/ P ]5 G$ p6 G7 h | * I1 W5 b2 m3 ^% k
| 1
& j. Z+ q3 E! X4 L | 19
' `$ b6 b5 v7 ?& F7 C, V, d | 晶振 ; h! M5 o# |. a
| 12MHz
3 A4 Y5 J* o* e, r3 Z0 D | Y1 6 L8 r" W) ^( G8 @
| 插件 # W8 L' X- t6 F, u! c
|
+ }- b, u; b' r$ R7 b) i* B | 20
7 @$ Q$ Y0 U5 L: L( F/ d% b/ j | 万能板
% C2 W, W% w3 a4 F! ?2 i | 9*15cm
: D) \. u4 o" U% e6 |$ @ | 5 o5 h* n6 ?; s! `, t* ]! z# P" r) m A
|
8 U3 G4 {/ G( Y( g- a6 ?! R | 1
. k; Q4 ?8 v- b1 T | 21
N8 S: Y( {7 |2 o" I | | |
& Q' W7 ^( A4 E3 d$ W+ Q | - \+ X d2 v, X1 y1 V
| | ; _! v* a9 r! X0 i, c
| 22
5 F; S! L0 O! `" `2 F | |
% l8 y# k* s( a | | | |
8 }2 x+ ? x% x! s- a | 23
: m' }% g: {& g2 Y1 r | | | | | |
" c! B# `$ L8 i/ V6 C |
) x- ^9 j1 S' \/ V. M3 h
% o8 y. u3 M; H$ F* H
) R! L4 U# u* h
5 b) s1 h8 |# Y4 ^' H# p& H: x* j6 e2 `6 \* v
3 \' k- C2 ?6 b$ u6 J
3 {( a" j: [, b5 u' Z! B! t- c程序及注解 #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;
+ l$ M; M3 s/ p+ Nh=(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*****/
7 j" Y" s2 u% f" V m6 r- Q |