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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的智能晾衣架程序顯示

[復制鏈接]
跳轉到指定樓層
樓主
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>                //頭文件

#define uc unsigned char
#define ui unsigned int

sbit in_go                =        P1^3;
sbit in_back        =        P1^2;//手動前進后退按鍵
sbit out_go                =        P3^0;
sbit out_back        =        P3^5;//電機控制輸出
sbit limit_go        =        P3^4;
sbit limit_back        =        P3^6;//前進后退限位開關
sbit led_go                =        P1^4;
sbit led_back        =        P1^5;//前進后退限位指示燈
sbit light                =        P1^0;//光線傳感器
sbit change                =        P1^1;//手動自動切換按鍵(默認自動)  
sbit led_zhishi =        P1^7;
sbit buzz                =        P1^6;

sbit W1=P2^2;
sbit W2=P2^1;
//定義DHT11數據口
sbit DATA = P2^0;

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

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

uc code table[11]={        //共陰極字型碼
        0x3f,  //--0
        0x06,  //--1
        0x5b,  //--2
        0x4f,  //--3
        0x66,  //--4
        0x6d,  //--5
        0x7d,  //--6
        0x07,  //--7
        0x7f,  //--8
        0x6f,  //--9
        0x00   //--NULL
};


//定時器0初始化
void Timer0_Init()
{
        ET0 = 1;        //允許定時器0中斷
        TMOD = 1;       //定時器工作方式選擇
        TL0 = 0xb0;     
        TH0 = 0x3c;     //定時器賦予初值
        TR0 = 1;        //啟動定時器
        EA=1;
}


void Delay1(ui j)
{
    uc i;
    for(;j>0;j--)
    {        
                for(i=0;i<27;i++);
    }
}

void  Delay_10us(void)
{
    uc i;
    i--;
    i--;
    i--;
    i--;
    i--;
    i--;
}       

void  COM(void)
{
    uc 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++);
                   //超時則跳出for循環                  
                   if(U8FLAG==1)break;
                   //判斷數據位是0還是1         
                     
                // 如果高電平高過預定0高電平值則數據位為 1
                    
                U8comdata<<=1;
                   U8comdata|=U8temp;        //0
    }//rof
}

