欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3079|回復: 2
收起左側

51單片機自動涼衣服源程序電路圖與實物圖

[復制鏈接]
ID:190577 發表于 2019-10-11 16:10 | 顯示全部樓層 |閱讀模式
電路原理圖如下:
3.png
制作出來的實物圖如下:
22.jpg

1.jpg

單片機源程序如下:
#include <REGX51.H>
#include <intrins.h>
#include <math.h>     
#include <stdio.h>      
#define uchar unsigned char
#define uint unsigned int

sbit DATA=P1^0;
sbit MOTOR_A_1=P2^5;   //電機控制腳
sbit MOTOR_A_2=P2^6;    //電機控制腳
sbit EN_MOTOR_A =P2^7;  //電機控制腳
sbit k1=P3^2;                               //按鍵
sbit k2=P3^3;                               //按鍵
sbit k3=P3^4;                               //按鍵
sbit k4=P3^5;                               //按鍵
sbit k5=P3^6;
sbit CS   = P1^2;
sbit Clk = P1^3;
sbit DATI = P1^4;
sbit DATO = P1^4;
unsigned char dat = 0x00;      
unsigned char count = 0x00;     
unsigned char CH;   
uchar mode=0;
sbit LED0=P2^3;
sbit LED1=P2^4;
uchar temp,humi;
uchar error;                                //用于檢驗是否出現錯誤
uchar checksum,nn;                          //CRC                    
uchar nn;                                  //蜂鳴器                    
uchar TEMP_data[6];                         //用于記錄實測的溫度
uchar CO2_data[6];                         //用于記錄實測的溫度

uchar  U8FLAG,k;
uchar  U8count,U8temp;
uchar  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
uchar  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
uchar  U8comdata;
uchar  count, count_r=0;
/*************************************************************************/
void Delay1(uint );
void  Delay_10us(void);
void  COM(void);
uchar RH(void);
unsigned char adc0832(unsigned char CH)
{
     unsigned char i,test,adval;
     adval = 0x00;
     test = 0x00;
     Clk = 0;      
     DATI = 1;
     _nop_();
     CS = 0;
     _nop_();
     Clk = 1;
     _nop_();
    if ( CH == 0x00 )      
    {
       Clk = 0;
       DATI = 1;      
       _nop_();
       Clk = 1;
       _nop_();
       Clk = 0;
       DATI = 0;      
       _nop_();
       Clk = 1;
       _nop_();
     }
     else
     {
       Clk = 0;
       DATI = 1;      
       _nop_();
       Clk = 1;
       _nop_();
       Clk = 0;
       DATI = 1;      
       _nop_();
       Clk = 1;
       _nop_();
     }
      Clk = 0;
      DATI = 1;
     for( i = 0;i < 8;i++ )      
     {
       _nop_();
       adval <<= 1;
       Clk = 1;
       _nop_();
       Clk = 0;
       if (DATO)
          adval |= 0x01;
      else
          adval |= 0x00;
    }
      for (i = 0; i < 8; i++)      
      {
           test >>= 1;
           if (DATO)
              test |= 0x80;
           else
              test |= 0x00;
          _nop_();
          Clk = 1;
          _nop_();
          Clk = 0;
      }
      if (adval == test)      
           dat = test;
      _nop_();
       CS = 1;        
       DATO = 1;
       Clk = 1;
      return dat;
}


