久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

霧霾(PM2.5)檢測與處理模塊proteus仿真與源碼

  [復(fù)制鏈接]
ID:217263 發(fā)表于 2017-7-12 16:32 | 顯示全部樓層 |閱讀模式
大學(xué)期間第一次經(jīng)歷小學(xué)期,真是痛苦.....老師還要求做一個PM2.5檢測和處理的仿真,倒騰了兩個星期,又參(chao)照(xi)了論壇內(nèi)諸位大神的仿真圖,總算給倒騰出來了,深感單片機(jī)學(xué)習(xí)真是不容易。給各位共享出來,加油學(xué)習(xí),與諸君共勉......

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):

仿真圖

仿真圖
0.png

單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define LCD P0                                      //
  6. sbit PM2_5 = P2^1;  //PM2.5模塊PWM輸入口
  7. sbit busy=P0^7;     // "忙"標(biāo)志位
  8. sbit add=P1^0;
  9. sbit jian=P1^1;
  10. sbit ledred=P1^2;
  11. sbit ledgreen=P1^3;
  12. sbit sanji=P2^2;
  13. sbit erji=P2^3;
  14. sbit yiji=P2^4;
  15. sbit guolvwang=P2^0;
  16. sbit warning=P1^7;  
  17. uint ji=120;  
  18. uint LowPulseTime_30s = 0; //30秒內(nèi)低電平的時間,單位為ms
  19. uint LowPulseTime_3s = 0; //3秒內(nèi)低電平的時間,單位為ms
  20. uint TotalTime_3s = 0;//總時間,3秒計數(shù)器
  21. uint TotalTime_30s = 0;//總時間,30秒計數(shù)器*
  22. uint LowperTotal = 0; //30秒內(nèi)的低脈沖率,就是30秒內(nèi)的低脈沖時間除以30秒的總時間,范圍為5%~25%
  23. uint Concen = 0;//濃度值,整數(shù)
  24. uint pulseTime[10] = {0};  //每隔3秒的低電平時間數(shù)組,10項剛好就是30秒
  25. uchar Index = 0; //上述數(shù)組的索引
  26. bit bFreshDis = 0; //顯示值刷新標(biāo)志位,每隔3秒刷新一次顯示
  27. bit bStartDis = 0; //開始顯示濃度值標(biāo)志位,因為上電后要等30秒的預(yù)熱時間才能計算濃度值
  28. #define INT_CLOCK 1 //INT_CLOCK為定時值,單位為ms ,此處定義為1ms
  29. #define CRY_FREQUENCY 11059200 //CRY_FREQUENCY為晶振頻率,單位為,Hz
  30. uchar TL0_temp;         //暫存TL0的初值 中斷值
  31. uchar TH0_temp;         //暫存TH0的初值
  32. unsigned char fuhao;       
  33. //代碼表
  34. uchar dat=0x00;
  35. uchar CH;
  36. uchar dis[]={0x01,0x02,0x03,0x04};
  37. unsigned char code hutab[10]={"0123456789"};
  38. uchar  code tablewe[]={0xfd,0xfb,0xf7,0xf0,0xdf,0xfe};
  39. unsigned char code TAB1[]={ 0x0c,0x12,0x12,0x0c,
  40.                             0x00,0x00,0x00,0x00,
  41.                           };
  42. //字符表
  43. unsigned char code digit[20]={"0123456789"};     //定義字符數(shù)組顯示數(shù)字                                         
  44. /*************************
  45. LCD相關(guān)變量
  46. *************************/
  47. sbit RS=P2^5;
  48. sbit RW=P2^6;
  49. sbit EN=P2^7;
  50. //------------------------------------  延時函數(shù)  -------------------------------------------
  51. void delay(unsigned int t)                      //延時若干微秒
  52. {
  53.    while(t--);
  54. }
  55. //定時器
  56. void Timer0_init()
  57. {
  58.         unsigned long T0_temp;                                     //暫存T0的初始值       
  59.         T0_temp = 65536-((INT_CLOCK *CRY_FREQUENCY /1000)/12);    //T0初始值計算公式,參考教科書
  60.         TL0_temp = T0_temp & 0xff;
  61.         TH0_temp = T0_temp >> 8;
  62.         TL0 = TL0_temp;
  63.         TH0 = TH0_temp;
  64.         TMOD = 0x11;
  65.         TR0 = 1;  
  66.         ET0 = 1;
  67.     CH=0x00;                     
  68. }

  69. /************************************************
  70. 1602相關(guān)函數(shù)定義
  71. ************************************************/
  72. //----------------------------------
  73. void CHECK_BF()                                      //判斷是否忙碌
  74. {
  75.   do
  76.    {
  77.     LCD=0xff;   
  78.     RS=0;                                       // RS=0,選擇指令寄存器
  79.     RW=1;                                       // RW=1,選擇讀模式
  80.     EN=0;                                       // 執(zhí)行顯示命令
  81.     EN=1;                                       // 允許讀/寫
  82.    }  
  83.   while(busy);                                  //busy為高電平表示忙,循環(huán)等待
  84. }

  85. void WR_COMM()//寫指令//
  86. {
  87.    RS=0;
  88.    RW=0;
  89.    EN=0;
  90.   CHECK_BF();
  91.    EN=1;
  92. }

  93. void WR_DATA()//寫數(shù)據(jù)//
  94. {
  95.    RS=1;
  96.    RW=0;
  97.    EN=0;
  98.    CHECK_BF();
  99.    EN=1;
  100. }

  101. //1602初始化
  102. void INIT_LCD()                                       
  103. {
  104.    unsigned char i=200;
  105.     {
  106.       while(--i);
  107.       LCD=0x01;                                 //清屏并光標(biāo)復(fù)位
  108.       WR_COMM();                                //寫入命令
  109.       LCD=0x38;                                 //設(shè)置顯示模式:8位2行5x7點陣
  110.       WR_COMM();
  111.       LCD=0x0c;                                 //開顯示屏
  112.           WR_COMM();
  113.       LCD=0x06;                                 //文字不動,光標(biāo)自動右移
  114.       WR_COMM();                                //寫入命令
  115.     }
  116. }




  117. //顯示模塊
  118. void DISP_YUJING()//顯示濃度
  119. {       
  120.           LCD=0xc0;
  121.           WR_COMM();
  122.           LCD=('P');
  123.           WR_DATA();

  124.           LCD=0xc1;
  125.           WR_COMM();
  126.           LCD=('M');
  127.           WR_DATA();

  128.           LCD=0xc2;
  129.           WR_COMM();
  130.           LCD=('2');
  131.           WR_DATA();

  132.           LCD=0xc3;
  133.           WR_COMM();
  134.           LCD=('.');
  135.           WR_DATA();

  136.           LCD=0xc4;
  137.           WR_COMM();
  138.           LCD=('5');
  139.           WR_DATA();

  140.           LCD=0xc5;
  141.           WR_COMM();
  142.           LCD=('y');
  143.           WR_DATA();

  144.            LCD=0xc6;
  145.           WR_COMM();
  146.           LCD=('u');
  147.           WR_DATA();
  148.                     
  149.           LCD=0xc7;
  150.           WR_COMM();
  151.           LCD=('j');
  152.           WR_DATA();

  153.           LCD=0xc8;
  154.           WR_COMM();
  155.           LCD=('i');
  156.           WR_DATA();

  157.            LCD=0xc9;
  158.           WR_COMM();
  159.           LCD=('n');
  160.           WR_DATA();
  161.                     
  162.           LCD=0xca;
  163.           WR_COMM();
  164.           LCD=('g');
  165.           WR_DATA();

  166.           LCD=0xcb;
  167.           WR_COMM();
  168.           LCD=(':');
  169.           WR_DATA();

  170.           LCD=0xcc;
  171.           WR_COMM();
  172.           LCD=ji/100+0x30;
  173.           WR_DATA();

  174.           LCD=0xcd;
  175.           WR_COMM();
  176.           LCD=(ji%100)/10+0x30;
  177.           WR_DATA();


  178.           LCD=0xce;
  179.           WR_COMM();
  180.           LCD=(ji%10)+0x30;
  181.           WR_DATA();
  182.           


  183.           
  184. }



  185. void DISP_CONCE()//顯示濃度
  186. {       
  187.           LCD=0x80;
  188.           WR_COMM();
  189.           LCD=('P');
  190.           WR_DATA();

  191.           LCD=0x81;
  192.           WR_COMM();
  193.           LCD=('M');
  194.           WR_DATA();

  195.           LCD=0x82;
  196.           WR_COMM();
  197.           LCD=('2');
  198.           WR_DATA();

  199.           LCD=0x83;
  200.           WR_COMM();
  201.           LCD=('.');
  202.           WR_DATA();

  203.           LCD=0x84;
  204.           WR_COMM();
  205.           LCD=('5');
  206.           WR_DATA();

  207.           LCD=0x85;
  208.           WR_COMM();
  209.           LCD=('j');
  210.           WR_DATA();

  211.            LCD=0x86;
  212.           WR_COMM();
  213.           LCD=('i');
  214.           WR_DATA();
  215.                     
  216.           LCD=0x87;
  217.           WR_COMM();
  218.           LCD=('a');
  219.           WR_DATA();

  220.           LCD=0x88;
  221.           WR_COMM();
  222.           LCD=('n');
  223.           WR_DATA();

  224.            LCD=0x89;
  225.           WR_COMM();
  226.           LCD=('c');
  227.           WR_DATA();
  228.                     
  229.           LCD=0x8a;
  230.           WR_COMM();
  231.           LCD=('e');
  232.           WR_DATA();

  233.           LCD=0x8b;
  234.           WR_COMM();
  235.           LCD=(':');
  236.           WR_DATA();

  237.           LCD=0x8c;
  238.           WR_COMM();
  239.           LCD=Concen/100+0x30;
  240.           WR_DATA();

  241.           LCD=0x8d;
  242.           WR_COMM();
  243.           LCD=(Concen%100)/10+0x30;
  244.           WR_DATA();


  245.           LCD=0x8e;
  246.           WR_COMM();
  247.           LCD=(Concen%10)+0x30;
  248.           WR_DATA();
  249.           
  250. }

  251. void DISP_WAIT()//顯示等待
  252. {
  253.                    LCD=0x80;
  254.           WR_COMM();
  255.           LCD=('P');
  256.           WR_DATA();

  257.           LCD=0x81;
  258.           WR_COMM();
  259.           LCD=('M');
  260.           WR_DATA();

  261.           LCD=0x82;
  262.           WR_COMM();
  263.           LCD=('2');
  264.           WR_DATA();

  265.           LCD=0x83;
  266.           WR_COMM();
  267.           LCD=('.');
  268.           WR_DATA();

  269.           LCD=0x84;
  270.           WR_COMM();
  271.           LCD=('5');
  272.           WR_DATA();

  273.           LCD=0x85;
  274.           WR_COMM();
  275.           LCD=('j');
  276.           WR_DATA();

  277.            LCD=0x86;
  278.           WR_COMM();
  279.           LCD=('i');
  280.           WR_DATA();
  281.                     
  282.           LCD=0x87;
  283.           WR_COMM();
  284.           LCD=('a');
  285.           WR_DATA();

  286.           LCD=0x88;
  287.           WR_COMM();
  288.           LCD=('n');
  289.           WR_DATA();

  290.            LCD=0x89;
  291.           WR_COMM();
  292.           LCD=('c');
  293.           WR_DATA();
  294.                     
  295.           LCD=0x8a;
  296.           WR_COMM();
  297.           LCD=('e');
  298.           WR_DATA();

  299.           LCD=0x8b;
  300.           WR_COMM();
  301.           LCD=('w');
  302.           WR_DATA();

  303.           LCD=0x8c;
  304.           WR_COMM();
  305.           LCD=('a');
  306.           WR_DATA();

  307.           LCD=0x8d;
  308.           WR_COMM();
  309.           LCD=('i');
  310.           WR_DATA();


  311.           LCD=0x8e;
  312.           WR_COMM();
  313.           LCD=('t');
  314.           WR_DATA();
  315.           
  316.          
  317. }   
  318. void PM2_5SHUAXIN()
  319.    {
  320.    uchar i;
  321.            if(bStartDis)  
  322.                 {
  323.                         if(bFreshDis)        /*開始刷新*/
  324.                         {
  325.                                  bFreshDis = 0;
  326.                                  LowPulseTime_30s = 0;
  327.                                  for(i = 0;i < 10;i++)
  328.                                  LowPulseTime_30s += pulseTime[i];  /**統(tǒng)計30秒內(nèi)的低電平時間**/
  329.                         }
  330.                         LowperTotal =  LowPulseTime_30s/30; //低脈沖率本來是小數(shù),但這里將其變成整數(shù),便于單片機(jī)處理,假如脈沖率為25%,那么經(jīng)過此公式計算得到的值為25
  331.                         Concen = (LowperTotal*10)/2; //濃度值 = 低脈沖率/2 ;將濃度值放大十倍,變整數(shù)方便顯示*/
  332.                         DISP_CONCE();  //顯示
  333.        
  334.                 }
  335.                 else        /*預(yù)熱過程*/
  336.                 {
  337.                         DISP_WAIT();   /*顯示預(yù)熱*/
  338.                 }        }
  339. /*************************************
  340. 主程序

  341. **************************************/
  342. //main
  343. void main()
  344. {
  345.     uint ji2;
  346.         uint ji3;
  347.         Timer0_init();        //中斷初始化
  348.         INIT_LCD();                  //1602初始化
  349.         EA = 1;                          //開中斷
  350.     delay(100);
  351.          
  352.         while(1)
  353.         {                
  354.              ji2=ji+50;
  355.              ji3=ji+100;

  356.                   if(guolvwang==1)
  357.                   warning=1;
  358.                   else
  359.                   warning=0;

  360.              if(add==0)
  361.                  {
  362.                  delay(20000);
  363.              ji++;
  364.                  }
  365.              if(jian==0)
  366.                  {
  367.                  delay(20000);
  368.              ji--;
  369.                  }
  370.                  if(Concen>=ji)
  371.                  {
  372.                  ledgreen=0;
  373.                  ledred=1;
  374.                  }
  375.                  else
  376.                  {
  377.                  ledred=0;
  378.                  ledgreen=1;
  379.                  }
  380.                  //報警部分

  381.                  if(Concen>=ji3)
  382.                  sanji=1;
  383.                  else
  384.                  sanji=0;

  385.                  if(Concen>=ji2)
  386.                  {
  387.                  if(Concen<ji3)
  388.                  erji=1;
  389.                  else
  390.                  erji=0;
  391.                  }
  392.                  else
  393.                  erji=0;

  394.                  if(Concen>=ji)
  395.                  {
  396.                  if(Concen<ji2)
  397. ……………………

  398. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
霧霾檢測及處理仿真.zip (103.03 KB, 下載次數(shù): 303)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2017-7-12 22:41 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

ID:228850 發(fā)表于 2017-8-22 20:22 | 顯示全部樓層
賺幾個黑幣去下載
回復(fù)

使用道具 舉報

ID:270790 發(fā)表于 2018-1-3 14:49 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

ID:296519 發(fā)表于 2018-3-24 21:47 | 顯示全部樓層
兄弟 要用,非常感謝
回復(fù)

使用道具 舉報

ID:217263 發(fā)表于 2018-3-29 16:07 | 顯示全部樓層
lfs 發(fā)表于 2018-3-24 21:47
兄弟,能發(fā)到這個郵箱上

發(fā)了,記得查收
回復(fù)

使用道具 舉報

ID:279195 發(fā)表于 2018-4-17 22:53 | 顯示全部樓層
請問為什么要加轉(zhuǎn)機(jī)啊,過濾嗎?hhh~
回復(fù)

使用道具 舉報

ID:310863 發(fā)表于 2018-4-18 15:24 | 顯示全部樓層
大哥,我也是做這個類似的題,希望能夠參考你的資料。能發(fā)一份給我嗎?
萬分感謝!!!
回復(fù)

使用道具 舉報

ID:268143 發(fā)表于 2018-6-4 10:20 | 顯示全部樓層
謝謝樓主分享
回復(fù)

使用道具 舉報

ID:268143 發(fā)表于 2018-6-4 10:21 | 顯示全部樓層
謝謝樓主分享
回復(fù)

使用道具 舉報

ID:381195 發(fā)表于 2018-7-31 14:07 | 顯示全部樓層
好東西,謝謝樓主分享
回復(fù)

使用道具 舉報

ID:480151 發(fā)表于 2019-3-11 09:07 | 顯示全部樓層
好東西 感謝樓主分享呀
回復(fù)

使用道具 舉報

ID:508693 發(fā)表于 2019-4-11 13:24 | 顯示全部樓層
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

ID:20793 發(fā)表于 2019-5-8 16:15 | 顯示全部樓層
不錯, 支持一下
回復(fù)

使用道具 舉報

ID:529538 發(fā)表于 2019-5-9 09:35 | 顯示全部樓層
需要什么材料啊
回復(fù)

使用道具 舉報

ID:564035 發(fā)表于 2019-6-16 23:35 | 顯示全部樓層
這是一份好資料,51黑因為有你更精彩!!!
回復(fù)

使用道具 舉報

ID:581300 發(fā)表于 2019-7-10 08:13 來自手機(jī) | 顯示全部樓層
樓主可以發(fā)一下么?感謝感謝
回復(fù)

使用道具 舉報

ID:585455 發(fā)表于 2019-7-18 17:03 | 顯示全部樓層
感謝無私分享
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 九九热精品视频 | 91偷拍精品一区二区三区 | www久久国产 | 成人中文字幕在线观看 | 国产福利在线 | 91日韩在线 | 亚洲一区中文 | 日韩图区| 国产成人综合网 | 中国一级特黄视频 | 亚洲视频在线一区 | 午夜电影合集 | www.日本三级| 黄视频免费观看 | 亚洲视频一区 | 国产h视频| 日韩有码在线播放 | 一区二区三区欧美 | 欧美日韩在线播放 | 黄色免费网址大全 | 成人av一区二区亚洲精 | 欧美一级免费观看 | 亚洲精品久久久 | 嫩草视频在线 | av一区二区三区 | 国产成人午夜高潮毛片 | 欧美视频三区 | 麻豆久久久9性大片 | 国内精品久久精品 | 国产成人久久精品一区二区三区 | 精品日韩一区 | 人人干人人玩 | 91久久久久 | 91麻豆精品一区二区三区 | 色综合成人网 | 91精品国产91久久综合桃花 | 中文字幕乱码视频32 | 成人永久免费视频 | 亚洲精品在线免费播放 | 亚洲精彩免费视频 | 一区二区三区国产 |