📄 gsm_co.c
字号:
//---------------------------------------
send_count=0xffff; AT_Command_Status=COMMAND_WAIT;
if(!io_p00_on )
{ io_p00_on=1;system_server=SYS_START; return(0); }
else if(!io_p02_on) { io_p02_on=1; system_server=SYS_SBC;return(0); }
if(ring_bit) { ring_auto(); return(0); }
if(!io_p03_on )
{ io_p03_on=1;
BELL=0;
for(tmp_j=0;tmp_j<8;tmp_j++) //灯闪三下
{ timercount=0; while(timercount<10) watch_dog_clear; }
BELL=1;
system_server=SYS_DIAL;
return(0);
}
//---------------------------------------------------
return(1);
}
void LED_1()
{
LED_P0++;
if(LED_P0>=16) LED_P0=0;
if((PT2272_TMP>0)) //513M中断后处理。这里只是让灯亮几秒钟
{ P0=0;
if(PT2272_D0==1) //A键 D1灯亮
{ P0_7=1;
timercount=0; while(timercount<215) watch_dog_clear;
P0_7=0;PT2272_D0=0;
}
if(PT2272_D1==1) //B键 D6灯亮
{ P0_6=1;
timercount=0; while(timercount<215) watch_dog_clear;
P0_6=0; PT2272_D1=0;
}
if(PT2272_D2==1) ////C键 D8灯亮
{ P0_5=1;
timercount=0; while(timercount<215) watch_dog_clear;
P0_5=0; PT2272_D2=0;
}
if(PT2272_D3==1) // //D键 D9灯亮
{ P0_4=1;
timercount=0; while(timercount<215) watch_dog_clear;
P0_4=0; PT2272_D3=0;
}
}
else
{
if(LED_P0<=7) //流水灯
{
P0=(0x80>>LED_P0);
}
else
{P0=(0x80>>LED_P0-8);}
}
}
//============================================
//========== 读写短信程序
//====================================================
void read_sms()
{ uchar i,r,j ;
Send_AT_Command(AT_CPMS);
i=strsearch( "+CPMS:");
if(i)
{ i=i+5;
txd_rxd_bit=0;
if((uart_buff[i]==' ')&&(uart_buff[i+1]=='0')&&(uart_buff[i+2]==','))
{ receive_count=0; timer_S_cnt=0; while(timer_S_cnt<2){ P2_INIT();}
LED_1(); return;
}
else if((uart_buff[i]==' ')&&(uart_buff[i+1]>='1')&&(uart_buff[i+2]==','))
{ r=(uart_buff[i+1]-0x30)+2;
}
else if((uart_buff[i]==' ')&&((uart_buff[i+1]>'0')&&(uart_buff[i+2]>='0'))&&(uart_buff[i+3]==','))
{ r= (uart_buff[i+1]-0x30)*10;
r=r+(uart_buff[i+2]-0x30)+1;
}
else{ return; }
}
for(r=1;r<21;r++)
{
num_tmp1=r;
READ_TEL(r);
if(receive_count>=10)
{ P0_4=1;
if(i=strsearch("READ\x22,\x22"))
{ i=i+6;
if(uart_buff[i]=='+') i=i+3 ;
for(j=0;j<20;j++)
{
TEL_temp[j]=uart_buff[i++];
if(uart_buff[i]==0x22) break;
}
TEL_temp[j+1]=0x0d; TEL_temp[j+2]=0x00;
}
P0_4=0;
}
else
{ P0_6=1;
timercount=0; while(timercount<10) { if((i=P2_INIT())==0) return ;}
P0_6=0;
continue;
}
if((i=P2_INIT())==0) return ;
//---------------手机号码设置-------------
if((i=strsearch("START"))) // 发英文
{
P0=0; P0_1=1;
timercount=0; while(timercount<200) watch_dog_clear;
//有些比较重要的东西你可以存到卡就,重新开机也没有问题
IO_OUT=0;
system_server=SYS_TEL; return;
}
else if((i=strsearch("END"))) // 发中文
{
P0=0; P0_2=1;
timercount=0; while(timercount<150) watch_dog_clear;
IO_OUT=1;
system_server=SYS_ALARM; return;
}
else if((i=strsearch("start"))) // 发英文
{
P0=0; P0_1=1;
timercount=0; while(timercount<2000) watch_dog_clear;
//有些比较重要的东西你可以存到卡就,重新开机也没有问题
IO_OUT=0;
system_server=SYS_TEL; return;
}
else if((i=strsearch("end"))) // 发中文
{
P0=0; P0_2=1;
timercount=0; while(timercount<150) watch_dog_clear;
IO_OUT=1;
system_server=SYS_ALARM; return;
}
else if((i=strsearch("TEL:"))) // 发中文
{ j=0; para_temp[j++]=0x31;para_temp[j++]=','; para_temp[j++]='"';
for(i=0;i<=20;i++)
{ if(TEL_temp[i]==0x0d||TEL_temp[i]==0x00)
{para_temp[j++]='"';para_temp[j++]=0;break;}
para_temp[j++]=TEL_temp[i] ;
}
Send_AT_Command(PHONE_WRITE);
P0=0; P0_3=0;
timercount=0; while(timercount<200) watch_dog_clear;
system_server=SYS_ALARM; return;
}
else {
para_temp[0]=(num_tmp1/10)+0x30;para_temp[1]=(num_tmp1%10)+0x30; para_temp[2]=0x0d;para_temp[3]=0x00;
Send_AT_Command(SMS_CMGD);
timer_S_cnt=0; while(timer_S_cnt<10&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
for(i=10;i<=MAX_TM-3;i++)
{ uart_buff[i]=0;
}
Send_AT_Command(SIM_ID);
// return;
}
}
}
void send_sms() //发送短信
{ uchar j=1,i=1;
Send_AT_Command(SIM_ID);
switch(sms_tmp)
{
case smss_tel: // 发送英文
TMP_BUF=0;para_temp[TMP_BUF++]='"'; j=0;
do{
para_temp[TMP_BUF++]=TEL_temp[j++];
if(TEL_temp[j]==0x0d)
{para_temp[TMP_BUF++]='"'; para_temp[TMP_BUF++]=0; }
}while( TMP_BUF<=18);
Send_AT_Command(SMS_CMGS);
j=0;
para_temp[j++]='S';
para_temp[j++]='E';
para_temp[j++]='N';
para_temp[j++]='D';
para_temp[j++]=':';
para_temp[j++]=0x20;
para_temp[j++]='O';
para_temp[j++]='K';
para_temp[j++]=0x1a;
para_temp[j++]=0x0d;
para_temp[j++]=0x00;
para_temp[j]=0x00;
Send_AT_Command(CMGS_MUB);
break;
case smss_para: //发送中文
//0011000D91683118180295F20008A70A8F66670953719669FF01
Send_AT_Command(SMS_CMGF);
TMP_BUF=0;
para_temp[TMP_BUF++]='2'; //短信号码长度,如果每加一个中文,长度加2
para_temp[TMP_BUF++]='5';
para_temp[TMP_BUF++]=0x0d;
para_temp[TMP_BUF++]=0x00;
para_temp[TMP_BUF++]=0x00;
Send_AT_Command(SMS_CMGS);
TMP_BUF=0;
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='1';
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='D';
para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='1';
para_temp[TMP_BUF++]='6';para_temp[TMP_BUF++]='8';
//3118180295F2
j=0; //发送对方号码
do //动态电话号码
{
para_temp[TMP_BUF++]=TEL_temp[j+1];
para_temp[TMP_BUF++]=TEL_temp[j];
j=j+2;
if(TEL_temp[j+1]==0x0d)
{ para_temp[TMP_BUF++]='F';
para_temp[TMP_BUF++]=TEL_temp[j];
break;
}
} while(j<=18);
//短信格式设备
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='8';
para_temp[TMP_BUF++]='A';para_temp[TMP_BUF++]='0';
//短信长度、 5个字,10个英文
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='A';
//短信内容
//53D1 9001 6210 529F FF01 发送成功
para_temp[TMP_BUF++]='5';para_temp[TMP_BUF++]='3';
para_temp[TMP_BUF++]='D';para_temp[TMP_BUF++]='1';
para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';
para_temp[TMP_BUF++]='6';para_temp[TMP_BUF++]='2';
para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='5';para_temp[TMP_BUF++]='2';
para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='F';
para_temp[TMP_BUF++]='F';para_temp[TMP_BUF++]='F';
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';
//短信结束符
para_temp[TMP_BUF++]=0X1A;para_temp[TMP_BUF++]=0X0D;
para_temp[TMP_BUF++]=0X00;
Send_AT_Command(CMGS_MUB);
break;
//======================发送收到设备开启指令================================================
default:
//system_server=SYS_SMSR;
break;
}
system_server=SYS_SMSR;
receive_count=0;
AT_Command_Status=COMMAND_WAIT; //设置接收成功标志
send_count=0xff;timer_S_cnt=0;
while(timer_S_cnt<15&&(AT_Command_Status==COMMAND_WAIT))
{ if(strsearch("+CMGS:")) break;
else if(txd_rxd_bit) break;
watch_dog_clear;
}
para_temp[0]=(num_tmp1/10)+0x30;para_temp[1]=(num_tmp1%10)+0x30; para_temp[2]=0x0d;para_temp[3]=0x00;
Send_AT_Command(SMS_CMGD);
timer_S_cnt=0; while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
Send_AT_Command(SIM_ID);
// IO_OUT=1;
for(i=0;i<=MAX_TM-2;i++)
{ uart_buff[i]=0;
}
}
//======================================================================
//================进行SIM卡的电话本读======================================================
//======================================================================
uchar PHONE_RD( ) //read_tmp=0x30+i; 要读的电话号码
{ uchar j;
Send_AT_Command(PHONE_READ);
send_count=0;
timer_S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
if(j=strsearch("+CPBR:")) //+CPBW: 1,"13818120592",129,"chia"
{ j=j+9;
do
{
para_temp[TMP_BUF++]= uart_buff[j++];
if( uart_buff[j]=='"')
{ //para_temp[t++]=';';para_temp[t++]=0x0d;para_temp[t++]=0x00;
return(TMP_BUF);
}
}while(j<=24);
}
else if(uart_buff[1]==0x0d&&uart_buff[0]==0x34)
{ return(FALSE);
}
else return(FALSE);
}
//======================================================================
//========================进行SIM卡中的1到20条短信号码的读==============================================
//======================================================================
uchar READ_TEL(uchar r) //读短信号码1-20个
{ uchar i;
for(i=0;i<=10;i++) uart_buff[i]=0;
para_temp[0]=(r/10)+0x30;para_temp[1]=(r%10)+0x30; para_temp[2]=0; para_temp[3]=0;
Send_AT_Command(SMS_CMGR);
timercount=0; while(timercount<2) ;
return(0);
}
void Initialize_Model(void) //初始化 PIN检测
{
uchar i;
Sys_Init();
P0=0;//IO_IGT=1;
PT2272_BIT=0;PT2272_TMP=0;//
io_p01_on=1; io_p00_on=1;
io_p02_on=1;io_p01_bit=0;
io_p03_on=1; io_p02_bit =0;
for(i=0;i<12;i++)
{//进行初始化,并显示
Send_AT_Command(TC35_INIT);
if(uart_buff[1]==0x0d&&uart_buff[0]==0x30)
{ break;}
if((i%4)==0)
{
IO_IGT=1;
}
else if((i%2)==0)
{
IO_IGT=0;
}
timer_S_cnt=0; while(timer_S_cnt<5&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
}
if(i>=11) goto at_eer;
for(i=0;i<12;i++)
{
if(Send_AT_Command(CHECK_PIN))
{//如有收到回应进行分析收到的信息,
uart_buff[receive_count]=0;
if(strsearch("READY")!=0)
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -