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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
PCF8591四路采集串口显示程序及原理图 附MQ2烟雾报警器资料, \" [* B: T  D! d7 H

% k8 ?9 r, m# S- i" y; |

6 S, A4 O: z3 w# H) Y7 x6 C& _MQ2烟雾报警器,附带PCF8591模拟信号AD转化.
: E: P# F  i: f7 s% D- \  Q
" K$ Z, @5 O- g- KPCF8591原理图:4 ^7 d3 t) I% {# D1 z8 \
1 p: X8 Z7 h0 b) N. T; Q

4 C& W0 R4 B" |- r! Z9 y2 f# |5 B- z单片机源程序:

# g3 H. n7 T5 `
) G3 c5 f9 t1 Q6 n  ~0 j
( O, E- `% @0 O3 u
/*********************************************************************************. c  w; @1 T. h+ O
* 【编写时间】: 07.074 z+ W# O4 Z, ~) J! P# Z
* 【作    者】: 雁翎电子0 s) y% t, K: E' {1 P
* 【版    本】: V1.0% E* d1 W" H  Y& ?( S+ v
* 【声    明】: 此程序仅用于学习与参考,引用请注明版权和作者信息!# V5 X, B6 B( W0 q( `6 Q* [
* 【函数功能】: DA-AD试验                                                                                           6 H1 b: i2 W, _( V
* 【使用说明】: 单片机:STC89C52
& _' j, M5 E! a                 串口波特率:9600
0 F- o# G) F/ p, d& Z6 A( }! t                                 串口一共发送4个字节  7 d$ s$ x. D6 {; T. N, |+ n' R
                                 1 光敏电阻
7 o! q4 A& {: {+ z2 ?% I  I4 Z                                 2 热敏电阻/ p; Z( _$ S5 `0 z' n& G  e
                                 3 悬空, B: l4 O2 ^3 n5 o, p
                                 4 可调0-5V电压(蓝色电位器调节)" Y$ x" F/ j8 d2 x5 H% l! f5 |# V
                                 . R) ~3 N# Y  ~$ z0 n
**********************************************************************************/
8 E' z4 f) t3 y, |/********************************************************************************************/6 i& d$ ]# g4 l/ d

' P% f9 F0 c, i) F& ]. K

+ {' {1 G* }# F9 u* h; w#include<reg52.h>    //包含单片机寄存器的头文件
. U/ Q$ X/ {: F  e: h* n1 w#include <I2C.H>
0 Q) H1 c' ?, P; m7 Z% @# s
* m& ~: T9 C4 b7 w: R

/ a1 k! o  H; q/ x* _, v; C9 w#define uchar unsigned char
3 X/ {4 e4 x# i; [% B6 V5 c7 q#define  PCF8591 0x90    //PCF8591 地址: x/ g2 B3 S$ R% C/ j! F
3 `$ H, s  U! ^  x7 A# B: j0 r- h
7 I# W2 f8 f  T8 ^

  M. e  m5 b: l; W9 [

* n6 b$ \; T5 N: Q; Y/ t) `
3 H5 i" |" A. J* n3 R! G8 H
1 Z6 e& R! F) T; O) _
// 变量定义, x- b  V( ]9 f; ^# x# q, n
unsigned char AD_CHANNEL;
  e; e* l+ {7 G9 R: D: z$ T( ?unsigned long xdata  LedOut[8];0 j4 T/ h( c. M3 b
unsigned int  D[32];8 |6 Y! Q- o+ G$ }6 k
sbit P2_0 = P2^0;1 T" b1 n% @5 ?& r& N; G3 ^& z
sbit P2_1 = P2^1;  N! |' d3 N( R
sbit P2_2 = P2^2;
* l. D- Y$ S% ^* Usbit P2_3 = P2^3;
8 a& n0 Q2 G4 z3 I1 V* `
% u: K  h& \. m2 y8 |8 b9 r

) j* \. u9 q: I* s! i# r. E, ]unsigned char date;2 D) m4 o7 T1 {

7 A1 N& t' P5 ^2 u
$ ]$ X! n, A3 }1 E) U
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
( Y2 h  f2 \9 \5 H) K  o                        0xf8,0x80,0x90};
$ q, S2 P. {. i/ M$ {
( Z0 }$ X/ Z& o* C' S
( k5 O# w5 u$ B
! K) J. H+ p7 D5 c; l
3 D# g. a+ X6 \( ]( l6 g
  // 函数申明 * u- Z* E  r6 d# s
8 y, L) _2 E4 I% A
. S  i4 \+ f( J9 g5 U
void display();8 a+ g- P) {* J, l  Z% }
void delay(uchar i);+ z) L( V& \# }
bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val);3 j" q+ n! c5 r' c! A- P: t7 f
bit ISendByte(unsigned char sla,unsigned char c);$ m* {/ A/ K% P+ A5 X* e
unsigned char IRcvByte(unsigned char sla);
$ P% s% B1 v. ^1 vvoid Initial_com(void);
& F. v2 ~* b* P  k. Y% ~: Q: D//******************************************************************/6 w0 c7 W! z- p
main()
4 Z) B5 }# ^: ]' j' r/ J9 b{  8 O# M9 O* h0 o, ~; q  D
9 }# P  \; n% p

* C  n* H8 s9 H* N! A, [        Initial_com();
& S* i; |% p7 E* N' Q7 w: @        while(1)
4 u  b* }3 q+ G+ z6 U        {
* K) n2 L* L2 c' f
# ^1 m- ~: n. h3 I
! i' l9 z: `7 j# ~0 t% T5 d. c
        /********以下AD-DA处理*************/  5 c$ K) J3 J1 s
        + |% V, M6 W! T: _1 \  r" J) ^9 |
            switch(AD_CHANNEL)$ c3 f% j& b3 A) Y
                {& Y* J: G2 l0 e
                        case 0: ISendByte(PCF8591,0x41);" q7 D8 S5 k# @: R+ L) [3 p3 Z
                             D[0]=IRcvByte(PCF8591);  //ADC0 模数转换1      光敏电阻' N0 P4 `5 e1 T4 F) \
                                 break;  : W. K# n/ F" \: ^5 n5 X
                        2 i! A8 x4 _- E: E0 r
                        case 1: ISendByte(PCF8591,0x42);% h6 L8 M- t6 u  K$ R: P
                             D[1]=IRcvByte(PCF8591);  //ADC1  模数转换2          热敏电阻
7 k7 m5 K8 S% x" ]' E                                 break;  
4 i* X3 D. d: `% f* w# ]1 c/ a/ s# l                        
* w( Z( s) V, i1 x8 w) o( L* m                        case 2: ISendByte(PCF8591,0x43);+ \, \& ^6 s  k6 Q0 y9 h
                             D[2]=IRcvByte(PCF8591);  //ADC2        模数转换3           悬空3 b( W! S  X* q  \! ^
                                 break;  4 x: E& ?7 ~0 z+ r- }( J
                        + O! c( L  I# O( v" w
                        case 3: ISendByte(PCF8591,0x40);0 j3 ]! J+ N) e+ F
                             D[3]=IRcvByte(PCF8591);  //ADC3   模数转换4           可调0-5v
& m$ k8 {9 |1 k" P9 e* b2 s; j                                 break;  2 }" v9 u, h; ^. L9 w
                        0 X" s9 X- U' K8 @( z' B4 y( C" H" v
                        case 4: DACconversion(PCF8591,0x40, D[4]); //DAC          数模转换! o3 Z- N7 A  \2 D( ~! \5 h; R
                             break;7 R! a7 F" c- o* [( V* a
                   K1 Q3 ?# J7 u) P/ U9 ~
                }
# p% s: l+ Q" _9 ~3 |/ X- M: d7 z4 Z

+ _) Z, J7 N' ?8 t            D[4]=D[3];  //把模拟输入采样的信号 通过数模转换输出
& V7 b$ ]8 E4 w  ?& s  k                          w3 l$ c8 D0 h
           if(++AD_CHANNEL>4) AD_CHANNEL=0;
* B* T! P& h% n. N        4 P2 e0 E# ]; H/ j8 D2 ^* i) S) Z
           /********以下将AD的值通过串口发送出去*************/. ^" \6 i9 p9 n. H; O2 Z4 ]+ v
         delay(200);        : W, I& C& Z6 N. k4 ~1 S
         SBUF=D[0];                              
; j' r1 V/ L7 N6 B) ^         delay(200);                  
: O, i) `( e2 c1 T* y( E! B  k         SBUF=D[1];                           
6 N" W- C4 k" ]" H$ ~' y& M         delay(200);        
! `5 M& J* F' e1 e2 ~: i5 r; Z+ e         SBUF=D[2];' n) ~: D$ E9 Q5 N- s' K+ U( e9 h
         delay(200);3 Y8 B0 z2 q6 g' ]& Y! C( z
         SBUF=D[3];, R! c. B! i0 `2 O; j5 d0 ~
         delay(200);5 q2 t4 K9 ?( }. h9 o
         if(RI)
$ V+ ~5 F2 u7 T7 }8 w5 q, B        {* b  @% Y, K6 l# O
                date=SBUF;    //单片机接受! w/ [, n3 c- e
                SBUF=date;    //单片机发送
/ K) o7 t1 d0 [1 R( \% A0 T) B; ]                RI=0;
$ n9 {- G7 o; \% y# B  v2 n        }         
7 Q; u( f7 [" \: U   }
; H. `& a7 Y- H6 N0 ?8 U5 V}
- O. w! r( E& j% f' Y- ]6 A4 R# b7 ~/ U8 w! ]
$ q; q- K. u+ W2 o7 K( H5 ^/ Y; v& [1 Z

2 {& e! N3 O5 K

# b8 q) n1 l/ Cvoid delay(uchar i)8 Z4 L, e  x& u1 q, ~/ t$ Y
{5 C: r9 s* _# n( ?
  uchar j,k; 6 L" j/ M# @2 A" r6 ?
  for(j=i;j>0;j--)
2 d. B: i. g1 p2 c    for(k=125;k>0;k--);5 q) v6 }0 }+ U$ n" |
}$ @5 |1 `3 K" `

: q- V$ ]7 D0 @& _1 `$ i

. i0 x+ @' o" }8 J* o' k/*******************************************************************
4 }1 l1 i1 c' IDAC 变换, 转化函数               
$ z2 Z+ E5 R2 t*******************************************************************/" ^1 j! J9 F& G: r( k% t5 R; K
bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)
( s2 D% {/ b' k; |! ]{7 e! D* l+ z0 ]$ j: n
   Start_I2c();              //启动总线
8 n# V! ~+ P! r& A   SendByte(sla);            //发送器件地址
" S) w" I( C! t9 d. Y8 l   if(ack==0)return(0);
" O* y/ f# m* P+ L; Q   SendByte(c);              //发送控制字节7 l  }9 @8 v+ m, A* J5 D! Q, X
   if(ack==0)return(0);% l6 h  X1 X- K( Q, R: H
   SendByte(Val);            //发送DAC的数值  ! x% h1 j# \) I( f+ [- _
   if(ack==0)return(0);
/ i# v, \" K+ `: h* ~/ n3 \1 D* x   Stop_I2c();               //结束总线! M2 Q$ q1 e9 y
   return(1);
' A3 `9 E! V9 X; `9 w( C# E}
8 `5 z' V0 N+ ?* c- v% G; Y3 d, Q9 [

3 A; L- `% ]) G' Y: K" `/ a/*******************************************************************
2 C+ n1 ?9 q* {7 iADC发送字节[命令]数据函数               
( ?( f  [' k% N: f% X5 w/ A*******************************************************************/- A8 b# ?) m+ [  e
bit ISendByte(unsigned char sla,unsigned char c)
. a8 w; I( ^# o0 Q+ S; B' g, S. _{
0 f2 ]' f" x' Y) H, Y& J" X) T: x   Start_I2c();              //启动总线
" W' E5 E2 i7 Q" C   SendByte(sla);            //发送器件地址# [5 M# V+ e$ r8 H
   if(ack==0)return(0);* z7 w0 x6 i) [- I% Y
   SendByte(c);              //发送数据
0 X$ x' A% x/ `9 A2 C- N3 e7 i   if(ack==0)return(0);
1 y7 P0 S# E  N4 R% R- l   Stop_I2c();               //结束总线5 d1 x5 t5 o9 W' m
   return(1);) a2 ^* ?+ k1 ]3 T: u, u8 D
}
, e' N9 \$ U0 w! h* y
' F9 z9 I4 A# d8 I$ V: ~( n
; y6 h5 l2 d) k3 X: A6 N* s
/*******************************************************************
& I( g: `, \, O" V$ c3 cADC读字节数据函数               * D1 U7 @. T" M* O
*******************************************************************/$ \  |! }4 F1 D. R
unsigned char IRcvByte(unsigned char sla)) [- Z# Y1 A7 m, |
{  unsigned char c;; X# z+ o6 o, L- t# X3 M
" B( E8 z: G. h

4 ?- C. V& r* y; J, x   Start_I2c();          //启动总线1 J0 Q1 q) _' w  J% m0 _
   SendByte(sla+1);      //发送器件地址
( A3 R' Z1 Q1 H7 g' S- T% F   if(ack==0)return(0);' ?5 H, X: m1 X- ^% F
   c=RcvByte();          //读取数据0: ~) @+ o6 N- D3 r: M0 a" p

: H: [6 Z2 g5 e+ z! D
% [7 o  }5 o% ]1 k8 O; t! V
   Ack_I2c(1);           //发送非就答位/ b. o' U# [  h! s$ @: M) [
   Stop_I2c();           //结束总线- C) _% U8 x# y+ v$ j- E% j. e
   return(c);2 O7 g0 l' E" X& G, A" g9 _
}* m( `- a9 \! {5 v
. H- I0 n( G7 B7 }* x9 ]: E

2 t1 N, t4 q( j% i3 D: D7 G" R/ U. n7 D3 g. g' f* r. Y& n

% ~# Y1 n6 l- |' p4 u0 o. f3 Q//*****串口初始化函数***********! w5 K4 q8 |5 C7 G) o' k& _- ]
0 `: n* X# J" y9 i) E' v) G0 G

& h. M$ c) L% c! V( q& B8 n8 z9 A% [//******************************1 I: ~* o% p1 f% \8 g4 Y

9 H5 U+ D1 v6 y. G( f

  i/ R4 t* U6 @6 f9 r
& h1 w; ^( V, p' e2 ]
5 _  ^+ @2 x: d0 l9 `6 ]* H' D8 A5 U
6 c+ C- w8 A1 f& R

) w: w! c2 f5 r! o5 P8 w' V3 Z6 {…………余下代码请下载附件…………. k+ I4 n! C% Y: ]

+ Y( O9 h: }1 f
  j& U: l3 m$ Z: F下载:
* Q9 ?. P2 E' @8 v
游客,如果您要查看本帖隐藏内容请回复
  P2 f+ B6 O- Y9 u  `, P
* ~; f2 o5 ]- c( ]+ R; R* s

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 12:00 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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