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

PCF8591四路采集串口显示程序及原理图 附MQ2烟雾报警器资料

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-18 13:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
PCF8591四路采集串口显示程序及原理图 附MQ2烟雾报警器资料
0 G* ]6 `/ `! M8 m: @  O, A, n9 F
( _1 O9 Y3 T9 l! |" Y! G
MQ2烟雾报警器,附带PCF8591模拟信号AD转化.6 p' V" E; _1 r  T
# g/ J- O: X( P: ]
PCF8591原理图:. `3 n  Z8 H$ W) q6 ?
- t, {, j4 {  T- ]6 V% g& T% ^
! l% t, h5 z! s. J  P3 F0 Q
单片机源程序:
+ q7 y3 C/ \# g& }/ `
: Y6 E3 I0 c5 _. u2 V9 s, t
: ~5 Q1 P' V( Z8 g  f
/*********************************************************************************
8 P0 D/ ~! U1 g' G2 @* 【编写时间】: 07.07
2 T4 X) p" z6 u* 【作    者】: 雁翎电子+ j) h. n2 y* x2 {! `4 a
* 【版    本】: V1.0
1 y3 t6 V3 P7 Q  Q& F; M8 V, k# L* 【声    明】: 此程序仅用于学习与参考,引用请注明版权和作者信息!
$ l. X2 s4 @2 Z* q- y9 u8 |: @* 【函数功能】: DA-AD试验                                                                                           & T; U+ ]/ v" M* V  [5 D
* 【使用说明】: 单片机:STC89C52
3 F; ^( B; u9 s* n. f: l                 串口波特率:9600, P! Y: `" |* u% q9 }& B
                                 串口一共发送4个字节  
# V$ a& H5 m' f) k2 ]                                 1 光敏电阻9 F, U6 D7 ]# ]0 l2 U) w) {: z
                                 2 热敏电阻$ b$ g6 J. b% f1 ?# `9 t0 `
                                 3 悬空' I5 K0 C& }9 W% J
                                 4 可调0-5V电压(蓝色电位器调节)
* x& P+ y+ m4 G                                 & @% ]7 k0 ]( Q: d& l& p! E; k
**********************************************************************************/$ _; h1 ?4 Y. ]$ h. D) l
/********************************************************************************************/
5 y0 D0 F6 G4 {9 q, Y* O. A) H$ p- ^& b; b- ?0 }4 [

* |( p0 T* Y- |( ]. |# O! Y#include<reg52.h>    //包含单片机寄存器的头文件4 l' |% p7 }( U, S
#include <I2C.H>5 w! J5 _0 E$ R! C# |6 p
/ v, }4 }3 a2 g- v* ~6 [$ M

+ ]( ^0 @1 A; x/ F#define uchar unsigned char
$ Z+ F2 y% Z# ~& [#define  PCF8591 0x90    //PCF8591 地址
& g2 f. r: n! Q7 S5 Q0 h. _/ [( G

9 M% e; r4 a. c% A# g& _5 ?. N6 w+ ^. z. |& d

+ m) ~( S1 v/ v  t; A" G
$ N  T( Q6 X3 \$ I( g/ ~; h
8 a1 o5 A; W' ^
// 变量定义: b/ e# j) t, F1 {" w  O* Z. l
unsigned char AD_CHANNEL;
) u- A6 T0 F) lunsigned long xdata  LedOut[8];! F( E; L+ D. O/ R2 M
unsigned int  D[32];
! R+ r( A2 H! ]sbit P2_0 = P2^0;3 e- V9 t" Z0 t! C& o/ _& Z+ s6 t9 H
sbit P2_1 = P2^1;7 Q9 D* R2 a* H& W* P
sbit P2_2 = P2^2;
- Q1 o: `; w# I- J0 M7 h6 u5 Q9 e7 Hsbit P2_3 = P2^3;" x) Y; |0 A/ z

% d2 b, H* w% O! q% H* d' X

4 q2 H7 H; w. h" ^9 u0 punsigned char date;
1 K7 p/ f& g3 K) _# ^
  P# h1 W8 r, T& L* _' X
9 Q+ Y8 p2 I& A
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
6 F! H( M) |) E                        0xf8,0x80,0x90};
, F6 M3 A% T& M6 g1 `
  j* t# S  k. R8 l7 x8 v
0 Q% W8 @3 C: k1 m0 D

/ S! |/ }  w/ F

4 {" k, B+ k* @1 E- |  // 函数申明
3 X. ?) Y$ ^4 l/ Z+ q1 e- c1 N- a+ r' q4 O( L: s

1 ^6 B. g& i8 I  Hvoid display();" z9 i" f# Q: h1 Y
void delay(uchar i);4 s+ b% j* M* K/ N  r6 a
bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val);5 u7 ]  r6 j9 S2 {1 V
bit ISendByte(unsigned char sla,unsigned char c);% U' F' d5 t1 B6 u- c
unsigned char IRcvByte(unsigned char sla);0 B" x. H8 I3 t" A; @
void Initial_com(void);, K$ Z2 a( Q& F% \  y+ q
//******************************************************************/
5 Y# f) k7 Q, N5 s, smain()
! O5 p/ c% f! q, Q- B3 W" O{  
% f& n1 X1 ^" b3 i0 G  `' o/ ?- v
1 ]) P- I$ F' f) o# d

* q7 m* L  G4 l( ~        Initial_com();8 K  E$ J: d* Q$ X
        while(1): t% {2 H3 R: f. n
        {; r0 h* `3 `- @
  T$ Z. B+ {0 f/ T! g

7 D# t: ^+ p/ a        /********以下AD-DA处理*************/  
0 @+ c& M& [4 ]" j* M        # R+ F% V5 ?+ o$ T7 E& H8 V
            switch(AD_CHANNEL)0 ^: _& m' A4 g5 s: R; }, B
                {- z$ N/ c, }# S% y7 p
                        case 0: ISendByte(PCF8591,0x41);( B6 H4 j5 y' L3 h4 [
                             D[0]=IRcvByte(PCF8591);  //ADC0 模数转换1      光敏电阻
0 F! J) M8 X6 t, O* d( w                                 break;  
$ {# |1 ~8 X: B4 S                        
8 q. ?" a1 R+ G- O/ ]% _! E                        case 1: ISendByte(PCF8591,0x42);
- Y5 r  i/ N6 h4 H6 F                             D[1]=IRcvByte(PCF8591);  //ADC1  模数转换2          热敏电阻
8 s+ J; S0 e. w- e+ @) a. m9 X                                 break;  ) v% L1 K/ h# P1 Y5 W5 X
                        
* @2 ~) w8 C; L; }                        case 2: ISendByte(PCF8591,0x43);
# K( m/ z- j$ M: x3 y                             D[2]=IRcvByte(PCF8591);  //ADC2        模数转换3           悬空
' m2 q& H2 ?( x0 ~0 f2 w) k% k* K                                 break;  
0 f0 W9 b( s, q& h                        " ^# y% |$ S. `# b% \- J
                        case 3: ISendByte(PCF8591,0x40);
1 l4 u/ v$ z# \8 b                             D[3]=IRcvByte(PCF8591);  //ADC3   模数转换4           可调0-5v
$ }. c3 ~6 v/ y# @* P! P6 O  ?                                 break;  7 U6 e% ^) E& Z
                        - g9 _. @; W. K3 q
                        case 4: DACconversion(PCF8591,0x40, D[4]); //DAC          数模转换
/ u: Y1 j' X# z1 }" @                             break;
- N+ g9 G* B. i# P  T4 G. g                 
2 E) d. D6 G# `! w0 g& v# u' E                }" P, H" |: M4 W: G& r
2 X7 Y/ T6 o7 B0 @9 d  G3 L

+ R1 `3 x# L# l1 G            D[4]=D[3];  //把模拟输入采样的信号 通过数模转换输出
7 W7 U) |+ s4 T! q- m1 A                        
. S+ R) B  f, W. \4 G0 C           if(++AD_CHANNEL>4) AD_CHANNEL=0;7 n/ Z: Q; |9 f+ Z9 ~5 w
        ! O/ u$ ]; k  l0 e' N4 e
           /********以下将AD的值通过串口发送出去*************/0 E6 X: ^& m- n9 n
         delay(200);        $ |2 r0 @. G0 s
         SBUF=D[0];                              
) d5 _: [, r' j         delay(200);                  
& Z. |. d7 @$ p5 M/ ?         SBUF=D[1];                           % x3 o0 V* g+ ]0 u& P& ^
         delay(200);        
5 k: B0 e& y) p: ~" i( r) S         SBUF=D[2];
! z- w# q9 Q5 a7 a5 e0 W# i# O         delay(200);+ L" C& q4 u6 Y
         SBUF=D[3];( @* Y8 z/ m$ K4 f6 U9 m
         delay(200);* `3 J5 Y/ }4 v( E& \% d6 z
         if(RI)
( G: Y1 O6 a8 O# Q+ a        {+ Q6 E( z$ x- ]
                date=SBUF;    //单片机接受
9 s  b- i: J/ ?! \& H+ o                SBUF=date;    //单片机发送/ g$ O/ Y% ~* e8 A% g1 J  c, o
                RI=0;
3 S- e7 H) Y% l3 J        }         # l; S9 N1 E, |- G* E
   }( u. h; l& m2 ^
}. L8 {& P8 L: I" I( ^7 \

$ L& f3 m1 r5 e% c; u+ M

: R* U$ J5 t7 x; K0 y$ e: J7 M* D$ I) X6 M$ S% y1 T

