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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
PCF8591四路采集串口显示程序及原理图 附MQ2烟雾报警器资料
0 z: }& M/ q& e
  {6 s4 }3 V- G) O

% C, v2 R2 z; ZMQ2烟雾报警器,附带PCF8591模拟信号AD转化.
, X2 U5 e3 U5 |7 Q+ D3 f2 U9 w3 e2 Q# t$ r+ P* M3 R) P
PCF8591原理图:
. r/ U* Y  x. L+ I
4 C' L2 K4 C2 k% G: S! z! L% D- m1 H5 ^: K0 ^; L5 B1 }
单片机源程序:

8 x" S6 v: u9 k+ x6 n+ y6 ?' \! N, g2 a# f! _7 ]' `3 e

4 H4 u5 l0 T0 P/*********************************************************************************& x' Y" v" I* g7 b3 v
* 【编写时间】: 07.07
% Q( n& G  J1 o5 O* 【作    者】: 雁翎电子1 B3 O$ k: m1 ^5 x$ E# E3 p/ {+ ^
* 【版    本】: V1.02 e. V4 t: P, {3 H8 g2 ?: r
* 【声    明】: 此程序仅用于学习与参考,引用请注明版权和作者信息!4 f4 F3 \7 J& a4 l1 j; ^
* 【函数功能】: DA-AD试验                                                                                           , G* u3 l& R& F6 {3 t/ B2 M
* 【使用说明】: 单片机:STC89C52 ; n& F2 d+ P; d' y* z
                 串口波特率:9600
2 m& R1 k+ k* [+ O/ r                                 串口一共发送4个字节  
$ K, x( B5 U; F( o( r- u1 E+ O                                 1 光敏电阻2 Q3 _2 O# q" Q. g
                                 2 热敏电阻
! p. \' x; X& _% |- X5 h6 m                                 3 悬空
+ [) z9 ~5 o1 s+ l7 d& j! T5 C                                 4 可调0-5V电压(蓝色电位器调节)4 j+ {+ }8 A/ w( d- b
                                 - y6 p0 z8 Z9 D/ u& C3 O6 P& l% U
**********************************************************************************/
8 }- r7 c' p* r2 H8 A* {/********************************************************************************************/5 `" w9 l2 {. h1 O& ?- c
9 X' i' |0 a- N- O5 F, D
; d! b5 n5 M  F  Z
#include<reg52.h>    //包含单片机寄存器的头文件
1 g5 _" G+ Q* X#include <I2C.H>
1 n& x; y8 L' M+ W
7 B! A7 E9 X3 M9 m, U

