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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 yxlk 于 2019-1-19 10:35 编辑
1 m6 ?& v6 ?' [. c& `% q/ E, U& r/ }' p% @. Y# h
二氧化碳CO2检测显示的单片机程序及资料  |2 n5 z$ y& b! Q2 C* }7 M# j" o
& _( Q' H# Q, w/ ~
1.二氧化碳传感器MH-Z19模块的T(TXD)接单片机的RXD  二氧化碳传感器的R(RXD)接单片机的TXD  ,二氧化碳的V+连接单片机5v正极,V-连接单片机的地(串口TTL通信就需要连接这四根线)
+ }. N+ p5 W8 W+ {8 N2.测量电压选用5V  
* d( {+ c4 o0 q3.单片机型号STC89C52,液晶显示屏型号LCD1602,电路连接按照那个测试图的
- A0 l4 {( t3 m* a  g1 U) ^4.串口通信波特率9600,注意晶振要是11.0592M,否则会引起通信失败( Z( V, N  j8 f  B7 U$ T! d: v( J9 B8 Q
5.传感器上电需要预热3分钟
/ P. r0 S# I; ?5 Y/ T  m* _
; V( j# H3 h  \$ i' }9 Y1 H + D: C9 O8 g5 Q& r8 `8 h+ h
; H3 Q* z. x! t$ H7 n) G, g
" `4 S) c0 x0 `9 j* x2 g
CO2二氧化碳检测的51单片机原理图:# v+ z* P# q& B# z, b2 S
: [4 F7 a2 J: m  R' L  W
& \/ N: E0 P: ^
7 |5 @% C7 {1 C, P7 v
二氧化碳CO2检测程序的测试,用的串口调试助手:
* ]2 U; |3 q  @( n$ ~3 e' j# Z
, v, e8 X$ I# }" ~1 u& \: d2 K0 e# s  ~* L+ e
发送 ff  01  86  00  00 00  00   00   79  

9 W4 v3 O6 r4 y+ L  M4 I0 l
接收的数据中 第三个数据*256+第四个数据(  串口接收显示的是16进制数)
/ h9 P4 j, v! d( _; N& u

& R  \) r" N$ t, q! w单片机源码:
4 F+ g' q2 J3 h/ V+ P
#include<reg52.h>
$ ?. ]$ H! D' C6 t* [#include<stdio.h>: G% _3 }# F' g* n7 i: q
#include<intrins.h>0 J! U1 j! l/ [
#include"lcd1602.H"& e0 M0 m3 _) `+ @  h, ^8 I3 }+ b
#define uchar unsigned char
2 Y/ P/ h- l' H# e8 P#define uint unsigned int
3 Q' B7 q/ i# w& l% P  Q#define ulong unsigned long
* U3 q& |3 D8 r+ j: d) T) h; M  a- h/ |+ Y
  M) v3 O7 Y$ D/ `
uchar code tab[9]={0xff,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
* f$ e- H; _9 x! I3 N8 F2 tuchar  date[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};. `7 O3 c0 i6 a" |/ W* w
8 j' T' D9 B. z! z- |& i6 K

; i8 `* _9 }" q/ K- x /************************************
" S" q. d  ^2 f8 N% p: ^& \' v( [    延时子程序
- z# \/ v) O8 B: q: }8 M+ S" l        延时时间(xms*1)ms
& `2 P; i) |1 f9 Q$ z) h9 ?*************************************/# W% j4 f! i! x1 L8 |& t* w
void delayms(uint xms)
5 f% {/ G$ d- _: A: o# \3 Y{  |7 L6 F* V: @; S; A: M
        uint x,y;: N. e& d, O: V9 t
        for(x=xms;x>0;x--)
/ m1 v- ?: m6 p" N                for(y=110;y>0;y--);
$ S2 `+ o7 G: ?5 Y# g}
2 [* p3 E3 z$ u' Z) `  e- H
. t+ Z0 \) J8 \+ Y1 D; b6 R# i9 K void send(uchar dat)         //发送一字节   
* D9 L; G: x9 S! w( |( m! C {$ @6 A& a6 R4 H8 o
  SBUF=dat;
" y" a. z! n& ]0 O1 S: ~  while(!TI);
/ p8 X! A+ g. K3 q* r2 j4 I  TI=0;7 e9 W: k8 e1 v) Y8 b) ]
}. n/ E2 ?1 [6 d( L( u7 ]% j! G
  ]2 ^- Y( n( K& A4 e
( s  G3 L# G; T9 T  l3 r' S' a

4 L- L: d) `8 T2 ~; s
7 U) w  G2 U. d' p& Z% ^/ q: g
) b1 S+ e" _0 Q8 o
& c* ^* Q( C" j: K" Z  t  c( y' A
void main(void)
2 I% A* `* B& l- U5 n{
; c/ ?" z6 j2 v# s  c; J4 ^) h uint  tmp;
6 Y  k" x) v% [' D9 w* h' x4 C uchar i;
8 k8 n5 f8 E" u# b; z2 y TMOD=0x20;         // T1定时方式2# {" @9 g' D$ D- n$ b
SCON=0x40;//串行工作 方式1
( h6 g' F; }: z* T! | PCON=0x00; //不加倍
, j. n+ y# ^/ P) X6 Z7 [6 @, K* q TH1=TL1=0xfd; //定时器1赋初值  保证波特率9600# w5 |) ]5 G/ o& H8 ?9 e
TR1=1;                  //开定时器1
/ J( H8 w! |! }$ {5 G) N& v REN=1;                  //允许串口接收
, x( |" o5 E) e! v+ a; w/ `init_1602();   //液晶初始化; q3 M" r. A" m" h% o+ K  D) j
delayms(10);
3 p& p# |2 ^7 \' y ES=1;                  //打开串口中断: P/ r0 R4 g1 o6 Y% U
EA=1;                  //开总中断
% j8 [: g1 ?# P5 Q5 pwhile(1)                                                        
, N$ L& ?2 f8 l8 |  N7 ~8 P$ A3 R# S{
  h# @2 \" j* F9 ? for(i=0;i<9;i++)  //向co2传感器发送数据( ]" h; V6 j. c' |* ~2 r
   {
. P% Y7 q6 q8 e" ]; q    send(tab);
( z) G* l, ], r* h   }
5 u  _. l4 Q; ^) F$ V  delayms(1000);  //延时一秒  刷新测得数据6 ?: E1 x5 M+ m2 e1 b2 ]
   0 g2 X5 `- t: V9 @
             tmp=date[2]*256+date[3];        //计算出co2浓度值
5 P" d# ~9 c3 J4 G% M                         if(tmp>9999)
2 r/ l5 M* D" h( ]4 c: S' z                         tmp=0;   : t- u$ F7 ]8 a2 L. N
                 WRITE_LCD1602_COM(0x80+8);
" l$ ]( T9 R# ~9 K4 U                         if((tmp/1000)>0)
! H* J3 ~, h$ F* J- q                 WRITE_LCD1602_DAT(LCD1602_Table[tmp/1000]);0 z" a9 f7 R" c
                 else WRITE_LCD1602_DAT(' '); 5 ?" k8 O8 X, E' u( q3 \' V
             WRITE_LCD1602_DAT(LCD1602_Table[tmp%1000/100]);) k% @- H2 Y3 a" Y: R: S
                 WRITE_LCD1602_DAT(LCD1602_Table[tmp%100/10]);
) p6 o1 c2 ?9 f# p' D# h                 WRITE_LCD1602_DAT(LCD1602_Table[tmp%10]);
; A9 V8 [0 q: }& R8 g3 M; ?+ _$ T, N        }9 _& R# K7 o: ]& ^1 D
   }  v& X& O% G- }- A* b
& k1 H5 u: |* B; i
/ j# M1 |  D$ j
void serial()interrupt 4                //串口中断服务函数" {% F- Z6 b! {
  {
) R2 @  ?) F; K, v: _5 b   static uchar j;
' ^$ }1 e% c% l4 v   ES=0;                         //禁止中断
+ n" J8 ~/ Z) |6 F: ?( G8 Z   if(!RI);
$ }& i4 e/ o: d& Q( c5 C/ K) V. M   RI=0;                    //清楚接收完毕标志
$ z& P* f- l3 t" m5 R2 Q   date[j]=SBUF;
) _; f& v& c" M2 a   if(date[0]==0xff)  //判断接收到的第一位为传感器所发数据3 W  _4 L$ b9 @. ?" K* ^9 L
      j++;5 I& ^0 ^' @) p
  else
) q( W2 E2 K  {3 f- f7 p' S) x" m- m      j=0;
$ x8 p! Y5 J: y9 e" p+ T2 ~8 D6 G, d" k3 M
+ @% X9 E4 U3 x/ H- I. L/ m1 V  Z$ L
下载:
+ r" S  k* Z6 l& G
游客,如果您要查看本帖隐藏内容请回复

& [* g" q7 x! J& f/ d, p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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