?? tz_clock.c
字號:
#include <reg51.h>
#include <absacc.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define RAM62256 0x8000/*外部RAM寄存器的地址*/
#define COM8279 XBYTE[0x6100]/*8279命令/狀態(tài)口*/
#define DAT8279 XBYTE[0x6000]/*8279數(shù)據(jù)口*/
#define RL12887A XBYTE[0x400a]/*寄存器A*/
#define RL12887B XBYTE[0x400b]/*寄存器B*/
#define RL12887C XBYTE[0x400c]/*寄存器C*/
#define RL12887D XBYTE[0x400d]/*寄存器D*/
#define MOTO1_PORT 0x0000/*東面/南面子鐘所用的端口*/
#define MOTO2_PORT 0x2000/*西面/北面子鐘所用的端口*/
#define TZ3_OR_TZ9 0
#define MXB 0
typedef struct
{uchar second;/*代表秒單元*/
uchar minute;/*代表分單元*/
uchar hour;}COMPLEX;/*代表時單元*/
COMPLEX hms_variant[7];/*hms_variant都具有COMPLEX結構類型的變量,包括母鐘、東面、、、、北面,照明上限及下限*/
COMPLEX *p_timemu=hms_variant;
COMPLEX *p_timeslave;
uchar compare_zf(COMPLEX *x,COMPLEX *y);
uchar ZHUISHI,PROG_FLOW,BS_RSEG,DIS_RSEG,JS_COUNT,GPS_RSEG;
uchar bdata out_data;
sbit DIN_DATA=out_data^7;
sbit DOUT_DATA=out_data^0;
uint bdata biaozhi;
sbit MOTO_FLAG=biaozhi^0;
sbit MOTO_STOP_FLAG=biaozhi^1;
sbit ZM_FLAG=biaozhi^2;
sbit ADD_SUB_FLAG=biaozhi^3;
sbit MP3_FLAG=biaozhi^4;
sbit ZS_FLAG=biaozhi^5;
sbit SYN_FLAG=biaozhi^6;
sbit GPS_FLAG=biaozhi^7;
sbit COMPARE_FLAG=biaozhi^8;
sbit ZM_PIN=P1^7; /*控制照明的引腳*/
sbit BS_PIN=P1^6; /*控制報時的引腳*/
sbit MAX3100_DIN=P1^1; /*MAX3100的DIN接89C51的P1.1*/
sbit MAX3100_DOUT=P1^2;/*MAX3100的DOUT接89C51的P1.2*/
sbit MAX3100_SCLK=P1^3;/*MAX3100的SCLK接89C51的P1.3*/
sbit MAX3100_GPS=P1^4 ;/*接受GPS的MAX3100的CS接89C51的P1.4*/
sbit MAX3100_BS=P1^5;
sbit MAX3100_DEVICE=P3^5;
sbit SEND_ENABLE=P1^0; /*控制與pc機通訊的使能位*/
uchar code dis_05array[14]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,\
0x7c,0x1b,0x78,0x71};/*分別代表0-9及報時與照明的段碼!再加上上限與下限的段碼!*/
uchar code * pdis=dis_05array;
#if(TZ3_OR_TZ9==0)//表示是機芯tz3
uchar code motor_forward_ew[6]={0x01,0x03,0x02,0x06,0x04,0x05};//表示東面及西面子鐘正轉動作
uchar code motor_forward_sn[6]={0x10,0x30,0x20,0x60,0x40,0x50};//表示南面及北面子鐘正轉動作
uchar code motor_back_ew[6]={0x04,0x06,0x02,0x03,0x01,0x05};//表示東面及西面子鐘反轉動作
uchar code motor_back_sn[6]={0x40,0x60,0x20,0x30,0x10,0x50};//表示南面及北面子鐘反轉動作
#elif (TZ3_OR_TZ9==1)//表示是機芯tz9
uchar code motor_forward_ew[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//表示東面及西面子鐘正轉動作
uchar code motor_forward_sn[8]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};//表示南面及北面子鐘正轉動作
uchar code motor_back_ew[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//表示東面及西面子鐘反轉動作
uchar code motor_back_sn[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};//表示南面及北面子鐘反轉動作
#endif
uchar code *idata p_motor;//指向東南西北子鐘正反轉的地址
unsigned long bdata my_24bs;
sbit bs0=my_24bs^0;sbit bs1=my_24bs^1;sbit bs2=my_24bs^2;sbit bs3=my_24bs^3;
sbit bs4=my_24bs^4;sbit bs5=my_24bs^5;sbit bs6=my_24bs^6;sbit bs7=my_24bs^7;
sbit bs8=my_24bs^8;sbit bs9=my_24bs^9;sbit bs10=my_24bs^10;sbit bs11=my_24bs^11;
sbit bs12=my_24bs^12;sbit bs13=my_24bs^13;sbit bs14=my_24bs^14;sbit bs15=my_24bs^15;
sbit bs16=my_24bs^16;sbit bs17=my_24bs^17;sbit bs18=my_24bs^18;sbit bs19=my_24bs^19;
sbit bs20=my_24bs^20;sbit bs21=my_24bs^21;sbit bs22=my_24bs^22;sbit bs23=my_24bs^23;
void main(void)
{
void must_go_onestep(void);
uchar compare_zf(COMPLEX * u, COMPLEX * v);
void motor_runzz_ew(uchar code *pointer);
void motor_runfz_ew(uchar code *pointer);
void motor_runzz_sn(uchar code *pointer);
void motor_runfz_sn(uchar code *pointer);
void dis_pub(COMPLEX *ux);
void display_led(void);
void initial_8279(void);
void initial_12887(void);
void initial_first(void);
void initial_gps3100(void);
void initial_bs3100(void);
void initial_device3100(void);
void func_slavehour(void);
void func_slavemin(void);
void func_muhour(void);
void func_mumin(void);
void pushdata_12887(void);
void get_all_time(void);
void push_ram62256(void);
void send_device_4byte(void);
void send_device_16byte(void);
void zm_on_off(void);
void bs_on_off(void);
void key_which_hour(void);
void key_which_min(void);
void key_which_sec(void);
void data_sendbs(void);
void data_senddevice(void);
void delay_ms(uint x);
void eastsou_slave_add(COMPLEX * ux);
void eastsou_slave_sub(COMPLEX * ux);
void westnor_slave_add(COMPLEX * ux);
void westnor_slave_sub(COMPLEX * ux);
uchar byte8(uchar x);
bit function_bs(void);
void func_zmhour(void);
uchar beijinghour(uchar *x,uchar *y);
uchar beijingmin(uchar *x,uchar *y);
uchar utlk1(uchar x,uchar y);
uchar utlk2(uchar x,uchar y);
uchar utlk3(uchar tx1,uchar tx2);
void utlk_bs(uchar x,uchar y);
void utlk_device(uchar x,uchar y);
void outram_topc(void);
XBYTE[MOTO1_PORT]=0x00;XBYTE[MOTO2_PORT]=0x00;
initial_8279();
delay_ms(200);biaozhi=0;
bs0=bs1=bs2=bs3=bs4=bs5=bs22=bs23=0;bs13=bs14=0;bs21=0;
bs6=bs7=bs8=bs9=bs10=bs11=bs12=bs15=bs16=bs17=bs18=bs19=bs20=1;
TMOD=0x21;
PCON=0x80;
SCON=0x50;
TH0=TH1=0xf3;
MAX3100_SCLK=0x00;
JS_COUNT=0;PROG_FLOW=1;BS_RSEG=0x00;DIS_RSEG=0x00;GPS_RSEG=0;
initial_12887();
initial_gps3100();
initial_bs3100();
initial_device3100();
initial_first();
get_all_time();//初始化所有時間及照明區(qū)域!
ES=1;TR0=1;TR1=1;IT1=1;PT0=1;
send_device_4byte();//給馬工的子鐘及一切區(qū)域子鐘提供時間信號基準!
EA=1;
SYN_FLAG=1;
push_ram62256();//初始化進入片外RAM6264的數(shù)據(jù)準備供串口發(fā)送給pc機!
while(1)
{
if(SYN_FLAG==1)
{
//發(fā)送16個字節(jié)給所有從機,包括 0x5c+年高+年低+月+日+周+母時+母分+母秒+子時+子分+子秒+路數(shù)+地址+狀態(tài)+累加和
//if(p_timemu->second%1==0){send_device_16byte();}
must_go_onestep(); //是否到了30秒要走時了別忘了正常走時動作
switch(PROG_FLOW)
{
case 1://處理東面子鐘追時動作!
{
p_timeslave=&hms_variant[1];
compare_zf(p_timemu,p_timeslave);
if(MOTO_STOP_FLAG==0)
{ switch(ZHUISHI)
{ case 1:{motor_runzz_ew(motor_forward_ew);p_timeslave=&hms_variant[1];eastsou_slave_add(p_timeslave);}break;
case 2:{motor_runfz_ew(motor_back_ew);p_timeslave=&hms_variant[1];eastsou_slave_sub(p_timeslave);}break;
case 3:{XBYTE[MOTO1_PORT]=0; PROG_FLOW=1;SYN_FLAG=0; }break;
}
push_ram62256();//重要數(shù)據(jù)進入片外RAM6264保存起來并且供串口發(fā)送給pc機!
}
}break;
/* case 2://處理南面子鐘追時動作!
{
p_timeslave=&hms_variant[2];
compare_zf(p_timemu,p_timeslave);
if(MOTO_STOP_FLAG==0)
{ switch(ZHUISHI)
{ case 1:{motor_runzz_ew(motor_forward_sn);p_timeslave=&hms_variant[2];eastsou_slave_add(p_timeslave);}break;
case 2:{motor_runfz_ew(motor_back_sn);p_timeslave=&hms_variant[2];eastsou_slave_sub(p_timeslave);}break;
case 3:{XBYTE[MOTO1_PORT]=0;PROG_FLOW=3;}break;
}
push_ram62256();//重要數(shù)據(jù)進入片外RAM6264保存起來并且供串口發(fā)送給pc機!
}
}break;
case 3://處理西面子鐘追時動作!
{
p_timeslave=&hms_variant[3];
compare_zf(p_timemu,p_timeslave);
if(MOTO_STOP_FLAG==0)
{ switch(ZHUISHI)
{ case 1:{motor_runzz_sn(motor_forward_ew);p_timeslave=&hms_variant[3];westnor_slave_add(p_timeslave);}break;
case 2:{motor_runfz_sn(motor_back_ew);p_timeslave=&hms_variant[3];westnor_slave_sub(p_timeslave);}break;
case 3:{XBYTE[MOTO2_PORT]=0;PROG_FLOW=4;}break;
}
push_ram62256();//重要數(shù)據(jù)進入片外RAM6264保存起來并且供串口發(fā)送給pc機!
}
}break;
case 4://處理北面子鐘追時動作!
{
p_timeslave=&hms_variant[4];
compare_zf(p_timemu,p_timeslave);
if(MOTO_STOP_FLAG==0)
{ switch(ZHUISHI)
{ case 1:{motor_runzz_sn(motor_forward_sn);p_timeslave=&hms_variant[4];westnor_slave_add(p_timeslave);}break;
case 2:{motor_runfz_sn(motor_back_sn);p_timeslave=&hms_variant[4];westnor_slave_sub(p_timeslave);}break;
case 3:{XBYTE[MOTO2_PORT]=0;PROG_FLOW=1;SYN_FLAG=0;}break;
}
push_ram62256();//重要數(shù)據(jù)進入片外RAM6264保存起來并且供串口發(fā)送給pc機!
}
}break;*/
}
}
else
{
push_ram62256();//重要數(shù)據(jù)進入片外RAM6264保存起來并且供串口發(fā)送給pc機!
/*if((p_timemu->minute%2==0)&&(p_timemu->second==5))
{ send_device_4byte();//給馬工的子鐘及一切區(qū)域子鐘提供時間信號基準!
}*/
//發(fā)送16個字節(jié)給所有從機,包括 0x5c+年高+年低+月+日+周+母時+母分+母秒+子時+子分+子秒+路數(shù)+地址+狀態(tài)+累加和
if(p_timemu->second%1==0){send_device_16byte();}
zm_on_off();//判斷照明情況
bs_on_off();//判斷報時情況
must_go_onestep();//是否到了30秒要走時了
}
/*#elif(MXB==1)
push_ram62256();//重要數(shù)據(jù)進入片外RAM6264保存起來并且供串口發(fā)送給pc機!
//發(fā)送16個字節(jié)給所有從機,包括 0x5c+年高+年低+月+日+周+母時+母分+母秒+子時+子分+子秒+路數(shù)+地址+狀態(tài)+累加和
if(p_timemu->second%1==0){send_device_16byte();}
zm_on_off();//判斷照明情況
bs_on_off();//判斷報時情況
#endif */
}
}
void xt0(void) interrupt 1
{
TR0=0;TL0+=0xb9;if(CY==0){TH0+=0x3c;}else{TH0+=0x3d;}TR0=1;//調整精度很好用
JS_COUNT++;
display_led();
if(JS_COUNT==20)
{ COMPARE_FLAG=0;
GPS_RSEG++;if(GPS_RSEG==80){GPS_FLAG=0;GPS_RSEG=0;}//用來給pc機傳送gps標志信息的!
#if(TZ3_OR_TZ9==0)
{ JS_COUNT=0;p_timemu->second++;
if(p_timemu->second==10){MOTO_FLAG=1;}
else if(p_timemu->second==40){MOTO_FLAG=1;}
else if(p_timemu->second==60)
{
p_timemu->second=0x00;p_timemu->minute+=1;
if(p_timemu->minute==60)
{ p_timemu->minute=0x00;p_timemu->hour+=1;p_timemu->hour%=24;}
}
pushdata_12887();
}
#elif(TZ3_OR_TZ9==1)
{
JS_COUNT=0;p_timemu->second++;
if(p_timemu->second==12||p_timemu->second==24||p_timemu->second==36||p_timemu->second==48||p_timemu->second==54){MOTO_FLAG=1;}
else if(p_timemu->second==60)
{
p_timemu->second=0x00;p_timemu->minute+=1;
if(p_timemu->minute==60)
{ p_timemu->minute=0x00;p_timemu->hour+=1;p_timemu->hour%=24;}
}
pushdata_12887();
}
#endif
}
}
void xint0() interrupt 0
{ uchar temp;
COM8279=0x40;
temp=DAT8279;
switch(temp)
{
case 0:{key_which_hour();}break;
case 1:{key_which_min();}break;
case 2:
{ if(DIS_RSEG==0)
{ if(ADD_SUB_FLAG==1){p_timemu->second--;if(p_timemu->second==0xff){p_timemu->second=59;}}
else
{p_timemu->second++;p_timemu->second%=60;}
}
}break;
case 3:{ADD_SUB_FLAG=~ADD_SUB_FLAG;}break;
case 4:{DIS_RSEG=4;BS_RSEG=0x00;}break;/*東面機芯有效!*/
// case 5:{DIS_RSEG=5;BS_RSEG=0x00;}break;/*南面機芯有效!*/
// case 6:{DIS_RSEG=6;BS_RSEG=0x00;}break;/*西面機芯有效!*/
// case 7:{DIS_RSEG=7;BS_RSEG=0x00;}break;/*北面機芯有效!*/
case 8:{DIS_RSEG=0;BS_RSEG=0x00;}break;/*母鐘有效!*/
case 9:
{ MOTO_STOP_FLAG=~MOTO_STOP_FLAG;
if(MOTO_STOP_FLAG==1)
{ XBYTE[MOTO1_PORT]=0x00;
XBYTE[MOTO2_PORT]=0x00;
}
}break;
case 10:{SYN_FLAG=1;}break; //閏需同步追時!
case 11:
{ switch(BS_RSEG)//按動“子調”鍵可以手動設置報與不報時,與多媒體無關
{case 0:{if(bs0==0){bs0=1;}else {bs0=0;}}break;case 1:{if(bs1==0){bs1=1;}else {bs1=0;}}break;
case 2:{if(bs2==0){bs2=1;}else {bs2=0;}}break;case 3:{if(bs3==0){bs3=1;}else {bs3=0;}}break;
case 4:{if(bs4==0){bs4=1;}else {bs4=0;}}break;case 5:{if(bs5==0){bs5=1;}else {bs5=0;}}break;
case 6:{if(bs6==0){bs6=1;}else {bs6=0;}}break;case 7:{if(bs7==0){bs7=1;}else {bs7=0;}}break;
case 8:{if(bs8==0){bs8=1;}else {bs8=0;}}break;case 9:{if(bs9==0){bs9=1;}else {bs9=0;}}break;
case 10:{if(bs10==0){bs10=1;}else {bs10=0;}}break;case 11:{if(bs11==0){bs11=1;}else {bs11=0;}}break;
case 12:{if(bs12==0){bs12=1;}else {bs12=0;}}break;case 13:{if(bs13==0){bs13=1;}else {bs13=0;}}break;
case 14:{if(bs14==0){bs14=1;}else {bs14=0;}}break;case 15:{if(bs15==0){bs15=1;}else {bs15=0;}}break;
case 16:{if(bs16==0){bs16=1;}else {bs16=0;}}break;case 17:{if(bs17==0){bs17=1;}else {bs17=0;}}break;
case 18:{if(bs18==0){bs18=1;}else {bs18=0;}}break;case 19:{if(bs19==0){bs19=1;}else {bs19=0;}}break;
case 20:{if(bs20==0){bs20=1;}else {bs20=0;}}break;case 21:{if(bs21==0){bs21=1;}else {bs21=0;}}break;
case 22:{if(bs22==0){bs22=1;}else {bs22=0;}}break;case 23:{if(bs23==0){bs23=1;}else {bs23=0;}}break;
}
}break;
case 12:/*報時寄存器有效!*/
{ DIS_RSEG=12;
BS_RSEG++;
if(BS_RSEG==24){BS_RSEG=0x00;}
}break;
case 13:{DIS_RSEG=13;ZM_FLAG=~ZM_FLAG;BS_RSEG=0xff;}break;/*對應報時的24個點的時間照明有效!*/
case 14:
{ if(DIS_RSEG==0)
{p_timemu->second=0;JS_COUNT=0;}
}break;
}
}
void xint1(void) interrupt 2
{ uchar idata received_gps[14];//除去起始符$后,一共有70個字節(jié)數(shù)據(jù)!包括CR+LF
uchar *pi,*pk,jx;
if(utlk3(0x00,0x00)==0x24)
{ pi=received_gps;
for(jx=0;jx<14;jx++)/*要順次接收14個GPS格式的數(shù)據(jù)*/
{ while((utlk1(0x40,0x00)&0x80)==0x00);
*pi=utlk3(0x00,0x00);//讀數(shù)據(jù)同時清除接收FIFO寄存器
pi++;
}
pi=&received_gps[13];
if(*pi==0x41 && p_timemu->second==29 )//0x41表示有效,0x56表示無效!
{
pi=&received_gps[6];pk=&received_gps[7];
p_timemu->hour=beijinghour(pi,pk);
pi=&received_gps[8];pk=&received_gps[9];
p_timemu->minute=beijingmin(pi,pk);
pi=&received_gps[10];pk=&received_gps[11];
p_timemu->second=beijingmin(pi,pk);
GPS_FLAG=1;GPS_RSEG=0;
}
}
}
/*NEWDATA1=(p_timemu->hour-received_gps[0]);
NEWDATA2=(p_timemu->minute-received_gps[1]);
NEWDATA3=(p_timemu->second-received_gps[2]);
if((NEWDATA1==OLDDATA1)&& (NEWDATA2==OLDDATA2)&&(NEWDATA3==OLDDATA3)){RXD_JS++;}else{RXD_JS=0;}
OLDDATA1=NEWDATA1;
OLDDATA2=NEWDATA2;
OLDDATA3=NEWDATA3;
if(RXD_JS==3)
{
EA=0;JS_COUNT=1;
p_timemu->hour=received_gps[0];p_timemu->minute=received_gps[1];p_timemu->second=received_gps[2];
EA=1;
if( NODE_ADDRESS==received_gps[9] )
{ T_R_ENA=0;//反饋給從機路數(shù)及地址
ES=0;
SBUF=0xaa;while(TI==0);TI=0;
SBUF=0x58;while(TI==0);TI=0;
T_R_ENA=1;
ES=1;
}
}*/
//叢機回送給pc機AAH,串口初始化成功,表示主從機可以進行通訊,從機接收到AAH后,發(fā)送一個AAH字節(jié)響應主機! !
//上位機每隔設定的時間發(fā)送 bb 表示塔鐘本身固化的音樂報時!
//叢機收到字節(jié)cc后,表示將要接收主機的數(shù)據(jù)包,該數(shù)據(jù)包包括母鐘及四面子鐘的時間和同步命令(同步命令發(fā)送DDH)!
//叢機收到字節(jié)dd后,表示塔鐘多媒體音樂報時,從機返送一個數(shù)據(jù)包給pc機(15個字節(jié)最后一個是關于gps信息的)!
//寄存器存有報時開關的信息:0F0H是關,0F1H是開!
/*
select Case (register)
Case 1
txd_1rxd(0) = &H44 '要求下位機關斷擴大機!
Form1.MSComm1.Output = txd_1rxd
GoTo myposi
Case 2
If (Minute(mu_time) = 59) Then
txd_1rxd(0) = &H33
MSComm1.Output = txd_1rxd '表示讓下位機打開擴大機,進行MP3音樂報時!
End If
If (Second(mu_time) = 58 And SS(14) = &HF1) Then
Form2.MMControl1.FileName = music_string1
sound_flag = True
bs_jsq = bs_temp
Call rythem_open
End If
Case 3
Form2.MMControl1.FileName = music_string0
Call music_length
If (SS(14) = &HF1) Then
If (Minute(mu_time) = (59 - my_time1) And Second(mu_time) >= (60 - my_time2) + 3) Then
Form2.MMControl1.FileName = music_string0 '對應某一點的音樂文件
sound_flag = True
bs_jsq = 0
Call rythem_open
End If
End If
Case 4
Form2.MMControl1.FileName = music_string0
Call music_length
If (SS(14) = &HF1) Then
If (Minute(mu_time) = (59 - my_time1) And Second(mu_time) >= (60 - my_time2) + 3) Then
Form2.MMControl1.FileName = music_string0 '對應某一點的音樂文件
sound_flag = True
bs_jsq = bs_temp
Call rythem_open
End If
End If
Case Else
txd_1rxd(0) = &H44 '要求下位機關斷擴大機!
Form1.MSComm1.Output = txd_1rxd
分別對應:
無前奏,無報時
無前奏,有報時
有前奏,無報時
有前奏,有報時
*/
void sconn(void) interrupt 4
{
uchar jw;
RI=0;
if(SBUF==0xaa)
{ SEND_ENABLE=0;
SBUF=0xaa;while(!TI);TI=0;
for(jw=0;jw<15;jw++)
{SBUF=0;while(!TI);TI=0;} //回送15個0
SEND_ENABLE=1;
}
else if(SBUF==0x44){XBYTE[0x800d]=0xf0;BS_PIN=1;}//關斷擴大機 無前奏,無報時
else if((SBUF==0x33)&&(function_bs()==1))//表示pc機讓下位機打開擴大機
{ XBYTE[0x800d]=0xf1;BS_PIN=0;//打開擴大機
}
else if(SBUF==0xbb){MP3_FLAG=0;SCON=0x40;ES=0;SEND_ENABLE=0;SBUF=0xbb;while(!TI);TI=0;outram_topc();SEND_ENABLE=1;SCON=0x50;ES=1;}
else if(SBUF==0xcc){;}//表示從機要接收主機的數(shù)據(jù)包,包括母鐘及四面子鐘的時間和同步命令(同步命令發(fā)送DDH)!
else if(SBUF==0xdd)
{ MP3_FLAG=1;SCON=0x40;ES=0;SEND_ENABLE=0;SBUF=0xdd;while(!TI);TI=0;outram_topc();SEND_ENABLE=1;SCON=0x50;ES=1;}//表示塔鐘多媒體音樂報時!
}
void display_led(void) //依次送出“秒分時”先送低位,再送高位
{
COM8279=0x90;
switch (DIS_RSEG)
{
case 4:{p_timeslave=&hms_variant[1];dis_pub(p_timeslave);}break;
case 5:{p_timeslave=&hms_variant[2];dis_pub(p_timeslave);}break;
case 6:{p_timeslave=&hms_variant[3];dis_pub(p_timeslave);}break;
case 7:{p_timeslave=&hms_variant[4];dis_pub(p_timeslave);}break;
case 0:{dis_pub(p_timemu);}break;
case 12:
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -