📄 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 + -