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

📄 convert.c

📁 GSM模块的AT指令代码~,了解如何使用AT指令控制GSM模块收发短信等。
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "function.h"  
#include "define.h"
#include "WTS701_DRV.h"
#include <mega128.h>

//=====================================================
#define ARRAY_MAX 1020

unsigned char read_text_flag;
unsigned char display_text_flag;
unsigned char tg[ARRAY_MAX];//字幕机 FUNCTION_CODE PARAMETERS 部分缓冲
int array;                  //数组下标
flash unsigned char seg64[]={0x9A,0x01,0x00,0x09,0x01,0xFF};//初始化为64段模式
flash unsigned char FunST[]={0x9A,0x01,0x00,0x02,0x00,0xFF};//读取字幕机状态
//返回值0x60传输成功,0x61时间溢出,0x62字节数错误,0x63指令长度溢出,0x64校验位错误
TypeSegData SegData; //送段资料
eeprom unsigned char paramColor    = 1;
eeprom unsigned char paramPosition = 2;
eeprom unsigned char paramVolumn   = 3;
eeprom unsigned char paramSpeed    = 2;
  
//char system_ok;        //1表示正常,0表示出错 
#define COM0   0  //TC35T通讯出错
#define COM1   1  //显示屏通讯出错
#define SIM    2  //无SIM卡
#define RUN    3  //闪烁,表明系统在运行
#define SIGNAL   4 //信号强度
#define GSM_INIT 5
#define TG_INIT  6


#define LINE1_SEG_NUM   1   //第一行的段号
#define LINE2_SEG_NUM   2   //第二行的段号
#define CLEAR_SEG_NUM   3   //用于清屏的段号

//=====================================================
int *InitParam( int *p );
int *SetDisplayParam( int *p );
int *SetSpeachParam( int *p );
int *SetDataTimeParam( int *p );
int *DelSegData( int *p );
int *DisplayDataTime( int *p );   //日期显示行号总是与默认值相反.
void ReadDisplayText( int *p );

unsigned char fun_send_data(unsigned char seg_num);
unsigned char fun_del_seg(unsigned char seg_num);
char fun_read_st(void); 
char buf2tg(char* q,unsigned char buf_num);
unsigned char tg_load_seg(void);
unsigned char tg_clear_screen(void);

unsigned char cmd_send_text(int* p);
unsigned char cmd_show_data(unsigned char color,unsigned char mode);
unsigned char cmd_show_time(unsigned char color,unsigned char mode);

unsigned char send_tg( void );
//====================================================
int *InitParam( int *p )            //初始化参数,日期和时间参数不做初始化
{
  if (p==0) return 0;
  while (1)
  {
    p++;
    if (*p == 0) return 0; 
    if ((*p == (int)FULLSTOP_CH0) || (*p == (int)FULLSTOP_CH1) || (*p == FULLSTOP_EN))
    {
      break;
    }
  }
  if (paramColor    != 1)  paramColor    =1;
  if (paramPosition != 2)  paramPosition =2;
  if (paramVolumn   != 3)  paramVolumn   =3;
  if (paramSpeed    != 2)  paramSpeed    =2;

  tg_clear_screen();
  delay_ms(10);
  fun_del_seg(LINE1_SEG_NUM);
  if ( get_bit( system_ok, COM1 )) //通讯正常转发
  put1_tg();
  fun_del_seg(LINE2_SEG_NUM);
  put1_tg();
  delay_ms(10);
  if (tg_load_seg() == 0)
  {
    p=0;
    clr_bit(system_ok,TG_INIT);
  }
  delay_ms(10);

  return p;
}

int *SetDisplayParam( int *p )      //设置显示参数
{
  unsigned char paramPosition_temp = 0;
  
  while(p)
  {
    p++;
    switch (*p)
    {
      case 0://串结束
        return 0;
      case FULLSTOP_CH0:
      case FULLSTOP_CH1:
      case FULLSTOP_EN:
        paramPosition_temp--;
        if (    ((paramPosition_temp >= 1) && (paramPosition_temp <= 3)) 
             || ((paramPosition_temp >= 7) && (paramPosition_temp <= 9)) 
           )
        {
          paramPosition = paramPosition_temp;	
        }
        return p;
        //break;
      case HONG:  //红
        paramColor = 1;
        break;
      case CHENG: //橙
        paramColor = 3;
        break;
      case LV:    //绿
        paramColor = 2;
        break;
      case ZUO:
        paramPosition_temp += 1;
        break;
      case ZHONG:
        paramPosition_temp += 2;
        break;
      case YOU:
        paramPosition_temp += 3;
        break;
      case SHANG:
        paramPosition_temp += 1;
        break;
      case XIA:
        paramPosition_temp += 7;
        break;
      default:
        break;
    }
  }
  return 0;
}

int *SetSpeachParam( int *p )     //设置语音朗读参数
{
  unsigned char mode = 0;
  
  while(p)
  {
    p++;
    switch (*p)
    {
      case 0://串结束 
        return 0;
      case FULLSTOP_CH0:
      case FULLSTOP_CH1:
      case FULLSTOP_EN:
        return p;
        //break;
      case COMMA_EN:
      case COMMA_CH:
        p++;
        if ((mode == 0) && (*p <= '7') && (*p >= '0'))  //0-7为有效值
        {
          paramVolumn = (unsigned char)(*p - '0');
          mode = 1;
        }
        else if ((mode == 1) && (*p <= '4') && (*p >= '0'))  //0-4为有效值
        {
          paramSpeed = (unsigned char)(*p - '0');
          mode = 2;
        }
        else if (mode > 2) return 0;
        break;
      default:
        break;
    }
  }
  return 0;
}