void Delay1(uint j)
{
    uchar i;
    for(;j>0;j--)
    {  
  for(i=0;i<27;i++);
    }
}
void  Delay_10us(void)
{
    uchar i;
    i--;
    i--;
    i--;
    i--;
    i--;
    i--;
}
void  COM(void)
{
    uchar i;
    for(i=0;i<8;i++)   
    {
       U8FLAG=2;
     while((!DATA)&&U8FLAG++);
  Delay_10us();
  Delay_10us();
  Delay_10us();
    U8temp=0;
        if(DATA)U8temp=1;
  U8FLAG=2;
  while((DATA)&&U8FLAG++);   
     if(U8FLAG==1)break;

        
    }
}
//--------------------------------
//-----溫濕度讀取子程序 ------------
//--------------------------------
//----以下變量均為全局變量--------
//----溫度高8位== U8T_data_H------
//----溫度低8位== U8T_data_L------
//----濕度高8位== U8RH_data_H-----
//----濕度低8位== U8RH_data_L-----
//----校驗 8位 == U8checkdata-----
//----調用相關子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
uchar RH(void)
{
    DATA=0;        //主機拉低18ms
Delay1(180);      //原來為5
DATA=1;      //總線由上拉電阻拉高 主機延時20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
DATA=1;         //主機設為輸入 判斷從機響應信號
if(!DATA)      //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行   
{
     U8FLAG=2;
     
     while((!DATA)&&U8FLAG++); //判斷從機是否發出 80us 的低電平響應信號是否結束  
     U8FLAG=2;
    while((DATA)&&U8FLAG++);    //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
     COM();      //數據接收狀態
     U8RH_data_H_temp=U8comdata;
     COM();
     U8RH_data_L_temp=U8comdata;
     COM();
     U8T_data_H_temp=U8comdata;
     COM();
     U8T_data_L_temp=U8comdata;
     COM();
     U8checkdata_temp=U8comdata;
     DATA=1;
     U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); //數據校驗
     if(U8temp==U8checkdata_temp)
     {
        U8RH_data_H=U8RH_data_H_temp;
        U8RH_data_L=U8RH_data_L_temp;
        U8T_data_H=U8T_data_H_temp;
        U8T_data_L=U8T_data_L_temp;
        U8checkdata=U8checkdata_temp;
     }
  return 1;
}
else            //傳感器不響應
{
    return 0;
}
}
void delay(uint z)                          //延時函數z為毫秒數
{
   int a,b;
   for(a=z;a>0;a--)
   for(b=120;b>0;b--);
}
         
void key()
{
   
   if (k1==0)                               //調整按鍵檢測
   {
      delay(10);
      if (k1==0)
      {
         mode=!mode;
    EN_MOTOR_A=0;  //電機啟動,等于0停止

         while(k1==0);
         
      }
   }
   if (k2==0)                               //調整按鍵檢測
   {
      delay(10);
      if (k2==0)
      {
      if(mode==0)
   {
    EN_MOTOR_A=1;  //電機啟動,等于0停止
    MOTOR_A_2 =0;  //正轉
    MOTOR_A_1 =1;  //反轉停止
   }
         while(k2==0);
         
      }
   }
    if (k3==0)                               //調整按鍵檢測
   {
      delay(10);
      if (k3==0)
      {
      if(mode==0)
   {
    EN_MOTOR_A=1;  //電機停止
    MOTOR_A_1 =0;  //反轉
    MOTOR_A_2 =1;  //正轉停止
   }
         while(k3==0);
         
      }
   }
   if(k4==0)
   {
      delay(10);
      if(k4==0)
      {
      if(MOTOR_A_2==0)
   EN_MOTOR_A=0;  //電機停止
         
      }
   }
    if(k5==0)
   {
      delay(10);
      if(k5==0)
      {
   if(MOTOR_A_1==0)
   EN_MOTOR_A=0;  //電機停止
         
      }
   }
}
void main()                                                  //主函數
{
   int ch0_temp;
   while(1)
   {
        
   ch0_temp=adc0832(0)*49/25;
   RH();                                               //測量溫濕度
      temp=U8T_data_H;
      humi=U8RH_data_H;
    key();
   // LED1=0;
   //LED0=0;
     if(mode==0)
   {
    LED1=0;
    LED0=1;
   
   }
    if(mode==1)
   {
    LED1=1;
    LED0=0;
    if(k4==0)
    {
     if(MOTOR_A_2==0)
                 EN_MOTOR_A=0;  //電機停止
     
    }
    else if(k5==0)
    {
     if(MOTOR_A_1==0)
      EN_MOTOR_A=0;  //電機停止
   
    }
    else
    {
     if((ch0_temp>250)&&(humi<75))
     {
        EN_MOTOR_A=1;  //電機啟動,等于0停止
        MOTOR_A_2 =0;  //正轉
        MOTOR_A_1 =1;  //反轉停止
     }
     else if((ch0_temp<250)||(humi>75))//光照不足,濕度大于50
     {
         EN_MOTOR_A=1;  //電機停止
         MOTOR_A_1 =0;  //反轉
         MOTOR_A_2 =1;  //正轉停止
     }
     else
     {
      EN_MOTOR_A=0;  //電機停止
     }
     
    }
   
   }
     
   
    }
}
         


評分

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

查看全部評分

回復

使用道具 舉報

ID:619604 發表于 2019-10-17 23:24 | 顯示全部樓層
參考參考,感謝分享
回復

使用道具 舉報

ID:253767 發表于 2019-10-18 07:15 | 顯示全部樓層
謝謝分享!!!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表