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