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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
PCF8591四路采集串口显示程序及原理图 附MQ2烟雾报警器资料
8 V8 O- @# {, ]3 `* Y4 K$ u; E$ x1 L4 o. ~" s, ?
! U1 S$ d" a$ h/ {+ B  w
MQ2烟雾报警器,附带PCF8591模拟信号AD转化.  ?) ~( R7 w" E3 H, }
+ g% K/ c  F* }* s9 d& v; h
PCF8591原理图:
4 [  D  i6 Y( a4 O0 D, t ' B" Q( h  \: k$ J
6 D7 B! C! e& V  \! X
单片机源程序:
8 {+ H8 l3 Y+ g) N3 T, s

1 g% J2 _" A* f) `
* \( @" q8 ?7 k; I; q
/*********************************************************************************- \8 u+ q: E: A; p. P$ \! S
* 【编写时间】: 07.07- {. G$ z3 m" {; x3 T  M" Z2 C, B
* 【作    者】: 雁翎电子
- Q3 I, n5 M$ B1 d1 F* u# S: D* 【版    本】: V1.0+ B2 |( x1 y* a2 h
* 【声    明】: 此程序仅用于学习与参考,引用请注明版权和作者信息!
1 J; ^+ {7 c/ t2 y6 `' p3 G7 {* 【函数功能】: DA-AD试验                                                                                           + m* I$ D8 {) ?3 u- |( x& o
* 【使用说明】: 单片机:STC89C52
9 G! F+ S8 P& H' F* d) a& I                 串口波特率:96008 p/ T0 Q4 m! S) x4 E( Z( m
                                 串口一共发送4个字节  
- F# U& y$ [2 X                                 1 光敏电阻
9 f9 b) l# m/ v5 f                                 2 热敏电阻
1 f$ W4 }/ ~5 i& ]1 t                                 3 悬空
' u; t! [# S, X                                 4 可调0-5V电压(蓝色电位器调节)' C( V3 K3 y. E: N& e
                                 - \! N& X* ?1 O2 e
**********************************************************************************/
* B: I/ t1 }9 z) O8 U/********************************************************************************************/0 n% m) u# y& [! e2 u/ E5 x2 E
( X3 ]' R2 E; v

+ @) |/ G$ S% A% s" Q( M#include<reg52.h>    //包含单片机寄存器的头文件
2 s, F/ J7 I2 @# D#include <I2C.H>
" a& q7 N+ l& I/ A8 k7 R% |# K  S) n
) u5 D, l6 K3 |; c# U  z+ m1 R
#define uchar unsigned char6 a$ i' z* n! t- g
#define  PCF8591 0x90    //PCF8591 地址
% ]: o( e/ l: q: [% G. d" t( E7 x0 e% O: M' o
4 j9 d  L0 F3 U  @* t8 J+ ~( p
/ r$ l& ^; i' {1 j. `7 m8 c
" \7 U% l; h3 u8 \, z

/ b. G6 |/ D( J$ H

  o$ P# S" V4 G) M// 变量定义
% l7 H6 J1 W# `3 J& ]unsigned char AD_CHANNEL;& X4 X# l3 I. v5 m3 O; h5 j; A# q
unsigned long xdata  LedOut[8];# s7 T- L& N/ p: `0 b
unsigned int  D[32];
5 e; y3 h0 |# |6 u. Y! R! Psbit P2_0 = P2^0;$ {9 D  f* }, B- y+ A; n" G/ {1 e
sbit P2_1 = P2^1;
! S4 n& R* R* C8 I3 Fsbit P2_2 = P2^2;/ z7 E. b, D  E7 S
sbit P2_3 = P2^3;6 T9 g6 u4 {8 \3 C8 p
, @" `! s9 F. X7 x" R" ~

) a8 P. u' `/ A8 C/ Lunsigned char date;
; Z0 }5 z# m- P" k  E" ?6 e1 Z8 c& {* N8 S

* s. S0 s; t* y2 {, k! G" zuchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,7 w- m; W/ V; n# f" w- p
                        0xf8,0x80,0x90};% U; D" I6 ?7 `

1 O' A, G, \" K- q2 Y' h- F% O

& f" E. H  U' `$ d+ i2 }( E4 Y+ z  N  h

, q- L' D; y, ~4 M$ ]  // 函数申明 / A9 c5 t! P) t
; F, P9 E; b; J& }! v* X  s
) F. f6 P9 Y) G1 ?( \+ k! S8 C
void display();
- X  a% s2 v1 ~) cvoid delay(uchar i);0 g$ y4 L4 I1 h5 O3 T: L6 g
bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val);2 ]5 q0 h& J. I6 _& M7 g! v8 A
bit ISendByte(unsigned char sla,unsigned char c);6 ~% n: S9 M2 a9 g; a) \; t2 G
unsigned char IRcvByte(unsigned char sla);
* b/ u5 F! t  B1 {8 q$ n  qvoid Initial_com(void);
( Y/ ?  R# W1 j9 O/ H8 b//******************************************************************/5 ^2 i1 ?0 Y- Y' Z$ f& _
main()- g6 U9 Z  f6 O2 o
{  ' Y) r, w0 F0 q1 Y8 Q

" Y% G/ s6 h) D4 X

2 f" d5 U% ^! f, G& i. h( C3 {        Initial_com();
1 W4 G4 |, a; C1 z& o        while(1)
! }* T) J: S. p" h% Q        {
. u5 E' L% f  M* Q8 i6 T. Q  k4 Y; E' F' v" Z9 C4 J
, V) j& }% }5 Y# W& [
        /********以下AD-DA处理*************/  ( B2 H5 A; K4 f- c
        
" M2 l9 X* g( g1 M" X4 G            switch(AD_CHANNEL)
- v$ c1 r, A) \" b; @( S; Q                {: w6 O' W8 H) ^6 [# J3 \' Z
                        case 0: ISendByte(PCF8591,0x41);1 l1 {  X3 I) _3 R  [5 r
                             D[0]=IRcvByte(PCF8591);  //ADC0 模数转换1      光敏电阻, T) s7 u" c6 h" _' W9 y! c' M
                                 break;  $ o- ]3 ~5 Y  I4 e$ L5 r
                        