( w% l' |; U, j. }2 L#define uchar unsigned char
& ^7 y$ o7 B5 h, k3 [#define  PCF8591 0x90    //PCF8591 地址
- i( O1 d* f! r: h- ~) h7 ]  Z7 x/ ?) o6 N  `/ Q- C
% M; \/ i: R# B9 H

5 W0 f0 @+ k9 f& e3 w

, n) K8 Y0 E9 I1 O0 l4 ?  f
% @- a$ m! i+ R  M9 u% ~

8 w& T8 _% p0 ?5 a// 变量定义
1 y+ m( j1 n/ a" L9 L1 tunsigned char AD_CHANNEL;, f6 T# l) t" l/ y
unsigned long xdata  LedOut[8];
. z: b1 {! F, n0 z' xunsigned int  D[32];, g' E$ Y: \; Y& A
sbit P2_0 = P2^0;: ?( K2 ]! k0 T
sbit P2_1 = P2^1;. M$ W4 M/ \0 J. c
sbit P2_2 = P2^2;* s/ u$ E9 h  O5 f
sbit P2_3 = P2^3;* G" b, |5 v1 N* }$ U3 T( |! \, x  l
: q- e' W! ^4 U$ f$ j% f' ]$ E
2 r) M/ n9 Z0 N/ c6 c
unsigned char date;/ Q' O( u  `' V' m+ `7 f
! _0 g+ H( X4 R% N2 q8 j
/ j* S6 {* @) U  ]+ P/ j& j( D
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
$ f0 h: z5 P/ G' |, j                        0xf8,0x80,0x90};
! r9 \% A6 V4 F' _+ u
! V- I/ S3 }6 a& V" O' O- a
8 Q) s' y3 s& b' }: c, ?: h% w2 A
+ Y6 a* y9 i( c

" \5 B5 K/ w% {( A2 A; M  // 函数申明 8 F, m0 p6 A8 X0 @% V2 S- u# w9 q

! Q. H  `0 \- C# X1 d2 L8 w- f0 v: ^
, D* J# u- N8 O6 j
void display();
) W0 l! ~# X% U4 Dvoid delay(uchar i);
- U7 Z8 t$ v" a- `# C. v* U! Obit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val);5 f! J& n7 C% V# j, n3 [
bit ISendByte(unsigned char sla,unsigned char c);* r, L6 ?; n0 m* N) @
unsigned char IRcvByte(unsigned char sla);
+ _# d) a4 U/ j1 y) p, @void Initial_com(void);8 t: x/ W* F4 }4 T6 Z: n1 A' ?
//******************************************************************/
. p, X3 B  t( y  a  _main()8 i- E$ Z* m/ q$ S' e
{  
9 O8 F+ d8 U5 y4 j2 D' y6 o; n% l, _7 s

9 q1 Q8 A+ [' I% P        Initial_com();
6 E* h! ]0 W+ M) j5 G8 A        while(1)
; V& W; {! D3 x1 Z        {3 A" g3 [8 X8 r) f

, ?0 Q0 z5 i: \$ S3 S

2 }: C6 Z4 g/ H% J' a: c0 L- D        /********以下AD-DA处理*************/  
& h2 @* y7 v7 v1 T: ]$ R          N: {5 h% h  s6 v
            switch(AD_CHANNEL)
/ ~; t3 f, j+ _  v1 g" |                {9 r! r  p7 A, X& A/ n, A# e
                        case 0: ISendByte(PCF8591,0x41);
0 Q/ n' u6 F) R: k/ u' s- X                             D[0]=IRcvByte(PCF8591);  //ADC0 模数转换1      光敏电阻
2 G# f* p' C8 \5 K                                 break;  
" h. C" t' w8 h5 ?6 B                        / }$ Q  P( E1 \0 G) u) E2 E
                        case 1: ISendByte(PCF8591,0x42);
+ q% C2 K* ?! O1 l; i, |                             D[1]=IRcvByte(PCF8591);  //ADC1  模数转换2          热敏电阻8 s2 D. h7 H. N. r
                                 break;  2 f- p# E3 [3 c- ^" O- y
                          V+ T) W( g7 m/ i$ n& n
                        case 2: ISendByte(PCF8591,0x43);9 V5 `- ]& ^4 R9 m' r
                             D[2]=IRcvByte(PCF8591);  //ADC2        模数转换3           悬空. W! s; V$ v9 j* ^
                                 break;  
$ s. K; b3 a- @+ O                        6 w- `. [# K1 w6 y1 K' s
                        case 3: ISendByte(PCF8591,0x40);$ f6 F! E* X; d3 x, i+ V# }
                             D[3]=IRcvByte(PCF8591);  //ADC3   模数转换4           可调0-5v
' r+ T4 ^. Z* E/ b4 i( i                                 break;  5 F; \, N! N3 w4 Q' M
                        
. `8 h  a1 W# D1 p4 i7 z' z                        case 4: DACconversion(PCF8591,0x40, D[4]); //DAC          数模转换3 P3 C% S) c: l6 m
                             break;% W3 m% n3 x! w/ p7 j0 D
                 . [3 B  S& L' t3 i1 [
                }+ }& [' _* `* f1 R! r/ q) Z+ L. i
( N1 N0 M: S9 I& k2 p: H" K* K

+ A; `- w3 R3 K& _3 R# Z            D[4]=D[3];  //把模拟输入采样的信号 通过数模转换输出/ R5 ]4 u: r& _$ D
                        
- \8 d! g, ^, w+ [4 P  L           if(++AD_CHANNEL>4) AD_CHANNEL=0;7 X$ L* A1 u/ c1 x& R8 s
        
' I9 w4 @" {) Y. S7 R6 v           /********以下将AD的值通过串口发送出去*************/
$ [" y' l& _( b' X) R: d% B4 |; i* V         delay(200);        
. e6 ]- ^  X9 `- _         SBUF=D[0];                              
( R: ^4 M0 ?) `         delay(200);                  
/ c0 B3 L+ W( a: f# ~         SBUF=D[1];                           ! {  p* C) i4 r# k
         delay(200);        ( B1 O2 w$ D! X  |5 o5 t& g: u
         SBUF=D[2];
/ ?# R' `/ x, G. J3 G/ c6 ^         delay(200);
: r: V% z9 K- n) t         SBUF=D[3];
+ K; z$ e* G9 R. c, g         delay(200);
. \- [3 U6 W( s8 W! f& \  w         if(RI)3 R. `% p5 S4 t6 [0 b4 Q
        {
  f. q1 T$ o3 t9 f                date=SBUF;    //单片机接受0 Z0 ~! A- Z8 j, g% U5 j' ~. U. z! E
                SBUF=date;    //单片机发送
1 W" q2 k' I! H, b4 _                RI=0;0 v: ~4 {0 G; Z& h6 i) a
        }         " @( Y1 o: o) P0 W' _8 f' g
   }
6 a, d! T1 A  B! x. A}, {/ k3 G5 S, w$ M# n

% W5 w! j4 Q% f$ z+ s. }9 D
% V! w* i- W) V6 |" Z& i' m7 K6 D( q
- B3 |3 \' \. ?2 x4 R
) u& e' {2 D) F% n. l5 q- Q2 K/ G+ w
void delay(uchar i)) K5 q, F. ?9 w
{
  W" ]$ O" N7 q5 K% y" _  uchar j,k; % p, d3 q9 Z5 I0 q0 }3 R$ \
  for(j=i;j>0;j--)$ B: [0 q5 `5 K; G4 ^7 O
    for(k=125;k>0;k--);7 t: z) I0 d8 _3 J4 y
}
! h  k2 Q/ r+ R$ r
( Q. p* b" ~7 A
, M4 U# l/ M& G6 u" o
/*******************************************************************
, K1 g1 H  ^2 P3 T: ]DAC 变换, 转化函数               7 r+ J7 ~& @+ I  e
*******************************************************************/
* b, g$ q! @% @; Ebit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)- U9 t$ d, I/ [) G: U' V
{8 }9 l4 s7 V: l. N/ W
   Start_I2c();              //启动总线
$ z( {3 a% E. ^& ~5 o   SendByte(sla);            //发送器件地址' n( ?$ Z9 y' q7 s, y7 I4 K
   if(ack==0)return(0);
  L. I" g/ f5 o7 B# I4 _   SendByte(c);              //发送控制字节- D2 J0 }/ M0 ]3 K$ P3 A
   if(ack==0)return(0);
+ d2 k' H3 @, s- ?/ U   SendByte(Val);            //发送DAC的数值  4 Y: ^, o7 r# `! U# b) v4 _
   if(ack==0)return(0);/ b; x, Z& H9 r( m
   Stop_I2c();               //结束总线/ E# k1 q1 K4 h- x) E  A* b
   return(1);& v. A/ @8 h7 a. ]( d$ I: s
}
+ X6 X4 t% T) z+ V2 h% K. Q5 S" ]- X7 L% J" [

9 F" B4 M/ s# x/*******************************************************************
( x3 C" D) Q) F5 n  ZADC发送字节[命令]数据函数               " A8 y0 S! X1 f! H5 _3 X
*******************************************************************/
! V; c' i0 h' C$ L3 |9 Tbit ISendByte(unsigned char sla,unsigned char c)
3 U. k; m2 o4 q{
+ w) Y7 V6 n7 a! B   Start_I2c();              //启动总线+ J' P& z6 s- J7 N8 G  `
   SendByte(sla);            //发送器件地址
" v5 u8 m+ ^, t7 g   if(ack==0)return(0);
+ p7 I9 F/ ]2 Q$ Y2 Q   SendByte(c);              //发送数据
, b' G+ F% a- B4 m" I8 e3 g% |+ Q' n! E   if(ack==0)return(0);3 ?2 D* e& C% Q; N" P% F
   Stop_I2c();               //结束总线- |0 c5 i; }  J: X7 Y
   return(1);
- |9 M$ K  a# j# u( P+ n}
7 ?! p# X9 c# G! s1 d. h$ `& g) Q7 O
  R+ ]8 F2 f  H: k0 l6 F
/*******************************************************************
$ u  J4 j7 x2 i% N) ZADC读字节数据函数               ) @2 f' L/ X$ X, l
*******************************************************************/; Q8 m1 E& K; D
unsigned char IRcvByte(unsigned char sla)
  ~8 `; m2 B& @# u$ i* B% f8 e$ p& c{  unsigned char c;" u" K7 r3 d0 N- \7 ^! E- w% t2 l/ y

. M; G% Y! ]" r9 O: c: _' B

; u' |! p/ M7 ~% S   Start_I2c();          //启动总线7 `( _, A8 s1 c1 m2 j0 k2 e
   SendByte(sla+1);      //发送器件地址
+ K( F5 G& o! u' f$ X0 E   if(ack==0)return(0);
& R) J: u: b5 g. Z) Y   c=RcvByte();          //读取数据05 k6 n& I7 |# R' |! m4 T& F# A
' f! \( g/ W0 |+ d# M9 t- y4 ^
$ h- a- i" ~( S% ^' A
   Ack_I2c(1);           //发送非就答位
) e' a# ^, F) R6 s0 p1 E0 l2 i! b2 q   Stop_I2c();           //结束总线
9 i$ D) z9 O% B1 t6 M5 \  O   return(c);
) s0 K: E( x9 ]- j8 J}9 n1 s, ^$ `4 C+ x* T1 C% u# L
' d, X7 V' g4 B
9 P4 r$ u* y' ~
/ S2 {  m; X+ J& p( S

, ?' z4 y" V6 \3 W. v+ S7 o2 M//*****串口初始化函数***********! V7 h' F5 U3 P- P+ O- _  L
, K& H9 C8 \" Y2 }' Q/ w

$ U  Z5 x8 A; D! k1 M% F6 `! S" t7 W//******************************0 M& A- e) [0 G+ r% A; S+ L: |
  ~& Q1 [3 P8 D1 K' W

* C% r8 L' Q0 b% y/ Z' a' v! R7 f! R+ i: z& c

1 `- }# _) w( d/ X, M1 L
7 Z/ F. M+ L# ?. J: a

; j1 u& \3 b, b6 @…………余下代码请下载附件…………, V# I/ ?. F4 F+ P9 Q6 H

: x. M1 O5 V% w2 x* i9 b  J' l* B
下载:
+ p3 ^! n: o/ F( b! G4 \# x
游客,如果您要查看本帖隐藏内容请回复
3 H" b+ E+ j' E2 i8 K$ z$ w6 a
. V2 z) |: N6 {( Y

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-18 03:37 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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