|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MQ-2烟雾传感器工作原理 手册 单片机源代码等下载7 i- f% P( {" p3 j0 ^$ {
2 m: v: _0 {$ i: x. P6 w. u
9 v u; B+ [4 [0 S! E单片机源代码:
7 N1 x6 j' e, l, J#include <reg52.h> //头文件5 X' l$ ^8 g; ?$ e/ U) n
#define uchar unsigned char //宏定义无符号字符型+ a& k5 u% L! f
#define uint unsigned int //宏定义无符号整型4 ]5 q1 x8 ~. _. \3 ^3 U* u" _8 B
code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟
' x2 c5 M) K+ i: Nuchar wei[4]={0XEf,0XDf,0XBf,0X7f}; //位的控制端 //位控制码
0 F1 L, V- ~& Csbit ST=P3^0; //A/D启动转换信号
+ ~( u4 x2 n B" {3 f! tsbit OE=P3^1; //数据输出允许信号$ ?5 I7 C6 D, C+ ?$ s
sbit EOC=P3^2; //A/D转换结束信号
9 [" S2 v; b4 Q% s7 a+ T2 Isbit CLK=P3^3; //时钟脉冲 # v8 L0 }# {* Q5 {2 j
uint z,x,c,v,AD0809, date; //定义数据类型
9 G- w3 \% T h; ?$ @/******************************************************************
. R7 C5 }$ ?# `; |: Z" d8 g延时函数
- ?( d! @2 b9 d; t0 N******************************************************************/
; N$ H2 O3 c& [4 dvoid delay(uchar t)( `2 ]9 c( T( p
{
( @- B4 I$ V5 | uchar i,j;
8 l3 l4 u1 h$ [, ]" s; l for(i=0;i<t;i++)) l* Q5 U* i) s7 {
{
, d. {9 `" ?! j5 N for(j=13;j>0;j--);5 I' b( B- G0 I4 w9 X! a3 j
{ ;
5 {% v5 o8 h+ C Z" L v+ J: u; ?' N }# v: v* s( c4 P. D+ }
}/ j. J0 v7 h* ^, K9 U& o8 C# G+ p
}4 ]1 p+ r' I% J2 w7 j) h4 u
/**********************************************************************
5 [. E- k) { F% c7 \) C$ e# Q) U 数码管动态扫描
- P: ~- j9 y3 G! u*********************************************************************/( y8 B6 j0 p. W, ~1 S+ u( h
void xianshi() //显示函数7 E. s8 {5 F0 j- _
{ . A7 W6 J% ?* C. V- y0 C* _
uint z,x,c,v;
5 f0 e" R% x m Q) c, s* w z=date/1000; //求千位) Q2 x$ k6 B0 g( E8 K
x=date%1000/100; //求百位; N) ]6 Q# V4 p0 E7 F+ _
c=date%100/10; //求十位 F+ |; @" z z2 X s- [7 d" m
v=date%10; //求个位
; a& f0 z: C7 M, P$ a" B
4 A1 t0 i0 t9 K6 v" V$ s; v P2=0XFF;) \( ^7 y' S2 J
P0=seg7code[z]&0x7f;, K) H4 ?1 ~8 Y O/ B9 _
P2=wei[0];
5 z# g) L" O: ~5 ^% [$ \" V delay(80);
' u9 B# S% v+ {" }) j; J; b P2=0XFF;
4 S! h/ `" S0 F4 {; z/ }0 C P0=seg7code[x];9 m$ T0 C* r3 e. O3 C1 V% |7 n
P2=wei[1];! s) s/ R. J7 @0 n( g# `& s
delay(80);
" q$ v' Q- M c5 s- Y0 J5 K8 Y; F P2=0XFF; 7 w8 W! c) ~" [) ]3 C
P0=seg7code[c];" ]- U' f) u8 J% d8 }! }- _; A& l% |
P2=wei[2];
5 f x& ?) |. H6 F6 l delay(80);. G6 `: N+ y5 ~& n
P2=0XFF; 3 ~$ v6 S$ q9 O# K/ Z" |3 w
P0=seg7code[v];
# W6 r0 [ r6 H1 W g" N. i P2=wei[3];( S. Y+ l6 i0 Z; C4 `# b, k) A- X5 @
delay(80);
6 W6 h/ [5 l9 n d: O3 e( [ \: `0 V- Q P2=0XFF;8 D6 m$ _% D4 j$ y/ h8 v5 v k
}5 S& C2 x7 w* x% k
/*************************************************************************! M* b% N! V( V9 S
CLK振荡信号 3 z+ \$ F6 l0 d5 w: h0 x6 B
**************************************************************************/
; N, `& X, m Bvoid timer0( ) interrupt 1 //定时器0工作方式16 ^" ^' O6 B) }8 h: V& [: |0 Y
{
9 Y& X) O$ e: J, W/ G( E6 s0 T0 A# k4 L/ {, V$ s/ A
TH0=(65536-2)/256; //重装计数初值" N3 X* Q5 H [. T! @, o3 b: o$ I
TL0=(65536-2)%256; //重装计数初值
3 w. h, U0 O5 O# BCLK=!CLK; //取反) d8 g& a! `8 \+ W
}" z9 o" m$ E3 J6 `9 `# R
% g# H( f" b* @; U* z: \1 |$ r' B( a
/*************************************************************************
% s' |3 H+ x8 p2 N0 b1 c 主函数 * n, \3 e3 S6 w3 S) Z$ W
**************************************************************************/5 e b6 i- @ |1 V; Q+ u
void main()
) N- R) D5 b2 j* z{ % T/ d e7 \9 j- y8 U$ h
TMOD=0X01; //定时器中断0
+ Y! Y" Y( e8 s+ }7 x2 k. }4 F1 H4 K" M2 a1 m5 d q
CLK=0; //脉冲信号初始值为0
; g! B! i+ R- l7 a$ YTH0=(65536-2)/256; //定时时间高八位初值
& R f. _# p4 P- U) [TL0=(65536-2)%256; //定时时间低八位初值
; {0 G" f( [' t9 b, `8 {% aEA=1; //开CPU中断, `6 ~* j& s2 F+ y/ p
ET0=1; //开T/C0中断, Y6 }$ h& i) r5 {+ l
TR0=1;8 @6 ~& P9 l1 l5 b6 b
while(1) //无限循环$ {* d$ _. ?% p3 e/ U% b" J
{! b; Y; B% s! i4 Y$ i# ~# _
ST=0; //使采集信号为低& [! p ^* u! x! [2 ]- l+ ?
ST=1; //开始数据转换8 ~& \6 c0 A. V2 ^
ST=0; //停止数据转换8 S2 S* Z; C) ^9 }0 W4 i" C
while(!EOC); //等待数据转换完毕+ i* B8 F0 z0 r' T4 U
OE=1; //允许数据输出信号/ r# v# E3 s+ G0 \
AD0809=P1; //读取数据
3 o3 T9 `6 p5 W3 q0 } OE=0; //关闭数据输出允许信号
; c) |5 m* H* H if(AD0809>=251) //电压显示不能超过5V
' ^3 b$ g j, ~% s( U) z AD0809=250;, M! g& z$ A* ?. L2 y0 g) A( K
date=AD0809*20; //数码管显示的数据值,其中20为采集数据的毫安值
1 s% X Z7 ]+ n* u xianshi(); //数码管显示函数
6 j2 D2 }4 A; m' [' c7 ]+ b) c, ?) V: A& T3 z- M5 o% Y
) e+ {; l& ~9 c( v
…………限于本文篇幅 余下代码请下载附件…………
& T" V$ T- J3 v
0 S6 U1 l3 T: p( o7 P, Y. bMQ-2烟雾传感器资料下载:5 n6 U" _6 f( T# [
MQ-2烟雾传感器模块.rar
(2.15 MB, 下载次数: 0)
* y4 i( L. ^9 e! k3 X* B
" n3 i- X! a0 a2 C( K |
|