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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
PCF8591四路采集串口显示程序及原理图 附MQ2烟雾报警器资料1 z% ^1 m3 H+ a  V
9 G9 h1 \, G( c. E
: I8 L: P4 L8 _2 B; S0 ~
MQ2烟雾报警器,附带PCF8591模拟信号AD转化.# v/ ^! V' S$ r, n/ p
5 w5 f# L2 c$ R, T( ]
PCF8591原理图:1 B  N# d. |( d2 {( B3 T/ K, H
* }* [- }3 x  Z3 m# Z( v* a) n
0 w0 j9 I; s' h! u2 R* K. f! Q$ t  ^
单片机源程序:
6 ]# M( w! O9 k9 [5 o6 V+ |
, U! X/ w1 J, q: t
! O' J- V5 |8 }. o) w) l& t
/*********************************************************************************
: C0 l$ {4 [' V  i5 l8 K0 w* 【编写时间】: 07.07& [3 [, O9 a7 d
* 【作    者】: 雁翎电子: K: W8 ~9 J9 y' I
* 【版    本】: V1.0
3 k' e1 u: ^# I8 i  S# s* 【声    明】: 此程序仅用于学习与参考,引用请注明版权和作者信息!  _+ P8 V3 G: n
* 【函数功能】: DA-AD试验                                                                                           9 X4 J# s: b' D- w7 N7 v( a
* 【使用说明】: 单片机:STC89C52
  m- i6 f+ Q$ a& m8 A                 串口波特率:96003 {0 k" O6 b( P* h3 l9 C! [% o, ^
                                 串口一共发送4个字节  4 x+ T; F+ {& G2 ^
                                 1 光敏电阻
1 C4 A; k+ ^1 n' |( e6 y, Y                                 2 热敏电阻
7 g4 p5 q' b4 Y3 C2 L                                 3 悬空
( o) ^, F9 u4 q# T8 p                                 4 可调0-5V电压(蓝色电位器调节)
) Z0 \1 \- x# M6 T                                 2 m% Y4 c- @$ [1 c& E' c
**********************************************************************************/
* g% s. x, p; x* e/********************************************************************************************/) m/ H+ p& X0 l. A
+ J/ h# m! e  H+ ~
* p8 V" F$ l+ a  t( \! [" R
#include<reg52.h>    //包含单片机寄存器的头文件$ R* A% m$ {/ q' @: h
#include <I2C.H>  k2 Z4 j* z; K2 h; J! ~
9 X( T" V2 a+ S' x
! y0 h4 ~: S5 ]$ j8 b1 ~7 f+ C& R
#define uchar unsigned char5 a0 w, e  D/ L. }8 d$ e3 g
#define  PCF8591 0x90    //PCF8591 地址$ n) y9 j* x$ O+ q3 }

