51hei.png (113.46 KB, 下載次數: 30)
下載附件
2019-12-22 20:29 上傳
單片機源程序如下:
- #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;
- }
- }
復制代碼
所有資料51hei提供下載:
晾衣架.rar
(235.43 KB, 下載次數: 41)
2019-12-21 18:04 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|