1.二氧化碳传感器MH-Z19模块的T(TXD)接单片机的RXD 二氧化碳传感器的R(RXD)接单片机的TXD ,二氧化碳的V+连接单片机5v正极,V-连接单片机的地(串口TTL通信就需要连接这四根线)
2.测量电压选用5V
3.单片机型号STC89C52,液晶显示屏型号LCD1602,电路连接按照那个测试图的
4.串口通信波特率9600,注意晶振要是11.0592M,否则会引起通信失败
5.传感器上电需要预热3分钟
CO2二氧化碳检测的51单片机原理图:
二氧化碳CO2检测程序的测试,用的串口调试助手:
发送 ff 01 86 00 00 00 00 00 79
接收的数据中 第三个数据*256+第四个数据( 串口接收显示的是16进制数)
单片机源码:
- #include<reg52.h>
- #include<stdio.h>
- #include<intrins.h>
- #include"lcd1602.H"
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- uchar code tab[9]={0xff,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
- uchar date[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
- /************************************
- 延时子程序
- 延时时间(xms*1)ms
- *************************************/
- void delayms(uint xms)
- {
- uint x,y;
- for(x=xms;x>0;x--)
- for(y=110;y>0;y--);
- }
-
- void send(uchar dat) //发送一字节
- {
- SBUF=dat;
- while(!TI);
- TI=0;
- }
-
-
- void main(void)
- {
- uint tmp;
- uchar i;
- TMOD=0x20; // T1定时方式2
- SCON=0x40;//串行工作 方式1
- PCON=0x00; //不加倍
- TH1=TL1=0xfd; //定时器1赋初值 保证波特率9600
- TR1=1; //开定时器1
- REN=1; //允许串口接收
- init_1602(); //液晶初始化
- delayms(10);
- ES=1; //打开串口中断
- EA=1; //开总中断
- while(1)
- {
- for(i=0;i<9;i++) //向co2传感器发送数据
- {
- send(tab[i]);
- }
- delayms(1000); //延时一秒 刷新测得数据
-
- tmp=date[2]*256+date[3]; //计算出co2浓度值
- if(tmp>9999)
- tmp=0;
- WRITE_LCD1602_COM(0x80+8);
- if((tmp/1000)>0)
- WRITE_LCD1602_DAT(LCD1602_Table[tmp/1000]);
- else WRITE_LCD1602_DAT(' ');
- WRITE_LCD1602_DAT(LCD1602_Table[tmp%1000/100]);
- WRITE_LCD1602_DAT(LCD1602_Table[tmp%100/10]);
- WRITE_LCD1602_DAT(LCD1602_Table[tmp%10]);
- }
- }
- void serial()interrupt 4 //串口中断服务函数
- {
- static uchar j;
- ES=0; //禁止中断
- if(!RI);
- RI=0; //清楚接收完毕标志
- date[j]=SBUF;
- if(date[0]==0xff) //判断接收到的第一位为传感器所发数据
- j++;
- else
- j=0;
复制代码
全部资料下载:
http://www.51hei.com/bbs/dpj-46992-1.html
|