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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
PCF8591四路采集串口显示程序及原理图 附MQ2烟雾报警器资料
7 z$ |) H. Z2 u6 _# W6 u$ v6 Z: P0 a# r" L, \

! b+ D; ^5 }' g# {MQ2烟雾报警器,附带PCF8591模拟信号AD转化.  s5 G$ d$ v7 @! o/ e

& G+ }9 M. I. d9 H! @. q/ rPCF8591原理图:6 Y* f0 I) J# p; m6 o& s8 P
. m5 y5 L* s; v& J& [- H9 m3 e

- D6 Y; U( O% s/ Z单片机源程序:
0 n8 ]8 |+ n  m' o4 t

# x' t. r# D' B$ j- L* I4 U* B
+ p7 X- I5 ?0 j4 s% [
/*********************************************************************************
/ |$ l2 m  L* S& r* 【编写时间】: 07.071 H2 k( x1 V6 C% q/ ?/ S8 M8 r3 B
* 【作    者】: 雁翎电子
& m  |& M2 {$ J; l2 }* 【版    本】: V1.0
+ q# l. `/ @5 l# k* 【声    明】: 此程序仅用于学习与参考,引用请注明版权和作者信息!+ v- I5 k/ _/ \! l
* 【函数功能】: DA-AD试验                                                                                           . R* v: I' K* O% i7 m
* 【使用说明】: 单片机:STC89C52
" C: V4 L" a6 d                 串口波特率:9600; q. d2 G& ?' J$ H! ^. i
                                 串口一共发送4个字节    p% o) v& V+ [( I' d' W6 F. m
                                 1 光敏电阻3 j* m  Z8 }) D3 ^( r  d) I* S" C
                                 2 热敏电阻
2 v! G) x  i" a/ C                                 3 悬空$ p1 v  x6 N' x' I0 _; L
                                 4 可调0-5V电压(蓝色电位器调节)
9 w4 I8 c6 `; `0 T, g4 {                                 
0 ?0 m, `4 f7 B$ F; W  K* ~**********************************************************************************/1 W; {: g, C& ^$ \) _8 z
/********************************************************************************************/0 {: Z; E% d. |/ _$ x( r
7 _6 T* K6 I) P' F6 j5 c

. U! d) r$ Q5 u#include<reg52.h>    //包含单片机寄存器的头文件
2 a; j1 K9 x2 h6 F#include <I2C.H>" r( X" l) a) B3 d4 m6 u
# n; A2 A9 L$ ?  l/ d# f
+ a  M" p: \, Z, k4 l7 W
#define uchar unsigned char/ z0 [* k# E$ ^
#define  PCF8591 0x90    //PCF8591 地址' n. h8 i  n! G3 V# I' B# U8 ?
) v$ l5 d' V  }, [
8 z; d2 Q9 L2 }3 e
6 M5 q0 h; c* a* x4 `% I0 T4 s# |
3 ?( E/ ~1 D: c7 K" t

5 E$ U  d# z( H. c- O. b8 o2 }
% G  N1 F8 k* `' j; c
// 变量定义9 c$ g( r/ Q: [- [4 ]4 t: v( x% T
unsigned char AD_CHANNEL;0 f2 ~5 g8 X- b! C/ @! e
unsigned long xdata  LedOut[8];& k. |! n9 ^# T7 J
unsigned int  D[32];$ s/ a  ]* {! H! @9 H1 r
sbit P2_0 = P2^0;* {& V! S7 z* L
sbit P2_1 = P2^1;5 Q! _% q+ U8 Y% K
sbit P2_2 = P2^2;- O) H( V0 L, H# ]3 V0 y
sbit P2_3 = P2^3;
' \! b  U) I+ i; W& X9 o
, Y9 c7 ~2 R- |0 Z  M

! ^) F  X( u& Q7 K  |unsigned char date;
$ }) v3 s, V/ Y! ^) Y! Q& a5 M7 P
3 T# t, O; V6 |7 b; \( R

6 _) }% j. c) I3 Xuchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
& h( n4 U' v/ B" L% h2 ?  ^! r                        0xf8,0x80,0x90};
! e6 d# Y3 w; s5 A' i. o+ [) Z
" n0 T/ g' g  R, |  Y0 }: q
2 Q% D, [7 P& v; r0 U  w
& X! h3 R0 _5 Q- L5 A& K8 Y
3 T7 Z4 r5 |4 a1 O: e' y
  // 函数申明
* ]1 r  M1 e5 p! X+ R' M% Q
" g1 M: v/ c# ]1 M) d7 u8 u) T

0 a! u7 T$ O# pvoid display();# C$ m" p* h7 w5 r9 j: |, _& J
void delay(uchar i);0 h  \7 d9 `8 M7 n. K8 g# g
bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val);
( p3 g1 k3 l1 @0 J4 _% Hbit ISendByte(unsigned char sla,unsigned char c);
* `7 s! U2 A8 ]' T9 j9 [unsigned char IRcvByte(unsigned char sla);
, i) G( P3 y6 B0 {2 Evoid Initial_com(void);- [# M* c; }& q
//******************************************************************/
- w( Q6 |, u3 j! _' ~" ymain()1 |3 a. @' c, s9 _: H1 X( u, W
{  
0 Q. P0 P' f/ U9 Y0 U
3 y. p/ j4 m; A: Z4 y

  S$ b$ ~& j" D1 j* g6 z9 u" r        Initial_com();# n9 r% P- a; V
        while(1)5 m% m  R) M$ E
        {6 q8 y% i) X* p5 @6 v
1 E4 u+ J* {: h5 w
9 k/ P. g. B* J/ `, @5 [7 D+ C
        /********以下AD-DA处理*************/    m" E1 \# D1 |- E/ D- Z
        
1 w+ I: F; M# x0 I: d9 G% Y9 a            switch(AD_CHANNEL)
. o) s2 Q" }& P5 _: r                {
; R4 m& o4 I- k                        case 0: ISendByte(PCF8591,0x41);( O$ v- ?+ H7 s" T- v  n- B1 P% q
                             D[0]=IRcvByte(PCF8591);  //ADC0 模数转换1      光敏电阻
6 G% V( W- ?3 R; |! ~  {                                 break;  / v% K3 V) V. @2 N
                        
) @' u/ N$ x5 h+ |; l! }- t, _+ w% M                        case 1: ISendByte(PCF8591,0x42);
4 z) O' Z9 \5 ~                             D[1]=IRcvByte(PCF8591);  //ADC1  模数转换2          热敏电阻6 I6 V& a1 y$ r$ Y# y' X
                                 break;  
: S* S, j0 n0 g0 L* K1 q8 ]                        5 J* F  v) h$ C- G! x
                        case 2: ISendByte(PCF8591,0x43);; p: M- G8 j* c. k1 E. @
                             D[2]=IRcvByte(PCF8591);  //ADC2        模数转换3           悬空
6 K* M% {, S& S7 j3 x9 D* C5 n3 J                                 break;  
/ {. B1 b3 P% Z! e6 i5 W1 U0 V                        
1 S9 d" q9 o1 z% u+ g& O: a7 }                        case 3: ISendByte(PCF8591,0x40);
* f' y) E& F* K* `( W                             D[3]=IRcvByte(PCF8591);  //ADC3   模数转换4           可调0-5v
" k+ r. k* P8 E% y# b2 _, J4 X: Q7 G                                 break;  
- [" e  Z2 C  n- A' `                        
* ~! }: w% `4 J5 N6 ~, P                        case 4: DACconversion(PCF8591,0x40, D[4]); //DAC          数模转换
8 d# Q  p: T8 F0 K, A                             break;
7 A4 ~, A# p" ?  I/ q# V5 D: [                 
. d, n3 \1 A9 Z                }! X3 |! j. l/ j1 a# h1 l0 \

) a7 q% G* Z, H0 `5 M1 }

2 `, ]- c. L! E& K+ W            D[4]=D[3];  //把模拟输入采样的信号 通过数模转换输出- {' Y/ `- D2 H6 |# A  o
                        
* U3 v5 U8 o# k) d2 ?2 P: |+ _           if(++AD_CHANNEL>4) AD_CHANNEL=0;' O' M9 r% @2 u  [2 I
        
- m  z9 Z6 f9 w) v$ X- x2 F: O           /********以下将AD的值通过串口发送出去*************/
7 \: h) A( k0 n/ Y7 ^9 g6 \3 J) {         delay(200);        
+ y/ H4 X; @. g% i# k; m7 G5 s         SBUF=D[0];                              
! U+ ^  d- b  G3 B% P  l# q- \         delay(200);                  
/ b% U) y  Y4 b1 B2 m6 W         SBUF=D[1];                           
5 Z% ^: d! i2 @$ f1 T$ _         delay(200);        
* _1 y4 _, @! Q, G$ E! _         SBUF=D[2];
4 P: ~: l& x( j8 h         delay(200);& t3 [, B! q+ Y/ l1 z% j
         SBUF=D[3];
) c! o0 k6 O0 D         delay(200);$ P4 c/ z6 R2 H: _8 ~% e
         if(RI)$ k4 a% e4 E' N0 \3 a" k
        {: D. F+ Z2 i5 K8 `
                date=SBUF;    //单片机接受
- w% F* u" s9 H4 f- S                SBUF=date;    //单片机发送& x# x4 w0 t! s+ u" M1 H! R/ Z# w/ A
                RI=0;
1 h& i4 {" `' ^' v- q4 Z        }         1 b& M* W3 W& s  y! Y
   }2 J. \' s- F- Z- Q' M6 z
}5 \% k; F$ V  W7 H$ w

+ g8 S, T, c! B

7 x/ c/ |& n5 V! b& M2 i/ c4 w
- |- g; Z, Z# t9 A; n% U
void delay(uchar i)8 k% m* N2 c# h! ~$ x/ b: }1 C
{
! T% i5 u& ]6 B  uchar j,k; & q8 g3 t% s- g% X
  for(j=i;j>0;j--)5 r  B% {# `  O7 `+ A7 r* N% k! g
    for(k=125;k>0;k--);
; r1 m2 L  Y# z) j( \+ A( K( z9 C}
" r5 p- Z) M( `5 k
9 x3 r$ x) L% g9 [7 s
5 d, i! [; K& A! H
/*******************************************************************) Z: ]3 D* [1 l6 e8 s+ ?" U
DAC 变换, 转化函数               & b, r( _7 \+ Z2 Q3 g
*******************************************************************/: b& [1 ~+ i; C2 F. Q5 H+ _
bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)/ I" R0 A& g+ Q/ q
{
5 a& m6 l" I, U8 N  e   Start_I2c();              //启动总线
; A: g' P. U" y9 T0 b% _0 R. u   SendByte(sla);            //发送器件地址% `4 }$ R. [7 M7 x  y0 y
   if(ack==0)return(0);
" n/ `) |0 r7 _" K+ H   SendByte(c);              //发送控制字节
- @/ P- K, r  A  f* o  _. x   if(ack==0)return(0);* q; @) Q0 }! I1 l7 J
   SendByte(Val);            //发送DAC的数值  
' f& p) ?6 a% {1 W. E2 a   if(ack==0)return(0);
% @- E) e1 C- H1 h; z. d$ B  H   Stop_I2c();               //结束总线- D# V2 ?2 N6 z+ Y! Y) d
   return(1);
* V/ Z6 ~! `4 Y( H( m4 l$ T}9 F. Y% p$ w% a+ _

  {; y! b, x' z3 [+ T  {* T3 `

4 M& O3 \8 N7 ]! [9 \/*******************************************************************9 a9 Q# s( m/ `2 _
ADC发送字节[命令]数据函数               - p" C" R1 M4 d0 r
*******************************************************************/8 `+ M& R: }! G( c- E% U/ Y
bit ISendByte(unsigned char sla,unsigned char c)
9 G% c3 X, d1 F8 [{
8 }3 @. h& L4 @! x. ^   Start_I2c();              //启动总线9 ~% C! t9 I& r/ L/ R1 z% r+ z5 c
   SendByte(sla);            //发送器件地址9 G- V2 O$ K$ ]9 S; J
   if(ack==0)return(0);
/ ^! f" E  l0 S( v, w8 E( w   SendByte(c);              //发送数据
0 [( {) K+ Q$ v) D, O' H( ~   if(ack==0)return(0);
( m- x3 F; |2 D* C4 j0 A& \9 ~   Stop_I2c();               //结束总线1 K( o3 d5 S2 B% c& X- y( V% e, A
   return(1);
4 X: K* b( B% }& \! s3 W}
+ c, {$ t' d" C6 x' z" A$ w+ W" r- J
6 n2 Q' Q6 M. B( a5 `

# L6 l5 R' Z% p$ A5 f1 K8 h: S/*******************************************************************
" E( e3 }" o3 X8 |- L+ yADC读字节数据函数               : z+ m1 Y, A2 w8 D% E$ d
*******************************************************************/
9 T. N' B( y' I2 M4 ~, wunsigned char IRcvByte(unsigned char sla)
% w8 e% c% h, O/ a. @- R; J6 C{  unsigned char c;& l& }2 g0 Q3 F# [9 c) R1 t

# g, ]! ?' p, b

) [- x4 P( r- L+ j3 L' Y* m   Start_I2c();          //启动总线
4 k0 D# r* E9 p# K" G- F8 t1 p   SendByte(sla+1);      //发送器件地址
& l" j4 D! W! [( o   if(ack==0)return(0);- d  n4 W+ U. X
   c=RcvByte();          //读取数据0
* o2 B1 w6 p' E5 K! |* [8 D
. r! F2 m) }$ L5 @9 h
, v$ D! y) ~( o& \* m
   Ack_I2c(1);           //发送非就答位5 D/ P/ B( L( C8 N/ y3 v
   Stop_I2c();           //结束总线
9 L5 R' v1 z2 F1 W+ n1 f, D( ]- N   return(c);  a) C0 Y* K  D# ~' x
}
. ?4 V: ~; y1 l, O. h* w2 O3 k- ^$ L4 @/ M4 g
8 h1 }  q, a+ P+ c% i0 B

; F( H5 t9 v! O4 q+ ]! X# G' e

3 a, @) |6 a# J4 l//*****串口初始化函数***********( F6 l4 W. y3 C5 ^" n, Z" \
3 _2 g/ W  m( J4 a" Z
$ {& J/ r% M2 E9 J" w: ~
//******************************
& t! Q: J5 [+ B$ T. s- P% z) l% l" [. ]* R
4 e, O( a% y1 A8 |7 K/ v

/ Y' d: q" f8 J6 E" f7 s& s. z: m

& ]7 _- M4 X9 B) S4 J# b
5 W( `! d6 |5 {+ [

; Q  }0 M4 A5 g; _) |/ Y…………余下代码请下载附件…………
  X) v' n3 B7 K$ {* l" _* S  A) c( u; B6 z6 Z: R

1 J2 a( q" g2 k下载:/ E* Q7 ?& B- n9 ^
游客,如果您要查看本帖隐藏内容请回复
- X$ M- D1 g  b) Z8 e% s( ^
  Z3 A$ U' h4 X4 k1 |5 |

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-12 10:53 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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