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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5676|回復: 4
打印 上一主題 下一主題
收起左側

51單片機家庭環境監測系統全套資料 DHT11程序+原理圖 并附上實體圖

  [復制鏈接]
跳轉到指定樓層
樓主
基于單片機的家庭環境監測系統
制作出來的實物圖如下:


電路原理圖如下:


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <absacc.h>
  4. #include <math.h>  
  5. #include "uart.c"
  6. #include "delay.h"
  7. #include "0832.h"
  8. #define uchar unsigned char
  9. #define uint unsigned int
  10. #include "eeprom52.h"

  11. //T:23C P0.12mg/m3
  12. //H:45% C:000mL/m3

  13. sbit DATA = P2^0;  //溫濕度
  14. sbit E=P2^5;                //1602使能引腳
  15. sbit RS=P2^7;                //1602數據/命令選擇引腳
  16. sbit RW=P2^6;
  17. sbit K1=P1^3;//設置鍵
  18. sbit K2=P1^4;//加
  19. sbit K3=P1^5;//減
  20. sbit K4=P1^6;  //確認
  21. sbit LED6=P3^2;         //煙霧報警
  22. sbit LED1=P3^3;                           //溫度上限
  23. sbit LED2=P3^4;                                //溫度下限
  24. sbit LED3=P3^5;                                 //濕度上限
  25. sbit LED4=P3^6;                                           //濕度下限
  26. sbit LED5=P3^7;                                                         //PM2.5報警
  27. sbit alarm=P1^7;                 //蜂鳴器
  28. uchar U8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp;
  29. uchar U8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,U8checkdata;
  30. uchar Mode,humidity,temperature;
  31. uint DA;
  32. bit bdata FlagStartRH;
  33. uchar flag ;//記錄當前設置狀態
  34. uint count;
  35. uchar sec=0;
  36. #define NULL 0
  37. #define RsBuf_N                        150
  38. bit flag_ok=0;
  39. uint sum;
  40. unsigned char xdata RsBuf[RsBuf_N];        //定義串口接收數據緩沖區
  41. uchar RsPoint;
  42. bit state=0;
  43. void TransmitText();
  44. unsigned char  dianhuahaoma[12]="17606735816";

  45. void Delay1(uint j)
  46. {
  47.     uchar i;
  48.     for(;j>0;j--)
  49.     {         
  50.                 for(i=0;i<27;i++);
  51.     }
  52. }


  53. void  Delay_10us(void)
  54. {
  55.     uchar i;
  56.     i--;
  57.     i--;
  58.     i--;
  59.     i--;
  60.     i--;
  61.     i--;
  62. }        

  63. void  COM(void)
  64. {
  65.     uchar i;
  66.     for(i=0;i<8;i++)           
  67.     {
  68.               U8FLAG=2;
  69.                    while((!DATA)&&U8FLAG++);
  70.                 Delay_10us();
  71.                 Delay_10us();
  72.                 Delay_10us();
  73.                   U8temp=0;
  74.         if(DATA)U8temp=1;
  75.                 U8FLAG=2;
  76.                 while((DATA)&&U8FLAG++);
  77.                    //超時則跳出for循環                  
  78.                    if(U8FLAG==1)break;
  79.                    //判斷數據位是0還是1         
  80.                      
  81.                 // 如果高電平高過預定0高電平值則數據位為 1
  82.                     
  83.                 U8comdata<<=1;
  84.                    U8comdata|=U8temp;        //0
  85.     }//rof
  86. }

  87. //--------------------------------
  88. //-----溫濕度讀取子程序 ------------
  89. //--------------------------------
  90. //----以下變量均為全局變量--------
  91. //----溫度高8位== U8T_data_H------
  92. //----溫度低8位== U8T_data_L------
  93. //----濕度高8位== U8RH_data_H-----
  94. //----濕度低8位== U8RH_data_L-----
  95. //----校驗 8位 == U8checkdata-----
  96. //----調用相關子程序如下----------
  97. //---- Delay();, Delay_10us();,COM();
  98. //--------------------------------
  99. uchar RH(void)
  100. {
  101.     //主機拉低18ms
  102.     DATA=0;
  103.         Delay1(180);  //原來為5
  104.         DATA=1;
  105.         //總線由上拉電阻拉高 主機延時20us
  106.         Delay_10us();
  107.         Delay_10us();
  108.         Delay_10us();
  109.         Delay_10us();
  110.         //主機設為輸入 判斷從機響應信號
  111.         DATA=1;
  112.         //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行         
  113.         if(!DATA)                 //T !         
  114.         {
  115.             U8FLAG=2;
  116.             //判斷從機是否發出 80us 的低電平響應信號是否結束         
  117.             while((!DATA)&&U8FLAG++);
  118.             U8FLAG=2;
  119.             //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
  120.             while((DATA)&&U8FLAG++);
  121.             //數據接收狀態                 
  122.             COM();
  123.             U8RH_data_H_temp=U8comdata;
  124.             COM();
  125.             U8RH_data_L_temp=U8comdata;
  126.             COM();
  127.             U8T_data_H_temp=U8comdata;
  128.             COM();
  129.             U8T_data_L_temp=U8comdata;
  130.             COM();
  131.             U8checkdata_temp=U8comdata;
  132.             DATA=1;
  133.             //數據校驗
  134.             U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
  135.             if(U8temp==U8checkdata_temp)
  136.             {
  137.                       U8RH_data_H=U8RH_data_H_temp;
  138.                       U8RH_data_L=U8RH_data_L_temp;
  139.                       U8T_data_H=U8T_data_H_temp;
  140.                       U8T_data_L=U8T_data_L_temp;
  141.                       U8checkdata=U8checkdata_temp;
  142.             }
  143.                 return 1;
  144.         }
  145.         else   //傳感器不響應
  146.         {
  147.            return 0;
  148.         }
  149. }

  150. /********************************************************************
  151. * 文件名  : 液晶1602顯示.c
  152. * 描述    :  該程序實現了對液晶1602的控制。
  153. ***********************************************************************/


  154. /********************************************************************
  155. * 名稱 : delay()
  156. * 功能 : 延時,延時時間大概為140US。
  157. * 輸入 : 無
  158. * 輸出 : 無
  159. ***********************************************************************/

  160. void delay()
  161. {
  162.         int i,j;
  163.         for(i=0; i<=10; i++)
  164.         for(j=0; j<=2; j++);
  165. }         
  166.         
  167. /********************************************************************
  168. * 名稱 : enable(uchar del)
  169. * 功能 : 1602命令函數
  170. * 輸入 : 輸入的命令值
  171. * 輸出 : 無
  172. ***********************************************************************/

  173. void write_1602com(uchar del)
  174. {
  175.         P0 = del;
  176.         RS = 0;
  177.         E = 1;
  178.         delay();
  179.         E = 0;
  180.         delay();
  181. }

  182. /********************************************************************
  183. * 名稱 : write(uchar del)
  184. * 功能 : 1602寫數據函數
  185. * 輸入 : 需要寫入1602的數據
  186. * 輸出 : 無
  187. ***********************************************************************/

  188. void write_1602dat(uchar del)
  189. {
  190.         P0 = del;
  191.         RS = 1;
  192.         E = 1;
  193.         delay();
  194.         E = 0;
  195.         delay();
  196. }

  197. /********************************************************************
  198. * 名稱 : L1602_init()
  199. * 功能 : 1602初始化,請參考1602的資料
  200. * 輸入 : 無
  201. * 輸出 : 無
  202. ***********************************************************************/
  203. void L1602_init(void)
  204. {
  205.         write_1602com(0x38);
  206.         write_1602com(0x0c);
  207.         write_1602com(0x06);
  208.         write_1602com(0x01); //清屏要放在最后
  209.         write_1602com(0x80);
  210.         write_1602dat('W');
  211.         write_1602dat('e');
  212.         write_1602dat('l');
  213.         write_1602dat('c');
  214.         write_1602dat('o');
  215.         write_1602dat('m');
  216.         write_1602dat('e');
  217.         write_1602dat(' ');
  218.         write_1602dat('t');
  219.         write_1602dat('o');
  220.         write_1602dat(' ');
  221.         write_1602dat('u');
  222.         write_1602dat('s');
  223.         write_1602dat('e');
  224.         write_1602com(0x80+0x40);
  225.         write_1602dat(' ');
  226.         write_1602dat(' ');
  227.         write_1602dat(' ');
  228.         write_1602dat(' ');
  229.         write_1602dat(' ');
  230.         write_1602dat('I');
  231.         write_1602dat('n');
  232.         write_1602dat('i');
  233.         write_1602dat('t');
  234.         write_1602dat('.');
  235.         write_1602dat('.');
  236.         write_1602dat('.');
  237. }

  238. //T:23C P0.12mg/m3
  239. //H:45% C:000mL/m3

  240. void display()
  241. {
  242.         write_1602com(0x82);
  243.         write_1602dat(temperature%100/10+0x30);
  244.         write_1602dat(temperature%100%10+0x30);
  245.         write_1602com(0xc2);
  246.         write_1602dat(humidity%100/10+0x30);
  247.         write_1602dat(humidity%100%10+0x30);
  248.         write_1602com(0x87);
  249.         write_1602dat(PM%10000/1000+0x30);
  250.         write_1602dat('.');
  251.         write_1602dat(PM%1000/100+0x30);
  252.         write_1602dat(PM%100/10+0x30);
  253.         write_1602com(0xc8);
  254.         write_1602dat(MQ/100+0x30);
  255.         write_1602dat(MQ%100/10+0x30);
  256.         write_1602dat(MQ%10+0x30);                                                                  
  257. }
  258. void display_1()
  259. {
  260.         write_1602com(0x83);
  261.         write_1602dat(TH%100/10+0x30);
  262.         write_1602dat(TH%100%10+0x30);
  263.         write_1602com(0x8c);
  264.         write_1602dat(TL%100/10+0x30);
  265.         write_1602dat(TL%100%10+0x30);
  266.         write_1602com(0xc3);
  267.         write_1602dat(HH%100/10+0x30);
  268.         write_1602dat(HH%100%10+0x30);
  269.         write_1602com(0xcc);
  270.         write_1602dat(HL%100/10+0x30);
  271.         write_1602dat(HL%100%10+0x30);
  272. }
  273. void display_2()
  274. {
  275.         write_1602com(0x86);
  276.         write_1602dat(PMH%1000/100+0x30);
  277.         write_1602dat('.');
  278.         write_1602dat(PMH%100/10+0x30);
  279.         write_1602dat(PMH%10+0x30);
  280.         write_1602com(0xc7);
  281.         write_1602dat(MQH/100+0x30);
  282.         write_1602dat(MQH%100/10+0x30);
  283.         write_1602dat(MQH%10+0x30);
  284. }
  285. void write_string(uchar * str)
  286. {
  287.   while( * str)
  288.   {
  289.   write_1602dat(* str);
  290.   str++;
  291.   }
  292. }

  293. /***********************發送TEXT短信息********************************
  294. */
  295. void TransmitText()   //發送號碼        發送內容,字母或數字
  296. {
  297. //        uchar i=5,j=5;
  298.         uchar send_number;
  299.         
  300.         SendString("AT+CMGF=1\r\n");        
  301.                
  302.         delayms_1000ms();
  303.         
  304.         SendString("AT+CSCS=\"UCS2\"\r\n");        
  305.         
  306.         delayms_1000ms();
  307.         
  308.         SendString("AT+CSMP=17,0,2,25\r\n");        
  309.         
  310.         delayms_1000ms();
  311.         
  312.         SendString("AT+CMGS=");        //信息發送指令 AT+CMGS=//
  313.         SendASC('"');
  314.         for(send_number=0;send_number<11;send_number++)
  315.         {
  316.                 SendASC('0');
  317.                 SendASC('0');
  318.                 SendASC('3');
  319.                 SendASC(dianhuahaoma[send_number]);
  320.         }   
  321.         SendASC('"');
  322.         SendASC('\r');                        //發送回車指令//
  323.         SendASC('\n');                        //發送換行指令//
  324.         
  325.         delayms_1000ms();
  326.         delayms_1000ms();
  327.         delayms_1000ms();

  328.         SendString("5F53524D6E295EA6FF1A");        //當前溫度:
  329.         if(temperature/10!=0)
  330.         {
  331.                 SendASC('0');
  332.                 SendASC('0');
  333.                 SendASC('3');
  334.                 SendASC(temperature/10+0x30);
  335.         }
  336.         SendASC('0');
  337.         SendASC('0');
  338.         SendASC('3');
  339.         SendASC(temperature%10+0x30);
  340.         SendString("2103");        //攝氏度符號
  341.         SendString("0020");                        //發送空格
  342.         SendString("6E295EA64E0A9650FF1A");        //溫度上限:
  343.         if(TH/10!=0)
  344.         {
  345.                 SendASC('0');
  346.                 SendASC('0');
  347.                 SendASC('3');
  348.                 SendASC(TH/10+0x30);
  349.         }
  350.         SendASC('0');
  351.         SendASC('0');
  352.         SendASC('3');
  353.         SendASC(TH%10+0x30);
  354.         SendString("2103");        //攝氏度符號
  355.         SendString("0020");                        //發送空格
  356.         SendString("6E295EA64E0B9650FF1A");        //溫度下限:
  357.         if(TL/10!=0)
  358.         {
  359.                 SendASC('0');
  360.                 SendASC('0');
  361.                 SendASC('3');
  362.                 SendASC(TL/10+0x30);
  363.         }
  364.         SendASC('0');
  365.         SendASC('0');
  366.         SendASC('3');
  367.         SendASC(TL%10+0x30);
  368.         SendString("2103");        //攝氏度符號
  369.         SendString("0020");                        //發送空格
  370.         if(temperature>=TH)
  371.         SendString("6E295EA68FC79AD88BF76CE8610FFF01");        //溫度過高請注意!
  372.         if(temperature<=TL)
  373.         SendString("6E295EA68FC74F4E8BF76CE8610FFF01");        //溫度過低請注意!
  374.         SendString("0020");                        //發送空格
  375.         SendString("5F53524D6E7F5EA6FF1A");        //當前濕度:
  376.         if(humidity/10!=0)
  377.         {
  378.                 SendASC('0');
  379.                 SendASC('0');
  380.                 SendASC('3');
  381.                 SendASC(humidity/10+0x30);
  382.         }
  383.         SendASC('0');
  384.         SendASC('0');
  385.         SendASC('3');
  386.         SendASC(humidity%10+0x30);
  387.         SendString("0025");        //百分號符號
  388.         SendString("0020");                        //發送空格
  389.         SendString("6E7F5EA64E0A9650FF1A");        //濕度上限:
  390.         if(HH/10!=0)
  391.         {
  392.                 SendASC('0');
  393.                 SendASC('0');
  394.                 SendASC('3');
  395.                 SendASC(HH/10+0x30);
  396.         }
  397.         SendASC('0');
  398.         SendASC('0');
  399.         SendASC('3');
  400.         SendASC(HH%10+0x30);
  401.         SendString("0025");        //百分號符號
  402.         SendString("0020");                        //發送空格
  403.         SendString("6E7F5EA64E0B9650FF1A");        //濕度下限:
  404.         if(HL/10!=0)
  405.         {
  406.                 SendASC('0');
  407.                 SendASC('0');
  408.                 SendASC('3');
  409.                 SendASC(HL/10+0x30);
  410.         }
  411.         SendASC('0');
  412.         SendASC('0');
  413.         SendASC('3');
  414.         SendASC(TL%10+0x30);
  415.         SendString("0025");        //百分號符號
  416.         SendString("0020");                        //發送空格
  417.         if(humidity>=HH)
  418.         SendString("6E7F5EA68FC79AD88BF76CE8610FFF01");        //濕度過高請注意!
  419.         if(humidity<=HL)
  420.         SendString("6E7F5EA68FC74F4E8BF76CE8610FFF01");        //濕度過低請注意!
  421.         SendString("0020");                        //發送空格
  422.         delayms_1000ms();
  423.         delayms_1000ms();        
  424.         SendASC(0x1a);
  425.         
  426.         SendASC('\r');
  427.         SendASC('\n');
  428.     delayms_1000ms();
  429.         RsPoint=0;
  430.         delayms_1000ms();delayms_1000ms();delayms_1000ms();delayms_1000ms();delayms_1000ms();
  431.         delayms_1000ms();delayms_1000ms();delayms_1000ms();delayms_1000ms();delayms_1000ms();
  432.         delayms_1000ms();delayms_1000ms();delayms_1000ms();delayms_1000ms();delayms_1000ms();
  433.         delayms_1000ms();delayms_1000ms();delayms_1000ms();delayms_1000ms();delayms_1000ms();
  434.         delayms_1000ms();delayms_1000ms();delayms_1000ms();delayms_1000ms();delayms_1000ms();
  435.         SendString("AT+CMGF=1\r\n");        
  436.                
  437.         delayms_1000ms();
  438.         
  439.         SendString("AT+CSCS=\"UCS2\"\r\n");        
  440.         
  441.         delayms_1000ms();
  442.         
  443.         SendString("AT+CSMP=17,0,2,25\r\n");        
  444.         
  445.         delayms_1000ms();
  446.         SendString("AT+CMGS=");        //信息發送指令 AT+CMGS=//
  447.         SendASC('"');
  448.         for(send_number=0;send_number<11;send_number++)
  449.         {
  450.                 SendASC('0');
  451.                 SendASC('0');
  452.                 SendASC('3');
  453.                 SendASC(dianhuahaoma[send_number]);
  454.         }   
  455.         SendASC('"');
  456.         SendASC('\r');                        //發送回車指令//
  457.         SendASC('\n');                        //發送換行指令//
  458.         
  459.         delayms_1000ms();
  460.         delayms_1000ms();
  461.         delayms_1000ms();

  462.         SendString("0050004D0032002E0035FF1A");        //PM2.5:

  463.         SendASC('0');
  464.         SendASC('0');
  465.         SendASC('3');
  466.         SendASC(PM/1000+0x30);
  467.         SendString("002E");        //.
  468.         SendASC('0');
  469.         SendASC('0');
  470.         SendASC('3');
  471.         SendASC(PM%1000/100+0x30);
  472.         SendASC('0');
  473.         SendASC('0');
  474.         SendASC('3');
  475.         SendASC(PM%100/10+0x30);
  476.         SendString("006D0067002F006D0033");        //mg/m3
  477.         SendString("0020");                        //發送空格
  478.         SendString("0050004D0032002E003562A58B66503CFF1A");        //PM2.5報警值:

  479.         SendASC('0');
  480.         SendASC('0');
  481.         SendASC('3');
  482.         SendASC(PMH/100+0x30);
  483.         SendString("002E");        //.
  484.         SendASC('0');
  485.         SendASC('0');
  486.         SendASC('3');
  487.         SendASC(PMH%100/10+0x30);
  488.         SendASC('0');
  489.         SendASC('0');
  490.         SendASC('3');
  491.         SendASC(PMH%10+0x30);
  492.         SendString("006D0067002F006D0033");        //mg/m3
  493.         SendString("0020");                        //發送空格
  494.         SendString("70DF96FEFF1A");        //煙霧:

  495.         if(MQ/100!=0)
  496.         {
  497.                 SendASC('0');
  498.                 SendASC('0');
  499.                 SendASC('3');
  500.                 SendASC(MQ/100+0x30);
  501.         }
  502.         if(MQ/10!=0)
  503.         {
  504.                 SendASC('0');
  505.                 SendASC('0');
  506.                 SendASC('3');
  507.                 SendASC(MQ%100/10+0x30);
  508.         }
  509.         SendASC('0');
  510.         SendASC('0');
  511.         SendASC('3');
  512.         SendASC(MQ%10+0x30);
  513.         SendString("006D0067002F006D0033");        //mg/m3
  514.         SendString("0020");                        //發送空格
  515.         SendString("70DF96FE62A58B66503CFF1A");        //煙霧報警值:
  516.         if(MQH/100!=0)
  517.         {
  518.                 SendASC('0');
  519.                 SendASC('0');
  520.                 SendASC('3');
  521.                 SendASC(MQH/100+0x30);
  522.         }
  523.         if(MQH/10!=0)
  524.         {
  525.                 SendASC('0');
  526.                 SendASC('0');
  527.                 SendASC('3');
  528.                 SendASC(MQH%100/10+0x30);
  529.         }
  530.         SendASC('0');
  531.         SendASC('0');
  532.         SendASC('3');
  533.         SendASC(MQH%10+0x30);
  534.         SendString("006D0067002F006D0033");        //mg/m3
  535.         
  536.         delayms_1000ms();
  537.         delayms_1000ms();        
  538.                 SendASC(0x1a);

  539.                         SendASC('\r');
  540.                     SendASC('\n');
  541.                 SendString("AT+CMGF=1\r\n");
  542.     delayms_1000ms();

  543.         RsPoint=0;           
  544. }
  545. /***按鍵函數***/
  546. void KEY()
  547. {
  548.         if(K1==0)
  549.         {
  550.                 Delay1(200);
  551.                 if(K1==0)
  552.                 {
  553.                         flag++;
  554.                         if(flag==1)
  555.                         {
  556.                                 FlagStartRH = 0;
  557.                                 TR0 = 0;
  558.                                 alarm=1;
  559.                                 write_1602com(0x80);
  560.                                 write_string("TH:   C  TL:   C");
  561.                                 write_1602com(0xc0);
  562.                                 write_string("HH:  %   HL:  % ");
  563.                                 write_1602com(0x85);
  564.                                 write_1602dat(0xdf);
  565.                                 write_1602com(0x8e);
  566.                                 write_1602dat(0xdf);
  567.                                 display_1();
  568.                                 write_1602com(0x84);
  569.                                 write_1602com(0x0f);
  570.                         }
  571.                         else if(flag==2)
  572.                         write_1602com(0x8d);
  573.                         else if(flag==3)
  574.                         write_1602com(0xc4);
  575.                         else if(flag==4)
  576.                         write_1602com(0xcd);
  577.                         else if(flag==5)
  578.                         {
  579.                                 write_1602com(0x80);
  580.                                 write_string("PM2.5: .  mg/m3 ");
  581.                                 write_1602com(0xc0);
  582.                                 write_string(" MQ  :    mL/m3 ");
  583.                                 display_2();
  584.                                 write_1602com(0x89);
  585.                         }
  586.                         else if(flag==6)
  587.                         write_1602com(0xc9);
  588.                         else
  589.                         {
  590.                                 flag=1;
  591.                                 write_1602com(0x80);
  592.                                 write_string("TH:   C  TL:   C");
  593.                                 write_1602com(0xc0);
  594.                                 write_string("HH:  %   HL:  % ");
  595.                                 write_1602com(0x85);
  596.                                 write_1602dat(0xdf);
  597.                                 write_1602com(0x8e);
  598.                                 write_1602dat(0xdf);
  599.                                 display_1();
  600.                                 write_1602com(0x84);
  601.                         }
  602.                         while(!K1);
  603.                 }
  604.         }
  605.         if(K2==0)
  606.         {
  607.                 Delay1(200);
  608.                 if(K2==0)
  609.                 {
  610.                         switch (flag)
  611.                         {
  612.                                 case 1: TH++;
  613.                                                 if(TH>99)
  614.                                                 TH=0;
  615.                                                 if(TH<=TL)
  616.                                                 TH=TL+1;  
  617.                                                 write_1602com(0x83);
  618.                                                 write_1602dat(TH/10+0x30);
  619.                                                 write_1602dat(TH%10+0x30);
  620.                                                 write_1602com(0x84);
  621.                                                 break;
  622.                                 case 2: TL++;
  623.                                                 if(TL>98)
  624.                                                 TL=0;
  625.                                                 if(TL>=TH)
  626.                                                 TL=TH-1;   
  627.                                                 write_1602com(0x8c);
  628.                                                 write_1602dat(TL/10+0x30);
  629.                                                 write_1602dat(TL%10+0x30);
  630.                                                 write_1602com(0x8d);
  631.                                                 break;
  632.                                 case 3: HH++;
  633.                                                 if(HH>99)
  634.                                                 HH=0;
  635.                                                 if(HH<=HL)
  636.                                                 HH=HL+1;
  637.                                                 write_1602com(0xc3);
  638.                                                 write_1602dat(HH/10+0x30);
  639.                                                 write_1602dat(HH%10+0x30);
  640.                                                 write_1602com(0xc4);
  641.                                                 break;
  642.                                 case 4: HL++;
  643.                                                 if(HL>98)
  644.                                                 HL=0;   
  645.                                                 if(HL>=HH)
  646.                                                 HL=HH-1;  
  647.                                                 write_1602com(0xcc);
  648.                                                 write_1602dat(HL/10+0x30);
  649.                                                 write_1602dat(HL%10+0x30);
  650.                                                 write_1602com(0xcd);
  651.                                                 break;
  652.                                 case 5: PMH++;
  653.                                                 if(PMH>200)  
  654.                                                 PMH=200;  
  655.                                                 write_1602com(0x86);
  656.                                                 write_1602dat(PMH%1000/100+0x30);
  657.                                                 write_1602dat('.');
  658.                                                 write_1602dat(PMH%100/10+0x30);
  659.                                                 write_1602dat(PMH%10+0x30);
  660.                                                 write_1602com(0x89);
  661.                                                 break;
  662.                                 case 6: MQH++;
  663.                                                 if(MQH>200)  
  664.                                                 MQH=200;  
  665.                                                 write_1602com(0xc7);
  666.                                                 write_1602dat(MQH%1000/100+0x30);
  667.                                                 write_1602dat(MQH%100/10+0x30);
  668.                                                 write_1602dat(MQH%10+0x30);
  669.                                                 write_1602com(0xc9);
  670.                                                 break;
  671.                         }
  672.                         while(!K2);
  673.                 }
  674.         }
  675.         if(K3==0)
  676.         {
  677.                 Delay1(200);
  678.                 if(K3==0)
  679.                 {
  680.                         switch (flag)
  681.                         {
  682.                                 case 1: TH--;
  683.                                                 if(TH>99)
  684.                                                 TH=99;
  685.                                                 if(TH<=TL)
  686.                                                 TH=TL+1;   
  687.                                                 write_1602com(0x83);
  688.                                                 write_1602dat(TH/10+0x30);
  689.                                                 write_1602dat(TH%10+0x30);
  690.                                                 write_1602com(0x84);
  691.                                                 break;
  692.                                 case 2: TL--;
  693.                                                 if(TL>99)
  694.                                                 TL=98;
  695.                                                 if(TL>=TH)
  696.                                                 TL=TH-1;   
  697.                                                 write_1602com(0x8c);
  698.                                                 write_1602dat(TL/10+0x30);
  699.                                                 write_1602dat(TL%10+0x30);
  700.                                                 write_1602com(0x8d);
  701.                                                 break;
  702.                                 case 3: HH--;
  703.                                                 if(HH>99)
  704.                                                 HH=99;
  705.                                                 if(HH<=HL)
  706.                                                 HH=HL+1;   
  707.                                                 write_1602com(0xc3);
  708.                                                 write_1602dat(HH/10+0x30);
  709.                                                 write_1602dat(HH%10+0x30);
  710.                                                 write_1602com(0xc4);
  711.                                                 break;
  712.                                 case 4: HL--;
  713.                                                 if(HL>99)
  714.                                                 HL=98;
  715.                                                 if(HL>=HH)
  716.                                                 HL=HH-1;   
  717.                                                 write_1602com(0xcc);
  718.                                                 write_1602dat(HL/10+0x30);
  719.                                                 write_1602dat(HL%10+0x30);
  720.                                                 write_1602com(0xcd);
  721.                                                 break;
  722.                                 case 5: PMH--;
  723.                                                 if(PMH<=0)  
  724.                                                 PMH=0;  
  725.                                                 write_1602com(0x86);
  726.                                                 write_1602dat(PMH%1000/100+0x30);
  727.                                                 write_1602dat('.');
  728.                                                 write_1602dat(PMH%100/10+0x30);
  729.                                                 write_1602dat(PMH%10+0x30);
  730.                                                 write_1602com(0x89);
  731.                                                 break;
  732.                                 case 6: MQH--;
  733.                                                 if(MQH<=0)  
  734.                                                 MQH=0;  
  735.                                                 write_1602com(0xc7);
  736.                                                 write_1602dat(MQH%1000/100+0x30);
  737.                                                 write_1602dat(MQH%100/10+0x30);
  738.                                                 write_1602dat(MQH%10+0x30);
  739.                                                 write_1602com(0xc9);
  740.                                                 break;
  741.                         }
  742.                         while(!K3);
  743.                 }
  744.         }
  745.         if(K4==0)
  746.         {
  747.                 Delay1(200);
  748.                 if(K4==0)
  749.                 {
  750.                         FlagStartRH = 1;
  751.                         TR0 = 1;
  752.                         write_1602com(0x0c);
  753.                         write_1602com(0x80);
  754.                         write_string("T:  C P .  mg/m3");
  755.                         write_1602com(0xc0);
  756.                         write_string("H:  % M:   mL/m3");
  757.                         display();
  758.                         flag=0;
  759.                         write_eeprom();
  760.                 }
  761.         }
  762. }

  763. void Onealarm()
  764. {
  765.         alarm=0;
  766.         Delay1(200);
  767.         alarm=1;
  768.         Delay1(200);
  769. }

  770. //T:23C P0.12mg/m3
  771. //H:45% C:000mL/m3

  772. /********************************************************************
  773. * 名稱 : Main()
  774. * 功能 : 主函數
  775. ***********************************************************************/
  776. void main()
  777. {
  778.     uint testnum;
  779.         uchar ys;
  780.         
  781.     Uart_init();
  782.         RW=0;
  783.           init_eeprom();
  784.         read_eeprom();
  785.         L1602_init();
  786.         for(ys=0;ys<10;ys++)
  787.         {
  788.                 delayms_1000ms();        
  789.         }
  790.         SendString("AT\r\n");
  791.         delayms_1000ms();
  792.         delayms_1000ms();
  793.         SendString("AT\r\n");
  794.         delayms_1000ms();
  795.         delayms_1000ms();
  796.         SendString("ati\r\n");
  797.         delayms_1000ms();
  798.         delayms_1000ms();
  799.         SendString("ati\r\n");
  800.         delayms_1000ms();
  801.         delayms_1000ms();
  802.         SendString("ATH\r\n");
  803.         delayms_1000ms();
  804.         delayms_1000ms();
  805.         SendString("AT+CMGF=1\r\n");
  806.         delayms_1000ms();
  807.         delayms_1000ms();
  808.         SendString("AT+CNMI=2,1,0,0,0\r\n");
  809.         delayms_1000ms();
  810.         delayms_1000ms();
  811.         SendString("ATH\r\n");
  812.         delayms_1000ms();
  813.         delayms_1000ms();
  814.         SendString("AT+CSCS=");
  815.         SendASC('"');
  816.         SendString("UCS2");
  817.         SendASC('"');
  818.         SendString("\r\n");         
  819.         delayms_1000ms();
  820.         write_1602com(0x80);
  821.         write_string("T:  C P .  mg/m3");
  822.         write_1602com(0xc0);
  823.         write_string("H:  % M:   mL/m3");
  824. //        Uart_init();
  825. //        TH=30;TL=20;HH=80;HL=50;COH=100;PMH=100;
  826.         while(1)
  827.         {
  828.                 KEY();
  829.                 if(flag==0)
  830.                 {
  831.                         if(FlagStartRH==1)
  832.                         {
  833.                                 testnum = RH();
  834.                                 FlagStartRH = 0;
  835.         //                        TR0 = 1;
  836.                                 humidity = U8RH_data_H;         //讀出溫濕度,只取整數部分
  837.                                 temperature = U8T_data_H;        
  838.                                 
  839.                                 DA=sum/40;
  840.                                 sum=0;
  841.                                 PM=DA*(float)(DA/4);
  842.                                 MQ=adc0832(1);
  843.                                 display();
  844.                         }
  845.                         if(temperature>=TH)
  846.                         LED1=0;
  847.                         else
  848.                         LED1=1;
  849.                         if(temperature<=TL)
  850.                         LED2=0;
  851.                         else
  852.                         LED2=1;
  853.                         if(humidity>=HH)
  854.                         LED3=0;
  855.                         else
  856.                         LED3=1;
  857.                         if(humidity<=HL)
  858.                         LED4=0;
  859.                         else
  860.                         LED4=1;
  861.                         if(PM/10>=PMH)
  862.                         LED5=0;
  863.                         else
  864.                         LED5=1;
  865.                         if(MQ>=MQH)
  866.                         LED6=0;
  867.                         else
  868.                         LED6=1;
  869.                         if(temperature>=TH||temperature<=TL||humidity>=HH||humidity<=HL||PM/10>=PMH||MQ>=MQH)
  870.                         {
  871.                                 Onealarm();        
  872.                         }
  873.                         else
  874.                         alarm=1;
  875.                         if((temperature>=TH||temperature<=TL||humidity>=HH||humidity<=HL||PM/10>=PMH||MQ>=MQH)&&flag_ok==1)
  876.                         {
  877.                                 TR0=0;
  878.                                 TransmitText();        
  879.                                 flag_ok=0;
  880.                                 TR0=1;
  881.                         }
  882.                 }
  883.         }
  884. }

  885. void timer0() interrupt 1
  886. {
  887.         TH0=0x4b;
  888.         TL0=0xff;
  889.         count++;

  890.         DA=adc0832(0);
  891.         sum=sum+DA;
  892.         if(count>=40)
  893.         {
  894.                 count=0;
  895.                 FlagStartRH=1;
  896.                 if(flag_ok==0)
  897.                 {
  898.                         sec++;
  899.                         if(sec>=10)
  900.                         {
  901.                                 sec=0;
  902.                                 flag_ok=1;
  903.                         }
  904.                 }
  905.         }
  906. }
