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

標(biāo)題: 單片機(jī)晾衣架控制程序 [打印本頁(yè)]

作者: 曼曼吖    時(shí)間: 2019-12-21 18:04
標(biāo)題: 單片機(jī)晾衣架控制程序


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include<absacc.h>                //頭文件

  4. #define uc unsigned char
  5. #define ui unsigned int

  6. sbit in_go                =        P1^3;
  7. sbit in_back        =        P1^2;//手動(dòng)前進(jìn)后退按鍵
  8. sbit out_go                =        P3^0;
  9. sbit out_back        =        P3^5;//電機(jī)控制輸出
  10. sbit limit_go        =        P3^4;
  11. sbit limit_back        =        P3^6;//前進(jìn)后退限位開(kāi)關(guān)
  12. sbit led_go                =        P1^4;
  13. sbit led_back        =        P1^5;//前進(jìn)后退限位指示燈
  14. sbit light                =        P1^0;//光線(xiàn)傳感器
  15. sbit change                =        P1^1;//手動(dòng)自動(dòng)切換按鍵(默認(rèn)自動(dòng))  
  16. sbit led_zhishi =        P1^7;
  17. sbit buzz                =        P1^6;

  18. sbit W1=P2^2;
  19. sbit W2=P2^1;
  20. //定義DHT11數(shù)據(jù)口
  21. sbit DATA = P2^0;

  22. uc U8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp;
  23. uc U8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,U8checkdata;
  24. uc Mode,humidity;
  25. bit bdata FlagStartRH,hot,cold,humid,dry;

  26. bit bdata flag1,flag2,change_flag,flag_shan,flag_shan1,flag_shan2,flag_HH;
  27. uc m,n,shan;

  28. uc code table[11]={        //共陰極字型碼
  29.         0x3f,  //--0
  30.         0x06,  //--1
  31.         0x5b,  //--2
  32.         0x4f,  //--3
  33.         0x66,  //--4
  34.         0x6d,  //--5
  35.         0x7d,  //--6
  36.         0x07,  //--7
  37.         0x7f,  //--8
  38.         0x6f,  //--9
  39.         0x00   //--NULL
  40. };


  41. //定時(shí)器0初始化
  42. void Timer0_Init()
  43. {
  44.         ET0 = 1;        //允許定時(shí)器0中斷
  45.         TMOD = 1;       //定時(shí)器工作方式選擇
  46.         TL0 = 0xb0;     
  47.         TH0 = 0x3c;     //定時(shí)器賦予初值
  48.         TR0 = 1;        //啟動(dòng)定時(shí)器
  49.         EA=1;
  50. }


  51. void Delay1(ui j)
  52. {
  53.     uc i;
  54.     for(;j>0;j--)
  55.     {        
  56.                 for(i=0;i<27;i++);
  57.     }
  58. }

  59. void  Delay_10us(void)
  60. {
  61.     uc i;
  62.     i--;
  63.     i--;
  64.     i--;
  65.     i--;
  66.     i--;
  67.     i--;
  68. }       

  69. void  COM(void)
  70. {
  71.     uc i;
  72.     for(i=0;i<8;i++)          
  73.     {
  74.               U8FLAG=2;
  75.                    while((!DATA)&&U8FLAG++);
  76.                 Delay_10us();
  77.                 Delay_10us();
  78.                 Delay_10us();
  79.                   U8temp=0;
  80.         if(DATA)U8temp=1;
  81.                     U8FLAG=2;
  82.                 while((DATA)&&U8FLAG++);
  83.                    //超時(shí)則跳出for循環(huán)                  
  84.                    if(U8FLAG==1)break;
  85.                    //判斷數(shù)據(jù)位是0還是1         
  86.                      
  87.                 // 如果高電平高過(guò)預(yù)定0高電平值則數(shù)據(jù)位為 1
  88.                     
  89.                 U8comdata<<=1;
  90.                    U8comdata|=U8temp;        //0
  91.     }//rof
  92. }

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


  156. void delay(ui x)//延時(shí)函數(shù)
  157. {
  158.         ui i,j;
  159.         for(i=0;i<x;i++)
  160.         for(j=0;j<110;j++);
  161. }

  162. void display()
  163. {
  164.         P0=table[humidity/10];
  165.         W1=0;                               
  166.         delay(1);                                //延時(shí)
  167.         W1=1;                                //關(guān)顯示
  168.                                                   
  169.         P0=table[humidity%10];
  170.         W2=0;                 
  171.         delay(1);                                 //延時(shí)
  172.         W2=1;                                //關(guān)顯示
  173. }
  174. void work()//工作函數(shù)
  175. {
  176.         if(change==0)//判斷切換是否按下
  177.         {
  178.                 buzz=0;
  179.                 delay(50);
  180.                 if(change==0)
  181.                 change_flag=~change_flag;//手動(dòng),自動(dòng)切換
  182.                 led_zhishi=change_flag;
  183.                 if(change_flag==1)
  184.                 {
  185.                         out_go=1;
  186.                         out_back=1;
  187.                         led_go=1;
  188.                         led_back=1;
  189.                 }
  190.                 buzz=1;
  191.                 while(!change);//釋放
  192.                 buzz=1;
  193.         }
  194.        
  195.         if(change_flag==0)//自動(dòng)模式
  196.         {
  197.                 if(light==0||flag_HH==1)//夜間(無(wú)光)時(shí)拉回衣架           flag_HH==1濕度高
  198.                 {
  199.                         delay(20);
  200.                         if(light==0||flag_HH==1)
  201.                         {
  202.                                 if((limit_go==0)&&(flag_shan==0))
  203.                                 {       
  204.                                         out_go=1;
  205.                                         out_back=1;
  206.                                         led_go=1;
  207.                                        
  208.                                         for(shan=0;shan<6;shan++)
  209.                                         {
  210.                                                 led_go=~led_go;
  211.                                                 buzz=led_go;
  212.                                                 delay(500);
  213.                                         }
  214.                                         flag_shan=1;
  215.                                 }
  216.                                 else if(limit_go==1)
  217.                                 {       
  218.                                         out_go=1;
  219.                                         out_back=0;
  220.                                        
  221.                                         led_back=1;
  222.                                         led_go=0;
  223.                                         flag_shan=0;
  224.                                 }
  225.                         }
  226.                 }
  227.                 else if(light==1&&flag_HH==0)//白天(有光)時(shí)伸出衣架
  228.                 {
  229.                         delay(20);
  230.                         if(light==1&&flag_HH==0)
  231.                         {
  232.                                 if((limit_back==0)&&(flag_shan==0))
  233.                                 {       
  234.                                         out_go=1;
  235.                                         out_back=1;
  236.                                        
  237.                                         led_back=1;
  238.                                         for(shan=0;shan<6;shan++)
  239.                                         {
  240.                                                 led_back=~led_back;
  241.                                                 buzz=led_back;
  242.                                                 delay(500);
  243.                                         }
  244.                                         flag_shan=1;
  245.                                 }
  246.                                 else if(limit_back==1)
  247.                                 {       
  248.                                         out_go=0;
  249.                                         out_back=1;
  250.                                        
  251.                                         led_back=0;
  252.                                         led_go=1;
  253.                                         flag_shan=0;
  254.                                 }
  255.                         }
  256.                 }
  257.         }
  258.         else if(change_flag==1)//手動(dòng)模式
  259.         {
  260.                 if((in_go==0)&&(limit_go==1))//關(guān)閉是否按下
  261.                 {
  262.                         buzz=0;
  263.                         delay(5);
  264.                         if((in_go==0)&&(limit_go==1))
  265.                         {       
  266.                                 buzz=1;
  267.                                 out_go=1;
  268.                                 out_back=~out_back;//按一下伸出,再按一下,停止
  269.                                
  270.                                 buzz=1;
  271.                                 led_back=1;
  272.                                 led_go=out_back;
  273.                                 flag_shan1=0;
  274.                                
  275.                         }
  276.                         while(!in_go);//釋放
  277.                         buzz=1;
  278.                 }
  279.                 else if((in_back==0)&&(limit_back==1))//打開(kāi)是否按下
  280.                 {
  281.                         buzz=0;
  282.                         delay(5);
  283.                         if((in_back==0)&&(limit_back==1))
  284.                         {
  285.                                 buzz=1;       
  286.                                 out_back=1;
  287.                                 out_go=~out_go;//按一下收回,再按一下,停止  
  288.                                
  289.                                 buzz=1;
  290.                                 led_go=1;
  291.                                 led_back=out_go;
  292.                                 flag_shan2=0;
  293.                                
  294.                         }
  295.                         while(!in_back);//按鍵釋放
  296.                         buzz=1;
  297.                 }
  298.                 if((limit_go==0)&&(flag_shan1==0))
  299.                 {
  300.                         delay(5);
  301.                         if((limit_go==0)&&(flag_shan1==0))
  302.                         {       
  303.                                
  304.                                 out_back=1;
  305.                                 led_go=1;
  306.                                 for(shan=0;shan<6;shan++)
  307.                                 {
  308.                                         led_go=~led_go;
  309.                                         buzz=led_go;
  310.                                         delay(500);
  311.                                 }
  312.                                 flag_shan1=1;
  313.                         }
  314.                 }
  315.                 if((limit_back==0)&&(flag_shan2==0))
  316.                 {
  317.                         delay(5);
  318.                         if((limit_back==0)&&(flag_shan2==0))
  319.                         {       
  320.                                
  321.                                 out_go=1;
  322.                                 led_back=1;
  323.                                 for(shan=0;shan<6;shan++)
  324.                                 {
  325.                                         led_back=~led_back;
  326.                                         buzz=led_back;
  327.                                         delay(500);
  328.                                 }
  329.                                 flag_shan2=1;
  330.                         }
  331.                 }
  332.         }
  333. }

  334. void main()//主函數(shù)
  335. {
  336.         uc testnum;
  337.         light=0;
  338.         buzz=1;
  339.         led_zhishi=0;
  340.         Timer0_Init();
  341.         while(1)//進(jìn)入死循環(huán)
  342.         {
  343.                 work();//調(diào)用工作函數(shù)
  344.                 display();
  345.                 if (FlagStartRH == 1)         //溫濕度轉(zhuǎn)換標(biāo)志檢查
  346.                 {
  347.             testnum = RH();
  348.                         FlagStartRH = 0;
  349.                         humidity = U8RH_data_H;         //讀出濕度,只取整數(shù)部分
  350.                         if(humidity>=80)
  351.                         flag_HH=1;
  352.                         else
  353.                         flag_HH=0;
  354.                         TR0 = 1;
  355.                 }
  356.                 display();
  357.         }
  358. }

  359. //定時(shí)器0中斷
  360. void Timer0_ISR (void) interrupt 1 using 0
  361. {
  362.         ui RHCounter;
  363.         TL0 = 0xb0;
  364.         TH0 = 0x3c;     //定時(shí)器賦予初值

  365.         //每5秒鐘啟動(dòng)一次溫濕度轉(zhuǎn)換
  366.     RHCounter ++;
  367.     if (RHCounter >= 20)
  368.     {
  369.        FlagStartRH = 1;
  370.            RHCounter = 0;
  371.            TR0=0;
  372.     }
  373. }
復(fù)制代碼

所有資料51hei提供下載:
晾衣架.rar (235.43 KB, 下載次數(shù): 41)



作者: 251932270    時(shí)間: 2025-10-13 21:22
寫(xiě)得好
作者: 三生石畔    時(shí)間: 2025-10-14 09:24
純放代碼,不介紹一下都有啥功能嗎
作者: WFX777888    時(shí)間: 2025-10-15 17:38
學(xué)習(xí)學(xué)習(xí)





歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1