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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 yxlk 于 2019-1-19 10:35 编辑 # C5 K- }3 n2 `; v/ v3 r

8 `1 Z3 @2 T' q% m7 q& g2 }/ K二氧化碳CO2检测显示的单片机程序及资料3 n( }$ e$ N5 P9 [& a2 a
% @! J. i: G1 f; l$ j
1.二氧化碳传感器MH-Z19模块的T(TXD)接单片机的RXD  二氧化碳传感器的R(RXD)接单片机的TXD  ,二氧化碳的V+连接单片机5v正极,V-连接单片机的地(串口TTL通信就需要连接这四根线)
4 r  |6 ?' Y1 X8 F/ ~, A! M" U2.测量电压选用5V  
* f, f% U0 R- v3 b' ~$ d0 B3.单片机型号STC89C52,液晶显示屏型号LCD1602,电路连接按照那个测试图的
, b7 B! e9 f/ D8 z, w4.串口通信波特率9600,注意晶振要是11.0592M,否则会引起通信失败3 y3 b. Y: c4 d% ^
5.传感器上电需要预热3分钟( u1 {9 _$ R9 s% b% s, R) B+ M  F
' B+ U; R7 a, d& H" G& d
! _+ B+ C& T2 t8 O" l. w+ O0 ]
! f' [) Y, {$ H  O# p7 Y& M- `) b
0 H- S; {4 n5 u9 t2 E9 I$ L' T& k( N
CO2二氧化碳检测的51单片机原理图:) x( W' g( F7 L( @+ @

7 P% ~* `0 n/ g0 \
! q; i$ s! T$ c2 E7 T! c" Z3 Y+ @' ]+ X3 \
二氧化碳CO2检测程序的测试,用的串口调试助手:9 ~3 ?) b3 k5 i
5 k6 x+ {! J7 h; Y6 M  Z1 r

- t; S6 G" i! S5 p+ `! J
发送 ff  01  86  00  00 00  00   00   79  
6 R9 F! V: F5 v
接收的数据中 第三个数据*256+第四个数据(  串口接收显示的是16进制数)

0 J4 Q' R* s7 ]) ~$ C, L: t; j  c4 \/ D7 f
单片机源码:

1 a0 W5 t9 h% {! p% E, |, r0 S5 C) Q% I #include<reg52.h>
7 A8 o& y, n; C+ a1 j#include<stdio.h>* X3 f1 D8 E- v/ w8 ]0 S
#include<intrins.h>
$ ]! C4 |+ `3 L; M- a$ e9 [  }#include"lcd1602.H"
. L2 M" Z+ R1 O. }) L, A* x#define uchar unsigned char0 H- ?$ ^9 @4 t' n! X0 l
#define uint unsigned int# A$ L$ W: w/ t) J, A# a4 z
#define ulong unsigned long 6 c) i. j: v7 D4 U6 G( A
6 e6 r0 l  ^# `7 Q# I0 l

$ _! x; a' R/ \0 C2 F! Cuchar code tab[9]={0xff,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};& P- y$ H! x' d% }7 s
uchar  date[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};0 o. ?/ X3 `. f7 @* T9 a/ `* T
, I8 f& w' u3 i1 ]1 A

& @4 T% `+ X0 J+ [; F7 x /************************************
1 O8 j+ Q4 j9 L9 r2 q- m, k    延时子程序
7 \5 F% P0 a; W+ l+ N        延时时间(xms*1)ms1 m9 e* A8 g* b. r9 v4 w% q
*************************************/$ g+ Y: x% B% s2 o5 w2 r
void delayms(uint xms)( V, ]* b+ y7 J
{* N2 @" K; w+ C: |) U2 O( V/ j; s" n$ @+ P; f
        uint x,y;
& J2 z# |  `& e9 P% b        for(x=xms;x>0;x--)
! ^8 m, F7 E. d# G! [* [5 P& R                for(y=110;y>0;y--);4 V$ ?* F; ]7 y+ L5 [: O. B2 v
}
. v& ]& D6 b/ J1 }
" ]8 R. F- A( V- n void send(uchar dat)         //发送一字节   
  I- l. g4 \  p  E9 L+ v {
. l0 a9 q8 s: j4 u% K- z  SBUF=dat;
2 A, @/ c: z6 G- e  while(!TI);, J& N* ^$ D: j: L* u  P
  TI=0;1 k/ n, p( E* n+ Z! L" j
}! y$ n! w( e* z- _- p: g

( ^$ F' k# Q: p6 W5 s6 H5 Z& r8 v8 G- x+ @1 c

' e8 H9 F) F- `% Y3 D, l# S/ ^ ; o7 F2 w( S) s
: w2 e0 \( z' ]: C) _, Z! A
( {$ \/ ~' h; x6 M6 b+ s
void main(void)- G; G6 t( W8 X# X: G
{
) ]' h7 l3 i1 |9 n, I' k uint  tmp;& O- Z. V" k  F6 v$ V
uchar i;
7 }! [% `  q* |( f TMOD=0x20;         // T1定时方式2
/ I1 m0 X0 [$ d SCON=0x40;//串行工作 方式1
& ^5 B( c. ~. u+ T5 S PCON=0x00; //不加倍2 T1 ]7 _/ ]" ?: |0 ]# R
TH1=TL1=0xfd; //定时器1赋初值  保证波特率9600
3 c% u" S* s; a$ R2 w9 G7 C TR1=1;                  //开定时器1
8 p1 e8 I' W) m8 r& [# j REN=1;                  //允许串口接收
- A: a) ?" y5 y7 kinit_1602();   //液晶初始化: C, Z2 H" m, P3 a- N6 y& \
delayms(10);
$ |$ `! S% t1 c& g; s; Q ES=1;                  //打开串口中断3 T8 a/ x" Z5 Y
EA=1;                  //开总中断8 F4 P: V! \; o9 W
while(1)                                                          s' x# G' w' A7 x* q/ R  @
{
$ ~( z& v$ M/ U; y7 c+ T6 I for(i=0;i<9;i++)  //向co2传感器发送数据7 c) V/ A; {1 Q. O8 h
   {& m# L, E; A8 E+ H
    send(tab);
4 A5 h/ X1 N5 f7 ]+ [   }
/ }& i  n# y* M$ f/ U1 t, L  delayms(1000);  //延时一秒  刷新测得数据: n; w3 w* |* u/ P1 y6 s+ s
   
; l1 _2 o5 e7 ^1 I             tmp=date[2]*256+date[3];        //计算出co2浓度值
% h: |: p) c! ^/ j; U* u3 Z% [/ `                         if(tmp>9999), C) l! J# N$ j1 \3 q
                         tmp=0;   , v9 h/ Z9 J% f4 \$ A8 y
                 WRITE_LCD1602_COM(0x80+8);
. e! T2 {$ @  h: @/ p+ v                         if((tmp/1000)>0)
3 P* f# I! \( c0 ?' o3 i* ^( g                 WRITE_LCD1602_DAT(LCD1602_Table[tmp/1000]);, ?, h' W# I8 M0 j* {( o: X  N6 i
                 else WRITE_LCD1602_DAT(' ');
/ n. t( ~4 a* s6 ]/ o6 x- t             WRITE_LCD1602_DAT(LCD1602_Table[tmp%1000/100]);( d, S" j* @5 V2 f; |
                 WRITE_LCD1602_DAT(LCD1602_Table[tmp%100/10]);1 h! H" K( C; e& H
                 WRITE_LCD1602_DAT(LCD1602_Table[tmp%10]);
1 S& {0 Y. Y: i/ Z        }, X( ?, R8 B$ L
   }  o/ q4 ?3 h7 P" {9 R2 }% \

" G+ A" l+ n' l2 N7 r7 i5 M

9 f$ h) b. u" V  c6 a# B void serial()interrupt 4                //串口中断服务函数
! x; J2 G& J* E" x' f  {, P, [( j7 s; G3 f: s0 i, n$ y. E7 V
   static uchar j;: f+ r$ q9 c, i2 ?4 r  B# N
   ES=0;                         //禁止中断
4 G8 \+ {! G7 d3 n7 Y/ a   if(!RI);  f* |' b# W6 r) _9 s% o- g
   RI=0;                    //清楚接收完毕标志1 @* |6 R$ M* c4 Y
   date[j]=SBUF; 7 L! |& s* n( p/ e) K: J) `, o9 k9 p
   if(date[0]==0xff)  //判断接收到的第一位为传感器所发数据
. ]% `+ R6 V) x% w  p2 i2 [' [) i$ L      j++;
1 ]) t! L- a! D9 v1 P) z  else  U7 V$ A2 o1 `
      j=0;
, w0 [7 q) Z; C  M! p/ O6 b3 F7 U/ o9 @

2 \4 e. v/ }- ]7 X% m下载:, F; s, `1 U* p/ S. X
游客,如果您要查看本帖隐藏内容请回复

# Z7 D8 p. a( ?. Q/ }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-30 09:05 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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