復制代碼

所有資料51hei提供下載:
基于單片機的家庭環境監測系統.rar (2.82 MB, 下載次數: 225)


參考文檔.7z

1.65 MB, 下載次數: 146, 下載積分: 黑幣 -5

6-制作詳解.rar

3.39 MB, 下載次數: 121, 下載積分: 黑幣 -5

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:520521 發表于 2019-6-3 13:32 | 只看該作者
你好 請問SIM模塊怎樣用CAD仿真呢
回復

使用道具 舉報

板凳
ID:441206 發表于 2020-2-15 12:47 來自觸屏版 | 只看該作者
這個用的哪款傳感器
回復

使用道具 舉報

地板
ID:577269 發表于 2021-5-19 21:12 來自觸屏版 | 只看該作者
樓主沒有畫仿真,有誰能畫一個嗎?
回復

使用道具 舉報

5#
ID:473988 發表于 2021-5-30 22:11 | 只看該作者
有哪位大神能畫一個仿真,給大家學習一下嗎?
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人综合一区二区三区 | 日韩一区二区在线观看视频 | 麻豆久久久9性大片 | 亚洲综合二区 | 欧美一级免费看 | 欧美精品网 | 欧美片网站免费 | 亚洲综合无码一区二区 | xxx国产精品视频 | 精品av | 成人免费在线 | 99精品视频免费观看 | 国产精品91久久久久久 | 国产精品国产三级国产播12软件 | 在线欧美| 亚洲a视频 | 午夜精品福利视频 | 罗宾被扒开腿做同人网站 | 国产精品久久久久久久久久免费看 | 久久精品免费观看 | 欧美日韩精品 | 色综合一区二区三区 | 日韩视频三区 | 日韩精品免费在线观看 | 国产乱码精品一区二区三区五月婷 | 天堂在线1 | 成人欧美一区二区三区色青冈 | 9久久婷婷国产综合精品性色 | 欧美a区| 亚洲精品久久久9婷婷中文字幕 | 国产精品久久久久久久久久久免费看 | www.久久艹 | 亚洲一区成人 | 91成人在线 | 欧美一区2区三区4区公司二百 | 99亚洲精品| 91天堂网 | 亚洲精品二区 | 蜜臀av日日欢夜夜爽一区 | 成人妇女免费播放久久久 | 欧美精品久久久 |