📄 gsm.c
字号:
void main()
{ uchar temp,i,j,l,lenth,msgloc[]="SM",cmgl[]="CMGL",Inidate[]={6,5,24},Initime[]={9,30,0};
uchar incomhint[]="接听(F) 挂机(E)",msgcontentstart[]="145";
unsigned int msgcontent[70];
//----------系统初始化-------------------------------
cpu_init(); //目标初始化
set_t0();
xint1_init(); //外部中断1初始化子程序
Lcd_Init(); //液晶屏初始化
lcdclean(1,4);
RST7279();
Init_16c450();
//HRST(); //M22模块复位
Display(modeinfo,0x81,0,12); //上面一行显示一个预定字符串
dellay(200);
while(RECV(rdata)==0) AT(); //测试模块的串口通讯功能
while(RECV(rdata)==0) ATE(1); //开回显,测试回显功能
lcdclean(2,2);
Display(at,0x90,0,3);
while(RECV(rdata)==0) AT();
Display(rdata,0x93,0,9);
while(RECV(rdata)==0) ATE(0); //关回显
lcdclean(3,3);
Display(at,0x88,0,3);
while(RECV(rdata)==0) AT();
Display(rdata,0x8b,0,6);
while(RECV(rdata)==0) CGMI(); //读取模块生产厂家
lcdclean(2,2);
Display(cgmi,0x90,0,5);
Display(rdata,0x93,0,6);
while(RECV(rdata)==0) CGMM(); //读取模块的型号
lcdclean(3,3);
Display(cgmm,0x88,0,5);
Display(rdata,0x8b,0,9);
while(str_comp(ready,0,rdata,9,5)!=0)
{
while(RECV(rdata)==0) CPIN(); //检测是否插卡
Display(nosim,0x99,0,12);
}
Display(find,0x98,0,16);
while(RECV(rdata)==0) CGMR(); //读取模块的版本号
while(RECV(rdata)==0) CGSN(); //读取模块的系列号
while(RECV(rdata)==0) CSCS(); //读取模块使用的字符集
while(RECV(rdata)==0) CIMI(); //读取模块使用的CIMI码
while(RECV(rdata)==0) CMUX(); //读取模块使用的复合模式
while(RECV(rdata)==0) CSTA(); //读取模块使用的CSTA码
while(RECV(rdata)==0) CMOD(); //读取模块使用的呼叫类型
while(RECV(rdata)==0) COLP(0);//设置拨打电话时信息的返回方式
while(RECV(rdata)==0) CMEE(2); //设置或查询错误报告类型
while(RECV(rdata)==0) CEER(); //读取网络返回的报告内容
while(RECV(rdata)==0) CHLD('?');//查询对来电的操作方式
while(RECV(rdata)==0) CLIP(1);//设置来电允许显示
//while(RECV(rdata)==0) AUPATH(3,1);//查询或设置语音通道
while(RECV(rdata)==0) TIME(Initime,'?'); //查询或设置时间
if((rdata[10]>0x2f)&&(rdata[10]<0x3a)&&(rdata[11]>0x2f)&&(rdata[11]<0x3a))
mdate[4]=(rdata[10]-48)*10+(rdata[11]-48);
if((rdata[13]>0x2f)&&(rdata[13]<0x3a)&&(rdata[14]>0x2f)&&(rdata[14]<0x3a))
mdate[5]=(rdata[13]-48)*10+(rdata[14]-48);
if((rdata[16]>0x2f)&&(rdata[16]<0x3a)&&(rdata[17]>0x2f)&&(rdata[17]<0x3a))
mdate[6]=(rdata[16]-48)*10+(rdata[17]-48);
while(RECV(rdata)==0) DATE(Inidate,'?'); //查询或设置时间
if((rdata[10]>0x2f)&&(rdata[10]<0x3a)&&(rdata[11]>0x2f)&&(rdata[11]<0x3a))
mdate[1]=(rdata[10]-48)*10+(rdata[11]-48);
if((rdata[13]>0x2f)&&(rdata[13]<0x3a)&&(rdata[14]>0x2f)&&(rdata[14]<0x3a))
mdate[2]=(rdata[13]-48)*10+(rdata[14]-48);
if((rdata[16]>0x2f)&&(rdata[16]<0x3a)&&(rdata[17]>0x2f)&&(rdata[17]<0x3a))
mdate[3]=(rdata[16]-48)*10+(rdata[17]-48);
i=250;
while((rdata[9]!=48+i/100)||(rdata[10]!=48+(i/10)%10)||(rdata[11]!=48+i%10))
{
while(RECV(rdata)==0) CLVL(i);//设置听筒的音量
while(RECV(rdata)==0) CLVL('?');
}
while((rdata[3]!='C')||(rdata[4]!='R')||(rdata[7]!='1'))
{
while(RECV(rdata)==0) CR(1);
while(RECV(rdata)==0) CR('?'); //查询服务报告控制
}
while(RECV(rdata)==0) CSMS('?'); //设置短信的服务类型为1
if(rdata[9]!='1')
{
while(RECV(rdata)==0) CSMS(1);
}
while(RECV(rdata)==0) CMGF('?'); //设置短信的类型为文本模式(text)
if(rdata[9]!='1')
{
while(RECV(rdata)==0) CMGF(1);
}
while(RECV(rdata)==0) CPMS(msgloc,0); //设置模块的短信位置
i=0;
while(i==0)
{
while(RECV(rdata)==0) COPS(); //读取SIM卡的网络服务商
if(str_comp(ch_moid,0,rdata,13,15)==0)
{
str_copy(netsev,0,ch_mo,0,10);
i=1;
}
if(str_comp(ch_cuid,0,rdata,13,11)==0)
{
str_copy(netsev,0,ch_cu,0,10);
i=1;
}
}
lcdclean(1,4); //清屏
//status=1;
while(1)
{
//status=1;
switch (status)
{//11111111111111111
case 0:
default:
lcdclean(1,1);
Display(netsev,0x82,0,8);
while(RECV(rdata)==0) CSQ(); //读取网络信号的质量
lcdclean(4,4);
Display(signal,0x98,0,10);
if((rdata[8]>0x2f)&&(rdata[8]<0x3a)&&(rdata[9]>0x2f)&&(rdata[9]<0x3a))
Display(rdata,0x9e,8,10);
else
{
rdata[8] = 0x32;
rdata[9] = 0x35;
Display(rdata,0x9e,8,10);
}
while(key7279!=0xff) keydial();
break;
case 1:
lcdclean(1,1);
lcdclean(4,4);
Display(newmsg,0x82,0,12);
Display(newmsghint,0x98,0,16);
//key7279 = 0xff;
while(key7279==0xe)
{
status = 0;
break;
}
while(key7279==0xf)
{//2222222222222222
lcdclean(4,4);
key7279=0xff;
//msgindex[0]=' ';
//msgindex[1]='5';
CMGR(msgindex,1);
while(RECV1(rdata)==0) CMGR(msgindex,1); //检查是否有新收到的短信
//CMGL(msgread,1);
//while(RECV1(rdata)==0) CMGL(msgread,1);
i = str_search(rdata,0,msgread);
if(i!=0xff)
{//3333333333333
lcdclean(1,4);
Display(rdata,0x81,i+13,i+24); //显示电话号码
Display(rdata,0x88,i+31,i+36); //显示收到日期
Display(rdata,0x8c,i+37,i+45); //显示收到时间
i = str_search(rdata,0,msgcontentstart);
if(i!=0xff)
{//44444444444444
while((rdata[i])!=',') i++;
j=0;i++;
while((rdata[i]!=',')&&(rdata[i]!=' '))
{j++;i++;}
if((rdata[i]!=' ')||(rdata[i+1]!=' '))
{
i = str_search(rdata,i,msgcontentstart);
while((rdata[i++])!=',');
j=0;
}
while((rdata[i]!=' ')||(rdata[i+1]!=' '))
{//55555555555
j++;
i++;
} //555555555
switch (j)
{//666666666
case 1:
j= rdata[i-j]-48;
break;
case 2:
j= 10*(rdata[i-j]-48)+(rdata[i-j+1]-48);
break;
case 3:
j= 100*(rdata[i-j]-48)+10*(rdata[i-j+1]-48)+(rdata[i-j+2]-48);
break;
}//666666666666
i+=2;
j*=2;
lenth = j;
for(j=0;j<lenth;j+=4)
{
for(l=i;l<i+4;l++)
{
if((rdata[l]>='A')&&(rdata[l]<'G'))
{
rdata[l]-=(65-10-48);
}
}
msgcontent[j/4] = 16*16*16*(rdata[i]-48)+16*16*(rdata[i+1]-48)+16*(rdata[i+2]-48)+(rdata[i+3]-48);
i=i+4;
}
if(j<65)
Display((unsigned char*)msgcontent,0x90,0,j/4); //显示收到内容
else Display((unsigned char*)msgcontent,0x90,0,16);
}//4444444444444
}//333333333333
Display(newmsgpro,0x98,0,16);
while((key7279!=0xe)&&(key7279!=0xf));
while(key7279==0xe)
{
status=0;
lcdclean(1,4);
break;
}
while(key7279==0xf)
{
status=0;
lcdclean(1,4);
CMGD(msgindex);
while(RECV1(rdata)==0);
break;
}
key7279 = 0xff;
}//2222222222
break;
case 2:
lcdclean(1,1);
lcdclean(4,4);
Display(incomenum,0x81,0,12); //显示电话号码
Display(incomhint,0x98,0,15);
while((key7279==0xf)||(key7279==0xe))
{
if(key7279==0xf) ATI(1);
else if(key7279==0xe) ATI(0);
while(RECV(rdata)==0);
key7279 = 0xff;
status = 0;
}
break;
}
while (temp == mdate[6])
{
while(RECV(rdata)==0) CMGF(1);
CMGL(msgunread,1);
while(RECV(rdata)==0);// CMGL(msgunread,1);
i = str_search(rdata,0,msgunread);
if(i!=0xff) //是否接收到新短信
{
msgindex[0] = rdata[i-4];
msgindex[1] = rdata[i-3];
status = 1;
}
while(RECV(rdata)==0) CPAS(); //读取手机的状态
if(rdata[9]=='3') //有电话打进来
{
status = 2;
while(RECV(rdata)==0);
i=str_search(rdata,0,incomeflag);
if(i!=0xff) //是否接收到来电号码
{
if(rdata[18]-48<10)
{
str_copy(incomenum,0,rdata,18,12);
}
if((incomenum[11]-48)>9) incomenum[11] = ' ';
}
}
if (rdata[9]=='4') //正在通话中
{
key7279 = 0xff;
while(key7279!=0xe);
CHUP();
key7279 = 0xff;
}
//while((key7279!=0xff)&&(rdata[9]=='0')) keydial();
}
//DispDateTime();
//************************************************************
CLEAR_BUFF(rdata);
for(i=0;i<7;i++)
{
switch (i)
{
case 0:
case 1:
{
rdata[2*i]=mdate[i]/10 +48;
rdata[2*i+1]=mdate[i]%10 +48;
break;
}
case 2:
{
rdata[2*i] = '-';
rdata[2*i+1]=mdate[i]/10 +48;
rdata[2*i+2]=mdate[i]%10 +48;
break;
}
case 3:
{
rdata[2*i+1] = '-';
rdata[2*i+2]=mdate[i]/10 +48;
rdata[2*i+3]=mdate[i]%10 +48;
break;
}
case 4:
{
rdata[2*i+2]=mdate[i]/10 +48;
rdata[2*i+3]=mdate[i]%10 +48;
break;
}
case 5:
{
rdata[2*i+2] = ':';
rdata[2*i+3]=mdate[i]/10 +48;
rdata[2*i+4]=mdate[i]%10 +48;
break;
}
case 6:
{
rdata[2*i+3] = ':';
rdata[2*i+4]=mdate[i]/10 +48;
rdata[2*i+5]=mdate[i]%10 +48;
break;
}
}
}
Display(ddate,0x90,0,6);
Display(rdata,0x93,0,10);
Display(dtime,0x88,0,6);
Display(rdata,0x8b,10,18);
//*************************************************************/
temp = mdate[6];
}
//while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -