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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 yxlk 于 2019-1-19 10:35 编辑
% u9 Q5 [- E' Y2 `2 s1 S. h! ]$ B2 R/ t" R; F
二氧化碳CO2检测显示的单片机程序及资料
  D1 n! b6 l& G) v& C3 c
; t9 C- M9 J0 k1.二氧化碳传感器MH-Z19模块的T(TXD)接单片机的RXD  二氧化碳传感器的R(RXD)接单片机的TXD  ,二氧化碳的V+连接单片机5v正极,V-连接单片机的地(串口TTL通信就需要连接这四根线)
9 H' O1 K9 n! ^! N% N/ ~2.测量电压选用5V  9 I4 [& h3 z8 q( u
3.单片机型号STC89C52,液晶显示屏型号LCD1602,电路连接按照那个测试图的0 B" J  c  Q+ V6 a' W7 z# f
4.串口通信波特率9600,注意晶振要是11.0592M,否则会引起通信失败
& e0 G) _+ q6 `, i. s$ P5.传感器上电需要预热3分钟3 D. Z6 p& S$ B# ]4 v) b

* p# S3 x" f7 {  u 5 v% D9 p2 l8 F- {5 J, b
9 a! Z& @! ]! R( E

& q1 w' ~: \, w# PCO2二氧化碳检测的51单片机原理图:
# |; s6 M8 U9 }% p! N8 h7 M; K
: T0 v4 z  x2 F% H
& s" o: {6 r; K% T; U# k5 z8 h

/ _  a* a6 D/ |$ n二氧化碳CO2检测程序的测试,用的串口调试助手:6 ~" D  a( T2 p9 C7 e- q" K4 C
6 n, T' p# t. b+ g( T
  i& Z1 \7 G. c0 Z. o0 k
发送 ff  01  86  00  00 00  00   00   79  

0 r, h1 d5 U9 J9 |( v+ r: b. `
接收的数据中 第三个数据*256+第四个数据(  串口接收显示的是16进制数)
& l* ?" v0 u& r) }$ U% \) i, {- D1 l

6 k2 Q5 D& |5 W/ \' V* v# f/ s单片机源码:
+ D5 D" I3 t  N$ P0 e! S5 G: e
#include<reg52.h>
7 v! v9 J6 D& X% [; N( \/ H#include<stdio.h>
  k0 m, P% p6 Q+ V2 D# l0 ]#include<intrins.h>
& Q; p' n" W" F. @- W6 p#include"lcd1602.H"
4 ?2 q& P3 Y- L: }7 z% i* V# e: s#define uchar unsigned char2 b' i' o9 C9 h" m
#define uint unsigned int
/ U. n8 k2 n. b5 d1 h#define ulong unsigned long - M- S# V( i% Q$ r, E

7 W( ?# M7 y# o3 l# q" {& D
! B0 O+ o0 k/ T9 l4 j# t
uchar code tab[9]={0xff,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
/ x7 s) V" N) E' U3 b9 nuchar  date[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
" D% d9 J9 H0 H4 t6 K8 J7 w1 z
4 M2 I: Y1 V. b- M0 [/ L
5 Y" J% o6 Z0 p5 v" S* r
/************************************7 F" c. F3 q% r4 v# `3 _
    延时子程序+ Y* G* }) D, r- {6 D8 o
        延时时间(xms*1)ms$ s% ^; M8 l+ r0 H8 R
*************************************/6 Z/ m- Q) x- m" \0 h
void delayms(uint xms)! q. w% P  x1 a
{
# {5 e# B' F# i( U: y$ ^. t        uint x,y;
0 R7 Y/ D: ], ~3 x$ |6 s        for(x=xms;x>0;x--)
/ W/ }) E- z# Q% _( m4 \( |                for(y=110;y>0;y--);
6 |+ ^) f  U2 e8 V/ F9 m}% S. i( k* V0 [/ d- l+ J

4 K  X: y; S' g void send(uchar dat)         //发送一字节   
" h5 z% |* V5 `, H {
3 N- A( L% d: U; [8 W& m$ a' R  SBUF=dat;4 S5 F1 O0 W( v' e: p" q) _  u) L
  while(!TI);) B8 G0 t; [" ~0 ^' f
  TI=0;  d4 D. o. V0 q; W7 v
}' i* J3 \1 M0 g. d/ ~4 C
$ z0 {* q: ]# j5 _- L4 ?) r9 e( l

; E2 t' T8 h( X) g/ w

% k' ?. d2 x0 N- n0 \; V" o, S, y
; c6 \" i- p3 p* K+ q9 ~7 l
. I7 @/ Q9 ?/ a4 o$ [
& _, e' E" x# _, h# ^
void main(void)
+ k; ~0 C" O. J8 a{6 `  m7 P+ c! M, s3 O
uint  tmp;
$ v, i1 z6 J6 z5 } uchar i;
& E! R# Y1 @  k% ` TMOD=0x20;         // T1定时方式2& G9 {3 d- G! n, O; L0 h
SCON=0x40;//串行工作 方式18 c; V1 a5 O7 P
PCON=0x00; //不加倍
) j# o9 n  V, W; m TH1=TL1=0xfd; //定时器1赋初值  保证波特率9600
# ^$ s, K. t& f* J TR1=1;                  //开定时器1) S* G" E  N3 h/ }( R) m
REN=1;                  //允许串口接收
  w/ @% W5 k% Y8 P5 h8 X- Dinit_1602();   //液晶初始化7 w8 V; v. L0 d1 j
delayms(10);
3 B& ?4 G- ^" g8 _) m4 W ES=1;                  //打开串口中断- `: P) t7 }. Y( y2 j- H
EA=1;                  //开总中断
" j) ?/ W6 O" ?& t- [9 Owhile(1)                                                        - k) M2 u7 O8 b( q9 z1 `
{% X! P- J  a  `# z! [) A) w! h
for(i=0;i<9;i++)  //向co2传感器发送数据
) M& `& k+ I' J3 m   {& `4 Y6 M' W/ T  @4 a7 _$ d* ^, Q0 u. q
    send(tab);
0 _, w. v# ?3 k. e3 t   }
, H3 s; L- ~0 Q& n( f, G  delayms(1000);  //延时一秒  刷新测得数据; u# @( R/ ^  g  @& [
   
- d1 i/ Y& p' @) D" b9 Y             tmp=date[2]*256+date[3];        //计算出co2浓度值( t4 g, d+ L0 _: W& @
                         if(tmp>9999)
" Q- H: z+ s* i2 r! Q* W  \& l1 J                         tmp=0;   
' I2 D; f  k% n! `# Q# p- F: f                 WRITE_LCD1602_COM(0x80+8);
& `3 `8 E# _. h- s( i# p                         if((tmp/1000)>0)2 o- ]$ Q2 k4 [
                 WRITE_LCD1602_DAT(LCD1602_Table[tmp/1000]);/ i5 v0 R3 a5 O4 o: c# A
                 else WRITE_LCD1602_DAT(' '); 0 R9 `8 i' y6 }. k
             WRITE_LCD1602_DAT(LCD1602_Table[tmp%1000/100]);4 b3 ]( W* M' w( O
                 WRITE_LCD1602_DAT(LCD1602_Table[tmp%100/10]);! M& Y' ?2 o# W
                 WRITE_LCD1602_DAT(LCD1602_Table[tmp%10]);5 L, M5 A6 c1 P4 C( I; i7 A4 L; e
        }
0 s4 W% T# V1 @  W0 e/ C   }
, P, f1 D- w  _1 V4 a" t0 H' B% n7 p

3 E3 l, N( z+ ~; p void serial()interrupt 4                //串口中断服务函数
, R+ T- B" L/ B7 \5 }  {
# G% q3 t3 q  @7 _3 I( ~5 V   static uchar j;
2 W4 k7 o8 v) X3 p9 [   ES=0;                         //禁止中断
2 F" ?4 ~( C0 l& Z. L3 O- K1 ?   if(!RI);
' x: X* h. I8 U  j0 C* }- t   RI=0;                    //清楚接收完毕标志
3 y% c& j2 y8 D, i" P, C1 l' t   date[j]=SBUF;
$ y  C1 X+ k& d0 v( c/ C9 F   if(date[0]==0xff)  //判断接收到的第一位为传感器所发数据0 N" p' l" c" s
      j++;( Y- Q( {1 _1 g5 b3 u: O+ b& z4 C
  else; a5 K* O$ y; [8 U
      j=0;
# \! n0 b, L" k# r2 J0 e+ d& r, }% G0 N
8 z* A$ X* \% |
下载:) H, C, w2 t. f0 A4 |5 a* m
游客,如果您要查看本帖隐藏内容请回复

* @6 l) B  ^+ Y/ r1 Y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 01:45 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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