找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11913|回復(fù): 8
收起左側(cè)

二氧化碳CO2檢測顯示的單片機程序及資料

  [復(fù)制鏈接]
ID:140725 發(fā)表于 2017-3-6 23:51 | 顯示全部樓層 |閱讀模式
1.二氧化碳傳感器MH-Z19模塊的T(TXD)接單片機的RXD  二氧化碳傳感器的R(RXD)接單片機的TXD  ,二氧化碳的V+連接單片機5v正極,V-連接單片機的地(串口TTL通信就需要連接這四根線)
2.測量電壓選用5V  
3.單片機型號STC89C52,液晶顯示屏型號LCD1602,電路連接按照那個測試圖的
4.串口通信波特率9600,注意晶振要是11.0592M,否則會引起通信失敗
5.傳感器上電需要預(yù)熱3分鐘

0.png 0.png
0.png

CO2二氧化碳檢測的51單片機原理圖:
0.png


二氧化碳CO2檢測程序的測試,用的串口調(diào)試助手:
0.png

發(fā)送 ff  01  86  00  00 00  00   00   79  

接收的數(shù)據(jù)中 第三個數(shù)據(jù)*256+第四個數(shù)據(jù)(  串口接收顯示的是16進制數(shù))


單片機源碼:
  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)         //發(fā)送一字節(jié)   
  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傳感器發(fā)送數(shù)據(jù)
  43.    {
  44.     send(tab[i]);
  45.    }
  46.   delayms(1000);  //延時一秒  刷新測得數(shù)據(jù)
  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                //串口中斷服務(wù)函數(shù)
  61.   {
  62.    static uchar j;
  63.    ES=0;                         //禁止中斷
  64.    if(!RI);
  65.    RI=0;                    //清楚接收完畢標志
  66.    date[j]=SBUF;
  67.    if(date[0]==0xff)  //判斷接收到的第一位為傳感器所發(fā)數(shù)據(jù)
  68.       j++;
  69.   else
  70.       j=0;


復(fù)制代碼



全部資料下載:
http://www.torrancerestoration.com/bbs/dpj-46992-1.html

回復(fù)

使用道具 舉報

ID:197218 發(fā)表于 2017-5-6 10:47 | 顯示全部樓層
樓主可以給我發(fā)一下資料么
回復(fù)

使用道具 舉報

ID:346185 發(fā)表于 2018-6-8 14:36 | 顯示全部樓層
本帖最后由 通天塔2號 于 2018-6-10 16:45 編輯

這個程序接收不到數(shù)據(jù)
回復(fù)

使用道具 舉報

ID:410540 發(fā)表于 2018-10-22 14:22 | 顯示全部樓層
老哥,為啥四根線連接好了之后,單片機一直無法進行燒錄
回復(fù)

使用道具 舉報

ID:410540 發(fā)表于 2018-10-22 14:22 | 顯示全部樓層
老哥,為啥四根線連好之后,無法燒錄,一直顯示在檢測單片機,rx和tx也沒接反
回復(fù)

使用道具 舉報

ID:219607 發(fā)表于 2019-4-7 22:30 | 顯示全部樓層
qqhqqb 發(fā)表于 2018-10-22 14:22
老哥,為啥四根線連好之后,無法燒錄,一直顯示在檢測單片機,rx和tx也沒接反

請問解決了嗎
我也不能下程序
回復(fù)

使用道具 舉報

ID:219607 發(fā)表于 2019-4-7 23:25 | 顯示全部樓層
為啥用樓主的程序不行呢,程序下不進去
回復(fù)

使用道具 舉報

ID:474079 發(fā)表于 2019-6-12 09:01 | 顯示全部樓層
請問如果在這個代碼基礎(chǔ)上實現(xiàn)二氧化碳超過一定閾值時報警應(yīng)該怎么改呢?
回復(fù)

使用道具 舉報

ID:771243 發(fā)表于 2021-2-17 22:04 | 顯示全部樓層
qqhqqb 發(fā)表于 2018-10-22 14:22
老哥,為啥四根線連好之后,無法燒錄,一直顯示在檢測單片機,rx和tx也沒接反

你可能是用串口燒錄的,而你接好了線后,MHZ19B占了串口,所以你要先燒錄再接線
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表