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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    转——以前怼的一个基于89C52的PM2.5空气检测仪发出来相互学习一下
    0 y1 \8 M6 Y# {& ]6 l
    1
    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
    10
    电阻
    % 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
    供电线
    USB 接口供电

    ( p( D0 i& l8 s5 y2 ?5 s
    ' p' w/ |- d' y% N3 z- z
    1
    0 E$ d! _% t! I& z
    22
    ) s( U* R! u/ z- ?8 ?
    按键开关

    % i4 Z% Q$ K) a/ N) s
    K1-K4
    插件
    4

    & `# }' W1 B7 W$ M) [/ Q% M
    23

      P$ W  o( m: S( a/ w
    电解电容
    220uF
    C4
    插件
        1

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

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

    & Q' W7 ^( A4 E3 d$ W+ Q
    - \+ X  d2 v, X1 y1 V
    1
    ; _! v* a9 r! X0 i, c
    22

    5 F; S! L0 O! `" `2 F
    按键开关

    % l8 y# k* s( a
    K1-K4
    插件
    4

    8 }2 x+ ?  x% x! s- a
    23

    : m' }% g: {& g2 Y1 r
    电解电容
    220uF
    C4
    插件
        1

    " 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+ N
    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*****/

    7 j" Y" s2 u% f" V  m6 r- Q

    该用户从未签到

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

    该用户从未签到

    4#
    发表于 2019-6-19 17:02 | 只看该作者
    实物和电路图可以看看吗?: K" p1 u) w8 k7 S0 }6 N
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-7 01:30 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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