7 }6 V3 A0 t( ?( x
7 [! |# x5 n8 \3 F8 a" s( t
/ \' X9 {' {0 z

( f2 R: S! L3 G( o- H" }2 S( B7 n

3 J4 M  l* G. n// 变量定义
; ~7 d8 X4 E# A5 `# iunsigned char AD_CHANNEL;( `, N7 T( @  I
unsigned long xdata  LedOut[8];
5 G" a  E% ?- `: p( Z5 q. lunsigned int  D[32];  i' e( K, y8 ^
sbit P2_0 = P2^0;" j; E6 a4 r9 U& o* u2 N
sbit P2_1 = P2^1;! b1 E% m. @4 a( |( G$ F, Z2 j6 F
sbit P2_2 = P2^2;
# y( t" r+ ^% F! G; j5 L; Ssbit P2_3 = P2^3;" X4 J# J  Q# V* u* ]% ^) \

3 I# r& m: r& b, h  X( S1 [: \
; B0 I. M: M2 |+ b, ]; m
unsigned char date;! P) \' C- P+ E2 O- T5 W

6 T8 G6 e8 p; `
% @0 H9 R4 o5 {1 P5 F; H  A8 c
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,2 n" D9 @, B, D. T- }1 r, y
                        0xf8,0x80,0x90};) e9 X4 w8 w& x7 V

' s& Y6 }! ^3 c5 Q; e3 d) j* i
) T* @# w7 ?6 Q; x4 g4 X; e
  m2 A7 J/ n  U) r4 t
  j4 ~* d6 l. @" w6 S' ^+ e
  // 函数申明 7 v, S' P2 \8 q; a* A, r; }3 }. `

' S6 Z5 [8 k9 }8 _
- l" d/ M$ R6 ^) J/ I5 J- ~0 L
void display();8 a' L* P# ]: v6 w; f0 E
void delay(uchar i);
, J4 L. B1 g* I- l: rbit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val);2 w. M' \  R# s6 x) L
bit ISendByte(unsigned char sla,unsigned char c);6 g) P8 F3 C# q, g  x
unsigned char IRcvByte(unsigned char sla);& A& M' W3 \' l  V4 r+ V( `2 M& |
void Initial_com(void);3 P( Z/ t. M3 [0 I/ s5 P5 d5 @
//******************************************************************/. ]+ g0 B% H2 ?  F1 i
main()6 }9 i- u2 f! L6 E: m( C
{  
+ g/ L& \5 l5 G5 F. b# R" z- H. I" a, i, Z9 {2 R, L
9 d8 D% u- q3 i9 B
        Initial_com();% p. n( ^1 Z; O) x5 |, v
        while(1)" _& z8 t. d& P+ U6 z+ n
        {3 j3 V1 c% o) q% Q# e1 O

6 |3 a. F5 v& B$ f3 T4 ?$ h5 R

7 f+ h0 r: Q5 w' v4 \        /********以下AD-DA处理*************/  - Y6 o( J6 Q5 [$ Z! G9 K
        
2 j+ i" L1 \9 d# {8 }            switch(AD_CHANNEL)
9 u$ ~# P( b5 ~6 ]( }5 T: S, P                {
: u/ w0 O' _" a0 s+ d8 T                        case 0: ISendByte(PCF8591,0x41);4 A. z* \+ f& l
                             D[0]=IRcvByte(PCF8591);  //ADC0 模数转换1      光敏电阻- K6 e& v. y0 c8 u3 q! R
                                 break;  " l4 f( t1 R/ v; [  U- Z
                        5 W2 n. ^. o# d" D
                        case 1: ISendByte(PCF8591,0x42);4 T  F* q6 s! T
                             D[1]=IRcvByte(PCF8591);  //ADC1  模数转换2          热敏电阻/ m$ @% f; f6 x1 t( Q$ A% Z
                                 break;    d6 x" p: n- {! B/ Q- ~
                        
0 W( d) L( U4 P/ x                        case 2: ISendByte(PCF8591,0x43);
- U! x  Q, M5 M4 B' L                             D[2]=IRcvByte(PCF8591);  //ADC2        模数转换3           悬空! d& b3 T* v. A
                                 break;  
! S4 z2 Z7 n3 L                        
" q3 }# N+ X% `- y                        case 3: ISendByte(PCF8591,0x40);/ u2 {  i. G+ H9 u. z. d$ D3 H9 \
                             D[3]=IRcvByte(PCF8591);  //ADC3   模数转换4           可调0-5v/ |9 n/ V6 h7 B% E9 G' H4 ~
                                 break;  
9 S, V: s& T7 ]- X1 T, g                        9 w0 s& B: M. W
                        case 4: DACconversion(PCF8591,0x40, D[4]); //DAC          数模转换
. @% e( t$ a' G* v! u                             break;
! n$ @7 p/ t( K! M- G2 g                   s0 B" ^$ y/ q
                }
/ R4 a# x+ I. [$ Y/ d
; k1 `) }0 ]7 {0 [
/ l$ X) p5 l* d( Z+ r- x1 w: @
            D[4]=D[3];  //把模拟输入采样的信号 通过数模转换输出
9 N# v% U2 h: H$ \1 |! S# h2 u+ u1 G                        5 X* l9 ]8 H* g. Q! ~6 U
           if(++AD_CHANNEL>4) AD_CHANNEL=0;/ j0 L) e7 C2 a3 Y5 z( e1 X
        ' k+ `- Y: \0 ^4 c; w, K: K. @
           /********以下将AD的值通过串口发送出去*************/
( S/ c8 F6 B8 Q  |         delay(200);        
: B+ ?6 I$ a+ @0 Q8 L: }         SBUF=D[0];                              3 i# L1 i( X, K- i
         delay(200);                  
6 R, }% d( B+ G         SBUF=D[1];                           
3 m" O9 n' F8 D% w4 Z' r* F         delay(200);        
: g7 ~5 l- s: N+ [9 J         SBUF=D[2];
& r  y9 L1 p& `& T4 r$ U         delay(200);; Z( `# N& H0 S/ a  C
         SBUF=D[3];, K' ]  D4 \( @
         delay(200);
- |3 [3 ^- `2 d- ~3 B5 [2 X) s! ]2 {         if(RI)
; \) \& z$ z0 a$ u1 ?        {/ k$ m' \/ G  B" l  C( W
                date=SBUF;    //单片机接受
/ J! |, Y$ s& i" C. g/ @9 u                SBUF=date;    //单片机发送
6 ?% T1 m" `2 Q8 }3 [% o/ o                RI=0;8 O& D0 }2 T  U" _$ ?- b
        }           O. o  P1 L) i& F; E: r( Y* _
   }  N  O( z# V$ ^- l9 r# m
}) _" }' B! e/ w

0 }7 m' {4 P- y6 V/ R: C% M. t7 E
: i9 `4 W) t% Z2 r6 J

, q& ~7 t% I! Y
0 N  n) M+ P# Y+ R
void delay(uchar i): K! K$ C1 p8 u- @  _+ P
{
* I3 |1 ]( M* L! G4 e3 ?  uchar j,k;
3 X* C5 j% q8 z: B; k1 n  for(j=i;j>0;j--)3 O6 S- G0 g9 T, d: g6 }8 a% j
    for(k=125;k>0;k--);
( w# b; e  @  n8 X( D  X}8 @% Q& @6 n  m9 F

+ L6 {( O( I: E2 I$ }
6 F( h. ?5 {1 z* E# K) q1 e" ^
/*******************************************************************! O) R  r7 m7 [2 }' p
DAC 变换, 转化函数               % `. Z2 U3 Q  x  S5 K2 E3 k: G' D
*******************************************************************/
- `% E/ @6 h7 Z: Y1 E+ i  p0 C* \bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)
  ?. O: B' q9 B8 n{5 C, s5 w% Q  a* Q% ^* N
   Start_I2c();              //启动总线/ R. r- e0 s" g2 C# l2 x
   SendByte(sla);            //发送器件地址
0 [" z7 x4 q7 t3 P# V9 t7 D: t   if(ack==0)return(0);
. [; M' k7 M# W! ~( c) x$ F& O; L   SendByte(c);              //发送控制字节
7 b6 n' l6 Z# x   if(ack==0)return(0);
! L0 p3 N, A2 B! x( v   SendByte(Val);            //发送DAC的数值  3 P& s6 E: u. j5 B
   if(ack==0)return(0);2 {' L0 L2 R; r3 _, P) k
   Stop_I2c();               //结束总线
0 b& l  K) U7 a   return(1);
2 r  M, b0 z5 L( _; f' O/ y}4 k/ O  L# @5 K$ R* g, ?
: T% o+ P/ v/ R$ @6 {
! j" p- o2 T% ~' o' [
/*******************************************************************' ?6 M! C6 I8 K$ A; X1 b" L
ADC发送字节[命令]数据函数               7 \% C/ a- }& y! _4 d2 K
*******************************************************************/
6 M8 m' }4 K+ N- p5 M+ |bit ISendByte(unsigned char sla,unsigned char c)4 z* _% |" F; j
{) l$ a5 q% A: R
   Start_I2c();              //启动总线4 ~  u% u$ {) J* a  c. @! v# E% S
   SendByte(sla);            //发送器件地址% z1 p6 `; A- r& y
   if(ack==0)return(0);6 J( W3 q; i, i# c( x8 \
   SendByte(c);              //发送数据
! A% _" I% I) T$ q7 y0 \  U- D( p   if(ack==0)return(0);
. i/ i) s) [) _- S   Stop_I2c();               //结束总线
6 {, B3 i" {3 d   return(1);
3 U: [# {7 z% g1 ^/ U}
- V: q# d" D; ~0 D; ^5 D6 d) I7 E+ P+ p

7 E8 E: E* }* B/ X) A+ W/ G8 N# V/*******************************************************************
  Y# x8 s0 e  F4 D. V8 r- TADC读字节数据函数               
4 I$ p/ [, H% N1 X- C' D*******************************************************************/, `* g4 s0 Y2 _# w7 T4 i
unsigned char IRcvByte(unsigned char sla)) J' ?' o7 }) V4 ^6 ?* W0 U8 s: ?
{  unsigned char c;
# \: o0 L1 p2 |6 W! b# w
, U6 s1 E0 x  |4 M( B
* M" i5 w4 P9 c+ Q! u0 O
   Start_I2c();          //启动总线) e; C: |* A- b$ R* ^
   SendByte(sla+1);      //发送器件地址/ U) e: f0 x0 {2 {5 {
   if(ack==0)return(0);0 @7 }4 I5 y% e& h: t4 Z
   c=RcvByte();          //读取数据0
: h* T! l! d; d  y& Y6 U3 O. H
' W/ g% W& }8 n8 ]

9 C% H! J0 w3 D! Q8 f% J   Ack_I2c(1);           //发送非就答位
- \4 `9 I2 ~3 Z( o2 Z   Stop_I2c();           //结束总线  S, R4 ]+ e+ ^; e/ D% I& }& k: S
   return(c);) R, H) ?5 [4 O% b
}
# ]3 Q. U" u- i+ ]: c% \
* l) w7 Y' v% N

& Q/ W) V: W. S" T0 t' `2 t4 S$ b5 F6 G# i' c! H' W/ D
5 w6 k1 N4 L! T* Q$ ]9 U$ f5 K, Z
//*****串口初始化函数***********- e, _* Y1 o5 U+ B" I

! \) I  m- D3 w  u4 @+ D

3 ~9 ]0 L9 i' C, N2 h% B" O//******************************
3 r0 m+ s% f5 {* L3 [/ c: n% b4 _$ L( D' I- c9 M
# r4 e# `4 {0 j/ W0 U/ I8 O

& o6 u  v6 B+ B) q7 K1 M2 C9 h

9 w' u7 j2 Y( E: q4 f& y3 y. ?8 F. c+ w9 t, p

1 b5 D9 g/ X) I) \+ y, m$ ^+ t% M" X…………余下代码请下载附件…………
7 D8 @2 N/ I  q. D
7 l0 N0 v  F1 U
: V3 ^4 E% h( E8 h下载:. g+ s2 @$ q' L! z" n' w
游客,如果您要查看本帖隐藏内容请回复
6 u$ m! ?6 L8 s  v$ D

! }( a% F2 L+ Y) u, b4 ]

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-11 02:47 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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