新聞中心

EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 家庭滅火系統(tǒng)中的短消息報(bào)警模塊設(shè)計(jì)

家庭滅火系統(tǒng)中的短消息報(bào)警模塊設(shè)計(jì)

作者: 時(shí)間:2010-03-09 來源:網(wǎng)絡(luò) 收藏




下面詳細(xì)說明一下短消息發(fā)送流程。當(dāng)運(yùn)動(dòng)檢測(cè)程序檢測(cè)到有運(yùn)動(dòng)目標(biāo)出現(xiàn)后,便會(huì)調(diào)用短消息發(fā)送模塊。這時(shí),程序先獲取要發(fā)送的短消息內(nèi)容和要發(fā)送到的手機(jī)號(hào)碼,然后設(shè)置短消息模式為PDU模式,如果是英文短信則用英文的7-bit編碼方式,如果是中文或者是中、英混合短信,則用中文的UCS2編碼。然后將短消息發(fā)送出去。其發(fā)送流程代碼如下:

∥dst_mb表示短消息要發(fā)送到的目標(biāo)手機(jī)號(hào)碼
∥sms_content是短信的內(nèi)容
∥如果發(fā)送成功則返回0,否則返回-1。
sendsms (char*dst_mb,char*sms_content);
write_comm(“AT+CMGF=0 ”,10);∥設(shè)置短消息為PDU模式
strcpy(sms->SCA,smsc);∥將短消息中心地址放到結(jié)構(gòu)體sms中
strcpy(sms->TPA,dst_mb);∥設(shè)置目標(biāo)號(hào)碼
sms->TP_PID=0;∥GSM類型設(shè)置為點(diǎn)到點(diǎn)方式
sms->TP_DCS=0; ∥7-bit編碼
strcpy(sms->TP_UD,sms_content);
encode_pdu(src,pdu);∥將源src編碼為pdu
/*將字節(jié)轉(zhuǎn)換為字符串,如(0xC8,0x32,0x9B,0xFD,0x0E,0x01)轉(zhuǎn)換成C8329BFDOE01*/bytestostr (src,dst,len);
/*正常順序的字符串轉(zhuǎn)換為量量顛倒的字符串,如果長(zhǎng)度為奇數(shù),補(bǔ)’F’湊成偶數(shù),如:“8613851872468”-->“683158812764F8”*/invert(src,dst,len);
encode7bit(src,dst,len);/*pdu模式的7-bit編碼
encode8bit(src,dst,len);/*pdu模式的8-bit編碼*/
encodeUCS2(src,dst,len);/*pdu模式的UCS2編碼*/

這里值得一提的是中文短消息的編碼和解碼。GSM短消息中使用的是UTF-8編碼,而實(shí)際的計(jì)算機(jī)上使用的是GB-2312碼,因而存在一個(gè)轉(zhuǎn)換問題。而由于UTF-8和GB-2312編碼之間不存在一一對(duì)應(yīng)的線性關(guān)系,因此,只能采用查表的方式進(jìn)行轉(zhuǎn)換。

事實(shí)上,以上的中文發(fā)送程序也能發(fā)送英文或者中英文混發(fā)。只是這樣發(fā)送英文時(shí),英文字符象中文字符一樣要用兩個(gè)字符表示,所以,它和發(fā)送中文一樣,只能發(fā)送70個(gè)字符。

2.3 短消息的接收

通過短信接收進(jìn)程可定時(shí)查詢SIM卡,如果有新的短信,則將新的短信讀入、解碼,然后刪除,這樣可以防止由于SIM卡中的短消息滿,而接收不到新的短消息。短信的接收是短信的發(fā)送的逆過程,其數(shù)據(jù)格式和發(fā)送短消息時(shí)相同。

接收短信時(shí),首先判斷是否要接收短消息。當(dāng)?shù)弥枰邮斩滔⒑螅捎肁T+CNMI=?來判斷是否有新的短消息,如果有,則用AT+CMGL=1來讀取短消息,并對(duì)讀取的每條短消息進(jìn)行解碼。當(dāng)讀取一條短信后,即可用AT+CMGD=index,來直接刪除,然后再讀取下一條短消息。直到不再需要讀取短消息。其代碼為:


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