|
基于51單片機(jī)的智能家居系統(tǒng),東西都在文件里,拿走不謝
單片機(jī)源程序如下:
- //文件包含
- #include "reg52.h"
- #include "uart.c"
- #include "lcd1602.h"
- #include "DHT11.C"
- //宏定義
- #define uchar unsigned char
- #define uint unsigned int
- //按鍵定義
- sbit KEY1= P1^6;
- sbit KEY2= P3^2;
- sbit KEY3= P3^3;
- sbit KEY4= P3^4;
- sbit BEE = P1^0;
- sbit HW = P1^3;
- //ADC定義
- sbit CS=P3^5;
- sbit CLK=P3^7;
- sbit DIO=P3^6;
- //字符數(shù)組
- uchar code Tab0[] = {"0123456789. "};
- uchar code Tab1[] = {" it is readying "};
- uchar code Tab2[] = {" it is ok "};
- uchar code Tab3[] = {"smoke is ppm"};
- //uchar code Tab3[] = {" the GSM system "};
- uchar code Tab4[] = {" 'C % "};
- uchar code Tab5[] = {"in calling "};
- uchar code Tab6[] = {"in sending "};
- uchar code Tab7[] = {" ON OFF"};
- uchar GSM_flag=0;
- uchar temp,Set_temp=40; //溫度
- uchar shidu,Set_shidu=100; //濕度
- uchar smoke=0,Set_smoke=50; //煙霧
- uchar HW_reg=0;
- //設(shè)置短信接收人
- //uchar code PhoneNO[]= "00310035003700320039003300390030003100330037"; // 15729390137
- uchar code PhoneNO[]= "00310038003700350031003900310039003600350034 "; // 18751919654
- //設(shè)置電話接聽人
- uchar code PhoneNO1[]= "18751919654";
- //uchar code PhoneNO1[]= "15729390137";
- //主人您好!我是您的管家!
- uchar code Text1[]= "4E3B4EBA60A8597DFF016211662F60A876847BA15BB6FF01";
- //主人,溫度過高,可能著火了,快回家看看!
- uchar code Text2[]="4E3B4EBAFF0C6E295EA68FC79AD8FF0C5BB64E2D53EF80FD7740706B4E86FF015FEB56DE5BB6770B770BFF01";
- //主人,家中有人闖入,您的家可能被盜了!
- uchar code Text3[]="4E3B4EBA002C5BB64E2D67094EBA95EF5165FF0C60A876845BB653EF80FD88AB76D74E86FF01";
- //煙霧濃度過大,可能著火了!快回家看看吧!
- uchar code Text4[]="70DF96FE6D535EA68FC75927FF0C53EF80FD7740706B4E86FF015FEB56DE5BB6770B770B5427FF01";
- //ADC0832函數(shù),帶返回值
- unsigned int A_D()
- {
- unsigned char i,dat;
- CS=1; //一個轉(zhuǎn)換周期開始
- CLK=0; //為第一個脈沖作準(zhǔn)備
- CS=0; //CS置0,片選有效
-
- DIO=1; //DIO置1,規(guī)定的起始信號
- CLK=1; //第一個脈沖
- CLK=0; //第一個脈沖的下降沿,此前DIO必須是高電平
- DIO=1; //DIO置1, 通道選擇信號
- CLK=1; //第二個脈沖,第2、3個脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選通道CH0
- CLK=0; //第二個脈沖下降沿
- DIO=0; //DI置0,選擇通道0
- CLK=1; //第三個脈沖
- CLK=0; //第三個脈沖下降沿
- DIO=1; //第三個脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1
- CLK=1; //第四個脈沖
- for(i=0;i<8;i++) //高位在前
- {
- CLK=1; //第四個脈沖
- CLK=0;
- dat<<=1; //將下面儲存的低位數(shù)據(jù)向右移
- dat|=(unsigned char)DIO; //將輸出數(shù)據(jù)DIO通過或運(yùn)算儲存在dat最低位
- }
- CS=1; //片選無效
- return dat; //將讀出的數(shù)據(jù)返回
- }
- //主函數(shù)
- void main(void)
- {
- uchar G,S,B;
- LCD1602_Init(); //1602液晶屏初始化
- LCD1602_Display(LINE1,Tab1,0,16); //準(zhǔn)備界面
- BEE=0; //開機(jī)提示
- Delay_ms(50);
- BEE=1;
- Uart_init();
-
- Delay_ms(500); //等待GSM模塊穩(wěn)定
- SendString("AT\r\n");
- BEE=0; //提示已穩(wěn)定
- Delay_ms(50);
- BEE=1;
- while(1)
- {
- LCD1602_Display(LINE1,Tab3,0,16); //準(zhǔn)備完畢
- LCD1602_Display(LINE2,Tab4,0,13); //準(zhǔn)備完畢
- smoke=A_D();
- RH();
- temp=U8T_data_H; //溫度
- shidu=U8RH_data_H; //濕度
- if(1)
- {
- B=temp/100;
- S=temp%100/10;
- G=temp%10;
- LCD1602_Display(LINE2,Tab0,B,1);
- LCD1602_Display(LINE2+1,Tab0,S,1);
- LCD1602_Display(LINE2+2,Tab0,G,1);
- B=shidu/100;
- S=shidu%100/10;
- G=shidu%10;
- LCD1602_Display(LINE2+7,Tab0,S,1);
- LCD1602_Display(LINE2+8,Tab0,10,1);
- LCD1602_Display(LINE2+9,Tab0,G,1);
- B=smoke/100;
- S=smoke%100/10;
- G=smoke%10;
- LCD1602_Display(LINE1+9,Tab0,B,1);
- LCD1602_Display(LINE1+10,Tab0,S,1);
- LCD1602_Display(LINE1+11,Tab0,G,1);
- }
- Delay_ms(100);
-
- //第一個按鍵,打電話測試
- if(KEY1==0)
- {
- Delay_ms(10);
- if(KEY1==0)
- {
- BEE=0; //提示進(jìn)入按鍵
- Delay_ms(20);
- BEE=1;
- LCD1602_Display(LINE2,Tab5,0,16);
- SendString("ATD"); //打電話指令
- SendString(PhoneNO1);
- SendASC(';');
- SendASC('\r'); //發(fā)送回車指令
- SendASC('\n'); //發(fā)送回車指令
- Delay_ms(2000);
- SendString("ATH\r\n"); //主動掛斷
- Delay_ms(100);
- }
- }
- //第二個按鍵
- if(KEY2==0)
- {
- Delay_ms(10);
- if(KEY2==0)
- {
- BEE=0; //提示進(jìn)入按鍵
- Delay_ms(20);
- BEE=1;
- LCD1602_Display(LINE2,Tab6,0,16);
- SendString("AT+CMGF=1\r\n");
- Delay_ms(100);
- SendString("AT+CSCS=\"UCS2\"\r\n");
- Delay_ms(100);
- SendString("AT+CSMP=17,0,2,25\r\n");
- Delay_ms(100);
- SendString("AT+CMGS="); //信息發(fā)送指令 AT+CMGS=//
- SendASC('"');
- SendString(PhoneNO);
- SendASC('"');
- SendASC('\r'); //發(fā)送回車指令//
- SendASC('\n'); //發(fā)送回車指令//
- Delay_ms(100);
- SendString(Text1);
- Delay_ms(100);
- SendASC(0X1A);
- Delay_ms(1000);
- }
- }
- //第三個按鍵,布防
- if(KEY3==0)
- {
- Delay_ms(6);
- if(KEY3==0)
- {
- BEE=0; //提示進(jìn)入按鍵
- Delay_ms(20);
- BEE=1;
- GSM_flag=1;
- LCD1602_Display(LINE2+13,Tab7,0,3);
- }
- }
- //第四個按鍵,撤防
- if(KEY4==0)
- {
- Delay_ms(6);
- if(KEY4==0)
- {
- BEE=0; //提示進(jìn)入按鍵
- Delay_ms(20);
- BEE=1;
- GSM_flag=0;
- LCD1602_Display(LINE2+13,Tab7,4,3);
- }
- }
- //紅外
- if(HW==1)
- {
- Delay_ms(10);
- if(HW==1)
- {
- BEE=0; //提示進(jìn)入按鍵
- Delay_ms(100);
- BEE=1;
- if(GSM_flag==1)
- {
- HW_reg++;
- if(HW_reg>=10)
- HW_reg=10;
- }
- }
- }
- //進(jìn)入布防模式
- if(GSM_flag==1)
- {
- //有人闖入
- if(HW_reg>=1)
- {
- HW_reg=0;
- SendString("AT+CMGF=1\r\n");
- Delay_ms(100);
- SendString("AT+CSCS=\"UCS2\"\r\n");
- Delay_ms(100);
- SendString("AT+CSMP=17,0,2,25\r\n");
- Delay_ms(100);
- SendString("AT+CMGS="); //信息發(fā)送指令 AT+CMGS=//
- SendASC('"');
- SendString(PhoneNO);
- SendASC('"');
- SendASC('\r'); //發(fā)送回車指令//
- SendASC('\n'); //發(fā)送回車指令//
- Delay_ms(100);
- SendString(Text3);
- Delay_ms(100);
- SendASC(0X1A);
- Delay_ms(1000);
- }
- //溫度過高,可能著火了
- if(temp>=Set_temp)
- {
- SendString("AT+CMGF=1\r\n");
- Delay_ms(100);
- SendString("AT+CSCS=\"UCS2\"\r\n");
- Delay_ms(100);
- SendString("AT+CSMP=17,0,2,25\r\n");
- Delay_ms(100);
- SendString("AT+CMGS="); //信息發(fā)送指令 AT+CMGS=//
- SendASC('"');
- SendString(PhoneNO);
- SendASC('"');
- SendASC('\r'); //發(fā)送回車指令//
- SendASC('\n'); //發(fā)送回車指令//
- Delay_ms(100);
- SendString(Text2);
- Delay_ms(100);
- SendASC(0X1A);
- Delay_ms(1000);
- }
- //煙霧濃度過高,可能著火了
- if(smoke>=Set_smoke)
- {
- SendString("AT+CMGF=1\r\n");
- Delay_ms(100);
- SendString("AT+CSCS=\"UCS2\"\r\n");
- Delay_ms(100);
- SendString("AT+CSMP=17,0,2,25\r\n");
- Delay_ms(100);
- SendString("AT+CMGS="); //信息發(fā)送指令 AT+CMGS=//
- SendASC('"');
- SendString(PhoneNO);
- SendASC('"');
- SendASC('\r'); //發(fā)送回車指令//
- SendASC('\n'); //發(fā)送回車指令//
- Delay_ms(100);
- SendString(Text4);
- Delay_ms(100);
- SendASC(0X1A);
- Delay_ms(1000);
- }
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
程序.rar
(77.9 KB, 下載次數(shù): 21)
2019-6-10 16:06 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|