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

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

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

    [LV.1]初来乍到

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

    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
    10
    电阻

    ! 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/ _  ^
    供电线
    USB 接口供电
    , \$ {. H1 s) W0 e

    , |; v! C, p/ f1 P+ F4 I, O
    1

    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
    K1-K4
    插件
    4

    / W$ V3 O; p5 ]+ @3 [# p
    23

    , N2 N+ m4 S1 h/ t5 |, j4 `
    电解电容
    220uF
    C4
    插件
        1
    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 \
    10
    电阻

    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
    供电线
    USB 接口供电
    # ^- V8 o/ M% Q/ A0 \5 d+ Q
    * ~) g/ T$ K5 R& a
    1

    + T+ ]- i% |( z+ h" M8 ?
    22
    3 `- ]6 n! i; k, L+ L
    按键开关

    1 U( q2 F- L6 `' {: }
    K1-K4
    插件
    4
      M. Y" A) F6 I' V) e2 e) @) C. H; @
    23

    8 x. c! {4 u" C
    电解电容
    220uF
    C4
    插件
        1
    ' ]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;
    }
    /*****报警子程序*****/
    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*****/

    $ |6 ?7 k0 Y1 b& E$ x+ \- R

    该用户从未签到

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

    该用户从未签到

    4#
    发表于 2019-6-19 17:02 | 只看该作者
    实物和电路图可以看看吗?
    ( y6 R4 C- B1 a8 n  d
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-16 08:01 , Processed in 0.187500 second(s), 23 queries , Gzip On.

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

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

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