📄 convert.c
字号:
#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 + -