找回密码
 注册
关于网站域名变更的通知
查看: 665|回复: 3
打印 上一主题 下一主题

转——以前怼的一个基于89C52的PM2.5空气检测仪发出来相互学习一下

[复制链接]
  • TA的每日心情
    开心
    2019-11-20 15:00
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-11-19 09:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    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# @) }
    10
    电阻

    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
    供电线
    USB 接口供电

    0 l0 E5 Y# x- s3 U

    # W1 ]6 U/ b1 Z
    1
    8 x  N/ ]( Z! q2 w' t% E
    22
    , J8 I7 d6 l7 G' v
    按键开关
      V3 t* S* Z2 R
    K1-K4
    插件
    4
    & ~; u: f8 Z& Q4 h
    23

    / w8 s1 V: k* v3 v7 T3 W
    电解电容
    220uF
    C4
    插件
        1
    ) 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
    10
    电阻

    " 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! |
    供电线
    USB 接口供电

    ) A4 p5 S( _/ a$ e

    . |5 I$ _/ }) K% R
    1
    1 ~' S6 l: t- q
    22
    , J2 c3 V! L% ^5 J
    按键开关
    . c, L1 o0 i  S
    K1-K4
    插件
    4

    * y# R4 f7 ?+ ?6 d7 p* z
    23

    / k, C  Y7 I2 @- |$ T
    电解电容
    220uF
    C4
    插件
        1

    ! @- _- 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;
    }
    /*****报警子程序*****/
    void AlARM()
    {
    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;
    //下面开始继续读取反序的数据(从D1D7
    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); //求取10AD采样的值 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& |

    该用户从未签到

    3#
    发表于 2019-6-16 10:35 | 只看该作者
    电路图可以看看吗?谢谢

    该用户从未签到

    4#
    发表于 2019-6-19 17:02 | 只看该作者
    实物和电路图可以看看吗?$ |3 g* j  y. K% v
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-1 16:05 , Processed in 0.171875 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表