flash unsigned char e[]={0,3,5,1,3,6,2,4,0,2,5,1};    //算星期用
char get_week(int y,char m,char d){                   //算星期
//0周日,1周一,类推
if (m<3) 
{
   m += 12;
   y--;
}
else if (m>12) return 0xFF;   //error               
return ((d+2 + e[m-3] +y+(y/4)-y/100+y/400)%7);
}

int *SetDataTimeParam( int *p )   //设置时间日期参数
{
  TypeSetTime SetTime={0x01,00,0x01,0x01,0x00,0x00,0x00,0x00,0x00}; //初始化
  unsigned char mode=0;   //1年,2月,3日,4时,5分,6秒,>6 error
  unsigned char num=0;    //参数字节数的统计
  unsigned char *q;
  unsigned int year=2000;               //临时取出year
  
  while (p)
  {
    p++;
    switch (*p)
    {
      case 0:
        return 0;
      case FULLSTOP_EN:
      case FULLSTOP_CH0:
      case FULLSTOP_CH1:
        SetTime.week = get_week( year, SetTime.month, SetTime.day );   //计算星期
        if (year < 2000)  SetTime.year = year - 1900;                  //调整年份
        else              SetTime.year = year - 2000;
        //计算校验位
        SetTime.chksum = SetTime.year + SetTime.month  + SetTime.day + SetTime.week
                       + SetTime.hour + SetTime.minute + SetTime.second;
        q = (char*)&SetTime;
        for (array = 0; array < 9; array++)    //存入缓冲区
        {
          tg[array] = *q++;
        }
        if ( get_bit( system_ok, COM1 )) //通讯正常转发
        {
          put1_tg();
          if ( fun_read_st() != 0x60)      //转发后判断回复
          {
            p = 0;
          }
        }
        else p = 0;
        delay_ms(10);
        return p;
        //break;
      case COMMA_EN:
      case COMMA_CH:
        mode++;
        num = 0;
        break;
      default:	
        if ((*p <= '9') && (*p >= '0'))                   //数字
        {
          switch (mode)
          {
            case 1:     //设置年
              if (!num)            year = *p - '0';
              else if (num < 4)    year = year*10 + *p - '0';
              else                 mode = 0x15;
              break;
            case 2:     //设置月
              if (!num)            SetTime.month = *p - '0';
              else if (num == 1)   SetTime.month = SetTime.month*10 + *p - '0';
              else                 mode = 0x15;
              break;
            case 3:     //设置日
              if (!num)            SetTime.day = *p - '0';
              else if (num == 1)   SetTime.day = SetTime.day*10 + *p - '0';
              else                 mode = 0x15;
              break;
            case 4:     //设置时
              if (!num)            SetTime.hour = *p - '0';
              else if (num == 1)   SetTime.hour = SetTime.hour*10 + *p - '0';
              else                 mode = 0x15;
              break;
            case 5:     //设置分
              if (!num)            SetTime.minute = *p - '0';
              else if (num == 1)   SetTime.minute = SetTime.minute*10 + *p - '0';
              else                 mode = 0x15;
              break;
            case 6:     //设置秒
              if (!num)            SetTime.second = *p - '0';
              else if (num == 1)   SetTime.second = SetTime.second*10 + *p - '0';
              else                 mode = 0x15;
              break;
          }
          num++;
        }
        if (mode > 6) return 0;
        break;
    }
  }
  return 0; 
}

int *DelSegData( int *p )         //删除段资料
{
  unsigned char num = 0;
  
  while (p)
  {
    p++;
    switch (*p)
    {
      case 0:
        return 0;
      case FULLSTOP_EN:
      case FULLSTOP_CH0:
      case FULLSTOP_CH1:
        tg_clear_screen();
        delay_ms(10);
        if (num & 0x01)
        {
          fun_del_seg( LINE1_SEG_NUM );
          if ( get_bit( system_ok, COM1 )) //通讯正常转发
          {
            put1_tg();
            if ( fun_read_st() != 0x60)      //转发后判断回复
            {
              p = 0;
            }
          }
          else p = 0;
        }
        if (num & 0x02)
        {
          fun_del_seg( LINE2_SEG_NUM );
          if ( get_bit( system_ok, COM1 )) //通讯正常转发
          {
            put1_tg();
            if ( fun_read_st() != 0x60)      //转发后判断回复
            {
              p = 0;
            }
          }
          else p = 0;
        }
        delay_ms(10);
        if (tg_load_seg() == 0)
        {
    	p=0;
    	clr_bit(system_ok,TG_INIT);
        }
        delay_ms(10);
        return p;
      case '1':
      case YI:
        num |= 0x01;
        break;
      case '2':
      case ER:
        num |= 0x02;
        break;
      default:
        break;
    }
  }
}

int *DisplayDataTime( int *p )
{
  unsigned char dataFlag = 0;
  unsigned char timeFlag = 0;
  
  while (p)
  {
    p++;
    switch (*p)
    {
      case 0:
        return 0;
      case FULLSTOP_EN:
      case FULLSTOP_CH0:
      case FULLSTOP_CH1:
        if (paramPosition > 5) fun_send_data( LINE1_SEG_NUM );    //日期显示和默认位置相反
        else                   fun_send_data( LINE2_SEG_NUM );
        if (timeFlag == 1) cmd_show_time( paramColor, 1 );
        if (dataFlag == 1) cmd_show_data( paramColor, 1 );

⌨️ 快捷键说明

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