#include<STC_12c5a.H>
#include<intrins.h>
#include <string.h>
#include "head.h"
#define uint unsigned int
#define uchar unsigned char
#define RxIn 90
#define S2RI 0x01
#define S2TI 0x02
sbit led3 =P0^2;
//main 中定义的全局变量
extern uchar idata sendtime;
extern uchar idata autosend;
extern bit idata newmsg;
extern bit idata msgcmd;
uchar code AT[]="AT"; //握手信号
uchar code ATE[]="ATE"; //关回显
uchar code AT_CNMI[]="AT+CNMI=2,1";//设置这组参数来了新信息直接显示到串口,不作存储
uchar code AT_CSCA[]="AT+CSCA=+8613800371500";//设置服务中心号码(北京)
uchar code AT_CSCS[]="AT+CSCS=GSM";//设置服务中心号码(北京)
uchar code AT_CMGF[]="AT+CMGF=1";//设置短信的格式为text格式
uchar code AT_CMGR[]="AT+CMGR=";//读取短信指令
uchar code AT_CMGS[]="AT+CMGS=";//发送短信指令
uchar code AT_CMGD[]="AT+CMGD=";//删除短信指令
uchar code successfully[]="Operate Successfully!";//发送操作成功信息到目标号码
uchar code fail[]="Operate failed,try again!"; //发送操作失败信息到目标号码
uchar code nosignal[]="Sorry,No GPS Signal";
uchar code AT_alarm[19]="AT+CMGS=159xxxxxxxx"; //用来初始化发送短信号码指令
uchar code SOS[]="SOS!"; //用来初始化发送短信号码指令
uchar AT_delete[10];
uchar AT_Read[11]; //用来存储发送读取短信指令
uchar AT_SendNumber[19]="AT+CMGS=159xxxxxxxx"; //用来初始化发送短信号码指令
//uchar AT_SendNumber[25];
uchar numberbuf[3]; //用来保存短信条数
uchar idata SystemBuf[RxIn]; //储存出口接收数据
uchar CommandBuf[6]; //用来储存指令
uchar GsmSendOnlyOnce = 0; //只执行一次
//--------------------------------------------------------
uchar idata Rx = 0;
/*************************************************************************
//函数名称: void uart2_isr(void)
//函数功能: 串口2中断服务程序
//参数:void
//返回值:void
//*************************************************************************/
void uart2_isr(void) interrupt 8
{
if(S2CON&S2RI){
S2CON&=~S2RI; //清除接受标志
if(Rx<RxIn){
SystemBuf[Rx] = S2BUF;
Rx++;
}
}
if(S2CON&S2TI){
S2CON&=~S2RI;
}
}
/*************************************************************************
//函数名称: void GsmInit(void)
//函数功能: gsm 初始化
//参数:void
//返回值:void
//*************************************************************************/
void GsmInit(void){
loop:
DELAY1S(1);
sendtc35asc(AT);
send_tc35hex(0x0D); //
DELAY1S(1);
sendtc35asc(ATE);
send_tc35hex(0x0D);
DELAY1S(2);
sendtc35asc(AT_CNMI); //设置短信存储位置
send_tc35hex(0x0D);
DELAY1S(1);
sendtc35asc(AT_CSCS); //设置短信存储位置
send_tc35hex(0x0D);
DELAY1S(1);
sendtc35asc(AT_CSCA); //设置服务中心号码
send_tc35hex(0x0D);
DELAY1S(1);
sendtc35asc(AT_CNMI); //设置短信存储位置
send_tc35hex(0x0D);
DELAY1S(2);
for(Rx=0; Rx<RxIn; Rx++){
SystemBuf[Rx]=0x00;
} //把接受缓冲器
Rx=0;
sendtc35asc(AT_CMGF); //设置短信为text模式
send_tc35hex(0x0D);
DELAY1S(1);
if((SystemBuf[2] == 'O') && (SystemBuf[3] == 'K')){ //判断是否模块初始化成功,成功的话模块会回复"OK"给单片机
for(Rx=0; Rx<RxIn; Rx++)
{
SystemBuf[Rx] = 0x00; // 清空
}
Rx = 0;
}
else{ //如果单片机没有收到OK,就继续发送初始化指令/0D 0A 4F 4B 0D 0A
for(Rx=0; Rx<RxIn; Rx++)
{
SystemBuf[Rx] = 0x00;
}
Rx = 0;
goto loop; // 有可能死循环
}
}
/*************************************************************************
//函数名称: void judgeNewMessageCome(void)
//函数功能: 判断是否有新的短信,有的话标志位值1,将内容放大缓冲数组,否则清空缓冲数组
//参数:void
//返回值:void
//*************************************************************************/
void JudgeNewMessageCome(void)
{
uchar i;
if((SystemBuf[5] == 0x54) || (SystemBuf[6] == 0x49)) //这里的5,6可能不对
{ //此函数的功能是判断是否有新短信来,如果来的话就置位准备接受位标志为1
newmsg = 1; //如果不是新短信的指示命令,就舍弃,并将接收数组清零/
} //[5] 0x54(T) [6]0x49(I)
else //[2] "O",[3] "K"
{ //收到新短信,+CMTI:"SM",3
for(i=0;i<Rx;i++)
{
SystemBuf[i]=0x00;
}
Rx=0;
}
}
/*************************************************************************
//函数名称: void ReadMessage(void)
//函数功能: 读短信操作 可以读取某条短信
//参数:void
//返回值:void
//*************************************************************************/
void ReadMessage(void)
{
uchar i;
DELAY1S(3);
for(i=0; i<3; i++)
{
numberbuf[i] = SystemBuf[14+i]; //用来保存短信条数
}
for(i=0;i<8;i++)
{
AT_Read[i] = AT_CMGR[i]; //用来存储发送读取短信指令,AT_CMGR[]="AT+CMGR="
}
for(i=8;i<11;i++)
{
AT_Read[i] = numberbuf[i-8]; // 第几条短信
}
for(Rx=0; Rx<RxIn; Rx++)
{
SystemBuf[Rx] = 0x00;
}
Rx = 0;
for(i=0;i<11;i++)
{
send_tc35hex(AT_Read[i]); // 第几条短信
}
send_tc35hex(0x0D);
send_tc35hex(0x0A); //没有OD OA, sendString()最后有这语句
DELAY1S(1);
}
/*************************************************************************
//函数名称: uchar AnalyseMsg(void)
//函数功能: 解析短信内容,读取查询命令和设置自动回复时间命令
//参数:void
//返回值:1--收到查询命令, 2--收到自动设定时间命令。
//*************************************************************************/
uchar AnalyseMsg(void)
{
uchar i;
for(i=0;i<5;i++) //将短信内容中的指令部分截取出来放到
{ //CommandBuf数组中
CommandBuf[i]=SystemBuf[64+i]; //从第65个字符开始为有效字符??我读出来是60
}
if((CommandBuf[0]=='c')&&(CommandBuf[1]=='c')&&(CommandBuf[2]=='c')&&(CommandBuf[3]=='c')) //为查询指令
{
led3=1;
return 1;
}
else if(((CommandBuf[0]-'0'))>0&&((CommandBuf[0]-'0'<10))) //判断指令为设置时间指令
{
return (((CommandBuf[0]-'0'))*5); //将asc转换为数字
}
// else //这里可以添加个发送错误指令
else return 0;
}
/*************************************************************************
//函数名称: void SendLocation(void)
//函数功能: 发送带有位置信息的短信
//参数:void
//返回值:void
//*************************************************************************/
void SendLocation(void)
{
uchar i;
// float hs;
// uchar jdf[7];
for(i=0;i<8;i++)
{
AT_SendNumber[i] = AT_CMGS[i];
}
for(i=8;i<19;i++) //这里发送11位电话号码
{
AT_SendNumber[i] = SystemBuf[18+i];
}
for(i=0;i<19;i++)
{
send_tc35hex(AT_SendNumber[i]);
}
// sendtc35asc(AT_SendNumber); //如何获得“>"???
send_tc35hex(0x0D);
DELAY1S(1); //等待返回">"
DELAY1MS(100);
if(buf_full != 0)
{
if(lock){ //如果定位了,则发送定位信息
send_tc35hex(JD_a);
for(i=0;i<3;i++)
{
send_tc35hex(JD[i]);
}
sendtc35asc(".");
for(i=3;i<5;i++)
{
send_tc35hex(JD[i]);
}
for(i=6;i<10;i++)
{
send_tc35hex(JD[i]);
}
sendtc35asc(" ");
send_tc35hex(WD_a);
for(i=0;i<2;i++)
{
send_tc35hex(WD[i]);
}
sendtc35asc(".");
for(i=2;i<4;i++)
{
send_tc35hex(WD[i]);
}
for(i=5;i<9;i++)
{
send_tc35hex(WD[i]);
}
sendtc35asc(" ");
lock = 0;
}
buf_full=0;
}
else sendtc35asc(nosignal);
// DELAY1S(1); //波特率有关,不用延时
send_tc35hex(0x1A); //结束字符ctrl+z
}
/*************************************************************************
//函�
没有合适的资源?快使用搜索试试~ 我知道了~
电子设计工程实践(源代码附盘).rar
共53个文件
c:8个
lst:5个
obj:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 185 浏览量
2022-06-24
18:21:07
上传
评论
收藏 117KB RAR 举报
温馨提示
电子设计工程实践(源代码附盘).rar
资源推荐
资源详情
资源评论
收起资源包目录
电子设计工程实践(源代码附盘).rar (53个子文件)
EDEC_EDA_code
第五章
单片机部分
main.c 7KB
gsm.c 12KB
gps.c 7KB
VB部分
testWebStudents.xml 91B
main.html 2KB
报警声.wav 40KB
Module1.bas 4KB
放射源远程监控系统.vbp 1KB
放射源远程监控系统.vbw 77B
comm.vbw 79B
frmmaim.frx 244B
Hexedit.bas 10KB
MSSCCPRJ.SCC 345B
放射源远程监控系统.exe 64KB
frmmaim.frm 32KB
第三章
SourceInsight
ALARM.PS 13KB
ALARM.IMB 4KB
ALARM.PRI 18KB
ALARM.PR 3KB
ALARM.IAB 4KB
ALARM.WK3 19KB
ALARM.IMD 368B
ALARM.PFI 36B
ALARM.PO 776B
ALARM.IAD 368B
MAIN
ALARM.hex 7KB
ALARM_uvproj.bak 0B
key.lst 3KB
ds18b20.obj 6KB
ALARM.uvproj 14KB
main.c 947B
exti.obj 3KB
lcd1602.obj 11KB
ds18b20.lst 7KB
main.LST 3KB
ALARM.lnp 106B
exti.lst 2KB
ALARM.uvopt 56KB
lcd1602.lst 10KB
ALARM.plg 3KB
key.obj 4KB
ALARM.M51 25KB
HARDWARE
EXTI
exti.c 618B
exti.h 129B
LCD1602
lcd1602.h 926B
lcd1602.c 5KB
KEY
key.h 154B
key.c 839B
DS18B20
ds18b20.c 3KB
ds18b20.h 389B
第四章
i2c.v 3KB
clock_500.v 2KB
keytr.v 2KB
共 53 条
- 1
资源评论
qq_38220914
- 粉丝: 608
- 资源: 4310
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功