當前位置:名人名言大全網 - 端午節短信 - Sim900a發送SMS。

Sim900a發送SMS。

代碼如下所示

過程是壹致的。

只有端口定義不同。

#包括

“sim900a.h“

#包括

“usart.h“

#包括

“delay.h“

#包括

“led.h“

#包括

“key.h“

#包括

“lcd.h“

#包括

“dma.h“

#包括

“flash.h“

#包括

“touch.h“

#包括

“malloc.h“

#包括

“string.h“

#包括

“文本。h“

#包括

“usart2.h“

#包括

“ff.h“

//將接收到的AT命令響應數據返回給計算機串口。

//mode:0,USART2_RX_STA未清零;

//

1,清零USART2 _ RX _ STA

空的

sim _ at _ response(u8

模式)

{

if(usart 2 _ RX _ STA & amp;0X8000)

//接收數據壹次。

{

usart 2 _ RX _ BUF【usart 2 _ RX _ STA & amp;0x 7 fff】= 0;//添加終止符

printf(“% s“,usart 2 _ RX _ BUF);

//發送到串行端口

if(模式)usart 2 _ RX _ STA = 0;

}

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////

//ATK-SIM900A

所有測試(撥號測試、短信測試和GPRS測試)共享相同的代碼。

//發送命令後,SIM 900a檢測收到的回復。

//str:預期的響應結果

//返回值:0,未得到預期的響應結果。

//

其他,預期響應結果的位置(str的位置)

u8*

sim 900 a _ check _ cmd(u8

*str)

{

* strx = 0;

if(usart 2 _ RX _ STA & amp;0X8000)

//接收數據壹次。

{

usart 2 _ RX _ BUF【usart 2 _ RX _ STA & amp;0x 7 fff】= 0;//添加終止符

strx = str str((const

char *)usart 2 _ RX _ BUF,(const

char *)str);

}

返回

(u8 *)strx;

}

//向sim900a發送命令。

//cmd:發送命令字符串(不需要回車),當cmd

//ack:預期的響應結果。如果它是空的,則意味著不需要等待響應。

//waittime:等待時間(單位:10ms)

//返回值:0,發送成功(得到預期的響應結果)。

//

1,發送失敗。

u8

sim 900 a _ send _ cmd(u8

*cmd,u8

*確認,u16

等待時間)

{

u8

RES = 0;

usart 2 _ RX _ STA = 0;

if((u32)cmd & lt;=0XFF)

{

while(DMA 1 _ channel 7-》;CNDTR!=0);

//等待信道7傳輸完成。

usart 2-& gt;DR =(u32)cmd;

}否則

U2 _ printf(“% s \ r \ n“,cmd);//發送命令

if(ack & amp;& amp等待時間)

//需要等待回答

{

當(-等待時間)

//等待倒計時

{

delay _ ms(10);

if(usart 2 _ RX _ STA & amp;0x 8000)//收到了預期的響應結果。

{

if(sim 900 a _ check _ cmd(ack))中斷;//獲取有效數據

usart 2 _ RX _ STA = 0;

}

}

if(wait time = = 0)RES = 1;

}

返回

res

}

//將1個字符轉換為16個十六進制數字。

//chr: character,0 ~ 9/a ~ f/a ~ f

//返回值:chr對應的16十六進制值。

u8

sim 900 a _ chr 2 hex(u8

chr)

{

if(chr & gt;=‘0‘和amp& ampchr & lt=‘9‘)返回

chr-“0”;

if(chr & gt;=‘A‘amp;& ampchr & lt=‘F‘)返回

(chr-‘A‘+10);

if(chr & gt;=‘a‘amp;& ampchr & lt=‘f‘)返回

(chr-‘a‘+10);

返回

0;

}

//將1個十六進制數字轉換為字符。

//十六進制:16十進制數,0 ~ 15;

//返回值:字符

u8

sim 900 a _ hex 2chr(u8

十六進制)

{

if(hex & lt;=9)返回

十六進制+“0”;

if(十六進制& gt= 10 & amp;& amphex & lt=15)返回

(十六進制-10+‘A‘);

返回

'0';

}

//unicode

gbk

轉換函數

//src:輸入字符串

//dst: output(如果是uni2gbk,則為gbk內部代碼;如果是gbk2uni,則為unicode字符串)

//mode:0,unicode到gbk的轉換;

//

1,gbk到unicode轉換;

空的

sim 900 a _ unigbk _ exchange(u8

*src,u8

*夏令時,u8

模式)

{

u16

temp

u8

buf【2】;

if(mode )//gbk

2

采用雙字節對字符進行編碼

{

while(* src!=0)

{

if(* src & lt;0X81)

//非中文字符

{

temp =(u 16)ff _ convert((WCHAR)* src,1);

src++;

}否則

//漢字,占2個字節。

{

buf【1】= * src++;

buf【0】= * src++;

temp =(u 16)ff _ convert((WCHAR)*(u 16 *)buf,1);

}

* dst++ = sim 900 a _ hex 2chr((temp & gt;& gt12);0X0F);

* dst++ = sim 900 a _ hex 2chr((temp & gt;& gt8)和0X0F);

* dst++ = sim 900 a _ hex 2chr((temp & gt;& gt4)和0X0F);

* dst++ = sim 900 a _ hex 2chr(temp & amp;0X0F);

}

}否則

//unicode

2

gbk

{

while(* src!=0)

{

buf【1】= sim 900 a _ chr 2 hex(* src++)* 16;

buf【1】+= sim 900 a _ chr 2 hex(* src++);

buf【0】= sim 900 a _ chr 2 hex(* src++)* 16;

buf【0】+= sim 900 a _ chr 2 hex(* src++);

temp =(u 16)ff _ convert((WCHAR)*(u 16 *)buf,0);

if(temp & lt;0x 80){ * dst = temp;dst++;}

其他

{ *(u 16 *)dst = swap 16(temp);dst+= 2;}

}

}

* dst = 0;//添加終止符

}

//鍵盤代碼表

常數

u8*

kbd _ TBL 1【13】= {“1“、“2“、“3“、“4“、“5“、“6“、“7“、“8“、“9“、“*“、“0“、“#、“DEL“};

常數

u8*

kbd _ TB L2【13】= {“1“、“2“、“3“、“4“、“5“、“6“、“7“、“8“、“9“、“,“0“,“#“,“DEL“};

u8**

kbd _ tbl

u8*

kbd _ fn _ TBL【2】;

//加載鍵盤接口(大小為240*140)

//x,y:界面的初始坐標(分辨率為320*240時x必須為0)。

空的

sim 900 a _ load _ keyboard(u 16

x,u16

y、u8

**kbtbl)

{

u16

我;

POINT _ COLOR = RED

kbd _ tbl = kbtbl

LCD _ Fill(x,y,x+240,y+140,白色);

LCD _矩形(x,y,x+240,y+140);

LCD _矩形(x+80,y,x+160,y+140);

LCD _矩形(x,y+28,x+240,y+56);

LCD _矩形(x,y+84,x+240,y+112);

POINT _ COLOR =藍色;

for(I = 0;我& lt15;i++)

{

如果(i & lt13)Show _ Str _ Mid(x+(I % 3)* 80,y+6+28 *(I/3),(u8 *)kbd _ TBL【I】,16,80);

其他

show _ Str _ Mid(x+(I % 3)* 80,y+6+28 *(I/3),kbd _ fn _ TBL【I-13】,16,80);

}

}