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

📄 frame.c

📁 基于DOS SVGA图形界面的JJY/WWVB/DCF/MSF广播时间码发生器
💻 C
字号:
//
//*******************************************************************
//*                 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;
   }
}


⌨️ 快捷键说明

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