找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10642|回复: 8
打印 上一主题 下一主题
收起左侧

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

  [复制链接]
跳转到指定楼层
楼主
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进制数)


单片机源码:
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #include<intrins.h>
  4. #include"lcd1602.H"
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. #define ulong unsigned long

  8. uchar code tab[9]={0xff,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
  9. uchar  date[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

  10. /************************************
  11.     延时子程序
  12.         延时时间(xms*1)ms
  13. *************************************/
  14. void delayms(uint xms)
  15. {
  16.         uint x,y;
  17.         for(x=xms;x>0;x--)
  18.                 for(y=110;y>0;y--);
  19. }

  20. void send(uchar dat)         //发送一字节   
  21. {
  22.   SBUF=dat;
  23.   while(!TI);
  24.   TI=0;
  25. }




  26. void main(void)
  27. {
  28. uint  tmp;
  29. uchar i;
  30. TMOD=0x20;         // T1定时方式2
  31. SCON=0x40;//串行工作 方式1
  32. PCON=0x00; //不加倍
  33. TH1=TL1=0xfd; //定时器1赋初值  保证波特率9600
  34. TR1=1;                  //开定时器1
  35. REN=1;                  //允许串口接收
  36. init_1602();   //液晶初始化
  37. delayms(10);
  38. ES=1;                  //打开串口中断
  39. EA=1;                  //开总中断
  40. while(1)                                                        
  41. {
  42. for(i=0;i<9;i++)  //向co2传感器发送数据
  43.    {
  44.     send(tab[i]);
  45.    }
  46.   delayms(1000);  //延时一秒  刷新测得数据
  47.    
  48.              tmp=date[2]*256+date[3];        //计算出co2浓度值
  49.                          if(tmp>9999)
  50.                          tmp=0;   
  51.                  WRITE_LCD1602_COM(0x80+8);
  52.                          if((tmp/1000)>0)
  53.                  WRITE_LCD1602_DAT(LCD1602_Table[tmp/1000]);
  54.                  else WRITE_LCD1602_DAT(' ');
  55.              WRITE_LCD1602_DAT(LCD1602_Table[tmp%1000/100]);
  56.                  WRITE_LCD1602_DAT(LCD1602_Table[tmp%100/10]);
  57.                  WRITE_LCD1602_DAT(LCD1602_Table[tmp%10]);
  58.         }
  59.    }

  60. void serial()interrupt 4                //串口中断服务函数
  61.   {
  62.    static uchar j;
  63.    ES=0;                         //禁止中断
  64.    if(!RI);
  65.    RI=0;                    //清楚接收完毕标志
  66.    date[j]=SBUF;
  67.    if(date[0]==0xff)  //判断接收到的第一位为传感器所发数据
  68.       j++;
  69.   else
  70.       j=0;


复制代码



全部资料下载:
http://www.51hei.com/bbs/dpj-46992-1.html

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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