|
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$ M2 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 ^ |
|