?? gsm.c
字號:
#include<reg52.h>
sbit key1=P3^3;//按鈕
unsigned int rsl;//接收字符串長度
unsigned char *q;//發送數組指針
unsigned char cmgs;//發送的字節數
//code的用法因為你定義的數據是常量,放在DATA或XDATA區中浪費了,故被定位在CODE(就是程序存儲器)區內。
unsigned char callno[]="ATDT15816916909;";//發送的字符串
unsigned char msmorder[]="AT+CMGS=21";
unsigned char msm[140];
unsigned char rsbuf;
unsigned char rspoint,z;//接收數組下標+接收數組開關
void sendmassage();//發短信
void call();//打電話
void scankey1(); //掃描按鈕
void delay(int); //粗略延時
void ser(); //串口中斷
void sendtogsm(unsigned char,int);//發送字符串
void sendasc(unsigned char);//發送一個ASCII碼
void sendenter();//發送回車
main()
{
//----------串口通信初始化開始------------------
PCON=0x80;//設置波特率為19200 若想變成9600刪除此行即可
TMOD=0x20;//設置定時器1為方式2
TH1=0xfd;//設置波特率
TL1=0xfd;
TR1=1;
REN=1;//打開串口通信
SM0=0;
SM1=1;
EA=1;
ES=1;
z=0;
rspoint=0;
//---------串口通信初始化結束-------------------
while(1)
{
scankey1();
}
}
//------------掃描按鍵是否按下------------------
void scankey1()
{
if (key1==0)
{
delay(6000);
if (key1==0)
{
sendmassage();
delay(20000);
}
}
}
//---------------粗糙延時-----------------------
void delay(int x)
{
int i;
for (i=0;i<=x;i++);
}
//-------串口中斷+串口數據接收-----------
void ser() interrupt 4 using 1
{
RI=0;
if(SBUF=='~')
{
z=1;
}
if(SBUF=='!')
{
rspoint=0;
z=0;
}
if(z==1)
{
msm[rspoint]=SBUF;
rspoint++;
}
}
//-----------發送一個ASCII碼----------------
void sendasc(unsigned char asc)
{
bit es;
es=ES;
ES=0;
TI=0;
SBUF=asc;
while(!TI);
TI=0;
ES=es;
}
//---------------------------發送字符串------------------------------------
void sendtogsm(unsigned char *p,int L)//1、字符串數組 2、字符串長度
{
while (L--)
{
sendasc(*p++);
}
}
//---------------------發送字符串去首字符---------------------------------
void sendtogsmno1(unsigned char *p,int L)//1、字符串數組 2、字符串長度
{
p++;
while (L--)
{
sendasc(*p++);
}
}
//-----------------發短信-----------------------
void sendmassage()
{
int i;
sendtogsm(msmorder,sizeof(msmorder)-1);
sendenter();
for(i=0;i<10000;i++) delay(50000);//接收<符號
q=&msm[1];
sendtogsm(q,sizeof(msm)-1);
sendasc(26);
}
//-----------------打電話-----------------------
void call()
{
sendtogsm(callno,sizeof(callno)-1);
sendenter();
}
//-------------------發送回車---------------------
void sendenter()
{
sendasc(13);//傳送回車
sendasc(10);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -