?? gsm_gps1.c
字號:
for(i=0;i<4;i++)
{
sclk=1;
sclk=0;
}
}
}
void Sleep_ON(void) //睡眠模式開
{
wr_lcd(comm,0x34); //擴充指令動作
wr_lcd(comm,0x08);
delay2(40);
}
void Sleep_OFF(void) //睡眠模式關
{
wr_lcd(comm,0x34);
wr_lcd(comm,0x0c);
delay2(40);
}
/*
//---------------顯示漢字或字符----------------
void chn_disp(uchar code *chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
j=0;
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
wr_lcd (comm,0x90);
j=1;
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
}
*/
//--------------顯示中文字符:h-行,l-列(字符數),p-位置------------
void chn_disp1(uchar *chn,uchar h,uchar l,uchar p) //顯示數組
{
uchar i,j;
wr_lcd(comm,0x30);
wr_lcd(comm,p);
j=h;
for(i=0;i<l;i++)
wr_lcd(dat,chn[j*16+i]);
}
void chn_disp2(uchar code *chn,uchar h,uchar l,uchar p) //顯示代碼,漢字
{
uchar i,j;
wr_lcd(comm,0x30);
wr_lcd(comm,p);
j=h;
for(i=0;i<l;i++)
wr_lcd(dat,chn[j*16+i]);
}
//--------------顯示數據----------------
void int_disp1(uchar datah ,uchar p) //指定位置顯示半寬數據
{
wr_lcd(comm,0x30);
wr_lcd(comm,p);
wr_lcd(dat,datah);
}
void int_disp2(uchar datah) //地址自增顯示半寬數據
{
wr_lcd(comm,0x30);
wr_lcd(dat,datah);
}
void int_disp3(uchar datah,uchar datal, uchar p)
{
wr_lcd(comm,0x30);
wr_lcd(comm,p);
wr_lcd(dat,datah);
wr_lcd(dat,datal);
}
void int_disp4(uchar datah,uchar datal)
{
wr_lcd(comm,0x30);
wr_lcd(dat,datah);
wr_lcd(dat,datal);
}
/*------------------顯示子程序--------------------*/
//--------------數據顯示處理程序--------------------
void Char_Display(uchar disdata,uchar p) //指定顯示地址,顯示數字
{
if((disdata>=0)&(disdata<100))
{ uchar sw,gw;
sw=disdata/10;
gw=disdata%10;
//int_disp1(0x20,p);
int_disp1(tab1[sw],p);
int_disp2(tab1[gw]);
}
else if(disdata>=100)
{
uchar bw,sw,gw;
bw=disdata/100;
sw=(disdata%100)/10;
gw=disdata%10;
int_disp1(tab1[bw],p);
int_disp2(tab1[sw]);
int_disp2(tab1[gw]);
}
}
void Char_Display2(uchar disdata) //地址自增顯示數字
{
if((disdata>=0)&(disdata<100))
{ uchar sw,gw;
sw=disdata/10;
gw=disdata%10;
int_disp2(tab1[sw]);
int_disp2(tab1[gw]);
}
else if(disdata>=100)
{
uchar bw,sw,gw;
bw=disdata/100;
sw=(disdata%100)/10;
gw=disdata%10;
int_disp2(tab1[bw]);
int_disp2(tab1[sw]);
int_disp2(tab1[gw]);
}
}
//*****************GSM********************************
//---------發送一個ASCII碼-------------------------
void SendASC(uchar ASC)
{
bit es;
es=ES;
ES=0; //關閉中斷
TI=0;
SBUF=ASC;
while(!TI);
TI=0;
ES=es;
}
void Clr_Str(uchar *p) //清除接收緩沖區
{
uchar len,i=130;
//len=strlen(p);
while(i--)
{
*p++=0;
}
}
//------------發送AT命令到TC35I--------------------------
void SendCmdToTc35i(uchar *p)
{
uchar len;
len=strlen(p);
while(len--)
{
SendASC(*p++);
}
}
void Start_GSM(void) //由單片機控制GSM啟動
{
StartGSM=0;
delay1(150);
StartGSM=1;
//delay1(500);
}
void Init_GSM(uchar mode) //初始化TC35I:mode=0,PDU模式;mode=1,TEXT模式
{ //ipr=9600
//bit AtFlag;
Start_GSM();
delay1(500);
SendCmdToTc35i("AT+IPR=9600\r");
delay1(300);
SendCmdToTc35i("AT+CNMI=2,1\r");
delay1(100);
switch(mode)
{
case 0:
SendCmdToTc35i("AT+CMGF=0\r");
break;
case 1:
SendCmdToTc35i("AT+CMGF=1\r");
break;
default:
chn_disp2("TC35初始化失敗",0,14,0x90);
break;
}
// delay1(100);
}
//------GSM模塊監控程序----------------
void GSM_WTD(void)
{
uchar *p;
bit Sig_Flag;
//rsPoint=0;
Clr_Str(sms_rec);
SendCmdToTc35i("AT+CNMI=2,1\r");
delay1(20);
if(!(p=strstr(sms_rec,"OK")))
{
Start_GSM();
}
}
//-------------Call and Cancel-------------------------------------
void Call(void)
{
//EA=0;
uchar i;
SendCmdToTc35i("ATD");
SendCmdToTc35i(Phone);
SendCmdToTc35i(";\r");
for(i=0;i<2;i++)
{
clrram();
chn_disp2("撥號",0,4,0x82);
delay1(400); //撥號界面顯示
int_disp1(0x07,0x84);
delay1(400);
int_disp2(0x07);
delay1(400);
int_disp2(0x07);
delay1(400);
}
clrram();
//EA=1;
}
void Cancel(void)
{
// EA=0;
SendCmdToTc35i("ATH\r");
chn_disp2("ESC",0,3,0x93);
// EA=1;
delay1(500);
clrram();
}
//-------------刪除sim卡內短信息------------------------
void EraseMsg(uchar index1,uchar index2)
{
SendCmdToTc35i("AT+CMGD=");
SendASC(index1); //指出刪除第幾條信息:index1=十位,index2=個位
SendASC(index2);
SendASC(0x0d);
ES=0;
}
//-------------讀取短信內容,查找控制指令----------------
uchar ReadMsg(uchar index1,uchar index2)
{
uchar *p;
SendCmdToTc35i("AT+CMGF=1\r");
delay1(100);
rsPoint=0;
//Clr_Str(sms_rec);
SendCmdToTc35i("AT+CMGR=");
SendASC(index1); //指出讀出第幾條信息:index1=十位,index2=個位
SendASC(index2);
SendASC(0x0d);
delay1(600);
//------------------------------
if(p=strstr(sms_rec,"0,,0"))
{
return 1; //無信息
}
//-----------------------------
else if(p=strstr(sms_rec,"cmd"))
{
if(p=strstr(sms_rec,"on"))
{
if(p=strstr(sms_rec,"sms"))
{
return 2; //短信報警
}
else if(p=strstr(sms_rec,"call"))
{
return 3; //撥號報警
}
}
else if(p=strstr(sms_rec,"off"))
{
return 4; //報警關閉
}
else if(p=strstr(sms_rec,"rstgsm"))
{
return 5; //初始化GSM
}
else if(p=strstr(sms_rec,"delsms"))
{
return 6; //刪除短信
}
else if(p=strstr(sms_rec,"set"))
{
return 7; //設置報警號碼
}
else
{
return 0;
}
}
else if( p=strstr(sms_rec,"ERROR"))
{
return 8;
}
else
return 0;
}
//------------------新信息自動讀取程序--------------
void NewSMS_Read(void)
{
uchar *s;
// EA=0;
rsPoint=0;
if(s=strstr(sms_rec,"SM"))
{
NewSMS_Flag=1;
}
// EA=1;
}
//-------------------來電顯示-----------------------
void Ring_Display(void)
{
uchar *q;
static uchar i;
// EA=0;
rsPoint=0;
if(q=strstr(sms_rec,"RING"))
{
clrram();
chn_disp2("來電提示",0,8,0x92);
i++;
if(i>2)
{
SendCmdToTc35i("ATH\r"); //自動掛機
}
delay1(800);
}
clrram();
// EA=1;
}
//------------------GSM連接測試---------------------
void Signal_Test(void)
{
uchar i,j,k;
uchar *p;
bit Sig_Flag=0;
rsPoint=0;
SendCmdToTc35i("AT\r");
//delay1(100);
chn_disp2("檢測信號...",0,11,0x82);
delay1(500);
if(p=strstr(sms_rec,"AT"))
{
chn_disp2(" 有信號",0,8,0x82);
}
else
{
chn_disp2(" 無信號",0,8,0x82);
}
delay1(500);
//Clr_Str(sms_rec);
clrram();
}
//---------------發送英文短信息------------------
void Send_SMS2(uchar *p)
{
bit SmsFlag1=0,SmsFlag2=0;
uchar *q,i;
EA=0;
//ES=0;
clrram();
chn_disp2("發送信息",0,8,0x82);
//----------界面顯示---------------
delay1(400);
int_disp1(0x07,0x86);
delay1(400);
int_disp2(0x07);
delay1(400);
int_disp2(0x07);
delay1(400);
//--------------------------------
SendCmdToTc35i("AT+CMGF=1\r");
delay1(100);
ES=1;
rsPoint=0;
SendCmdToTc35i("AT+CMGS=");
SendCmdToTc35i(Phone);
SendASC(0x0d);
delay1(1800);
SendCmdToTc35i(p);
delay1(100);
SendASC(0x1a);
delay1(700);
for(i=0;i<10;i++)
{
if(q=strstr(sms_rec,"OK"))
{
SmsFlag2=1;
break;
}
}
clrram();
if(SmsFlag2)
{
chn_disp2("發送成功",0,8,0x82);
}
else
{
chn_disp2("發送失敗",0,8,0x82);
}
EA=1;
delay1(700);
clrram();
}
//---------------發送短消息結束------------------
//--------------Key Function----------------------------------------
void Key_SetAlarmMode(void)
{
static uchar counter=0;
if(counter==0)
{
AlarmMode=1;
chn_disp2("短信報警",0,8,0x92);
//delay1(500);
}
if(counter==1)
{
AlarmMode=2;
chn_disp2("撥號報警",0,8,0x92);
//delay1(500);
}
if(counter==2)
{
AlarmMode=0;
chn_disp2("報警關閉",0,8,0x92);
}
counter++;
if(counter>2)
{
counter=0;
}
}
void Key_DispCH(void) //時間顯示和經緯度顯示切換
{
static uchar counter=0;
if(counter=0)
{
Disp_Mode=1;
}
if(counter=1)
{
Disp_Mode=0;
}
counter++;
if(counter>1)
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -