⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsm.c

📁 这是一个完整的工程文件:简易手机模型
💻 C
📖 第 1 页 / 共 3 页
字号:
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 + -