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

二氧化碳CO2检测显示的单片机程序及资料

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 yxlk 于 2019-1-19 10:35 编辑 - N6 _3 b9 b% S% g* N
' t3 m: Q/ S9 L/ C- V+ U
二氧化碳CO2检测显示的单片机程序及资料: u/ n) N* V* Q) r3 Y7 x; {: u
# y1 H3 ~: N$ p, H& N
1.二氧化碳传感器MH-Z19模块的T(TXD)接单片机的RXD  二氧化碳传感器的R(RXD)接单片机的TXD  ,二氧化碳的V+连接单片机5v正极,V-连接单片机的地(串口TTL通信就需要连接这四根线)
' I0 j4 f; k, F  W4 i$ L5 B2.测量电压选用5V  , o$ L5 |: d' l
3.单片机型号STC89C52,液晶显示屏型号LCD1602,电路连接按照那个测试图的# p! N5 s$ X7 O
4.串口通信波特率9600,注意晶振要是11.0592M,否则会引起通信失败
& o# x3 l8 C) f+ Z9 B% j1 H& I5.传感器上电需要预热3分钟. d, D; D: n) `) g, K% ^

, R* a/ P3 b' E
. I+ P6 l) L, e4 M5 ^  J; ^ ) ^" F1 j$ O! r& ]

8 N2 s- ^# I# y% Y0 SCO2二氧化碳检测的51单片机原理图:- D, i6 H5 F/ w

6 D" f7 T' k* w' {1 x1 T. s1 \# b& e; c; k

3 t' K7 j( i# M' x6 [二氧化碳CO2检测程序的测试,用的串口调试助手:2 _' b2 C0 d/ }0 z$ h

! C8 l/ e/ y; Y( z. ]( F
) z" ]9 X# ?' }! A4 ^% w, O% e4 [
发送 ff  01  86  00  00 00  00   00   79  

* h: h8 b, j9 |! ~% \9 Z
接收的数据中 第三个数据*256+第四个数据(  串口接收显示的是16进制数)

. j  N, j7 K) [) q) S8 H
- i* B: E) d6 ]6 [8 t, K单片机源码:

  s8 g% H: A4 D& p/ C( j+ {) Y* R #include<reg52.h>* t9 X' E8 g6 C
#include<stdio.h>
/ J5 s3 o6 U& z#include<intrins.h>
* A8 ?* _4 q* K! L$ q#include"lcd1602.H"
. d# T4 s; ~4 |7 A2 U#define uchar unsigned char
9 H+ I' ^) w4 Z1 s% q#define uint unsigned int8 u. j2 A: j. t3 W
#define ulong unsigned long + I, K) m% y) F3 E' Y

6 M" {0 n, a3 r; Y3 z9 F5 ~! j( _
2 F8 A: [$ M# N6 f  {3 `2 v) V
uchar code tab[9]={0xff,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
1 J! V: W" L) B1 w5 v$ |uchar  date[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/ N6 Q! x  t& V2 G% E
2 v$ r' h* j6 Y/ X7 I; q
, X+ b' ]3 V# V# V  @2 T6 ^* m. f- P
/************************************
1 H4 F% X% n; q9 N+ e7 i    延时子程序3 e2 q! P( p! J2 [2 M
        延时时间(xms*1)ms
$ P& W7 E- \9 p% u*************************************/( K5 K* G# p! c% q! k, z
void delayms(uint xms)' N1 \  @0 @8 @5 g# S
{
; N( K( r' c3 x# f1 p9 o! ]& n% @        uint x,y;2 c9 t0 w% O+ A8 k1 l, S7 O" A% O
        for(x=xms;x>0;x--)' Y( j+ W5 U. U9 f+ `
                for(y=110;y>0;y--);. o# b/ ]! k9 y; p$ d+ h
}  S7 o3 B  j. |) F1 L( K9 M

% h4 {/ F3 ~& M- F& i' h8 ?2 P void send(uchar dat)         //发送一字节    7 R) G! o- @# k8 C
{
8 m: R: w1 ~- `; e  n) W, P% H  SBUF=dat;7 Q& ^% Q" y' P
  while(!TI);7 t  k8 c! c- g  S
  TI=0;
6 k/ A+ b8 h( w: _8 I5 A }
2 s+ l* E# Q& @4 `( c% Y # U* j! a+ V! b3 K% p  Q4 u# E

8 z5 f  r" h( d& m6 M6 ^, X2 N
7 s* R" U/ _" s1 ?! A$ h

4 l+ X$ t& Y$ ]  t0 X/ ]
/ T$ s; q" ~& C6 u* V- F

9 ~& @5 u& v& j) B* A' {. l7 \void main(void)1 [  m$ k. z& P# u3 ?
{
, _* z2 D9 A2 T( I) H4 K# v uint  tmp;4 G4 n/ t0 j, g2 U/ w
uchar i;
# }- v6 h" @  t: R; Q TMOD=0x20;         // T1定时方式2/ v- B2 E& a4 a' c& {7 O; |
SCON=0x40;//串行工作 方式17 E- c( S  J8 V) n3 W
PCON=0x00; //不加倍8 x" N+ A; O0 u" S) l
TH1=TL1=0xfd; //定时器1赋初值  保证波特率96000 ]% o1 p$ |/ M" I4 |6 ?- ^  R
TR1=1;                  //开定时器1  _; c6 o4 c' b% U1 t' b5 i
REN=1;                  //允许串口接收
' z1 ?3 Q+ c' a% ?init_1602();   //液晶初始化6 M  j, G! o2 |/ ~0 r2 c& L
delayms(10);7 R- J1 ~0 ^2 g
ES=1;                  //打开串口中断# Z) K- z* h; L9 n
EA=1;                  //开总中断6 x  T! Y0 R  Z% l
while(1)                                                        
4 q6 t& \! O9 r) c( @- ^' k( y{5 B; u: Y8 X6 P5 p% p7 f
for(i=0;i<9;i++)  //向co2传感器发送数据
9 W  V, ^0 x% x& t& c) r/ H   {6 G* ~' @- M* i0 j: Q7 F% d2 V
    send(tab);( {9 }4 G0 e8 h; q6 O" W
   }! L: \% A4 @; {" H7 r- E9 X
  delayms(1000);  //延时一秒  刷新测得数据
/ X. o, @" e* H2 e   8 a, [* Y; b9 c, _! B9 g
             tmp=date[2]*256+date[3];        //计算出co2浓度值& [8 h; j* t) a+ A$ Q1 o
                         if(tmp>9999)/ b  q" a* V, A7 D6 b  l
                         tmp=0;   4 A4 m' s8 P$ b2 h
                 WRITE_LCD1602_COM(0x80+8);/ x. ?" J4 C* [8 ?: a, l! I
                         if((tmp/1000)>0)
& Y; N" m; z5 A3 i4 T% ~                 WRITE_LCD1602_DAT(LCD1602_Table[tmp/1000]);
; T( Y1 w, {; M, {* s8 n- L6 M                 else WRITE_LCD1602_DAT(' ');
' F- ^- Y* s/ R4 n4 b# n             WRITE_LCD1602_DAT(LCD1602_Table[tmp%1000/100]);
! Q7 {+ c# `9 [2 U3 e                 WRITE_LCD1602_DAT(LCD1602_Table[tmp%100/10]);9 W6 U0 `6 a$ C6 |$ G8 S9 Y* }
                 WRITE_LCD1602_DAT(LCD1602_Table[tmp%10]);
: @1 n7 ?% x. z- y* ?/ H6 M        }
& C. ~' h9 V% }! H1 w! Z- R$ a' v   }7 q. e: R) g+ }7 W/ y3 @

! J* J$ r$ a3 g* h/ x/ K8 r2 i( R

$ K0 L( k0 E4 M6 `# M+ {" D void serial()interrupt 4                //串口中断服务函数: h- V* F1 R$ [  q
  {9 u7 ?3 f2 j! k' z# q+ [
   static uchar j;
- H: K/ Y, a, J; d   ES=0;                         //禁止中断
9 W+ q' n# d' z* P1 \$ a   if(!RI);
9 C' w$ ^3 S! h! t4 K" L   RI=0;                    //清楚接收完毕标志
. E7 {5 c' z" d6 G   date[j]=SBUF; : T& U# l& z" u* m
   if(date[0]==0xff)  //判断接收到的第一位为传感器所发数据3 J# s6 J# I7 l
      j++;* J  V0 e2 b; }6 V! K# K& e! k( c
  else
# h" \! n1 k+ C# c$ v      j=0;* N3 Y; s  r, j- k
7 u) K6 t% o3 `0 j

' D# `, `& H' }% c下载:
$ R8 x$ S0 i/ s. w4 f. r4 A/ A
游客,如果您要查看本帖隐藏内容请回复

- Q/ U" J+ I9 c: c: ~% b
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-19 21:20 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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