//--------------------------------
//-----溫濕度讀取子程序 ------------
//--------------------------------
//----以下變量均為全局變量--------
//----溫度高8位== U8T_data_H------
//----溫度低8位== U8T_data_L------
//----濕度高8位== U8RH_data_H-----
//----濕度低8位== U8RH_data_L-----
//----校驗 8位 == U8checkdata-----
//----調用相關子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
uc RH(void)
{
    //主機拉低18ms
    DATA=0;
        Delay1(180);  //原來為5
        DATA=1;
        //總線由上拉電阻拉高 主機延時20us
        Delay_10us();
        Delay_10us();
        Delay_10us();
        Delay_10us();
        //主機設為輸入 判斷從機響應信號
        DATA=1;
        //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行          
        if(!DATA)                 //T !          
        {
            U8FLAG=2;
            //判斷從機是否發出 80us 的低電平響應信號是否結束         
            while((!DATA)&&U8FLAG++);
            U8FLAG=2;
            //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
            while((DATA)&&U8FLAG++);
            //數據接收狀態                 
            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(ui x)//延時函數
{
        ui i,j;
        for(i=0;i<x;i++)
        for(j=0;j<110;j++);
}

void display()
{
        P0=table[humidity/10];
        W1=0;                               
        delay(1);                                //延時
        W1=1;                                //關顯示
                                                  
        P0=table[humidity%10];
        W2=0;                 
        delay(1);                                 //延時
        W2=1;                                //關顯示
}
void work()//工作函數
{
        if(change==0)//判斷切換是否按下
        {
                buzz=0;
                delay(50);
                if(change==0)
                change_flag=~change_flag;//手動,自動切換
                led_zhishi=change_flag;
                if(change_flag==1)
                {
                        out_go=1;
                        out_back=1;
                        led_go=1;
                        led_back=1;
                }
                buzz=1;
                while(!change);//釋放
                buzz=1;
        }
       
        if(change_flag==0)//自動模式
        {
                if(light==0||flag_HH==1)//夜間(無光)時拉回衣架           flag_HH==1濕度高
                {
                        delay(20);
                        if(light==0||flag_HH==1)
                        {
                                if((limit_go==0)&&(flag_shan==0))
                                {       
                                        out_go=1;
                                        out_back=1;
                                        led_go=1;
                                       
                                        for(shan=0;shan<6;shan++)
                                        {
                                                led_go=~led_go;
                                                buzz=led_go;
                                                delay(500);
                                        }
                                        flag_shan=1;
                                }
                                else if(limit_go==1)
                                {       
                                        out_go=1;
                                        out_back=0;
                                       
                                        led_back=1;
                                        led_go=0;
                                        flag_shan=0;
                                }
                        }
                }
                else if(light==1&&flag_HH==0)//白天(有光)時伸出衣架
                {
                        delay(20);
                        if(light==1&&flag_HH==0)
                        {
                                if((limit_back==0)&&(flag_shan==0))
                                {       
                                        out_go=1;
                                        out_back=1;
                                       
                                        led_back=1;
                                        for(shan=0;shan<6;shan++)
                                        {
                                                led_back=~led_back;
                                                buzz=led_back;
                                                delay(500);
                                        }
                                        flag_shan=1;
                                }
                                else if(limit_back==1)
                                {       
                                        out_go=0;
                                        out_back=1;
                                       
                                        led_back=0;
                                        led_go=1;
                                        flag_shan=0;
                                }
                        }
                }
        }
        else if(change_flag==1)//手動模式
        {
                if((in_go==0)&&(limit_go==1))//關閉是否按下
                {
                        buzz=0;
                        delay(5);
                        if((in_go==0)&&(limit_go==1))
                        {       
                                buzz=1;
                                out_go=1;
                                out_back=~out_back;//按一下伸出,再按一下,停止
                               
                                buzz=1;
                                led_back=1;
                                led_go=out_back;
                                flag_shan1=0;
                               
                        }
                        while(!in_go);//釋放
                        buzz=1;
                }
                else if((in_back==0)&&(limit_back==1))//打開是否按下
                {
                        buzz=0;
                        delay(5);
                        if((in_back==0)&&(limit_back==1))
                        {
                                buzz=1;       
                                out_back=1;
                                out_go=~out_go;//按一下收回,再按一下,停止  
                               
                                buzz=1;
                                led_go=1;
                                led_back=out_go;
                                flag_shan2=0;
                               
                        }
                        while(!in_back);//按鍵釋放
                        buzz=1;
                }
                if((limit_go==0)&&(flag_shan1==0))
                {
                        delay(5);
                        if((limit_go==0)&&(flag_shan1==0))
                        {       
                               
                                out_back=1;
                                led_go=1;
                                for(shan=0;shan<6;shan++)
                                {
                                        led_go=~led_go;
                                        buzz=led_go;
                                        delay(500);
                                }
                                flag_shan1=1;
                        }
                }
                if((limit_back==0)&&(flag_shan2==0))
                {
                        delay(5);
                        if((limit_back==0)&&(flag_shan2==0))
                        {       
                               
                                out_go=1;
                                led_back=1;
                                for(shan=0;shan<6;shan++)
                                {
                                        led_back=~led_back;
                                        buzz=led_back;
                                        delay(500);
                                }
                                flag_shan2=1;
                        }
                }
        }
}

void main()//主函數
{
        uc testnum;
        light=0;
        buzz=1;
        led_zhishi=0;
        Timer0_Init();
        while(1)//進入死循環
        {
                work();//調用工作函數
                display();
                if (FlagStartRH == 1)         //溫濕度轉換標志檢查
                {
            testnum = RH();
                        FlagStartRH = 0;
                        humidity = U8RH_data_H;         //讀出濕度,只取整數部分
                        if(humidity>=80)
                        flag_HH=1;
                        else
                        flag_HH=0;
                        TR0 = 1;
                }
                display();
        }
}

//定時器0中斷
void Timer0_ISR (void) interrupt 1 using 0
{
        ui RHCounter;
        TL0 = 0xb0;
        TH0 = 0x3c;     //定時器賦予初值

        //每5秒鐘啟動一次溫濕度轉換
    RHCounter ++;
    if (RHCounter >= 20)
    {
       FlagStartRH = 1;
           RHCounter = 0;
           TR0=0;
    }
}


4be4d9e3-69dc-4d03-a6ff-cada27c2b91a.png (95.58 KB, 下載次數: 0)

4be4d9e3-69dc-4d03-a6ff-cada27c2b91a.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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