資源簡介
GSM發短信 GPS 單片機C語言實現 代碼實現了GSM的發短信功能以及GPS讀取數據、數據處理
代碼片段和文件信息
#include?
#include?
#define??uchar?unsigned?char
#define??uint??unsigned?int
#define??mclk???12000000
#pragma?interrupt_handler?uart_rx:12
uchar?flag=0;
/*****GPS取數據變量參數定義*****/
uchar??comma;//逗號變量存儲
//////////以下4個數組最后一個作為0,字符串結束標志/////////
uchar??Time[11];//時間hour-2?bytes?minute-2?bytessecond-6?bytes
uchar??Data_YMD[7];?//日期
uchar??Longitude[11];//經度
uchar??Latitude[10];//緯度
////////時分秒///////////////
uchar??hour[3];//最后一個作為0,字符串結束標志顯示時使用
uchar??minute[3];
uchar??second[7];
////////日月年///////////////
uchar??day[3];//最后一個作為0,字符串結束標志
uchar??month[3];
uchar??year[3];
////////////////////////////////////////////////////////////
uchar?count_Tcount_Laticount_Longicount_Data;//串口接收?時間?緯度?經度?日期?接收數組計數
uchar?num_comma;//逗號計數
uchar?GPS_state;//GPS資料可用狀態
uchar?N_or_SE_or_W;//半球標志數據存儲
uchar?frame_flag;//接收到幀頭標志
uchar?data_flag;//接收數據標志
uchar?frame_header[5];
uchar?overflow_count;//定時器0溢出中斷計數
/////////////GSM使用////////////////////////////////////////
uchar?PhoneCall[]={“ATD13706405213;“};//打電話數據
uchar?TxtMode[9]={“AT+CMGF=1“};?//AT+CMGF=1短信模式設置Text模式;AT+CMGF=0PDU模式
uchar?MessCom_PhoneNum[21]={“AT+CMGS=\“15017506465\““};//發送短信AT指令頭+接收短信號碼
uchar?CenterNum[24]={“AT+CSCA=\“+8613800200500\““};//24個數(短信息中心號碼設置)格式:\位轉義字符,將““轉移成字符
uchar?RecNum[11]={“15017506465“};//11個數(短信接收手機號碼設置)
uchar?message[6]?=?{“Hello!“};//發送的短信內容
uchar?AT[2]={“AT“}; ?//聯機命令
uchar?Enter[1]={0x0D};//回車鍵“\r“
uchar?ATCNMI[]=“AT+CNMI=21“;
//uchar?idata?send_data[11]={0x410x420x430x440x450x460x350x360x370x380};
uchar?Frequency[5]={0x350x300x2E0x300x30};//測試使用
uint?cnt=0;
void?delay(uint?ms)
{
????????uint?ij;
for(i=0;i ???{
???for(j=0;j<1141;j++);
???????}
}
void?uart_init(uint?baud)
{
???UCSRB=0x00;?
???UCSRA=0x00;? ????//控制寄存器清零
???UCSRC=(1< ????????????????????????????????????????????????????????//選擇UCSRC,異步模式,禁止????????????????????????
?????????????????????????????????????????????????????//???校驗,1位停止位,8位數據位
???baud=mclk/16/baud-1 ;???//波特率最大為65K
???UBRRL=baud;? ????? ??
???UBRRH=baud>>8;? ???//設置波特率
???UCSRB=(1< ???????????????????????????????????????????????????????//接收、發送使能,接收中斷使能
???SREG=BIT(7); ????????????????//全局中斷開放
???DDRD|=0X02; ????????????????//配置TX為輸出(很重要)
}
//發送函數
void?sendchar(uchar?data)
{
???while(!(UCSRA&(BIT(UDRE))))?;
???UDR=data;
???while(!(UCSRA&(BIT(TXC))));
???UCSRA|=BIT(TXC);//因為是查詢操作,不會自動清零,采用設置清零
???/*以備后面數據的發送*/
}
void?sendstr(uchar?*struint?len)
{
while(len--)
{
sendchar(*str++);
}
}
void?GSM_AT() //發“AT“的函數
{???
?????sendstr(AT2);delay(100);
?????sendchar(‘\r‘);delay(100);?//以回車作為結束符號,手機才能識別
?delay(100);
}
void?GSM_TXT()?//發送AT+cmgf=1 ?設置短信模式Text
{???
?????sendstr(TxtMode9);delay(100);
?????sendchar(‘\r‘);delay(100);
?????delay(100);?
}
void?GSM_CMGS() ?//發送AT+cmgs= (發短信的命令)
{???
?????sendstr(MessCom_PhoneNum21);delay(1
- 上一篇:PIC18F452串口通信程序
- 下一篇:一個MFC多文檔的小vc2015
評論
共有 條評論