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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的蔬菜大棚溫濕度智能控制系統程序設計

  [復制鏈接]
跳轉到指定樓層
樓主
基于51單片機的蔬菜大棚溫濕度智能控制系統設計模塊使用:使用dht11、74hc595數碼管模塊、繼電器模塊
任務
1)根據檢測到的溫濕度信息控制通風與加熱;
2)采用MCU、溫濕度傳感器、繼電器、按鍵、數碼管等;
3)通過按鍵設定大棚溫濕度報警值;
4)上傳信息到PC機;
5)當溫度或適度超限時用繼電器控制小燈狀態模擬相應動作的發生。



單片機源程序如下:
  1. ////////////////////////////////////////////////////10.3            17:58////////////////////////////////////////////////////////
  2. #include <reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  3. #include <intrins.h>
  4. #include <math.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int       
  7. sbit RS = P1^0;   //定義端口
  8. sbit RW = P1^1;
  9. sbit EN = P2^5;
  10. sbit DU = P2^0;
  11. sbit WE = P2^1;
  12. sbit Data = P3^6;//定義數據線


  13. uchar rec_dat[19];   //用于顯示的接收數據數組

  14. #define RS_CLR RS=0
  15. #define RS_SET RS=1

  16. #define RW_CLR RW=0
  17. #define RW_SET RW=1

  18. #define EN_CLR EN=0
  19. #define EN_SET EN=1

  20. #define DataPort P0


  21. void cmg88()//關數碼管,點陣函數
  22. {
  23. DU=1;  
  24. P0=0X00;
  25. DU=0;
  26. }
  27. /*------------------------------------------------
  28. uS延時函數,含有輸入參數 unsigned char t,無返回值
  29. unsigned char 是定義無符號字符變量,其值的范圍是
  30. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  31. 長度如下 T=tx2+5 uS
  32. ------------------------------------------------*/
  33. void DelayUs2x(unsigned char t)
  34. {   
  35. while(--t);
  36. }
  37. /*------------------------------------------------
  38. mS延時函數,含有輸入參數 unsigned char t,無返回值
  39. unsigned char 是定義無符號字符變量,其值的范圍是
  40. 0~255 這里使用晶振12M,精確延時請使用匯編
  41. ------------------------------------------------*/
  42. void DelayMs(unsigned char t)
  43. {
  44.      
  45. while(t--)
  46. {
  47.      //大致延時1mS
  48.      DelayUs2x(245);
  49.          DelayUs2x(245);
  50. }
  51. }

  52. //              判忙函數
  53. bit LCD_Check_Busy(void)
  54. {
  55. DataPort= 0xFF;
  56. RS_CLR;
  57. RW_SET;
  58. EN_CLR;
  59. _nop_();
  60. EN_SET;
  61. return (bit)(DataPort & 0x80);
  62. }
  63. //             寫入命令函數
  64. void LCD_Write_Com(unsigned char com)
  65. {  
  66. while(LCD_Check_Busy()); //忙則等待
  67. RS_CLR;
  68. RW_CLR;
  69. EN_SET;
  70. DataPort= com;
  71. _nop_();
  72. EN_CLR;
  73. }
  74. //             寫入數據函數
  75. void LCD_Write_Data(unsigned char Data)
  76. {
  77. while(LCD_Check_Busy()); //忙則等待
  78. RS_SET;
  79. RW_CLR;
  80. EN_SET;
  81. DataPort= Data;
  82. _nop_();
  83. EN_CLR;
  84. }

  85. //               清屏函數
  86. void LCD_Clear(void)
  87. {
  88. LCD_Write_Com(0x01);
  89. DelayMs(5);
  90. }
  91. //             寫入字符串函數
  92. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  93. {     
  94. if (y == 0)
  95.         {     
  96.          LCD_Write_Com(0x80 + x);     //表示第一行
  97.         }
  98. else
  99.         {      
  100.         LCD_Write_Com(0xC0 + x);      //表示第二行
  101.         }        
  102. while (*s)
  103.         {     
  104. LCD_Write_Data( *s);     
  105. s ++;     
  106.         }
  107. }
  108.    //           寫入字符函數
  109. void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
  110. {     
  111. if (y == 0)
  112.         {     
  113.         LCD_Write_Com(0x80 + x);     
  114.         }   
  115. else
  116.         {     
  117.         LCD_Write_Com(0xC0 + x);     
  118.         }        
  119. LCD_Write_Data( Data);  
  120. }
  121. //             初始化函數
  122. void LCD_Init(void)
  123. {
  124.    LCD_Write_Com(0x38);    /*顯示模式設置*/
  125.    DelayMs(5);
  126.    LCD_Write_Com(0x38);
  127.    DelayMs(5);
  128.    LCD_Write_Com(0x38);
  129.    DelayMs(5);
  130.    LCD_Write_Com(0x38);  
  131.    LCD_Write_Com(0x08);    /*顯示關閉*/
  132.    LCD_Write_Com(0x01);    /*顯示清屏*/
  133.    LCD_Write_Com(0x06);    /*顯示光標移動設置*/
  134.    DelayMs(5);
  135.    LCD_Write_Com(0x0C);    /*顯示開及光標設置*/
  136.    }
  137.    

  138. /*------------------------------------------------
  139.               DHT11延時函數
  140. ------------------------------------------------*/
  141. void DHT11_delay_us(uchar n)
  142. {
  143.     while(--n);
  144. }

  145. void DHT11_delay_ms(uint z)
  146. {
  147.    uint i,j;
  148.    for(i=z;i>0;i--)
  149.       for(j=110;j>0;j--);
  150. }
  151. /*------------------------------------------------
  152.               DHT11開始信號
  153. ------------------------------------------------*/
  154. void DHT11_start()
  155. {
  156.    Data=1;
  157.    DHT11_delay_us(2);
  158.    Data=0;
  159.    DHT11_delay_ms(20);   //延時18ms以上
  160.    Data=1;
  161.    DHT11_delay_us(30);
  162. }
  163. //             接收八位二進制
  164. uchar DHT11_rec_byte()      //接收一個字節
  165. {
  166.    uchar i,dat=0;
  167.   for(i=0;i<8;i++)    //從高到低依次接收8位數據
  168.    {         
  169.       while(!Data);   ////等待50us低電平過去
  170.       DHT11_delay_us(8);     //延時60us,如果還為高則數據為1,否則為0
  171.       dat<<=1;           //移位使正確接收8位數據,數據為0時直接移位
  172.       if(Data==1)    //數據為1時,使dat加1來接收數據1
  173.          dat+=1;
  174.       while(Data);  //等待數據線拉低   
  175.     }  
  176.     return dat;
  177. }
  178. //              接收40bit數據

  179. void DHT11_receive()      //接收40位的數據
  180. {
  181.     uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  182.     DHT11_start();

  183.     if(Data==0)
  184.     {
  185.        
  186.         while(Data==0);   //等待拉高     
  187.                
  188.         DHT11_delay_us(40);  //拉高后延時80us
  189.         R_H=DHT11_rec_byte();    //接收濕度高八位  
  190.         R_L=DHT11_rec_byte();    //接收濕度低八位  
  191.         T_H=DHT11_rec_byte();    //接收溫度高八位  
  192.         T_L=DHT11_rec_byte();    //接收溫度低八位
  193.         revise=DHT11_rec_byte(); //接收校正位
  194.                          
  195.         DHT11_delay_us(25);    //結束

  196.         if((R_H+R_L+T_H+T_L)==revise)      //校正
  197.         {
  198.             RH=R_H;
  199.             RL=R_L;
  200.             TH=T_H;
  201.             TL=T_L;
  202.         }
  203.         /*數據處理,方便顯示*/
  204.         rec_dat[0]='0'+(RH/10);
  205.         rec_dat[1]='0'+(RH%10);
  206.                 rec_dat[2] =' ';
  207.                 rec_dat[3] = 'R' ;
  208.                 rec_dat[4] = 'H';
  209.         rec_dat[5]=' ';
  210.         rec_dat[6]=' ';
  211.         rec_dat[7]=' ';
  212.         rec_dat[8]=' ';
  213.         rec_dat[9]='0'+(TH/10);
  214.         rec_dat[10]='0'+(TH%10);
  215.                 rec_dat[11] =' ';
  216.                 rec_dat[12] = 'C';
  217.                 rec_dat[13] = ' ' ;
  218.         rec_dat[14]=' ';
  219.                 rec_dat[15] =(RH/10);
  220.                 rec_dat[16] =(RH%10);
  221.                 rec_dat[17] =(TH/10) ;
  222.         rec_dat[18]=(TH%10);
  223.     }
  224. }
  225. /////////////////數碼管///////////////////////////////////////////////

  226.   
  227. unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  228. unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  229. unsigned char  disbuf[8]={0,0,0,0,0,0,0,0};
  230. unsigned char code LED_0F[];                // LED字模表

  231. sbit DIO = P1^0;                                //串行數據輸入
  232. sbit rclck  = P1^1;                                //時鐘脈沖信號——上升沿有效
  233. sbit SCLK = P1^2;                                //打入信號————上升沿有效

  234. //-----------------------------------------------------------------------------
  235. // 全局變量
  236. uchar LED[8];        //用于LED的8位顯示緩存
  237.   


  238. unsigned char code LED_0F[] =
  239. {// 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
  240.         0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
  241. };

  242. void LED_OUT(uchar X)
  243. {
  244.         uchar i;
  245.         for(i=8;i>=1;i--)
  246.         {
  247.                 if (X&0x80) DIO=1; else DIO=0;
  248.                 X<<=1;
  249.                 SCLK = 0;
  250.                 SCLK = 1;
  251.         }
  252. }  

  253. void LED8_Display (void)
  254. {
  255.         unsigned char code *led_table;          // 查表指針
  256.         uchar i;
  257.         //顯示第1位
  258.         led_table = LED_0F + LED[0];
  259.         i = *led_table;

  260.         LED_OUT(i);                       
  261.         LED_OUT(0x01);               

  262.         rclck = 0;
  263.         rclck = 1;
  264.         //顯示第2位
  265.         led_table = LED_0F + LED[1];
  266.         i = *led_table;

  267.         LED_OUT(i);               
  268.         LED_OUT(0x02);               

  269.         rclck = 0;
  270.         rclck = 1;
  271.         //顯示第3位
  272.         led_table = LED_0F + LED[2];
  273.         i = *led_table;

  274.         LED_OUT(i);                       
  275.         LED_OUT(0x04);       

  276.         rclck = 0;
  277.         rclck = 1;
  278.         //顯示第4位
  279.         led_table = LED_0F + LED[3];
  280.         i = *led_table;

  281.         LED_OUT(i);                       
  282.         LED_OUT(0x08);               

  283.         rclck = 0;
  284.         rclck = 1;
  285.                 led_table = LED_0F + LED[4];
  286.         i = *led_table;
  287.         LED_OUT(i);                       
  288.         LED_OUT(0x10);       
  289.         rclck = 0;
  290.         rclck = 1;         
  291.                  
  292.                 //顯示第6位
  293.         led_table = LED_0F + LED[5];
  294.         i = *led_table;

  295.         LED_OUT(i);                       
  296.         LED_OUT(0x20);       

  297.         rclck = 0;
  298.         rclck = 1;
  299.                  //顯示第7位
  300.         led_table = LED_0F + LED[6];
  301.         i = *led_table;

  302.         LED_OUT(i);                       
  303.         LED_OUT(0x40);       

  304.         rclck = 0;
  305.         rclck = 1;         
  306.                          //顯示第8位
  307.         led_table = LED_0F + LED[7];
  308.         i = *led_table;

  309.         LED_OUT(i);               
  310.         LED_OUT(0x80);       

  311.         rclck = 0;
  312.         rclck = 1;
  313.         }


  314. void LED2_Display (uchar *wei)
  315. {
  316.         unsigned char code *led_table;          // 查表指針
  317.         uchar i;
  318. if(wei==1)
  319. {
  320.         //顯示第1位
  321.         led_table = LED_0F + LED[0];
  322.         i = *led_table;

  323.         LED_OUT(i);                       
  324.         LED_OUT(0x01);               

  325.         rclck = 0;
  326.         rclck = 1;
  327.         //顯示第2位
  328.         led_table = LED_0F + LED[1];
  329.         i = *led_table;

  330.         LED_OUT(i);               
  331.         LED_OUT(0x02);               

  332.         rclck = 0;
  333.         rclck = 1;
  334. }
  335. if(wei==2)
  336. {
  337.         //顯示第3位
  338.         led_table = LED_0F + LED[2];
  339.         i = *led_table;

  340.         LED_OUT(i);                       
  341.         LED_OUT(0x04);       

  342.         rclck = 0;
  343.         rclck = 1;
  344.         //顯示第4位
  345.         led_table = LED_0F + LED[3];
  346.         i = *led_table;

  347.         LED_OUT(i);                       
  348.         LED_OUT(0x08);               

  349.         rclck = 0;
  350.         rclck = 1;
  351. }
  352. if(wei==3)
  353. {
  354.         led_table = LED_0F + LED[4];
  355.         i = *led_table;
  356.         LED_OUT(i);                       
  357.         LED_OUT(0x10);       
  358.         rclck = 0;
  359.         rclck = 1;         
  360.                  
  361.                 //顯示第6位
  362.         led_table = LED_0F + LED[5];
  363.         i = *led_table;

  364.         LED_OUT(i);                       
  365.         LED_OUT(0x20);       

  366.         rclck = 0;
  367.         rclck = 1;
  368. }
  369.         if(wei==4)
  370. {
  371.                  //顯示第7位
  372.         led_table = LED_0F + LED[6];
  373.         i = *led_table;

  374.         LED_OUT(i);                       
  375.         LED_OUT(0x40);       

  376.         rclck = 0;
  377.         rclck = 1;         
  378.                          //顯示第8位
  379.         led_table = LED_0F + LED[7];
  380.         i = *led_table;

  381.         LED_OUT(i);               
  382.         LED_OUT(0x80);       

  383.         rclck = 0;
  384.         rclck = 1;
  385. }
  386. }
  387. uchar wendu;
  388.   uchar shidu;
  389.   void shumaguan_show(void)
  390. {
  391.            LED[1]=rec_dat[15];
  392.           LED[0]=rec_dat[16];
  393.          shidu=rec_dat[15]*10+rec_dat[16];
  394.         LED[7]=rec_dat[17];
  395.         LED[6]=rec_dat[18];
  396.          wendu=rec_dat[17]*10+rec_dat[18];
  397.         LED[2]=16;
  398.         LED[3]=16;
  399.         LED[4]=16;
  400.         LED[5]=16;
  401.         LED8_Display ();
  402.   
  403. }
  404.     //////////////////////////////////////////////////////////////////////////
  405. sbit Beep=P2^2;                   //設置蜂鳴器引腳

  406. sbit K1=P2^3;
  407. sbit K2=P2^4;
  408. sbit K3=P2^5;
  409. sbit K4=P2^6;
  410. sbit K5=P2^7;
  411. void key_init(void)
  412. {
  413. K1=1;
  414. K2=1;
  415. K3=1;
  416. K4=1;
  417. }
  418. uchar an=0;
  419. uchar move=0;
  420.   void caidan(void)
  421.   {
  422.            if(K1==0&&an==0)
  423.         {
  424.                  DelayMs(10);                                                  // 去除按鍵按下的抖動
  425.                 while(!K1);                                         // 等待按鍵釋放
  426.                 DelayMs(10);                                                  // 去除按鍵松開的抖動
  427.                 an=1;
  428.        
  429.         }
  430.                    if(K1==0&&an==1)
  431.         {
  432.                  DelayMs(10);                                                  // 去除按鍵按下的抖動
  433.                 while(!K1);                                         // 等待按鍵釋放
  434.                 DelayMs(10);                                                  // 去除按鍵松開的抖動
  435.                 an=0;

  436.         }       
  437.   }
  438.   void move_2(void)
  439.   {
  440.              if(K2==0&&move==0)
  441.         {
  442.                  DelayMs(10);                                                  // 去除按鍵按下的抖動
  443.                 while(!K2);                                         // 等待按鍵釋放
  444.                 DelayMs(10);                                                  // 去除按鍵松開的抖動
  445.                 move=1;
  446.         }
  447.   
  448.                      if(K2==0&&move==1)
  449.         {
  450.                  DelayMs(10);                                                  // 去除按鍵按下的抖動
  451.                 while(!K2);                                         // 等待按鍵釋放
  452.                 DelayMs(10);                                                  // 去除按鍵松開的抖動
  453.                 move=2;
  454.         }

  455.                    if(K2==0&&move==2)
  456.         {
  457.                  DelayMs(10);                                                  // 去除按鍵按下的抖動
  458.                 while(!K2);                                         // 等待按鍵釋放
  459.                 DelayMs(10);                                                  // 去除按鍵松開的抖動
  460.                 move=3;
  461.         }
  462.                    if(K2==0&&move==3)
  463.         {
  464.                  DelayMs(10);                                                  // 去除按鍵按下的抖動
  465.                 while(!K2);                                         // 等待按鍵釋放
  466.                 DelayMs(10);                                                  // 去除按鍵松開的抖動
  467.                 move=0;
  468.         }
  469.   
  470.   }

  471. uchar AlarmTL;                        // 溫度下限報警值
  472. uchar AlarmTH;                        // 溫度上限報警值
  473. uchar AlarmHL;                        // 濕度下限報警值
  474. uchar AlarmHH;                        // 濕度上限報警值
  475. void up_down(void)
  476. {
  477. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  478.           if(K4==0&&move==0)
  479.         {
  480.                  DelayMs(10);                                                  // 去除按鍵按下的抖動
  481.                 while(!K4);                                         // 等待按鍵釋放
  482.                 DelayMs(10);                                                  // 去除按鍵松開的抖動
  483.                         if(AlarmTL>0)                                  // 只有當濕度上限值大于0時,才能減1
  484.                                 {
  485.                                         AlarmTL--;         
  486.                        
  487.                        
  488.                                         }
  489.         }
  490.                         if(K3==0&&move==0)                         // 判斷 “加按鍵“ 是否被按下
  491.                         {
  492.                                 DelayMs(10);                                                  // 去除按鍵按下的抖動
  493.                        while(!K3);                                         // 等待按鍵釋放
  494.                        DelayMs(10);
  495.                                 if(AlarmTL<99)                                // 只有當濕度上限值小于99時,才能加1
  496.                                         AlarmTL++;
  497.                    

  498.                         }       
  499.                         ///////////////////////////////////////////////////////////////////////////////////////////////////////
  500.           if(K4==0&&move==1)
  501.         {
  502.                  DelayMs(10);                                                  // 去除按鍵按下的抖動
  503.                 while(!K4);                                         // 等待按鍵釋放
  504.                 DelayMs(10);                                                  // 去除按鍵松開的抖動
  505.                         if(AlarmTH>0)                                  // 只有當濕度上限值大于0時,才能減1
  506.                                 {
  507.                                         AlarmTH--;         
  508.                        
  509.                        
  510.                                         }
  511.         }
  512.                         if(K3==0&&move==1)                         // 判斷 “加按鍵“ 是否被按下
  513.                         {
  514.                                 DelayMs(10);                                                  // 去除按鍵按下的抖動
  515.                        while(!K3);                                         // 等待按鍵釋放
  516.                        DelayMs(10);
  517.                                 if(AlarmTH<99)                                // 只有當濕度上限值小于99時,才能加1
  518.                                         AlarmTH++;
  519.                    

  520.                         }       
  521. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  522.           if(K4==0&&move==2)
  523.         {
  524.                  DelayMs(10);                                                  // 去除按鍵按下的抖動
  525.                 while(!K4);                                         // 等待按鍵釋放
  526.                 DelayMs(10);                                                  // 去除按鍵松開的抖動
  527.                         if(AlarmHL>0)                                  // 只有當濕度上限值大于0時,才能減1
  528.                                 {
  529.                                         AlarmHL--;         
  530.                        
  531.                        
  532.                                         }
  533.         }
  534.                         if(K3==0&&move==2)                         // 判斷 “加按鍵“ 是否被按下
  535.                         {
  536.                                 DelayMs(10);                                                  // 去除按鍵按下的抖動
  537.                        while(!K3);                                         // 等待按鍵釋放
  538.                        DelayMs(10);
  539.                                 if(AlarmHL<99)                                // 只有當濕度上限值小于99時,才能加1
  540.                                         AlarmHL++;
  541.                    

  542.                         }       
  543. ///////////////////////////////////////////////////////////////////////////////////////////
  544.                    if(K4==0&&move==3)
  545.         {
  546.                  DelayMs(10);                                                  // 去除按鍵按下的抖動
  547.                 while(!K4);                                         // 等待按鍵釋放
  548.                 DelayMs(10);                                                  // 去除按鍵松開的抖動
  549.                         if(AlarmHH>0)                                  // 只有當濕度上限值大于0時,才能減1
  550.                                 {
  551.                                         AlarmHH--;         
  552.                        
  553.                        
  554.                                         }
  555.         }
  556.                         if(K3==0&&move==3)                         // 判斷 “加按鍵“ 是否被按下
  557.                         {
  558.                                 DelayMs(10);                                                  // 去除按鍵按下的抖動
  559.                        while(!K3);                                         // 等待按鍵釋放
  560.                        DelayMs(10);
  561.                                 if(AlarmHH<99)                                // 只有當濕度上限值小于99時,才能加1
  562.                                         AlarmHH++;
  563.                    

  564.                         }
  565. /////////////////////////////////////////////////////////////////////////////////////////////////////       
  566. }

  567. uchar TAB[8]={0x00,0x00,0x00,0x00,0x00};
  568. void send(uchar dat)
  569. {
  570. SBUF=dat;
  571. while(TI==0);
  572. TI=0;
  573. }
  574. sbit LED1=P0^6;
  575. sbit LED2=P0^7;
  576. sbit LED3=P0^4;
  577. sbit LED4=P0^5;

  578. void panduan(void)
  579. {
  580.         if(wendu<AlarmTL)
  581.          {
  582.            LED1=0;
  583.            Beep=0;
  584.            DelayMs(2);
  585.            Beep=1;
  586.          }
  587.                  if(wendu>AlarmTL)
  588.          {
  589.            LED1=1;
  590.            Beep=1;
  591.          }
  592.                  if(wendu>AlarmTH)
  593.          {
  594.            LED2=0;
  595.            Beep=0;
  596.            DelayMs(2);
  597.            Beep=1;
  598.          }
  599.                    if(wendu<AlarmTH)
  600.          {
  601.            LED2=1;
  602.            Beep=1;
  603.          }
  604.                   if(shidu<AlarmHL)
  605.          {
  606.            LED3=0;
  607.            Beep=0;
  608.            DelayMs(2);
  609.            Beep=1;
  610.          }
  611.                            if(shidu>AlarmHL)
  612.          {
  613.            LED3=1;
  614.            Beep=1;
  615.          }
  616.                    if(shidu>AlarmHH)
  617.          {
  618.            LED4=0;
  619.            Beep=0;
  620.            DelayMs(2);
  621.            Beep=1;
  622.          }
  623.                    if(shidu<AlarmHH)
  624.          {
  625.            LED4=1;
  626.            Beep=1;
  627.          }
  628. }
  629.   //////////////////////////////////////////////////////////////////////////
  630. /*------------------------------------------------
  631.                     主函數
  632. ------------------------------------------------*/
  633. void main(void)
  634. {
  635. uchar i;
  636. TMOD=0X20;
  637. SCON=0X40;
  638. PCON=0X00;
  639. TH1=0xfd;
  640. TL1=0xfd;
  641. TR1=1;
  642.     key_init();
  643.         AlarmTL=15;
  644.         AlarmTH=50;
  645.         AlarmHL=15;
  646.         AlarmHH=50;
  647.         DHT11_delay_ms(1000);    //DHT11上電后要等待1S以越過不穩定狀態在此期間不能發送任何指令  
  648.         P0=0xff;
  649.         while (1)
  650.         {
  651.          caidan();
  652.                  if(an==0)
  653.                  {
  654.                       DHT11_receive();
  655.                     shumaguan_show();
  656.                         panduan();
  657.                  }
  658.                                   if(an==1)
  659.                          {
  660.                                 Beep=1;
  661.                                         DelayMs(10);
  662.                                 move_2();        //2位右移
  663.                                 up_down();
  664.                                 LED[1]=AlarmHH/10;// 濕度上限報警
  665.                                   LED[0]=AlarmHH%10;
  666.                                 LED[2]=AlarmHL%10; // 濕度下限報警
  667.                                 LED[3]=AlarmHL/10;
  668.                                 LED[7]=AlarmTL/10; // 溫度下限報警
  669.                                 LED[6]=AlarmTL%10;
  670.                                 LED[4]=AlarmTH%10;// 溫度上限報警
  671.                                 LED[5]=AlarmTH/10;
  672.                
  673.                                 if(move==0)  LED2_Display (4);
  674.                             if(move==1)  LED2_Display (3);
  675.                                 if(move==2)  LED2_Display (2);
  676.                                 if(move==3)  LED2_Display (1);   
  677.                         }
  678.                                                 if(K5==0)       
  679.                                                 {
  680.                                                          DelayMs(10);                                                  // 去除按鍵按下的抖動
  681.                                                                 while(!K5);                                         // 等待按鍵釋放
  682.                                                                 DelayMs(10);
  683.                                                                 TAB[0]=rec_dat[15];
  684.                                                                    TAB[1]=rec_dat[16];
  685.                                                             TAB[2]=rec_dat[17];
  686.                                                                    TAB[3]=rec_dat[18];
  687.                                                             TAB[4]=0x00;
  688.                                                    for(i=0;i<4;i++)
  689.                                                  {
  690.                                                          send(TAB[i]);
  691.                                                                 DelayMs(200);
  692.                                                  }
  693.                                                  }       
  694.                                                                    
  695.         }
  696. }
復制代碼

所有資料51hei提供下載:
基于單片機的蔬菜大棚溫濕度智能控制系統設計.rar (708.89 KB, 下載次數: 279)





評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:725749 發表于 2020-4-9 19:55 | 只看該作者
原理圖用什么軟件看呀
回復

使用道具 舉報

板凳
ID:755012 發表于 2020-5-19 10:10 | 只看該作者
好帖,lz牛逼
回復

使用道具 舉報

地板
ID:758682 發表于 2020-5-22 20:36 | 只看該作者
好帖子很有用
回復

使用道具 舉報

5#
ID:165117 發表于 2020-5-29 15:14 | 只看該作者
好帖子謝謝分享  學習學習!
回復

使用道具 舉報

6#
ID:808396 發表于 2020-8-22 05:47 | 只看該作者
程序里有lcd,但是程序里有lcd,而且數碼管小數點連接標的不明確,程序復雜而且有很多多余
回復

使用道具 舉報

7#
ID:802167 發表于 2020-8-27 21:55 | 只看該作者
913261927 發表于 2020-4-9 19:55
原理圖用什么軟件看呀

proteus
回復

使用道具 舉報

8#
ID:306996 發表于 2020-9-9 08:44 | 只看該作者
913261927 發表于 2020-4-9 19:55
原理圖用什么軟件看呀

