TC35TC35i或MC35MC35i與MCU51單片機打電話、短信實驗程序 精品.doc_第1頁
TC35TC35i或MC35MC35i與MCU51單片機打電話、短信實驗程序 精品.doc_第2頁
TC35TC35i或MC35MC35i與MCU51單片機打電話、短信實驗程序 精品.doc_第3頁
TC35TC35i或MC35MC35i與MCU51單片機打電話、短信實驗程序 精品.doc_第4頁
TC35TC35i或MC35MC35i與MCU51單片機打電話、短信實驗程序 精品.doc_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

/* * * * TC35/TC35i或MC35/MC35i與MCU51單片機打電話、短信實驗程序 * * * * 功能:短信控制8路發(fā)光管的亮與滅 * * 短信讀取8路發(fā)光管的當前開關狀態(tài) * * 通過發(fā)短信控制蜂鳴器報警鳴音 * * 按鍵控制功能: * * 1、按板上第一個按鍵,自動撥打程序中設定好的目標電話號碼 * * 2、按板上第二個按鍵,自動發(fā)送DS18B20溫度傳感器測到的溫度值對目標手機 * * 3、按板上第三個按鍵,自動發(fā)送測試“DEMO”短信給程序中設定的目標手機 * * 4、按板上第四個按鍵,控制液晶顯示內(nèi)容,用戶可以自定義顯示內(nèi)容 * */#include#define uchar unsigned char#define uint unsigned int#define RxIn 90/定義接收的數(shù)組長度為90uchar code AT=AT;/握手信號uchar code ATE=ATE; /關回顯uchar code AT_MI=AT+MI=2,1;/設置這組參數(shù)來了新信息直接顯示到串口,不作存儲uchar code AT_CSCA=AT+CSCA=+8613010360500;/設置服務中心號碼uchar code AT_CMGF=AT+CMGF=1;/設置短信的格式為text格式uchar code AT_CMGR=AT+CMGR=;/讀取短信指令uchar code AT_CMGS=AT+CMGS=;/發(fā)送短信指令uchar code AT_CMGD=AT+CMGD=;/發(fā)送短信指令uchar code successfully=Operate Successfully!;/發(fā)送操作成功信息到目標號碼uchar code fail=Operate failed,try again!;/發(fā)送操作失敗信息到目標號碼uchar AT_delete12;uchar AT_Read12;/用來存儲發(fā)送讀取短信指令 uchar AT_SendNumber22; /用來存儲發(fā)送短信號碼指令uchar numberbuf3; /用來保存短信條數(shù) uchar idata SystemBufRxIn; /儲存出口接收數(shù)據(jù) uchar mandBuf6; /用來儲存指令 uchar idata state17; /用來存儲IO口狀態(tài) uchar idata state117; /用來存儲IO口狀態(tài) uchar Rx=0; uint temp; /記錄狀態(tài) uchar temp1;/ 用于記錄P0口狀態(tài)uchar temp2; / 用于記錄P2口狀態(tài) bit check=0;/查詢標志位 bit receiveready=0; /接收短信標志位bit sendready=0; /發(fā)送短信準備標志位bit send=0; /發(fā)送短信標志位bit flag=0; /指令標志位sbit P3_7=P37;/啟動GSM的啟動線連IGTsbit realy0=P10; /發(fā)光管1sbit realy1=P11; /發(fā)光管2sbit realy2=P12; /發(fā)光管3sbit realy3=P13; /發(fā)光管4sbit realy4=P14; /發(fā)光管5sbit realy5=P15; /發(fā)光管6sbit realy6=P16; /發(fā)光管7sbit realy7=P17; /發(fā)光管8sbit sw1=P33;sbit sw2=P34;sbit sw3=P35;sbit sw4=P36;sbit beep=P32; /蜂鳴器sbit key1=P20; /開關1sbit key2=P21; /開關2sbit key3=P22; /開關3sbit key4=P23; /開關4sbit key5=P24; /開關5sbit key6=P25; /開關6sbit key7=P26; /開關7sbit key8=P27;/開關8void Delay_ms(uint i);void Start_GSM(void);void UART_init (void);void sendchar(uchar ch);void sendstring(uchar *p);void GSM_INIT(void);void receive_ready(void);void message_read(void);void read_message(void);void sendmessage(void);uchar code AT7=0x41,0x54,0x2B,0x43,0x4D,0x47,0x53,0x3D;/AT+CMGS= AT+CMGS=“+8613xxxxxxxxx”回車輸入短消息。Crtl+Z結(jié)束并發(fā)送。uchar code AT12=0x41,0x54,0x44,0x3E;/ATD ATD*; (撥號,*為需要撥的號碼,如呼則為ATuchar code neirong11sbit DQ=P37; /DS18B20數(shù)據(jù)傳輸線接單片機的相應的引腳unsigned char tempL=0; /臨時變量低位unsigned char tempH=0;/臨時變量高位float temperature; /溫度值unsigned char k,ge,shi,bai;uchar code atshanchu= AT+CMGD=9;/* 延時子程序*/void delay1(uint ms) uchar k; while(ms-) for(k = 0; k 120; k+); /-/*函數(shù)功能:延時子程序入口參數(shù):k出口參數(shù):*/void delay(unsigned int k) unsigned int n; n=0; while(n 0;i-) DQ=1; delay(1); DQ=0; dat=1; DQ=1; if(DQ) dat|=0x80; delay(4); return(dat);/*函數(shù)功能:向DS18B20寫一字節(jié)數(shù)據(jù)入口參數(shù):dat出口參數(shù):*/WriteOneChar(unsigned char dat) unsigned char i=0; for(i=8;i0;i-) DQ=0; DQ=dat&0x01;delay(5);DQ=1;dat=1;delay(4);/*函數(shù)功能:DS18B20初始化子程序入口參數(shù):出口參數(shù):*/Init_DS18B20(void)unsigned char x=0; DQ=1; /DQ先置高 delay(8); /延時 DQ=0; /發(fā)送復位脈沖 delay(85); /延時(480ms) DQ=1; /拉高數(shù)據(jù)線 delay(14); /等待(1560ms) /*函數(shù)功能:向DS18B20讀溫度值入口參數(shù):出口參數(shù):temperature*/ReadTemperature(void) Init_DS18B20(); /初始化WriteOneChar(0xcc); /跳過讀序列號的操作WriteOneChar(0x44); /啟動溫度轉(zhuǎn)換delay(125); /轉(zhuǎn)換需要一點時間,延時Init_DS18B20(); /初始化WriteOneChar(0xcc); /跳過讀序列號的操作WriteOneChar(0xbe); /讀溫度寄存器(頭兩個值分別為溫度的低位和高位)tempL=ReadOneChar(); /讀出溫度的低位LSBtempH=ReadOneChar(); /讀出溫度的高位MSB /溫度轉(zhuǎn)換,把高低位做相應的運算轉(zhuǎn)化為實際溫度temperature=(tempH*256)+tempL)*0.0625; delay(200);return(temperature);/* 發(fā)送數(shù)據(jù)函數(shù)*/void senddata(uchar dat) SBUF =dat; while(!TI); TI = 0;/void mingling(uchar zijie,uchar *p) uchar m; for(m=0;m0;i-) for(j=0;j125;j+) ;/*/函數(shù)void Start_GSM(void);實現(xiàn)功能:對TC35進行啟動,開啟TC35/功能詳述:單片機上的P3_7管腳是跟TC35的IGT管腳相連;需要啟動TC35,必須在 15腳(/IGT)加時長至少為100ms的低電平信號,/且該信號下降沿時間小于1ms。啟動后,15 腳的信號應保持高電平./*/void Start_GSM(void) P3_7=0; Delay_ms(1000); P3_7=1; Delay_ms(1000); /*/函數(shù)void UART_init;實現(xiàn)功能:對串口進行初始化/*/void UART_init (void) TMOD=0x20; /選擇定時器1 PCON=0x00;/波特率不加倍 SCON=0x50;/串行工作方式1允許串行接收 TH1=0xFD;/實驗板上晶振位11.0592MHZ,選擇波特率為9600 TL1=0xFD;/在相應計數(shù)器上賦值 EA=1;/總中斷開啟 ES=1;/串行中斷開啟 TR1=1;/開啟定時器1 /*/函數(shù)void sendchar(uchar ch);實現(xiàn)功能:發(fā)送一字節(jié)數(shù)據(jù)/*/void sendchar(uchar ch) SBUF=ch;while(TI=0);TI=0;/*/函數(shù)void sendstring(uchar *p);實現(xiàn)功能:通過串口發(fā)送字符串/*/void sendstring(uchar *p) while(*p) sendchar(*p); p+; sendchar(0x0D); sendchar(0x0A);/*/函數(shù)void receive(void) interrupt 4 using 1;實現(xiàn)功能:通過串口接收數(shù)據(jù)/*/void receive(void) interrupt 4 using 1 if(RI) if(RxRxIn) SystemBufRx=SBUF; Rx+; RI=0; /*/函數(shù)void GSM_INIT(void);實現(xiàn)功能:初始化TC35模塊/*/void GSM_INIT(void) LOOP:Delay_ms(1000);sendstring(AT);Delay_ms(1000); sendstring(ATE); Delay_ms(1000); sendstring(AT_MI);Delay_ms(1000); sendstring(AT_CSCA);Delay_ms(1000); for(Rx=0;RxRxIn;Rx+) SystemBufRx=0x00; Rx=0; sendstring(AT_CMGF); Delay_ms(1000); if(SystemBuf2=O)&(SystemBuf3=K) /判斷是否模塊初始化成功,成功的話模塊會回復OK給單片機 /如果單片機沒有收到OK,就繼續(xù)發(fā)送初始化指令/ for(Rx=0;RxRxIn;Rx+) SystemBufRx=0x00; Rx=0; else for(Rx=0;RxRxIn;Rx+) SystemBufRx=0x00; Rx=0; goto LOOP; /*/函數(shù)void receive_ready(void);實現(xiàn)功能:接收短信準備/*/ void receive_ready(void) uchar i;if(SystemBuf5=0x54)&SystemBuf6=0x49) /如果有新短信來,模塊會通過串口向單片機發(fā)送字符串, /此函數(shù)的功能是判斷是否有新短信來,如果來的話就置位準備接受位標志為1 receiveready=1; /如果不是新短信的指令,就舍棄,并將接收數(shù)組清零/ else for(i=0;iRx;i+) SystemBufi=0x00; Rx=0; /*/函數(shù) void message_read(void);實現(xiàn)功能:判斷短信,準備是否回復短信給目標號/*/ void message_read(void) if(sendready=1)&(SystemBuf5=0x47)&(SystemBuf6=0x52) send=1; /*/函數(shù) void read_message(void);實現(xiàn)功能:發(fā)送讀取短信指令,/*/ void read_message(void) uchar i; Delay_ms(1000); for(i=0;i3;i+) numberbufi=SystemBuf14+i; for(i=0;i8;i+)AT_Readi=AT_CMGRi; for(i=8;i11;i+) AT_Readi=numberbufi-8; for(Rx=0;RxRxIn;Rx+) SystemBufRx=0x00; Rx=0; sendstring(AT_Read); /發(fā)送AT+CMGR=?,?代表短信儲存所在位置 /*/函數(shù) void readmend(void);實現(xiàn)功能:讀取短信內(nèi)容,判斷相應指令是否正確/*/ void readmend(void) uchar i; for(i=0;i5;i+) /將短信內(nèi)容中的指令部分截取出來放到 /mandBuf數(shù)組中 mandBufi=SystemBuf61+i; if(mandBuf0=o)&(mandBuf1=p)&(mandBuf2=e)&(mandBuf3=n) /判斷指令是否為開發(fā)光管指令 switch(mandBuf4) case 0x31: realy0=0;/發(fā)光管 1開啟 break; case 0x32: realy1=0;/發(fā)光管 2開啟 break; case 0x33: realy2=0; /發(fā)光管 3開啟 break; case 0x34: realy3=0;/發(fā)光管 4開啟 break; case 0x35: realy4=0;/發(fā)光管 5開啟 break; case 0x36: realy5=0; /發(fā)光管 6開啟 break; case 0x37: realy6=0; /發(fā)光管 7開啟 break; case 0x38: realy7=0; /發(fā)光管 8開啟 break; case 0x39: beep=0;Delay_ms(2000);beep=1;Delay_ms(2000);beep=0;Delay_ms(2000);beep=1;/蜂鳴器響 /蜂鳴器 break; case 0x4f: P1=0; /全開 break; case 0x3f: temp1=P1; temp=temp1; check=1;break; default:flag=1; /其他指令定義為錯誤操作 break; /置位錯誤操作位為1 else if(mandBuf0=s)&(mandBuf1=h)&(mandBuf2=u)&(mandBuf3=t)/判斷指令是否為關閉電器指令 switch(mandBuf4) case 0x31: realy0=1; /關閉發(fā)光管1 break; case 0x32: realy1=1; /關閉發(fā)光管2 break; case 0x33: realy2=1; /關閉發(fā)光管3 break; case 0x34: realy3=1;/關閉發(fā)光管4 break; case 0x35: realy4=1;/關閉發(fā)光管5 break; case 0x36: realy5=1;/關閉發(fā)光管6 break; case 0x37: realy6=1; /關閉發(fā)光管7 break; case 0x38: realy7=1; /關閉發(fā)光管8 break; case 0x53:P1=0xff; /全關 break; default:flag=1;/其他指令定義為錯誤操作 break; /置位錯誤操作位為1 else flag=1;/如果發(fā)送的指令既不是open也不是shut就定義為錯誤操作/*/函數(shù) void readstate;實現(xiàn)功能:將P0,P2口的狀態(tài)轉(zhuǎn)化為數(shù)組,/*/void readstate(void) uint bitt,i,j; for(bit

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論