3 m1 t1 ]5 u3 c% S. Y; K  u0 \                        case 1: ISendByte(PCF8591,0x42);
( n6 p( B" E4 x' G! M9 ]                             D[1]=IRcvByte(PCF8591);  //ADC1  模数转换2          热敏电阻
6 W5 v9 M( h; y6 \* S! x$ B! @                                 break;  
+ ], O5 n4 F6 j6 F1 C0 N3 y8 D                        " `. c" s8 T8 b/ p& N
                        case 2: ISendByte(PCF8591,0x43);: g! L( w. N- N3 y1 p# S5 |( ]
                             D[2]=IRcvByte(PCF8591);  //ADC2        模数转换3           悬空+ d& I4 c7 G9 r9 O# Y
                                 break;  # M% I; S1 h. H4 b. t
                        
0 c3 ~- t. K+ O, I                        case 3: ISendByte(PCF8591,0x40);# \4 g5 ]2 v# U, P4 l! y$ C
                             D[3]=IRcvByte(PCF8591);  //ADC3   模数转换4           可调0-5v
6 d$ Q9 o, {1 Z% K2 ^                                 break;  , E4 H/ U  n& |  Q% ~
                        " Q0 @3 l  Z9 t$ B% ~2 H
                        case 4: DACconversion(PCF8591,0x40, D[4]); //DAC          数模转换
1 k  S$ y, H# C  n3 _; _                             break;' ]% ^" o% E4 {1 L
                 
3 K& J6 ~1 a8 }! p$ K3 E                }. l. d# @  _; L2 l8 s

% B) \0 u3 P+ P7 q. k1 J: B- U2 E

( P. b& l* ~5 v' ]! }) e# m            D[4]=D[3];  //把模拟输入采样的信号 通过数模转换输出0 C$ K( h8 d6 T  `0 C
                        
6 ^: t5 s3 `8 T. o! W3 [$ F% O% W           if(++AD_CHANNEL>4) AD_CHANNEL=0;( w  e: P! d* }5 T: j; o6 a2 w) h" }
        : n5 ^, o$ B* L, g( |
           /********以下将AD的值通过串口发送出去*************/
( F3 S; ]2 {* O$ p% L         delay(200);        7 v6 t) Y3 J  n+ R
         SBUF=D[0];                              2 D* t) F" O# u' E: l
         delay(200);                  / D' {* x- C# H2 g8 B: Y
         SBUF=D[1];                           - d7 @7 H% f* Z  z- G
         delay(200);        
7 U! G  a* _% V: b1 `         SBUF=D[2];
- F, Q4 q0 J6 Q" e         delay(200);
" U  G$ m2 \+ t         SBUF=D[3];) g+ a+ B! ~+ j3 |9 }' I- N
         delay(200);
+ Q1 X9 K( A+ I' h2 w3 ?         if(RI)
. q1 N3 L. {& a! R/ j: |. G2 h        {
/ b; c' I0 P1 W6 f" N! j6 ^( q                date=SBUF;    //单片机接受4 U6 U0 n! ~0 R5 W
                SBUF=date;    //单片机发送4 D' H6 F; n) i, }: q, f
                RI=0;
2 V2 i4 M$ u, E  [/ |: l% t        }         
1 [- J' C6 l0 B! |   }' O5 q+ D( ^  k+ f3 [" Q- N- m
}8 Q, ]& R: M1 I; y5 U* D

: x* W0 _; f  T( D' I

2 v1 ~4 A' |8 e) N  f# {! n+ [. w5 T) n9 _6 O8 D  m0 y8 O

6 p$ J% B) ^0 h$ o: N& Cvoid delay(uchar i)' @% X  V& {$ P3 p  O' F( E
{
; q0 i! X" f8 T9 @3 V  uchar j,k; + l; @! j3 ^( Z, w% @0 ?
  for(j=i;j>0;j--)
- R! ~" r6 F9 T    for(k=125;k>0;k--);6 h) y) p# \% W) n
}
/ I# T* y4 ]! K. b4 R
4 K& s/ ~' k0 m3 x

0 |% p3 Q6 f' m- |* v* V0 h/*******************************************************************
6 T  S, Z" Y9 u' `DAC 变换, 转化函数               
. d; [* F. _; @4 _6 |  \3 J2 O*******************************************************************/- D( D5 y) Y1 H% _' X9 Z- J& |1 ]
bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)8 L) z* }1 z5 F1 t$ Q
{. r1 P) J8 M/ @# A! n5 _
   Start_I2c();              //启动总线% F) v  T3 D, d
   SendByte(sla);            //发送器件地址3 T: Q* G! e0 w3 N0 Q2 ]- _
   if(ack==0)return(0);; F6 ~* t: Y0 q5 o5 z; ?* Q
   SendByte(c);              //发送控制字节+ B# n9 F; ], p4 ]0 p
   if(ack==0)return(0);  S" G9 S8 ]2 S0 N5 c: {" T
   SendByte(Val);            //发送DAC的数值  
6 ?7 N1 v5 C& B# X( _. }/ c* o   if(ack==0)return(0);
4 j1 F% D# F# r, ~) s   Stop_I2c();               //结束总线- `: j: d/ o6 i; @4 |" q$ V
   return(1);
% D2 E0 T' H0 G}* ]$ x5 L# I$ ^

# z- o9 h: z* f, l" C, v6 T0 y

" S9 l2 ~: {& L+ ~, \4 z/*******************************************************************
5 |8 `$ d7 G$ [8 X- S- ?ADC发送字节[命令]数据函数               
- G; h. S8 g$ d  A8 X*******************************************************************/
; _6 k- M/ u* g% z* Ubit ISendByte(unsigned char sla,unsigned char c)
3 \7 h, {- r0 V{1 Z& M% {5 ^  @- N
   Start_I2c();              //启动总线) {3 M- x1 r0 H* }
   SendByte(sla);            //发送器件地址0 U& b. b8 W2 v4 T: A% I% r! r- Z5 G
   if(ack==0)return(0);8 u! t3 r* D4 V! b
   SendByte(c);              //发送数据$ F9 {2 e& a+ O+ [" A
   if(ack==0)return(0);
7 A3 `" A/ E/ P" B. Y* \& E   Stop_I2c();               //结束总线7 v8 l  X0 v  O1 D% W
   return(1);
6 I; }) {: ]$ T7 p& q5 k" T}
: a% j' Q' O; n6 Z6 r9 y& h* m" {! D' K9 |  \0 c) d
" a9 i3 M$ `2 ]8 y9 ~
/*******************************************************************
4 h; z. R" F* QADC读字节数据函数               / h1 T4 n% n+ q( p1 @
*******************************************************************/: N% j- Z# r% U& y: ^2 l
unsigned char IRcvByte(unsigned char sla)9 i8 o) E9 O2 R5 b0 H9 \
{  unsigned char c;
/ x- u6 W4 [% W+ z: Z6 L! B8 A: W/ V0 R: T) n/ M
$ j, Z9 e, x: j: `. d0 A3 N  `
   Start_I2c();          //启动总线5 P- m0 [- X" f3 H0 ?# Q
   SendByte(sla+1);      //发送器件地址/ S/ X( P) K5 L% @
   if(ack==0)return(0);
1 ]' x- C* E! |9 i, e' s4 v   c=RcvByte();          //读取数据01 n- X" K8 i& }% X- r1 Z
/ \: `! m9 t3 o) V* ]
8 U' M5 [6 d; Y/ Z$ |& B8 p
   Ack_I2c(1);           //发送非就答位2 F& Z6 @( m* c5 Q( n
   Stop_I2c();           //结束总线6 z3 X1 j3 a7 c+ r. V0 M
   return(c);
  L, [2 \: Z0 f  l3 ~& ?/ f3 Z5 H}
' b) W' e$ b2 \& X2 ?7 Q0 B7 o$ n& G, [: n: f

: g+ ^! H$ P+ {2 S
% S/ O/ E: S8 q8 B' @2 |% t4 K& u

% F/ ^2 h& H$ c( q$ G4 `# i* ]//*****串口初始化函数***********
6 K, {; M+ |! f3 P4 x) _" j) W: B* C. n0 I, w4 V. f! Y

$ k1 h# r0 t* Z( T; {! b: K//******************************% I* e+ @* l5 h- E! C7 c* A* o
& ^! M- P( U; a1 C, p3 }
" F6 |$ h- _9 q4 U8 n. t
+ O% D8 y; f: ?' K" D& U0 Y
! z# o7 c, m, y* _# ]

: s0 g4 s( W+ |4 h; j

+ V6 {9 `/ @0 }" E, {…………余下代码请下载附件…………' q* O- \/ ~$ h+ n- Z/ S1 N  h/ i
" x# Q5 T5 v: z* m3 i5 R: K& w
( S' y' d/ F( K3 t
下载:3 D2 h  {7 e% A7 s& N# l
游客,如果您要查看本帖隐藏内容请回复

4 J7 f, I( f4 m/ J. p" f( Y
3 x9 N! T( ^$ \% ?) x  W  i5 D

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 15:49 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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