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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 yxlk 于 2019-1-19 10:35 编辑 4 K/ n4 @# {4 T* b) Z/ f7 r
/ f/ E8 S; t2 r* s. n
二氧化碳CO2检测显示的单片机程序及资料
5 [( F2 D" [& p' P. l
  n9 g# M" e8 _1 p. w! y. v8 P1.二氧化碳传感器MH-Z19模块的T(TXD)接单片机的RXD  二氧化碳传感器的R(RXD)接单片机的TXD  ,二氧化碳的V+连接单片机5v正极,V-连接单片机的地(串口TTL通信就需要连接这四根线); Y) T; o& y. W/ n4 T
2.测量电压选用5V  
2 H% {, \+ M" H1 l" ?" i( ?) V3.单片机型号STC89C52,液晶显示屏型号LCD1602,电路连接按照那个测试图的& ^. M  u# z. m: F$ ^( m
4.串口通信波特率9600,注意晶振要是11.0592M,否则会引起通信失败
! Q( w: x* k  t! q) J6 m$ {8 W5.传感器上电需要预热3分钟
$ W5 [5 E" \3 J7 R0 t2 K4 G' c
1 o0 p( @. o- a% `( G4 d9 \
, l, y  b& M% B4 D$ L ( e# Y( T4 V4 D! O) X

, Z( K5 y+ j: V; `# E! O' cCO2二氧化碳检测的51单片机原理图:
; [# _- J, Y5 t

& i; ?! U* a& ~* \/ v) J% @7 P1 e- S* l) [' @

5 I+ h& k8 R7 s3 D4 d: H+ L二氧化碳CO2检测程序的测试,用的串口调试助手:' ?* p& H* |- j3 g9 }2 Z8 e1 g
. ?7 n* K5 i; m+ B& e
  q' z! R! {2 n; [. _
发送 ff  01  86  00  00 00  00   00   79  
, Q2 k6 D" e9 i
接收的数据中 第三个数据*256+第四个数据(  串口接收显示的是16进制数)
: s- L+ k: j$ N7 l9 w

* t% E( z% I) r+ N3 G单片机源码:
6 w! B3 U1 P. d; |
#include<reg52.h>" p! ^& d5 U. Z1 m) s
#include<stdio.h>
$ j4 x- U) b" w; Z: ?7 M# Q7 [#include<intrins.h>! E, S& M+ P+ }/ T  W4 ?6 P' L* S9 \5 f% N
#include"lcd1602.H", ?0 H1 ~4 S3 E5 E! {, ^" r  Z" b
#define uchar unsigned char
# [% u& z& e/ c1 `+ x5 @# G- v#define uint unsigned int
% E$ g" U0 d. m#define ulong unsigned long
6 u: P, n! w( K1 B
: T; X( B8 R; x2 O  R" N

# r% g" a4 h# F: R' E$ b( Buchar code tab[9]={0xff,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};: h1 I6 ^# E. b( y
uchar  date[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};9 k+ C  ~/ ~: d4 K

" P! Z4 U( {4 o& `
" u: G! x& B- n" v1 w* _* k
/************************************
$ s& L! w: [% B5 {    延时子程序
9 D- Q. U% ~8 _2 G, I" S4 J        延时时间(xms*1)ms
3 a) y6 T0 P% m1 |6 w*************************************/5 F1 n4 d8 b/ }5 m& w  x  s
void delayms(uint xms), @3 v# I/ p1 v/ [( W- J4 j$ |
{
: h$ B8 K/ f- u0 T! L        uint x,y;. D6 D9 [. J6 N& M5 z$ ~
        for(x=xms;x>0;x--)) s5 \% Y! {5 S& \) i0 D) u8 K. {
                for(y=110;y>0;y--);/ B! v5 i! L: {# W! u  @7 o+ c
}
& ?" o; k5 J: k7 x
% b6 c" r9 g* R# t) ~" V( c void send(uchar dat)         //发送一字节   
* P# }5 n, a. t) M: Y  [% E! _4 }: s {
0 I2 c/ x, A. d. Q  SBUF=dat;
0 V- T9 a9 N7 j  while(!TI);' {+ P% Q( M6 S
  TI=0;+ d0 T" m% K! m' ]
}2 \, H' Y. V" a/ ^/ m* t1 G
1 N6 s  b4 d0 }" Z; o5 U
7 X4 v6 w2 _6 p" _& g& u( p
. t  }1 C+ I9 e1 a
0 g9 E8 h) K: a3 K8 i% d

% d3 g( e$ R5 w: M: L0 G

6 i2 g. s7 H" }1 S# f2 x0 Yvoid main(void)% P- J4 j1 f' c2 N
{
  t! M) d$ m/ x8 E1 ~2 u1 k4 h uint  tmp;
5 m& d+ y$ ]7 m1 S3 H uchar i;
1 M" }! W4 y$ i: ]) P$ D TMOD=0x20;         // T1定时方式2
4 f: c/ v: c: k/ `7 A/ l& g SCON=0x40;//串行工作 方式1
3 ?, \) m. s, ` PCON=0x00; //不加倍, j; f6 L% D' `$ a- u5 k) _
TH1=TL1=0xfd; //定时器1赋初值  保证波特率9600
' [0 q( h" N/ G. f" n3 m. ~6 F TR1=1;                  //开定时器15 |' j, E0 O5 t5 s/ a6 f5 S* t" T
REN=1;                  //允许串口接收
2 u) _& V- G: |; v  U; T2 X4 Ginit_1602();   //液晶初始化
+ U  |, A  K8 b1 f' H, q0 Zdelayms(10);
& Y' t& u, V+ x6 z. n$ n, X6 M ES=1;                  //打开串口中断
+ C% `$ T% q- }! t0 i3 e% U% Q& y EA=1;                  //开总中断& ]. g( @6 I3 @8 e, a5 a( m- y: z
while(1)                                                        
% D' T) f" l7 f. T$ L; u{
$ l7 J' H7 u; p7 l5 d1 y7 y for(i=0;i<9;i++)  //向co2传感器发送数据
. x" W6 ?/ J& l) @   {
9 G8 g; v# U2 G: U( ~; M) g5 l    send(tab);
! N4 r/ Q/ Z  f. D: n   }
4 L7 [& ~% C- v- W1 a5 K  delayms(1000);  //延时一秒  刷新测得数据
' z3 n& H- m' p% D   
/ [* w. W3 G& X! \: N9 R* c# G( E% ^             tmp=date[2]*256+date[3];        //计算出co2浓度值4 f+ \+ k4 b: y+ s
                         if(tmp>9999)
; @$ P$ T' E8 u8 ^                         tmp=0;   
# n6 v; r3 u! k9 s7 V) T& J                 WRITE_LCD1602_COM(0x80+8);
. y) j! }- D( Y+ E( A' X- h                         if((tmp/1000)>0)
7 i8 M! r+ r+ C7 ~) s& P; e3 n                 WRITE_LCD1602_DAT(LCD1602_Table[tmp/1000]);* Q2 t  J7 L8 Y6 M- p# |
                 else WRITE_LCD1602_DAT(' ');
  R# }  [. S; ~             WRITE_LCD1602_DAT(LCD1602_Table[tmp%1000/100]);2 L  K5 T5 f& Q5 d
                 WRITE_LCD1602_DAT(LCD1602_Table[tmp%100/10]);
( Q8 u. a! _. K                 WRITE_LCD1602_DAT(LCD1602_Table[tmp%10]);
: ^" S* K  Z# p- w' |, Q+ N        }, S( |) U9 P& n4 U4 ^
   }
7 _1 Z: f; w' \! Z0 d: ?* E. F8 B9 L( \' N. c
/ w, C/ t, ~$ ~" M
void serial()interrupt 4                //串口中断服务函数
: R3 V% S8 X. y9 d2 z1 k" S  {) Y6 ]" \7 b3 ?
   static uchar j;" x) Y; F  p' d' I
   ES=0;                         //禁止中断
# W' @0 w! a# d6 Y, k* v9 f: ?& a   if(!RI);; i& }" G  n; f8 N: K( X  p
   RI=0;                    //清楚接收完毕标志: Y4 m! {/ e+ c) F2 C+ f
   date[j]=SBUF; : c1 Z/ P+ }3 H! h
   if(date[0]==0xff)  //判断接收到的第一位为传感器所发数据
! L. i" U3 @8 b) y# `0 t6 a2 k9 n( E( \, n      j++;0 a" ?+ E3 m. B9 Y$ d0 F
  else
" _% M6 p2 U9 p( _  K& ?      j=0;
8 }; `  M% S5 V- j5 r" h8 }; j
/ p# G3 C6 o# U1 c& ~
: |- e* c* g( m, u& T% F" g下载:
, Y; o$ U% p. b6 y; \4 s
游客,如果您要查看本帖隐藏内容请回复
" i1 }2 E+ N& X% s0 ]% C& a5 G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-1 15:23 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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