ad就可以看
回復

使用道具 舉報

9#
ID:937091 發表于 2021-6-20 19:02 | 只看該作者
“要求當前溫濕度數據可以記錄、存儲、并通過穿行口上傳到上位機以備查詢。”
                                                                                                                                                      
請問加了這個條件,需要怎樣實現呢,是只用在.c程序里寫出來嗎?該怎么寫呢。                                                                       您分享的文件的原理圖還用改變嗎 ?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 喷水毛片 | 国产大学生情侣呻吟视频 | 懂色一区二区三区免费观看 | 亚洲精品国产电影 | 国产精品美女久久久久久久久久久 | 人成久久 | 久久精品中文 | 国产真实乱全部视频 | 精品久久精品 | 精品国产黄色片 | 在线免费av电影 | 一区二区不卡视频 | 日韩欧美国产精品 | 亚洲国产一区二区三区在线观看 | 久久久久久久久久久久久91 | 日韩成人在线网址 | 久久99国产精品久久99果冻传媒 | 国产精品九九 | 福利视频网址 | 欧美不卡一区二区三区 | 久久久久国产精品午夜一区 | 亚洲另类自拍 | 一级片aaa | 在线日韩欧美 | 国产精品国产三级国产播12软件 | 正在播放一区二区 | 久久综合婷婷 | 天堂成人国产精品一区 | 日本久久综合 | 久久国内 | av一级久久 | 九九免费在线视频 | 九九热这里只有精品6 | 真人女人一级毛片免费播放 | 久久综合婷婷 | 日韩视频免费看 | www免费视频 | 成人一区二区在线 | 在线观看视频中文字幕 | 久久99深爱久久99精品 | 欧美黑人体内she精在线观看 |