0 Z& k5 C' s- P5 b$ j3 Uvoid delay(uchar i)
4 v- t% i  D7 T{  ~9 e' m5 d9 `" R/ b
  uchar j,k;
6 a$ l9 b' B, _6 l; {* s  for(j=i;j>0;j--)7 B* Y; N8 D* a/ T3 Q$ N
    for(k=125;k>0;k--);
1 |1 R8 |# F  G; I- \/ R3 H( w3 F}* }, U3 k7 o: F7 s" ^2 _+ x) g' h! v
9 M# K: F- l5 p7 ?* C1 e
6 ^5 p! ]% ?2 h6 w. |
/*******************************************************************$ W& S$ n/ `2 h
DAC 变换, 转化函数               
% y2 \0 G0 A2 f*******************************************************************/& d2 G. V' W! o/ _
bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)
( j! `1 Z& y/ m{
( j' w* L5 j" s. I, Y   Start_I2c();              //启动总线- ^0 l+ W2 \0 n; I% z+ b, T
   SendByte(sla);            //发送器件地址  `- \' ]3 O- z# x8 E
   if(ack==0)return(0);3 [3 i% H  e1 h, ?* _' Q' P
   SendByte(c);              //发送控制字节! N- A0 f/ a/ e# g$ U1 `- B1 U
   if(ack==0)return(0);
5 O  w% [( x. S5 p1 w   SendByte(Val);            //发送DAC的数值    E# ^6 P/ d# f& W3 P" ]$ I
   if(ack==0)return(0);; U8 j7 a( k- A8 M
   Stop_I2c();               //结束总线
$ L; x$ c7 y5 I9 V! w+ S; S! `  E   return(1);: h% d& i$ U5 p) C5 M% w
}
% ]) ?5 z0 S7 \3 a' l. W* O7 \7 n& C; [0 Z. j

" p& i6 C2 |; s/ a8 g1 _/*******************************************************************( W: j4 p& T1 x# S! o8 o( Q0 i
ADC发送字节[命令]数据函数               
1 @& h7 ?  Y, W; S" Z*******************************************************************/
3 T0 z4 V3 @+ U9 l: y/ M/ Tbit ISendByte(unsigned char sla,unsigned char c)
5 t2 k$ J7 ~4 s/ a{4 X8 f" n8 G, B; {# r
   Start_I2c();              //启动总线" T9 ~  P* r6 v' X! g
   SendByte(sla);            //发送器件地址
8 b2 s/ l0 ]7 \  t! ~2 D1 b' R   if(ack==0)return(0);
0 w7 E, j$ Q# ]   SendByte(c);              //发送数据5 p7 S5 ~; T4 P
   if(ack==0)return(0);' F  N# ^( V9 ^8 D
   Stop_I2c();               //结束总线6 v; ~! Z: b1 M0 M- X/ Y3 b2 K' _/ ]
   return(1);
4 n; F  m4 N9 N0 {4 z}
" g8 T, W/ |! v) h. ]3 M1 g) Y5 I7 e9 ^( H6 W) n3 t

% e! T/ q! r2 H9 Y! ^! D9 m/*******************************************************************
5 r7 A/ h, k: N7 nADC读字节数据函数                 V/ D; L( ]+ \/ ]. U9 {
*******************************************************************/- o' G2 c# S( Y" p+ Q+ g
unsigned char IRcvByte(unsigned char sla)
* @- T/ x7 c& o- H  ^+ P{  unsigned char c;
! T2 @; W, S6 W5 B
( Y. P, O/ B! c+ M
5 y2 V1 ?( E: S/ N
   Start_I2c();          //启动总线. |; G8 x7 \% B; {: J
   SendByte(sla+1);      //发送器件地址
% D) W' o% W7 \   if(ack==0)return(0);; N' f) N5 Z2 K( v9 L. A; L( r
   c=RcvByte();          //读取数据0) r) c' C; e& B7 ?* L

6 \& x0 J- K+ s) |- b' v  ]  r2 g
. G4 I) g4 l: T/ N3 M4 u. b
   Ack_I2c(1);           //发送非就答位
2 b% q0 D& _% R1 q  A' E$ h: X   Stop_I2c();           //结束总线2 S1 q, `8 T1 e* d/ a) l
   return(c);
2 S) Y5 y/ L0 H7 `, J}
3 B! n, t$ Q' O: ]( q
# q4 x! X' ^+ P5 H

6 t$ P! `5 S& I
$ ~* R, C% D$ \4 v

* P6 O1 {9 j; X0 h. L- h//*****串口初始化函数***********
1 w( s' G  I! p9 W3 t3 o+ Z/ ?' V0 X9 p' _# `4 A' A9 c3 a6 R2 N

- [9 l( Z* J5 P2 f. }3 x//******************************( a# s( ^* |) Y, [
# P* e8 g4 W- l' s  m

- K: ?) B" V( R+ X1 E" e$ [9 h4 Z2 N( i& g  U
( B3 g( E8 s! D+ a

6 i: L) e% d$ ^; m, D! M9 K1 w; k

+ P6 y$ |# x$ [4 f/ {' h* S8 f…………余下代码请下载附件…………5 `2 \5 ~% W7 \* {7 C4 m7 H

1 U% g8 j. D' i, [0 h6 k: X  F8 T# y6 F4 B; u4 N, i& l
下载:6 S: H$ I& B9 |  q8 D: x0 B
游客,如果您要查看本帖隐藏内容请回复
8 f- W) e4 m7 g7 D- ~! B! D3 k" k

  m6 G4 F" B  v; s4 b- h7 n+ K% ^

该用户从未签到

2#
发表于 2019-1-18 15:04 | 只看该作者
看看楼主的原理图

该用户从未签到

3#
发表于 2019-1-19 17:23 | 只看该作者
看看楼主的原理图
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-3 15:05 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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