?? frame.c
字號(hào):
//
//*******************************************************************
//* TCO frame data format *
//*******************************************************************
//
void PutFrame(void)
{
unsigned char bit, week, mbf0, mbf1, hbf0, hbf1;
int i, j, n;
switch(Option){
case JG2AS:
{
Byte[0]=Min[0]-0x30;
Byte[1]=Min[1]-0x30;
Byte[2]=Hour[0]-0x30;
Byte[3]=Hour[1]-0x30;
Byte[4]=Days[0]-0x30;
Byte[5]=Days[1]-0x30;
Byte[6]=Days[2]-0x30;
Byte[7]=0;
Byte[8]=Year[0]-0x30;
Byte[9]=Year[1]-0x30;
Byte[10]=Week;
Byte[11]=0;
for(i=0; i<12; i++){
bit=0x10;
for(j=0; j<5; j++){
n=i*5+j;
if(n!=40)bit=bit>>1;
if(n==50)bit=bit>>1;
if(bit){
if(bit&Byte[i]){
Bit[n].lcnt=J1;
Bit[n].ch='1';
}
else {
Bit[n].lcnt=J0;
Bit[n].ch='0';
}
}
else {
if(i%2){
Bit[n].lcnt=JP;
Bit[n].ch='P';
}
else {
Bit[n].lcnt=J0;
Bit[n].ch='0';
}
}
}
}
n=0; //minutes parity check
for(i=0;i<2;i++)
for(bit=0x08;bit>0;bit=bit>>1)
if(bit&Byte[i])n=n^0x01;
if(n){
Bit[37].lcnt=J1;
Bit[37].ch='1';
}
n=0; //hour parity chech
for(i=2;i<4;i++)
for(bit=0x08;bit>0;bit=bit>>1)
if(bit&Byte[i])n=n^0x01;
if(n){
Bit[36].lcnt=J1;
Bit[36].ch='1';
}
if(DST){
Bit[38].lcnt=J1;
Bit[38].ch='1';
Bit[40].lcnt=J1;
Bit[40].ch='1';
}
Bit[0].lcnt=JP;
Bit[0].ch='M';
}
break;
case WWVB:
{
Byte[0]=Min[0]-0x30;
Byte[1]=Min[1]-0x30;
Byte[2]=Hour[0]-0x30;
Byte[3]=Hour[1]-0x30;
Byte[4]=Days[0]-0x30;
Byte[5]=Days[1]-0x30;
Byte[6]=Days[2]-0x30;
Byte[7]=0;
Byte[8]=0;
Byte[9]=Year[0]-0x30;
Byte[10]=Year[1]-0x30;
n=Byte[2]*10+Byte[3];
n-=Zone;
if(n>23)n-=24;
else if(n<0)n+=24;
Byte[2]=n/10;
Byte[3]=n%10;
if(DST)Byte[11]=3;
else Byte[11]=0;
if(LPY==1)Byte[11]|=0x08;
for(i=0; i<12; i++){
bit=0x10;
for(j=0; j<5; j++){
n=i*5+j;
bit=bit>>1;
if(bit){
if(bit&Byte[i]){
Bit[n].lcnt=W1; //!!!!!!test
Bit[n].ch='1';
}
else {
Bit[n].lcnt=W0;
Bit[n].ch='0';
}
}
else {
if(i%2){
Bit[n].lcnt=WP;
Bit[n].ch='P';
}
else {
Bit[n].lcnt=W0;
Bit[n].ch='0';
}
}
}
}
Bit[0].lcnt=WP;
Bit[0].ch='M';
}
break;
case DCF77:
{
Byte[0]=Byte[1]=Byte[2]=Byte[3]=0;
if(DST)Byte[4]=0x09;
else Byte[4]=0x0a;
Byte[5]=Min[1]-0x30;
Byte[6]=Min[0]-0x30;
Byte[5]++;
if(Byte[5]==10){
Byte[5]=0;
Byte[6]++;
}
Byte[7]=Hour[1]-0x30;
Byte[8]=Hour[0]-0x30;
if(Day[1]&0x01)Byte[8]|=0x08;
Byte[9]=(Day[1]-0x30)>>1;
if(Day[0]&0x01)Byte[9]=Byte[9]|0x08;
Byte[10]=(Day[0]-0x30)>>1;
week=Week;
if(week==0)week=7;
Byte[10]|=week<<1;
Byte[11]=Mon[1]-0x30;
Byte[12]=Mon[0]-0x30;
Byte[12]|=(Year[1]-0x30)<<1;
Byte[13]=(Year[0]-0x30)<<1;
if(Year[1]&0x08)Byte[13]|=0x01;
Byte[14]=0;
if(Year[0]&0x08)Byte[14]|=0x01;
for(i=0; i<15; i++){
bit=0x01;
for(j=0; j<4; j++){
n=i*4+j+1;
if(bit&Byte[i]){
Bit[n].lcnt=D1;
Bit[n].ch='1';
}
else {
Bit[n].lcnt=D0;
Bit[n].ch='0';
}
bit=bit<<1;
}
}
n=0; //minute parity check
for(i=5;i<7;i++)
for(bit=0x08;bit>0;bit=bit>>1)
if(bit&Byte[i])n=n^0x01;
if(n){
Bit[28].lcnt=D1;
Bit[28].ch='1';
}
n=0; //hour parity check
for(bit=0x08;bit>0;bit=bit>>1)
if(bit&Byte[7])n=n^0x01;
for(bit=0x04;bit>0;bit=bit>>1)
if(bit&Byte[8])n=n^0x01;
if(n){
Bit[35].lcnt=D1;
Bit[35].ch='1';
}
if(0x08&Byte[8])n=1; //date parity check
else n=0;
for(i=9;i<15;i++)
for(bit=0x08;bit>0;bit=bit>>1)
if(bit&Byte[i])n=n^0x01;
if(n){
Bit[58].lcnt=D1;
Bit[58].ch='1';
}
Bit[0].lcnt=D0;
Bit[0].ch='0';
Bit[59].lcnt=DM;
Bit[59].ch='-';
}
break;
case MSF:
{
mbf0=Min[0]; //save
mbf1=Min[1];
hbf0=Hour[0];
hbf1=Hour[1];
if(UP_min())UP_hour();
Byte[0]=Byte[1]=Byte[2]=Byte[3]=0;
Byte[4]=Year[0]-0x30;
Byte[5]=Year[1]-0x30;
Byte[6]=(Mon[1]-0x30)>>1;
if((Mon[0]-0x30)&0x01)Byte[6]|=0x08;
Byte[7]=(Day[0]-0x30)<<1;
if((Mon[1]-0x30)&0x01)Byte[7]|=0x08;
if((Day[1]-0x30)&0x08)Byte[7]|=0x01;
Byte[8]=(Day[1]-0x30)<<1;
if(Week&0x04)Byte[8]|=0x01;
Byte[9]=Hour[0]-0x30;
if(Week&0x02)Byte[9]|=0x08;
if(Week&0x01)Byte[9]|=0x04;
Byte[10]=Hour[1]-0x30;
Byte[11]=(Min[0]-0x30)<<1;
if((Min[1]-0x30)&0x08)Byte[11]|=0x01;
Byte[12]=(Min[1]-0x30)<<1;
Byte[13]=0x0f;
Byte[14]=0x0c;
Min[0]=mbf0; //restore
Min[1]=mbf1;
Hour[0]=hbf0;
Hour[1]=hbf1;
for(i=0; i<15; i++){
bit=0x10;
for(j=0; j<4; j++){
n=i*4+j+1;
bit=bit>>1;
if(bit&Byte[i]){
Bit[n].lcnt=M1;
Bit[n].ch='1';
}
else {
Bit[n].lcnt=M0;
Bit[n].ch='0';
}
}
}
n=0; //year parity check
for(i=4;i<6;i++)
for(bit=0x08;bit>0;bit=bit>>1)
if(bit&Byte[i])n=n^0x01;
if(n==0){
Bit[54].lcnt=M2;
Bit[54].ch='I';
}
n=0; //date parity check
for(i=6;i<8;i++)
for(bit=0x08;bit>0;bit=bit>>1)
if(bit&Byte[i])n=n^0x01;
for(bit=0x08;bit>1;bit=bit>>1)
if(bit&Byte[8])n=n^0x01;
if(n==0){
Bit[55].lcnt=M2;
Bit[55].ch='I';
}
n=0; //weekday parity check
for(bit=0x04;bit>0;bit=bit>>1)
if(bit&Week)n=n^0x01;
if(n==0){
Bit[56].lcnt=M2;
Bit[56].ch='I';
}
n=0; //minute & hour parity check
for(bit=0x02;bit>0;bit=bit>>1)
if(bit&Byte[9])n=n^0x01;
for(i=10;i<13;i++)
for(bit=0x08;bit>0;bit=bit>>1)
if(bit&Byte[i])n=n^0x01;
if(n==0){
Bit[57].lcnt=M2;
Bit[57].ch='I';
}
if(DST){
Bit[58].lcnt=M2;
Bit[58].ch='I';
}
Bit[0].lcnt=MM;
Bit[0].ch='M';
}
break;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -