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

📄 convert.c

📁 GSM模块的AT指令代码~,了解如何使用AT指令控制GSM模块收发短信等。
💻 C
📖 第 1 页 / 共 2 页
字号:
        if (timeFlag == 2) cmd_show_time( paramColor, 1 ); 
        if (dataFlag == 2) cmd_show_data( paramColor, 1 );
        if (timeFlag || dataFlag)
        {
          if ( !send_tg() ) p = 0;
        }
        delay_ms(10);
        return p;
        //break;
      case RI:
        if (timeFlag == 1)
        {
        	dataFlag = 2;
        }
        else dataFlag = 1;
        break;
      case SHI:
        if (dataFlag == 1)
        {

        	timeFlag = 2;
        }
        else timeFlag = 1;
        break;
      default:
        break;
    }
  }
  return 0;
}

void ReadDisplayText( int *p )
{
  unsigned char segnum;
  
  if (p != 0)
  {
    if (paramPosition > 5) segnum = LINE2_SEG_NUM;
    else                   segnum = LINE1_SEG_NUM;
    fun_send_data( segnum );
    if (cmd_send_text( p ))
    {
      display_text_flag = 1;
    }
    else
    {
      display_text_flag = 0;
    }
    read_text_flag = 1;
  }
}

unsigned char get_fun_cmd(int* p)
{
if (*p==(int)0xA3BF)  //第一个字是无法识别的字(溢出了,手机使用了新的字长表示方式)
{
  return 0;
}
if ((*p == DAYU_EN) || (*p == (int)DAYU_CH0) || (*p == (int)DAYU_CH1))    //参数设置
{
  while (p)
  {
    switch (*p)
    {
      case 0://串结束
        return 0x11;
        //break;
      case CHU:  //初始化
        p = InitParam( p );
        break;
      case XIAN:
        if (*(p+2) == (int)CAN) //设置显示参数
        {
          p = SetDisplayParam( p );
        }
        else      //显示时间日期
        {
          p = DisplayDataTime( p );	
        }
        break;
      case YU:
        p = SetSpeachParam( p );
        break;
      case SHI:
        p = SetDataTimeParam( p );
        break;
      case SHAN:
        p = DelSegData( p );
        break;
      default:
        p++;
        break;      	
    }	
  }
  return 0;	
}
else
{
  ReadDisplayText( p );
  return 0;
}
}

void tg_test(void){
unsigned char i;

if (fun_read_st() != 0x60)
{
  for (i=0; seg64[i] != (unsigned char)0xFF; i++)
  {
    putchar1(seg64[i]);
  }
  if (fun_read_st() != 0x60)
  {
    clr_bit(system_ok,COM1);    //com1通讯出错  
    clr_bit(system_ok,TG_INIT);
  }
}
else
{
  set_bit(system_ok,COM1);
}
if (get_bit(system_ok,COM1) && !get_bit(system_ok,TG_INIT))
{
  for (i=0; seg64[i] != (unsigned char)0xFF; i++)
  {
    putchar1(seg64[i]);
  }
  if ( fun_read_st() == 0x60)
  {
    if (tg_load_seg())
    {
      set_bit(system_ok,TG_INIT);
    }
  }
}
}

unsigned char tg_load_seg(void)
{
unsigned char temp = 1;

  array = 6;    //载入2个段号
  tg[0]=0x07;   //0字节送功能号
  tg[1]=0x02;   //取低位
  tg[2]=0x00;   //取高位
  tg[3]=LINE1_SEG_NUM;
  tg[4]=LINE2_SEG_NUM;
  tg[5]=tg[1]+tg[2]+tg[3]+tg[4];            //送校验位
  if ( get_bit( system_ok, COM1 )) //通讯正常转发
  {
    put1_tg();
    if ( fun_read_st() != 0x60)      //转发后判断回复
    {
      temp = 0;
    }
  }
  else temp = 0;

  return temp;
}

unsigned char tg_clear_screen(void)
{
  unsigned char flag = 1;
  TypeCW ClipWindows={0x02,0x0000,0x0000,119,31,0x00};
  
  fun_send_data(CLEAR_SEG_NUM);    //清屏
  SegData.seg_len++;               //清屏指令
  SegData.chksum+=0x01;
  tg[array++]=0x01;
  buf2tg((char*)&ClipWindows,10);  //全屏显示指令
  if ( !send_tg() ) flag = 0;
  	
  array = 5;    //载入1个段号
  tg[0]=0x07;   //0字节送功能号
  tg[1]=0x01;   //取低位
  tg[2]=0x00;   //取高位
  tg[3]=CLEAR_SEG_NUM;
  tg[4]=tg[1]+tg[2]+tg[3];            //送校验位
  if ( get_bit( system_ok, COM1 )) //通讯正常转发
  {
    put1_tg();
    if ( fun_read_st() != 0x60)      //转发后判断回复
    {
      flag = 0;
    }
  }
  else flag = 0;
 
  return flag;
}

char buf2tg(char* q,unsigned char buf_num){
unsigned char i;
SegData.seg_len+=buf_num;
for (i=0;i<buf_num;i++)   //存入缓冲区  
{
   if (*q == (int)0x9A)             //遇到9A要发两遍
   {
      SegData.seg_len++;
      SegData.chksum+=*q;
      tg[array++]=*q;
   }
   SegData.chksum+=*q;
   tg[array++]=*q++;
   if (array>ARRAY_MAX-2) return 0;
}
return 1;
}

char fun_read_st(void){                  //字幕机损坏,不用字幕机显示了。。。 
return 0x60;
/*
char i;                                 
for ( i=0; FunST[i] != (unsigned char)0xFF; i++)
  putchar1(FunST[i]);
i=getchar1();
return i;                     
*/
}

unsigned char fun_del_seg(unsigned char seg_num){  //0x0B:del
TypeLoadDelSeg LoadDelSeg;   //初始化
bool flag_ok;

if (seg_num < 64)
{
  flag_ok = 1;
  array = 5;
  LoadDelSeg.fun=0x0B;
  LoadDelSeg.seg_len = 1; 
  LoadDelSeg.seg_num = seg_num;
  LoadDelSeg.chksum =  LoadDelSeg.seg_len;
  LoadDelSeg.chksum += (LoadDelSeg.seg_len >> 8);
  LoadDelSeg.chksum += LoadDelSeg.seg_num;
  
  tg[0]=LoadDelSeg.fun;   //0字节送功能号
  tg[1]=LoadDelSeg.seg_len;       //取低位
  tg[2]=(LoadDelSeg.seg_len>>8);  //取高位
  tg[3]=LoadDelSeg.seg_num;
  tg[4]=LoadDelSeg.chksum;        //送校验位
}
else
{
  flag_ok=0;
  array = 0;
}
return flag_ok;
}

unsigned char fun_send_data(unsigned char seg_num){
bool flag_ok=1;
array=4; //从cmd指令开始存
SegData.fun=0x04;
SegData.seg_len=0; 
SegData.seg_num=0;       //初始化
if (seg_num < 64) SegData.seg_num = seg_num;
else flag_ok = 0;

SegData.chksum=SegData.seg_num;
tg[0]=SegData.fun;
tg[1]=SegData.seg_num;

return flag_ok;
}

unsigned char cmd_show_time(unsigned char color,unsigned char mode){
TypeTime time={0x04,0x0003,0x02,0x00,0x01,0x01,0x06,0x01};  //初始化

if (paramPosition > 5) time.position = paramPosition - 6;
else time.position = paramPosition + 6;
time.mode = mode;
time.color = color;

return (buf2tg((char*)&time,9));
}

unsigned char cmd_show_data(unsigned char color,unsigned char mode){
TypeData data={0x05,0x02,0x00,0x01,0x01,0x06,0x01};  //初始化
TypeDT   delay_time={0x07,0x0003};
unsigned char flag = 1;

if (paramPosition > 5) data.position = paramPosition - 6;
data.position = paramPosition + 6;
data.mode = mode;
data.color = color;
if (!buf2tg((char*)&data,7)) flag = 0;
if (!buf2tg((char*)&delay_time,3)) flag = 0;

return (flag);
}   


unsigned char cmd_send_text(int* p){
TypeText text={0x03,0x02,0x00,0x01,0x08,0x06,0x01};  //初始化
unsigned char temp;

text.position = paramPosition;
text.color = paramColor;
temp = textLength - ((asciiLength + 1) >> 1);
if (temp < 8)
{
  temp = (textLength << 4) - (asciiLength << 3);
  temp = 120 - temp;
  text.gap = temp / textLength;
  text.mode = 1;
}
else
{
  text.gap = 0;
  text.mode = 8;
}
buf2tg((char*)&text,7);

while (p)
{
  if (array>ARRAY_MAX-2)
  {
    return 0;                    
  }
  else if (*p==0)
  {
    tg[array++]=0;        //结束符
    SegData.seg_len++;
    return 1;
  }
  else if ((*p>>8)==0)   //ASCII码,省去高位0
  {
    tg[array++]=*p;
    SegData.seg_len++;
    SegData.chksum+=*p;                  
  }
  else                 //其它GB2312码
  {
    temp=*p>>8;
    tg[array++]=temp;       //高位
    tg[array++]=*p;        //低位
    SegData.seg_len+=2;
    SegData.chksum+=temp;
    SegData.chksum+=*p;
  }
  p++;
}
return 0;
}             

unsigned char send_tg( void )
{
  bool temp = 1;
  
  tg[2] = SegData.seg_len;
  tg[3] = SegData.seg_len >> 8;
  SegData.chksum += tg[2];
  SegData.chksum += tg[3];
  if (array < (ARRAY_MAX - 1))
  {
    tg[array++] = SegData.chksum;  //校验位
  }
  if ( get_bit( system_ok, COM1 )) //通讯正常转发
  {
    put1_tg();
    if ( fun_read_st() != 0x60)      //转发后判断回复
    {
      temp = 0;
    }
  }
  else temp=0;
  
  return temp;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -