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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
PCF8591四路采集串口显示程序及原理图 附MQ2烟雾报警器资料
; N+ k. r. c$ d# ^' r/ l# X- L
5 I, a+ M6 k% T# Y9 b
* I8 |1 L" {9 ~% u& Y' v# |/ s1 {+ D
MQ2烟雾报警器,附带PCF8591模拟信号AD转化.9 z6 }) H4 G2 x/ V5 F9 `

1 \% _7 n- e! V4 t! s3 L2 uPCF8591原理图:
# p. i* Q7 R! M2 U" C/ c/ V
& x$ m, m2 X1 q% ]$ O, [' _
* }3 X3 l' y, b* S8 e/ w0 c单片机源程序:

+ K2 B5 N6 @& ^# ?% ?, Z0 a
, ]  ~' ]9 ~7 W$ e: ~) {+ J2 u
# d- U3 b6 Z6 G1 b' {/ J
/*********************************************************************************
# t9 [! P/ p4 U* 【编写时间】: 07.07
' ~/ s6 r+ Q% h, M! F* 【作    者】: 雁翎电子' `- ~2 Z" N* |; h
* 【版    本】: V1.0
! @0 o9 C  e2 T7 N" L. P* 【声    明】: 此程序仅用于学习与参考,引用请注明版权和作者信息!
& t8 H0 o& A$ e; k: M! F* 【函数功能】: DA-AD试验                                                                                           ! q* u2 y/ T' k" ~% q7 w
* 【使用说明】: 单片机:STC89C52
! `8 Q( D" B& |                 串口波特率:9600
  ^7 R' G7 H3 E: b7 b4 Q                                 串口一共发送4个字节  - U# Y  ~) ~% W, o. K
                                 1 光敏电阻
6 t$ c9 l/ p' x; X! u                                 2 热敏电阻
) l! B# ?4 ~5 H  ~                                 3 悬空6 F) T2 k3 o! F/ G7 C3 x, c
                                 4 可调0-5V电压(蓝色电位器调节). u' G. O& {$ p. f  ^, p* B
                                 
5 v7 [6 h3 b- E) R**********************************************************************************/
$ i( M' x. P+ p& b, o/********************************************************************************************/4 n* x! x2 V+ z7 |
, {& k9 M) _) p" L  b4 V. S
4 N. f* Q6 ?: ?; j1 T5 r
#include<reg52.h>    //包含单片机寄存器的头文件2 N) e2 U6 I5 y+ ~4 a! Z8 j  w
#include <I2C.H>
: k4 L9 A! X/ [9 A: @+ M- l% g/ n/ M7 g# a, j6 H4 i

, Q  ~( Y5 a, m. {8 {+ Y$ U( l7 d#define uchar unsigned char' e0 v+ u# l3 c7 G' F. r0 _
#define  PCF8591 0x90    //PCF8591 地址
' e$ J7 w2 D3 ~: T4 O9 F1 M) O4 s3 d
8 C5 x1 ~. A& c5 p" v5 [% Q! K# m

2 Q7 E! h9 d" t7 l

4 x2 _: m  D$ E# J+ ^% o4 x. J+ s9 b6 w" U' w/ A0 B

2 ]% i3 _; t$ e: j0 ?& S& [// 变量定义
7 R; o$ ~' ]& d4 _9 U! bunsigned char AD_CHANNEL;4 T3 L8 |8 P9 o9 ]; b1 P
unsigned long xdata  LedOut[8];
( }( N6 N6 c( s: munsigned int  D[32];
: K  v5 y) W9 [+ [6 C. H5 asbit P2_0 = P2^0;, n8 A- T5 q9 A4 u) o+ R1 ]+ e
sbit P2_1 = P2^1;" |, P% ~! K  v
sbit P2_2 = P2^2;
  P$ z7 x- `* esbit P2_3 = P2^3;( m8 r' C6 O# `* T6 k
1 [, G5 W$ b! Q& {2 r7 W' _

1 W" {, C/ N( y$ b# Q: a# z. T- Iunsigned char date;9 W$ G; H. k! u5 E* R4 k

6 h' K" u; a0 i5 p
( Z7 Z/ w1 ?7 T1 I2 j( ]
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,+ i5 _/ w' d7 ?5 k* o$ G$ S
                        0xf8,0x80,0x90};
9 M* p1 h8 {/ s5 L" Q0 ?5 X
/ t: ~* h+ E/ [4 W: Z9 z, [

% E$ `8 G1 {" ]  D# @  K: U' Z9 y
; }6 A# V( f6 A% J+ S

/ O9 x* ^0 o7 N& y8 ^  // 函数申明
9 `6 g$ p1 K# W' \* V5 u" b3 e( v- \! E& ]" S1 n- N  P

; K* Q; h  f, J4 b, `void display();
- F8 S0 a, _; Ovoid delay(uchar i);
0 K# }3 E' B8 G% a$ u" ]* ebit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val);
! K: x) k! q) v% ]' H8 A4 ?% Qbit ISendByte(unsigned char sla,unsigned char c);6 G! g/ Z8 X0 F* y  }8 Y
unsigned char IRcvByte(unsigned char sla);
; c' `! k- s$ N! Fvoid Initial_com(void);1 H2 x% ]5 g' ?$ |9 ~% c
//******************************************************************/
3 E  \4 c8 V8 D2 J' |main()
7 w" v# W& |* K" h2 I6 T5 {2 Q{  $ d  s: x$ ^& m: X. f4 T; J

/ u3 c, L+ v6 B' F2 b
- i) L1 b7 j$ x
        Initial_com();8 ?6 q; r& i: w: u' j# i2 ~2 W
        while(1), o7 S: f5 B5 `. \2 {! G/ P
        {; Z. T; c& c. d6 d6 F" N
9 C+ I3 D0 W5 j: {# F
2 ]2 z; @1 W$ H  }/ X6 `
        /********以下AD-DA处理*************/  
+ }2 x4 n0 X0 `0 a- Z! p1 E        
- h' H+ J5 d- {2 j& @            switch(AD_CHANNEL)' X! `0 Q* X7 s
                {5 x( E1 j* D, _& L
                        case 0: ISendByte(PCF8591,0x41);
  w: k2 @8 R. N2 |                             D[0]=IRcvByte(PCF8591);  //ADC0 模数转换1      光敏电阻
, W" H% W' Q- t/ C                                 break;  7 k' Y8 K0 q5 a$ ], Q$ d7 h0 x
                        # t' N! w$ _9 c7 E) F- J0 M
                        case 1: ISendByte(PCF8591,0x42);
/ R6 P2 a  w9 t- g                             D[1]=IRcvByte(PCF8591);  //ADC1  模数转换2          热敏电阻4 D6 P# I1 `1 S' [. \3 k  t
                                 break;  ; w3 {7 r; ]7 F$ y. z( E% D
                        
4 E, t8 _) O8 v9 r2 }/ b                        case 2: ISendByte(PCF8591,0x43);
2 Q4 q) {* ~. I: `( d8 g/ V7 l                             D[2]=IRcvByte(PCF8591);  //ADC2        模数转换3           悬空' U7 U5 X  C' `) z- [
                                 break;  
' }( V4 ~5 O0 C4 k1 r6 {! X                        ) o( H+ ]1 `) R9 c
                        case 3: ISendByte(PCF8591,0x40);6 b% b  O- p. [
                             D[3]=IRcvByte(PCF8591);  //ADC3   模数转换4           可调0-5v
8 t& J# y: L7 G' ?* n2 U' l                                 break;  / L* g& W0 C- ?6 \& |' L# X) P
                        : K* e8 L, M+ P# s) B/ A
                        case 4: DACconversion(PCF8591,0x40, D[4]); //DAC          数模转换
& q+ H9 \5 J0 e: y5 @. @                             break;+ z: |( o9 S' ^7 I+ X" d
                 ) ~; q, [4 d# ]. ^- A' V
                }
6 v2 v. e0 U( E, c' O7 V3 J! l$ S( j
7 ?' D5 ^% X: T! m8 b4 P; Y6 m* n

/ w7 I; o% d1 G4 Q! f% R. M- ~            D[4]=D[3];  //把模拟输入采样的信号 通过数模转换输出
8 r3 V3 ~5 H8 P( P0 O* o                        
$ q& L9 O! H5 g/ |& K+ q1 @           if(++AD_CHANNEL>4) AD_CHANNEL=0;0 }5 D  w. I. x1 k6 b7 O8 Z7 W
        * p8 c! `: \6 G# N+ N* Y' h
           /********以下将AD的值通过串口发送出去*************/
1 B, N) p% R  r( x; o2 r         delay(200);        
* _- e% p7 G4 ?0 ]* v( ~7 m         SBUF=D[0];                              / B! i& S3 A' m  x; n1 Q
         delay(200);                  
. y; {1 `. t  d2 J$ t         SBUF=D[1];                           
1 e2 M7 d: t( Q/ {         delay(200);        & U; u) }% p* g: X8 H- Y5 ?8 O1 Z1 U
         SBUF=D[2];1 i8 j0 X( ^! j
         delay(200);
& x+ X- }  f5 S& c) `, l- E         SBUF=D[3];
" V0 [" L7 M; T4 V0 z         delay(200);
# o4 I% q; _6 G* k+ ^         if(RI); p! T. ?3 g( T. A& _/ P! T7 b/ O
        {; z, ^3 B1 X9 V- a) l4 ~
                date=SBUF;    //单片机接受3 w- o( K3 f# v
                SBUF=date;    //单片机发送
) j* W* ?, q1 t/ p                RI=0;$ r. s) l. [9 u9 J3 ~4 i
        }         
* ]1 ~: A) f- y   }
) Y' M, x* x, ~  K4 F# }( ?}
1 V  H! f# V6 d! ^: Q1 k8 E0 e# P& C7 H
: i7 v2 W2 ~" s$ M
2 y7 Z! b2 X+ d8 D- k7 h2 F! d; [

" I# Z  r7 j6 H8 ^* ^5 V8 u! w3 c
* s; W2 n- ~9 U0 v+ v
void delay(uchar i)
! s+ @) n* l3 C$ t" U/ |{; G8 t# i) j, ~3 u# X& Z
  uchar j,k; 5 X( q0 L+ z3 `- U
  for(j=i;j>0;j--)* [, a; {! D1 N* y' N: u& F
    for(k=125;k>0;k--);9 f6 g9 ^0 [$ P7 K
}% C+ C: O) o. `$ ]# n! m& W

; M3 A9 b+ G3 r- g8 ^) f  L/ U

$ X7 {7 I9 M4 B/*******************************************************************8 F# [- V1 v9 S1 g4 i  C" T. V* A% n
DAC 变换, 转化函数               
0 z6 e- Q" i5 `  F- P2 I*******************************************************************/
( f( ]- a0 ]# o$ hbit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)
4 u9 D/ h( c  k; P3 z{# x* i2 G; N8 @2 e
   Start_I2c();              //启动总线
3 g: z. [4 Q4 ~4 C( B$ g& \   SendByte(sla);            //发送器件地址
5 x8 _  n: N5 h7 f+ M   if(ack==0)return(0);
  @% G: \% P5 }" O8 C) y   SendByte(c);              //发送控制字节
# @+ V2 M% H5 H$ f3 h   if(ack==0)return(0);
$ u9 l5 Z) M+ l3 o5 l   SendByte(Val);            //发送DAC的数值  9 ]# v4 Z5 B4 e  C( y: ^* w7 k
   if(ack==0)return(0);: N( Z3 e6 [8 z% h' j+ W1 w
   Stop_I2c();               //结束总线
8 d( s7 _3 Q5 ?. t7 c) {   return(1);& |5 t% L4 T- J% f7 I# f
}1 H6 J/ R, m3 k2 ^

( I  ^. K2 \% [
0 Z; l5 {! n  w  r3 C
/*******************************************************************
6 D! E: s8 w3 O5 t( x& Y: a' GADC发送字节[命令]数据函数               6 J# W3 s$ Y0 ]$ |
*******************************************************************/
8 r% |) l' w3 B- k1 ?8 q( ?# `bit ISendByte(unsigned char sla,unsigned char c)
+ ~% \" G1 s& V1 d: y) U7 W4 h{
  ]+ o) o& J7 l1 ~; F7 x   Start_I2c();              //启动总线
, Y: ?. }: B4 w   SendByte(sla);            //发送器件地址% E; g- k3 F$ Y% `
   if(ack==0)return(0);' w$ r, ]5 a: D3 t) @
   SendByte(c);              //发送数据. ~9 D$ g# w6 G. S
   if(ack==0)return(0);! O, {4 b& d& u: P
   Stop_I2c();               //结束总线
! p9 |, a: o& {1 v% ~" w   return(1);
' _  J) Y+ ]6 A}: o! G5 r  q" [- W1 Q8 ?

7 _% Z: o8 j8 U0 }; n% a# b! s

6 e/ Z5 ^4 X. t2 _$ T/*******************************************************************" r5 i4 D/ t2 v
ADC读字节数据函数               + ^8 e$ ^8 J  |- E
*******************************************************************/$ |0 C0 }  M. ^1 y: c: _+ ~( E4 M
unsigned char IRcvByte(unsigned char sla)
& i: {. {+ C4 e( F3 h9 s& D0 Z{  unsigned char c;
$ a/ a' I  d1 q& a" l% u1 e& M/ i) F5 z- V' }9 I
. Z. u! v6 F1 ]( @1 I
   Start_I2c();          //启动总线
* {. b) f! p  A8 S) I   SendByte(sla+1);      //发送器件地址
3 Z1 ^" X( q) S$ ~* i( Y  |   if(ack==0)return(0);& ?. ~4 u4 Z4 u( T
   c=RcvByte();          //读取数据0
" F- v5 e3 i, b4 B3 F" v/ n% H2 Z7 o0 c: ~1 D3 x& R* U$ n  v

% C5 J- z4 h5 w) ?# h   Ack_I2c(1);           //发送非就答位
" f( u; W% {: `/ r) _: ?   Stop_I2c();           //结束总线
/ d; |! V) D: U! J7 D   return(c);
9 ?* h- v; @# n}. ^, C+ |4 t( ]4 K/ ?7 C
' ~. y. C( w- a: s: B+ K+ V! ~
( E6 ^9 {/ \# b/ U" T8 N& J) {
- r" Q* @$ H* |5 y4 C: `
* m( U$ c  k7 h( ]6 G- [0 e
//*****串口初始化函数***********
- H7 E% q* s0 t- E+ R. w6 x# p6 Q
; q) [2 u# W7 v8 \9 h$ v

# W( I& k2 p4 C4 r) G0 [* s. n//******************************0 z1 s9 P  H( H; L4 k- l8 p

" r2 O; y1 c6 ^& O$ t
# |: o' O7 i4 e' {8 c

! F/ ?9 T0 }$ ~2 P- C4 d1 C

) J+ w* i) [: z; Y+ X' f( c, A5 d. H

2 C, B' p/ S* [0 n& P…………余下代码请下载附件…………6 Z4 ^8 |, Q% y$ Q

, f- b/ i% N* f7 H( W
4 P$ r: W/ P# p; L% n, `5 q) d) q下载:5 I- a; _! J( y5 r; |8 j
游客,如果您要查看本帖隐藏内容请回复

. V. D1 t8 l9 Z( T2 T& @

# q! n* Z% A9 U0 ^

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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