




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、#include#include#define uchar unsigned char#define uint unsigned int/* 宏定義控制變量的值 */#define RST 0X01#define AT_TEST 0X02#define CMGF 0X03#define CMGR 0X04#define CMGD 0X05#define CSCA 0X06#define CMGS 0X07#define SMS 0X08#define SIMRET 0X00/*BEEP TEST*/sbit E=P2A7;/1602 使能引腳sbit RW=P2A6;/1602 讀寫引腳sbi
2、t RS=P2A5;/1602 數(shù)據(jù) /命令選擇引腳sbit beep=P2A2;sbit key_num=P3A2;sbit key_OK=P3A3;sbit light1=P3A5;/sbit light2=P3A7;sbit air=P2A0;sbit RELAY = P2A1;/* 語音按鍵掃描 */sbit voice_open=P1A6;sbit voice_close=P1A7;/*Buffer100 用來存儲串口發(fā)送的數(shù)據(jù), com_dat 用來記錄串口發(fā)送的個數(shù) */uchar idata Buffer100, *q, com_dat; / 從串口接收的數(shù)據(jù)uchar i,j
3、,k,num_i,num_j,LED_i; / 定義循環(huán)變量uchar SIM_CON; / 定義控制變量uchar flag=0; / 定義標志位uchar doorflag=0,messflag=0;uchar *p; / 定義數(shù)組指針uchar password3=0,0,0; / 定義密碼數(shù)組uchar KEY_NUM=0,KEY_OK=0; / 定義按鍵變量uchar idata Phone_num12;/* 所要發(fā)送的數(shù)據(jù) */uchar code AT_RST=A,T,&,F,13,10; / 發(fā)送 AT&F,SIM300 返回數(shù)據(jù)時緩沖數(shù)組的7、 8是 OKuchar code
4、 AT=A,T,13,10; / 發(fā)送 AT,SIM300 返回數(shù)據(jù)時緩沖數(shù)組的5、 6 是 OKuchar code AT_CMGF=A,T,+,C,M,G,F,=,1,13,10; / 發(fā)送 AT+CMGF=1,SIM300 返回 數(shù)據(jù)時緩沖數(shù)組的 12、13 是 OKuchar code AT_CMGR=A,T,+,C,M,G,R,=,1,13,10;/ 發(fā)送 AT+CMGR=1,SIM300 返回數(shù)據(jù)時緩沖數(shù)組的15、16是GR , 20、21、22是REC,80開始是短信內(nèi)容uchar code AT_CMGD=A,T,+,C,M,G,D,=,1,13,10;/發(fā)送 AT+CMGD=
5、1,SIM300 返回數(shù)據(jù)時緩沖數(shù)組的12、 13 是 OKuchar code AT_A=A,T,A,13,10;uchar code AT_CSCA=AT+CSCA=; / 發(fā)送本地中心號碼,緩沖數(shù)組的 27、 28 是 OKuchar code AT_LOCAL_NUM=+8613800290500; / 本地中心號碼uchar code AT_CMGS=AT+CMGS=; / 發(fā)送目的中心號碼,緩沖數(shù)組的24是unsigned char code G_Rotation4=0x08,0x10,0x20,0x40;/ 正轉(zhuǎn)表格 unsigned char code K_Rotation4=
6、0x40,0x20,0x10,0x08;/ 反轉(zhuǎn)表格/*短信內(nèi)容數(shù)組 */uchar code SMS_open_l=Light opened ;uchar code SMS_open_a=Aircondition opened;uchar code SMS_open_d=Door opened ;uchar code SMS_hasopen_d=Door has opened ;uchar code SMS_close_l=Light closed ;uchar code SMS_close_a=Aircondition closed;uchar code SMS_close_d=Door
7、closed ;uchar code SMS_hasclose_d=Door has closed ;/*DS18B20*/ #define jump_ROM 0xCC#define start 0x44 #define read_EEROM 0xBEsbit DQ = P3A4; /DS18B20 數(shù)據(jù)口 unsigned char TMPH,TMPL;float tt;uint temp;/* 名稱 : Delay(uint del)* 功能 : 延時 10ms * del* 輸入 : 無* 輸出 : 無* void Delay(uint del)uint i,j;for(i=0; ide
8、l; i+) for(j=0; j1827; j+)/* 名稱 : delay()* 功能 : 延時 ,延時時間大概為 140US。* 輸入 : 無* 輸出 : 無* void delay()int i,j;for(i=0; i=10; i+)for(j=0; j=2; j+);/* * 名稱 : wait()* 功能 : 延時函數(shù)* 輸入 : 無* 輸出 : 無* void wait(uint N)int i;for(i=0; iN; i+);/* 名稱 : open_door( )* 功能 : 控制步進電機開門* 輸入 : 無* 輸出 : 無* void open_door()uint m
9、,n;for(n=0;n150;n+) for(m=0;m4;m+) /4 相P2=K_Rotationm;wait(1000); / 改變這個參數(shù)可以調(diào)整電機轉(zhuǎn)速doorflag=1;/* 名稱 : close_door( )* 功能 : 控制步進電機關(guān)門* 輸入 : 無* 輸出 : 無* void close_door() uint i,j; for(j=0;j150;j+) for(i=0;i4;i+) /4 相 P2=G_Rotationi; wait(1000); / 改變這個參數(shù)可以調(diào)整電機轉(zhuǎn)速doorflag=0;/* *名稱:Reset()*功能:復位DS18B20*輸入:無*
10、輸出:無* uchar Reset(void)uchar deceive_ready;DQ = 0;wait(29);DQ = 1;wait(3);deceive_ready = DQ;wait(25);return(deceive_ready);/* 名稱 : read_bit()* 功能 : 從 DS18B20 讀一個位值* 輸入 : 無* 輸出 : 從 DS18B20 讀出的一個位值* uchar read_bit(void)uchar i;DQ = 0;DQ = 1;for(i=0; i3; i+);return(DQ);/* 名稱 : write_bit()* 功能 : 向 DS18
11、B20 寫一位* 輸入 : bitval (要對 DS18B20 寫入的位值)* 輸出 : 無* void write_bit(uchar bitval)DQ=0;if(bitval=1)DQ=1;wait(5);DQ=1;/* 名稱 : read_byte()* 功能 : 從 DS18B20 讀一個字節(jié)* 輸入 : 無* 輸出 : 從 DS18B20 讀到的值* uchar read_byte(void)uchar i,m,receive_data;m = 1;receive_data = 0;for(i=0; i8; i+)if(read_bit()receive_data = recei
12、ve_data + (m i);wait(6);return(receive_data);/* 名稱 : write_byte()* 功能 : 向 DS18B20 寫一個字節(jié)* 輸入 : val (要對 DS18B20 寫入的命令值)* 輸出 : 無* void write_byte(uchar val)uchar i,temp;for(i=0; i i;temp = temp & 0x01;write_bit(temp);wait(5);/* 名稱 : Convert(uchar In_Date)* 功能 : 因為電路設(shè)計時, P0.0-P0.7 接法剛好了資料中的相反,所以設(shè)計該函數(shù)。*
13、輸入 : 1602 資料上的值* 輸出 : 送到 1602 的值*/ uchar Convert(uchar In_Date)uchar i, Out_Date = 0, temp = 0; for(i=0; i i) & 0x01;Out_Date |= (temp (7 - i);return Out_Date;/* 名稱 : enable(uchar del)* 功能 : 1602 命令函數(shù)* 輸入 : 輸入的命令值* 輸出 : 無* void enable(uchar del)P0 = Convert(del);RS = 0;RW = 0;E = 0; delay();E = 1; d
14、elay();/* 名稱 : write(uchar del)* 功能 : 1602 寫數(shù)據(jù)函數(shù)* 輸入 : 需要寫入 1602 的數(shù)據(jù)* 輸出 : 無* void write(uchar del) P0 = Convert(del);RS = 1;RW = 0;E = 0; delay();E = 1; delay();/* 名稱: L1602_init()* 功能: 1602 初始化,請參考 1602 的資料* 輸入: 無* 輸出: 無*void L1602_init(void)enable(0x01);enable(0x38);enable(0x0c);enable(0x06);enab
15、le(0xd0);/* 名稱 : L1602_char(uchar hang,uchar lie,uchar sign)* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符顯示 b L1602_char(1,5,b)* 輸入 : 行,列,需要輸入 1602 的數(shù)據(jù)* 輸出 : 無*/void L1602_uchar(uchar hang,uchar lie,uchar sign)uchar a;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0; a = a + lie - 1; enable(a); write(sign);/* 名稱 : L160
16、2_string(uchar hang,uchar lie,uchar *p)* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示 函數(shù)如下L1602_string(1,5,ab cd ef;)* 輸入 : 行,列,需要輸入 1602 的數(shù)據(jù),調(diào)用該函數(shù)如下ab cd ef ,調(diào)用該* 輸出 : 無*void L1602_string(uchar hang,uchar lie,uchar *p)uchar a;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0;a = a + lie - 1;enable(a);k=0;while(1)if(
17、*p = 0) break;write(*p);p+;/* 不讓液晶屏顯示內(nèi)容超出 */k+; if(k=16) break;* 名稱* 功能* 輸入/*L1602_SCREEN()L1602 掃描,刷新顯示 無* 輸出 : 無* void L1602_SCREEN()q=Buffer;L1602_string(2,1,q);com_dat=0;Delay(10);/* * 名稱 : Com_Int()* 功能 : 串口中斷子函數(shù)* 輸入 : 無* 輸出 : 無* void Com_Int(void) interrupt 4 EA=0;if(RI=1) / 當硬件接收到一個數(shù)據(jù)時, RI 會置
18、位Buffercom_dat=SBUF; / 把從串口讀出的數(shù)存到數(shù)組RI=0; com_dat+;if(com_dat=100) com_dat=0;/ 當 com_dat = 100 時,清 0,防止數(shù)組溢出 EA = 1;/* * 名稱 : Com_Init()* 功能 : 串口初始化,晶振 11.0592,波特率 9600 ,使能了串口中斷* 輸入 : 無* 輸出 : 無* void Com_Init(void)TMOD = 0x20; / 定時器工作在定時器 1 的方式 2PCON = 0x00; / 不倍頻SCON = 0x50;/ 串口工作在方式 1,并且啟動串行接收TH1 =
19、0xFd; / 設(shè)置波特率 9600TL1 = 0xFd;TR1 = 1;/啟動定時器 1ES = 1;/ 開串口中斷/* 名稱 : Send_uart(unsigned char ch)* 功能 : 向串口發(fā)送一個字符* 輸入 : 無* 輸出 : 無* void Send_uart(unsigned char ch)SBUF=ch;while(TI=0);TI=0;/* 名稱 : Send_AT_F* 功能 : 發(fā)送 AT&F* 輸入 : 無* 輸出 : 無* void Send_AT_F()p=AT_RST;EA=0;for(j=0;jsizeof(AT_RST);j+)SBUF=*p;w
20、hile(!TI)_nop_();p+;TI=0;EA=1;SIM_CON=RST;Delay(100);/* 名稱 : Send_AT* 功能 : 發(fā)送 AT* 輸入 : 無* 輸出 : 無* void Send_AT()p=AT;EA=0;for(j=0;jsizeof(AT);j+)SBUF=*p;while(!TI)_nop_();p+;TI=0;EA=1;SIM_CON=AT_TEST;Delay(100);/* 名稱 : Send_AT_CMGF* 功能 : 發(fā)送 AT+CMGF=1* 輸入 : 無* 輸出 : 無* void Send_AT_CMGF() for(i=0;isiz
21、eof(AT_CMGF)-1;i+)Send_uart(AT_CMGFi);Send_uart(0X0D);Send_uart(0X0D);Send_uart(0X0A);SIM_CON=CMGF;Delay(100);/* 名稱 : Send_AT_CMGR* 功能 : 發(fā)送 AT+CMGR=1* 輸入 : 無* 輸出 : 無* void Send_AT_CMGR() for(i=0;isizeof(AT_CMGR)-1;i+)Send_uart(AT_CMGRi);Send_uart(0X0D);Send_uart(0X0D);Send_uart(0X0A);SIM_CON=CMGR;De
22、lay(100);/* * 名稱 : Send_AT_CMGD* 功能 : 發(fā)送 AT+CMGD=1* 輸入 : 無* 輸出 : 無* void Send_AT_CMGD()p=AT_CMGD;EA=0;for(j=0;jsizeof(AT_CMGD);j+)SBUF=*p;while(!TI)_nop_();p+;TI=0;EA=1;SIM_CON=CMGD;Delay(100);/* 名稱: Send_AT_CSCA* 功能: 發(fā)送 AT+CSCA=+8613800290500* 輸入: 無* 輸出: 無* void Send_AT_CSCA()for(i=0;isizeof(AT_CSC
23、A)-1;i+)Send_uart(AT_CSCAi);Send_uart(0X22);for(i=0;isizeof(AT_LOCAL_NUM)-1;i+)Send_uart(AT_LOCAL_NUMi);Send_uart(0X22);Send_uart(0X0D);Send_uart(0X0A);SIM_CON=CSCA;Delay(100);/* 名稱 : Send_AT_CMGS(uchar idata aim_num)* 功能 : 發(fā)送 AT+CMGS= 手機號 * 輸入 : 無* 輸出 : 無* void Send_AT_CMGS(uchar aim_num)for(i=0;is
24、izeof(AT_CMGS)-1;i+)Send_uart(AT_CMGSi);Send_uart(0X22);for(i=0;i11;i+)Send_uart(aim_numi);Send_uart(0X22);Send_uart(0X0D);Send_uart(0X0A);SIM_CON=CMGS;Delay(100);/* 名稱 : Send_REPLY* 功能 : 發(fā)送短信內(nèi)容* 輸入 : 無* 輸出 : 無* void Send_REPLY(uchar REPL Y) for(i=0;i19;i+) Send_uart(REPLYi);Delay(200);Send_uart(0x1
25、A);Send_uart(0x0D);Send_uart(0x0A);SIM_CON=SMS;Delay(100); /* * 名稱 : Send_AT_A* 功能 : 發(fā)送 AT&F* 輸入 : 無* 輸出 : 無* void Send_AT_A()p=AT_A;EA=0;for(j=0;jsizeof(AT_A);j+) SBUF=*p; while(!TI) _nop_();p+;TI=0;EA=1;Delay(100);/* 名稱: Beep()* 功能: 通過蜂鳴器響的方式,判斷短信發(fā)送內(nèi)容* 輸入: 無* 輸出: 無*void Beep(uchar n)for(i=0;in;i+)
26、beep=0;Delay(10);beep=1;Delay(10);/* * 名稱 : Main()* 功能 : 主函數(shù)* 輸入 : 無* 輸出 : 無* void main()/* 初始化 1602*/Com_Init();Delay(10);L1602_init();L1602_string(1,1,*Hello Master*);L1602_string(2,1,Wait );P2=0x00;/*SIM300 初始化 */1602 上*/Send_AT_F();/*進入循環(huán)掃描,把返回的數(shù)據(jù)顯示在P1=0xff;while(1)loop1:com_dat=0;if(SIM_CON=RST
27、)Delay(10);if(Buffer7=O)&(Buffer8=K)/L1602_string(2,1, );Delay(20);com_dat=0;Delay(10);Send_AT();/* 如果發(fā)送失敗,重發(fā) AT&F*/elseDelay(10);com_dat=0;Send_AT_F();else if(SIM_CON=A T_TEST)Delay(10);if(Buffer5=O)&(Buffer6=K) /L1602_string(2,1,Wait);Delay(20);com_dat=0;Delay(10);Send_AT_CMGF();/* 如果發(fā)送失敗,重發(fā) AT*/
28、else Delay(10); com_dat=0; Send_AT();else if(SIM_CON=CMGF)Delay(10);if(Buffer12=O)&(Buffer13=K)/L1602_string(2,1, );Delay(20);com_dat=0;Delay(10);Send_AT_CMGD();/* 如果發(fā)送失敗,重發(fā) AT+CMGF=1*/elseDelay(10);com_dat=0;Send_AT_CMGF();else if(SIM_CON=CMGD)Delay(10);if(Buffer12=O)&(Buffer13=K)L1602_string(2,1,
29、);L1602_string(2,1,Ready);com_dat=0;SIM_CON=SIMRET;Delay(10);/* 如果發(fā)送失敗,重發(fā) AT*/elseDelay(10);com_dat=0;Send_AT_CMGD();/* 檢測是否來電話 */else if(Buffer2=R)&(Buffer3=I)com_dat=0;Send_AT_A();while(1) com_dat=0; L1602_string(2,1,Calling. ); if(voice_open=0)Delay(1);if(voice_open=0) light1=0;while(!voice_open)
30、;Delay(1); while(!voice_open);if(voice_close=0)Delay(1);if(voice_close=0) light1=1; while(!voice_close); Delay(1);while(!voice_close); if(Buffer2=N)L1602_string(1,1,*Hello Master*);L1602_string(2,1,Ready ); goto loop1;/* 檢測是否收到短信 */else if(Buffer5=T)&(Buffer6=I) L1602_SCREEN(); Delay(10);for(LED_i=0
31、;LED_i2;LED_i+) P1=0x7e;Delay(10);P1=0xbd;Delay(10);P1=0xdb;Delay(10);P1=0xe7;Delay(10);P1=0xdb;Delay(10);P1=0xbd;Delay(10);P1=0x7e;Delay(10);P1=0xff;Delay(10);P1=0x00;Delay(10);P1=0xff;Delay(10);P1=0x00;Delay(10);P1=0xff;Send_AT_CMGR();while(1)loop2:com_dat=0;if(SIM_CON=CMGR)L1602_SCREEN(); if(Buff
32、er15=G)&(Buffer16=R)/* */* 檢測密碼 */* */for(i=0;isizeof(Buffer);i+)if(Bufferi=)flag+;if(flag=6)flag=0;break;for(j=0;j(sizeof(Buffer)-i);j+)if(Bufferi+j+1=(password0+48)&(Bufferi+j+2=(password1)+48)&(Bufferi+j+3= =(password2)+48)break;if(j=(sizeof(Buffer)-i)L1602_string(2,1, );L1602_string(2,1,Wrong pa
33、ssword);Delay(200);goto error;/*L1602_string(2,1, );L1602_string(2,1,Reading SMS);L1602_string(2,1, );L1602_string(2,1,Reading SMS);/* 檢測手機號 */* */ for(num_i=0;num_isizeof(Buffer);num_i+)if(Buffernum_i=)flag+;if(flag=4)flag=0;for(num_j=0;num_j)com_dat=0;Send_REPLY(SMS_open_l);/* 如果發(fā)送失敗,重發(fā) AT+CMGS= 手
34、機號 */ elseDelay(10);com_dat=0;Send_AT_CMGS(Phone_num);else if(SIM_CON=SMS)/L1602_SCREEN();Delay(100);if(Buffer2=+)/L1602_SCREEN();Delay(100);L1602_string(2,1, );L1602_string(2,1,Finished);goto open1;elseL1602_string(2,1, );L1602_string(2,1,Finished);goto open1;open1:Send_AT_CMGD();goto loop2;else if(Bufferi+j+5=o)&(Bufferi+j+10=a)L1602_string(2,1, );L1602_string(2,1,Reading SMS);air=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 病理科醫(yī)師崗位面試問題及答案
- 2025屆湖北省宜昌市長陽縣第一高級中學化學高二下期末統(tǒng)考試題含解析
- 浙江省樂清外國語學院2025屆高一化學第二學期期末聯(lián)考試題含解析
- 2025屆山東省東平縣第一中學高二下化學期末統(tǒng)考模擬試題含解析
- 甘肅省蘭州市五十一中2025屆高一下化學期末綜合測試試題含解析
- 上海市12校聯(lián)考2025屆高二下化學期末復習檢測試題含解析
- 民生項目現(xiàn)場管理辦法
- 材料當天入庫管理辦法
- 北京集體審批管理辦法
- 體系文件稽查管理辦法
- 管道非開挖修復技術(shù)課件
- 鐵路營業(yè)線安全管理辦法
- 酒類銷售用人勞務(wù)合同
- 2025老年教育政策環(huán)境分析及教學模式創(chuàng)新路徑研究報告
- 2025年中國伺服電纜行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 【大數(shù)跨境】全球移動電源市場洞察報告
- 酒店安全獎懲規(guī)定
- 2024北京四中初一(下)開學考數(shù)學試題及答案
- 物料堆放限高管理制度
- 夫妻債務(wù)隔離約定協(xié)議書
- T/CECS 10226-2022抗裂硅質(zhì)防水劑
評論
0/150
提交評論