📄 gsm_gps1.c
字号:
counter=0;
}
}
void Key_ReadSMS(void)
{
uchar ReadFlg;
uchar i;
//ES=1;
for(i=20;i<=30;i++)
{
uchar j,k;
j=0x30+(i/10);
k=0x30+(i%10);
chn_disp2("读取第",0,6,0x80);
Char_Display2(i);
chn_disp2("条信息..",0,8,0x84);
ReadFlg=ReadMsg(j,k);
//clrram();
switch(ReadFlg)
{
case 1:
chn_disp2("无信息",0,8,0x92);
break;
case 2:
AlarmMode=1;
SetMode=1;
chn_disp2("短信报警",0,8,0x92);
break;
case 3:
AlarmMode=2;
SetMode=2;
chn_disp2("拨号报警",0,8,0x92);
break;
case 4:
AlarmMode=0;
SetMode=3;
chn_disp2("报警关闭",0,8,0x92);
break;
case 5:
Start_GSM();
chn_disp2("初始化GSM",0,9,0x92);
break;
case 6:
//Key_DeleteSMS();
chn_disp2("删除信息",0,8,0x92);
SetMode=4;
break;
case 7:
chn_disp2("设置号码",0,8,0x92);
SetMode=5;
break;
case 8:
chn_disp2("ERROR",0,5,0x92);
//SetMode=0;
break;
default:
chn_disp2("读取错误",0,8,0x92);
//SetMode=0;
break;
}
delay1(600);
clrram();
}
}
void Key_DeleteSMS(void)
{
uchar i;
ES=0;
for(i=21;i<=40;i++)
{
uchar j,k;
j=0x30+(i/10);
k=0x30+(i%10);
EraseMsg(j,k);
chn_disp2("删除第",0,6,0x80);
Char_Display2(i);
chn_disp2("条信息..",0,8,0x84);
delay1(500);
}
chn_disp2("短信删除成功",0,12,0x90);
delay1(500);
clrram();
ES=1;
}
void Start_System(void)
{
Init_lcd();
chn_disp2("GSM 智能监控系统",0,16,0x80);
chn_disp2("初始化",0,6,0x92);
delay1(400);
int_disp1(0x07,0x95);
delay1(400);
int_disp2(0x07);
delay1(400);
int_disp2(0x07);
delay1(400);
clrram();
}
//..............延时子程序............................................
/*void delay (uint us) //delay((us+1)*5) us
{
while(us--);
} */
void delay1 (uint ms) //delay ms
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<15;j++)
delay2(5);
}
void delay2(uint us) //delay2us
{
while(--us);
}
//*****************GPS*******************************
//*********************************************************************************
void GPS_Handle(void)
{
//---------------------------------------------
//----------------------------------------------
uchar tmp;
if(RI)
// if(StartBitOn())
{
tmp=SBUF;
//tmp=GPS_GetChar();
switch(tmp)
{
case '$':
cmd_number=0; //命令类型清空
mode=1; //接收命令模式
byte_count=0; //接收位数清空
break;
case ',':
seg_count++; //逗号计数加1
byte_count=0;
break;
case '*':
switch(cmd_number)
{
case 1:
buf_full|=0x01;
break;
case 2:
buf_full|=0x02;
break;
case 3:
if(cmd[4]=='A')
{
cmd_number=1;
mode=2;
seg_count=0;
byte_count=0;
}
}
/* else if(cmd[3]=='S')
{
if(cmd[4]=='V')
{
cmd_number=2;
mode=2;
seg_count=0;
byte_count=0;
}
} */
}
else if(cmd[2]=='R')
{
if(cmd[3]=='M')
{
if(cmd[4]=='C')
{
cmd_number=3;
mode=2;
seg_count=0;
byte_count=0;
}
}
}
}
}
}
}
else if(mode==2)
{
//接收数据处理
switch (cmd_number)
{
case 1: //类型1数据接收。GPGGA
switch(seg_count)
{
case 2: //纬度处理
if(byte_count<9)
{
WD[byte_count]=tmp;
}
break;
if(byte_count<1)
{
JD_a=tmp;
}
break;
lock=tmp;
}
break;
case 7: //定位使用的卫星数
if(byte_count<2)
{
use_sat[byte_count]=tmp;
}
break;
case 9: //高度处理
if(byte_count<6)
{
high[byte_count]=tmp;
}
break;
}
break;
/* case 2: //类型2数据接收。GPGSV
switch(seg_count)
{
case 3: //天空中的卫星总数
if(byte_count<2)
{
total_sat[byte_count]=tmp;
}
break;
}
break; */
case 3: //类型3数据接收。GPRMC
switch(seg_count)
{
case 1:
if(byte_count<6)
{ //时间处理
time[byte_count]=tmp;
}
break;
case 7: //速度处理
if(byte_count<5)
{
speed[byte_count]=tmp;
}
break;
/* case 8: //方位角处理
if(byte_count<5)
{
angle[byte_count]=tmp;
}
break; */
}
break;
}
}
byte_count++; //接收数位加1
break;
}
}
RI=0;
}
//-----------------系统显示界面--------------------
void Time_Disp(void)
{
static uchar m;
uchar i=0,j,t1,t2;
if(m==0)
{
delay1(300);
m=1;
}
chn_disp2("时间:",0,6,0x80);
t1=(time[0]-0x30);
t2=(time[1]-0x30);
i=(t1*10)+t2;
i+=8;
i%=24;
int_disp2(0x30+i/10); //显示数据的ASCII值
int_disp2(0x30+i%10);
for(j=2;j<6;j++)
{
i=time[j];
if((j==2)||(j==4))
{
int_disp2(0x3a); //插入":"
}
int_disp2(i);
}
int_disp2(0x20);
int_disp2(0x20);
chn_disp2("卫星信号:",0,10,0x90);
chn_disp1(use_sat,0,2,0x95);
int_disp2(0x20); //空格符号显示
int_disp2(0x20);
int_disp2(0x20);
int_disp2(0x20);
//delay1(100);
//clrram();
}
//-------------------------------------------------------------
void JDWD_Disp(void)
{
static uchar m;
if(m==0)
{
delay1(500);
m=1;
}
if((use_sat[1]==0x30)&&(use_sat[2]==0x30))
{
clrram();
chn_disp2("无定位信号!",0,12,0x81);
delay1(100);
}
else
{
chn_disp2("纬度:",0,6,0x80);
chn_disp1(WD,0,9,0x83);
int_disp2(0x20); //空格符号显示
chn_disp2("经度:",0,6,0x90);
chn_disp1(JD,0,10,0x93);
}
//delay1(500);
//clrram();
}
//************************主程序*****************************************************
void main(void)
{
Start_System();
//Init_lcd();
//-----------------------------
RELAY1=1; //继电器........
RELAY2=1;
//Infrared=0;
Init_Serial();
TMOD=0x12;
EA=1;
ES=0;
IP=0x10; //设置串口中断优先级
ET0=1;
ET1=1;
TR0=0;
TH0=(256-192); //4800 就是1000000/4800=208.33微秒,执行的时间是208.33*11.0592/12=192
TL0=TH0;
TH1=0X8a;
TL1=0Xd0;
//TR0=1; //启动定时器0,1
//TR1=1;
//EX0=1; //开外部中断0,低电平触发
//IT0=1;
Init_GSM(1);
ES=1;
while(1)
{
static uchar WTD_Timer;
static uchar ReadSMS_Timer;
static uint Sleep_Timer;
//------------------------------
//GPS_Handle();
if(Sleep_Timer>300)
{
JDWD_Disp();
if(Sleep_Timer>400)
{
Sleep_Timer=0;
}
}
else
{
Time_Disp();
}
//-------------------------------------------------------
if(RT_SK_Flag)
{
TR1=0;
ES=0;
RT_SK_Flag=0;
keyPtr=KeyJudge(); //键盘扫描判断
if(keyPtr!=0x55) //如果有键按下则处理
{
//Init_lcd ();
clrram();
KeyHandle(keyPtr);
delay1(1000);
}
if(NewSMS_Flag) //有新信息则自动读取
{
clrram();
NewSMS_Flag=0;
Key_ReadSMS();
}
//Infrared_Monitor(); //调试程序可以时暂时关闭
//---远程设置报警方式,成功则发信息提示--------
if(SetMode)
{
// uchar i,j;
switch(SetMode)
{
case 1:
Send_SMS2("AlarmMode SMS!");
break;
case 2:
Send_SMS2("AlarmMode Call!");
break;
case 3:
Send_SMS2("AlarmMode OFF!");
break;
case 4:
Key_DeleteSMS();
Send_SMS2("Delete SMS Succeed!");
break;
case 5:
AlarmPhone_Set();
Send_SMS2(Phone);
break;
default:
break;
}
SetMode=0;
}
WTD_Timer++;
ReadSMS_Timer++;
Sleep_Timer++;
TR1=1;
ES=1;
} //if
//-----------------------------------------------------
if(GPS_RF)
{
GPS_Handle();
GPS_RF=0;
}
if(WTD_Timer>100)
{
GSM_WTD();
WTD_Timer=0;
}
if(URAT_Flag)
{
NewSMS_Read();
Ring_Display();
URAT_Flag=0;
}
Sleep_Timer++;
} //while
} //main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -