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

📄 tz_clock.c

📁 是一个关于驱动外部塔钟(多面)的C程序
💻 C
📖 第 1 页 / 共 3 页
字号:
				 switch(BS_RSEG)
				 { case 0:{if(bs0==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 1:{if(bs1==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 2:{if(bs2==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 3:{if(bs3==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 4:{if(bs4==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 5:{if(bs5==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 6:{if(bs6==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 7:{if(bs7==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 8:{if(bs8==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 9:{if(bs9==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 10:{if(bs10==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 11:{if(bs11==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 12:{if(bs12==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 13:{if(bs13==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 14:{if(bs14==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 15:{if(bs15==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 16:{if(bs16==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 17:{if(bs17==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 18:{if(bs18==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 19:{if(bs19==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 20:{if(bs20==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 21:{if(bs21==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 22:{if(bs22==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 case 23:{if(bs23==0){DAT8279= *(pdis+0);}else {DAT8279= *(pdis+1);}}break;
					 default:{}
				 }
				 DAT8279= *(pdis+0);
				 DAT8279= *(pdis+10);DAT8279= *(pdis+10);//报时的段码“bb”
				 DAT8279= *(pdis+(BS_RSEG%10));
				 DAT8279= *(pdis+(BS_RSEG/10));
				 DAT8279= *(pdis+(BS_RSEG%10));
				 DAT8279= *(pdis+(BS_RSEG/10));				
		}break;	 /*要显示报时的段码!*/	
		case 13:
		{	if(ZM_FLAG==1)
			{	
				p_timeslave=hms_variant;p_timeslave+=5;
			  DAT8279=*(pdis+12);
				DAT8279=*(pdis+12);
				DAT8279=*(pdis+11);
				DAT8279=*(pdis+11);
				DAT8279=*(pdis+(p_timeslave->hour%10));
				DAT8279=*(pdis+(p_timeslave->hour/10));
				DAT8279=*(pdis+(p_timeslave->hour%10));
				DAT8279=*(pdis+(p_timeslave->hour/10));
			}	/*要显示照明上限的段码!*/
		  else
			{	
				p_timeslave=hms_variant;p_timeslave+=6;
				DAT8279=*(pdis+13);
				DAT8279=*(pdis+13);
				DAT8279=*(pdis+11);
				DAT8279=*(pdis+11);
				DAT8279=*(pdis+(p_timeslave->hour%10));
				DAT8279=*(pdis+(p_timeslave->hour/10));
				DAT8279=*(pdis+(p_timeslave->hour%10));
				DAT8279=*(pdis+(p_timeslave->hour/10));
			}/*要显示照明下限的段码!*/
		}break;
	}
}	
	

void dis_pub(COMPLEX *ux)
{	 uchar temp1;uchar temp2;
	 temp1=ux->second/10;
	 temp2=ux->second%10;
	 DAT8279= *(pdis+temp2); DAT8279= *(pdis+temp1);
	 temp1=ux->minute/10;
	 temp2=ux->minute%10;
	 DAT8279= *(pdis+temp2); DAT8279= *(pdis+temp1);
	 temp1=ux->hour/10;
	 temp2=ux->hour%10;
	 DAT8279= *(pdis+temp2); DAT8279= *(pdis+temp1);
	 DAT8279= *(pdis+temp2); DAT8279= *(pdis+temp1);//再补充上两个数码管
}


void pushdata_12887(void)
{	
	XBYTE[0x4004]=p_timemu->hour;  	/*将母钟的时间压入日历芯片里!*/
	XBYTE[0x4002]=p_timemu->minute;
	XBYTE[0x4000]=p_timemu->second;

	p_timeslave=&hms_variant[1];
	XBYTE[0x4010]=p_timeslave->hour;/*将东面子钟的时间压入日历芯片里!*/
	XBYTE[0x4011]=p_timeslave->minute;
	XBYTE[0x4012]=p_timeslave->second;
	p_timeslave=&hms_variant[2];
	XBYTE[0x4013]=p_timeslave->hour;/*将南面子钟的时间压入日历芯片里!*/
	XBYTE[0x4014]=p_timeslave->minute;
	XBYTE[0x4015]=p_timeslave->second;
	p_timeslave=&hms_variant[3];
	XBYTE[0x4016]=p_timeslave->hour;/*将西面子钟的时间压入日历芯片里!*/
	XBYTE[0x4017]=p_timeslave->minute;
	XBYTE[0x4018]=p_timeslave->second;
	p_timeslave=&hms_variant[4];
	XBYTE[0x4019]=p_timeslave->hour;/*将北面子钟的时间压入日历芯片里!*/
	XBYTE[0x401a]=p_timeslave->minute;
	XBYTE[0x401b]=p_timeslave->second;
}	

void get_all_time(void)
{	
	p_timemu=hms_variant;
	p_timemu->second=XBYTE[0x4000];
	p_timemu->minute=XBYTE[0x4002];
	p_timemu->hour=XBYTE[0x4004];/*对应母钟的时间*/ 
	//p_timeslave=hms_variant;
	//p_timeslave++;//千万不能写成p_timeslave+=1形式
	p_timeslave=&hms_variant[1];
	p_timeslave->hour=XBYTE[0x4010];//取东面子钟的时间
  p_timeslave->minute=XBYTE[0x4011];
	p_timeslave->second=XBYTE[0x4012];
	p_timeslave=&hms_variant[2];
	p_timeslave->hour=XBYTE[0x4013];//取南面子钟的时间
  p_timeslave->minute=XBYTE[0x4014];
	p_timeslave->second=XBYTE[0x4015];
	p_timeslave=&hms_variant[3];
	p_timeslave->hour=XBYTE[0x4016];//取西面子钟的时间
  p_timeslave->minute=XBYTE[0x4017];
	p_timeslave->second=XBYTE[0x4018];
	p_timeslave=&hms_variant[4];
	p_timeslave->hour=XBYTE[0x4019];//取北面子钟的时间
  p_timeslave->minute=XBYTE[0x401a];
	p_timeslave->second=XBYTE[0x401b];
	p_timeslave=&hms_variant[5];
	p_timeslave->second=0x00;
	p_timeslave->minute=0x00;
	p_timeslave->hour=0x12;/*初始化对应照明上限的时间18:00:00*/
	p_timeslave=&hms_variant[6];
	p_timeslave->second=0x00;
	p_timeslave->minute=0x00;
	p_timeslave->hour=0x05;/*初始化对应照明下限的时间5:00:00*/
}

void initial_8279(void)
{
COM8279=0xd2;/*总清除命令*/
do{ACC=COM8279;}
while(ACC^7==1);/*等待清除结束8279可用!*/
COM8279=0x00;COM8279=0x34;/*键盘、显示方式及时钟分频命令*/
}
void initial_12887(void)
{
RL12887A=0x2f;
RL12887B=0x06;
}
void initial_first(void)
{
TMOD=0x21;
PCON=0x80;
SCON=0x50;
TH0=-50000/256;
TL0=-50000%256;
ET0=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
}

void key_which_hour(void)
{		p_timeslave=hms_variant;
		switch(DIS_RSEG)
		{
			case 4:{p_timeslave=&hms_variant[1];func_slavehour();}break;
			case 5:{p_timeslave=&hms_variant[2];func_slavehour();}break;
			case 6:{p_timeslave=&hms_variant[3];func_slavehour();}break;
		 	case 7:{p_timeslave=&hms_variant[4];func_slavehour();}break;
			case 0:{p_timemu=hms_variant;func_muhour();}break;
			case 13:
			{	if(ZM_FLAG==1)
				{	p_timeslave=&hms_variant[5];func_zmhour();}
			  else 
				{	p_timeslave=&hms_variant[6];func_zmhour();}
			}break;
		}		
}
void key_which_min(void)
{		p_timeslave=hms_variant;
		switch(DIS_RSEG)
		{
			case 4:{p_timeslave=&hms_variant[1];func_slavemin();}break;
			case 5:{p_timeslave=&hms_variant[2];func_slavemin();}break;
			case 6:{p_timeslave=&hms_variant[3];func_slavemin();}break;
			case 7:{p_timeslave=&hms_variant[4];func_slavemin();}break;
			case 0:{p_timemu=hms_variant;func_mumin();}break;
			case 13:{;}break;
		}		
}

void func_slavehour(void)
{
  if(ADD_SUB_FLAG==0)
	{	p_timeslave->hour++;p_timeslave->hour%=12;}
	else
	{	p_timeslave->hour--;
		if(p_timeslave->hour==0xff){p_timeslave->hour=11;}
	}
}
void func_slavemin(void)
{
  if(ADD_SUB_FLAG==0)
	{	p_timeslave->minute++;p_timeslave->minute%=60;}
	else
	{	p_timeslave->minute--;
		if(p_timeslave->minute==0xff){p_timeslave->minute=59;}
	}
}	
	
void func_muhour(void)
{
  if(ADD_SUB_FLAG==0)
	{	p_timemu->hour++;p_timemu->hour%=24;}
	else
	{	p_timemu->hour--;
		if(p_timemu->hour==0xff){p_timemu->hour=23;}
	}
}			
void func_mumin(void)
{
  if(ADD_SUB_FLAG==0)
	{	p_timemu->minute++;p_timemu->minute%=60;}
	else
	{	p_timemu->minute--;
		if(p_timemu->minute==0xff){p_timemu->minute=59;}
	}
}	

void func_zmhour(void)
{
  if(ADD_SUB_FLAG==0)
	{	p_timeslave->hour++;p_timeslave->hour%=24;}
	else
	{	p_timeslave->hour--;
		if(p_timeslave->hour==0xff){p_timeslave->hour=23;}
	}
}




uchar beijinghour(uchar *x,uchar *y)
{uchar high,low,temp;
high=*x;low=*y;
temp=(high-0x30)*10+(low-0x30);
temp+=8;//转换为北京时间的小时!
	if(temp==24){temp=0;return(temp);}
	else if(temp>24){temp-=24;return(temp);}
  else{return(temp);}
}
uchar beijingmin(uchar *x,uchar *y)
{uchar high,low,temp;
high=*x;low=*y;
temp=(high-0x30)*10+(low-0x30);
return(temp);
}	
void zm_on_off(void)	//如果上限及下限都为同一个值,则照明无效!
{	p_timeslave=&hms_variant[5];
	if(p_timemu->hour==p_timeslave->hour){ZM_PIN=0;}
	else 
	{	p_timeslave++;
		if(p_timemu->hour==p_timeslave->hour){ZM_PIN=1;}
	}
}



	
bit function_bs(void)
{	uchar temp;
	temp=p_timemu->hour;
	temp++;if(temp==24){temp=0;}
	switch(temp)
	{	 case 0:{if(bs0==0){return(0);}else{return(1);}}break;
		 case 1:{if(bs1==0){return(0);}else{return(1);}}break;
		 case 2:{if(bs2==0){return(0);}else{return(1);}}break;
		 case 3:{if(bs3==0){return(0);}else{return(1);}}break;
		 case 4:{if(bs4==0){return(0);}else{return(1);}}break;
		 case 5:{if(bs5==0){return(0);}else{return(1);}}break;
		 case 6:{if(bs6==0){return(0);}else{return(1);}}break;
		 case 7:{if(bs7==0){return(0);}else{return(1);}}break;
		 case 8:{if(bs8==0){return(0);}else{return(1);}}break;
		 case 9:{if(bs9==0){return(0);}else{return(1);}}break;
		 case 10:{if(bs10==0){return(0);}else{return(1);}}break;
		 case 11:{if(bs11==0){return(0);}else{return(1);}}break;
		 case 12:{if(bs12==0){return(0);}else{return(1);}}break;
		 case 13:{if(bs13==0){return(0);}else{return(1);}}break;
		 case 14:{if(bs14==0){return(0);}else{return(1);}}break;
		 case 15:{if(bs15==0){return(0);}else{return(1);}}break;
		 case 16:{if(bs16==0){return(0);}else{return(1);}}break;
		 case 17:{if(bs17==0){return(0);}else{return(1);}}break;
		 case 18:{if(bs18==0){return(0);}else{return(1);}}break;
		 case 19:{if(bs19==0){return(0);}else{return(1);}}break;
		 case 20:{if(bs20==0){return(0);}else{return(1);}}break;
		 case 21:{if(bs21==0){return(0);}else{return(1);}}break;
		 case 22:{if(bs22==0){return(0);}else{return(1);}}break;
		 case 23:{if(bs23==0){return(0);}else{return(1);}}break;
	}	
}


uchar compare_zf(COMPLEX * u, COMPLEX * v) 
{
	if(u->hour%12==v->hour)/*表示母钟小时与子钟小时相等*/
	{	
		if(u->minute==v->minute)
		{								
			 //MOTO_FLAG=0;//在进行判断秒位的时候要将走时标志清零,以备别丢掉应该走时的状态!			 
			 if(u->second==v->second)
			 {ZHUISHI=3;}
			 else if(u->second>v->second && (u->second-v->second)>3 ){ZHUISHI=1;} 
			 else if(u->second<v->second && (v->second-u->second)>3) {ZHUISHI=2;}
			 else{ZHUISHI=3;}	    					
		}
		else if(u->minute>v->minute)
		{ZHUISHI=1;}/*表示母钟分钟 大于 子钟分钟,子钟正转*/
		else if(u->minute<v->minute)
		{ZHUISHI=2;}/*表示母钟分钟 小于 子钟分钟,子钟反转*/
	}
	else if((u->hour%12)>v->hour && (u->hour%12)-v->hour<=6 )
	{ZHUISHI=1;}/*表示母钟小时 大于 子钟小时,子钟正转*/
	else if((u->hour%12)>v->hour && (u->hour%12)-v->hour>6)
	{ZHUISHI=2;}/*表示母钟小时 大于 子钟小时,子钟反转*/
	else if((u->hour%12)<v->hour &&  6>v->hour-(u->hour%12))
	{ZHUISHI=2;}/*表示母钟小时 小于 子钟小时,子钟反转*/
	else if((u->hour%12)<v->hour && v->hour-(u->hour%12)>=6)
	{ZHUISHI=1;}/*表示母钟小时 小于等于 子钟小时,子钟正转*/
	return (ZHUISHI);
}



#if (TZ3_OR_TZ9==0)

		void  must_go_onestep(void)
		{
			uchar count;
			if(MOTO_STOP_FLAG==0)
			{
				if(MOTO_FLAG==1)
				{	MOTO_FLAG=0;
				  utlk2(0xc0,0x0b);
			 		for(count=0;count<10;count++)	//960个脉冲!=96*10
					{
					  p_motor=motor_forward_ew;//初始化指针
						motor_runzz_ew(p_motor);
						p_timeslave=&hms_variant[1];
						eastsou_slave_add(p_timeslave);
						push_ram62256();
					}
					/*for(count=0;count<10;count++)
					{
					  p_motor=motor_forward_sn;//初始化指针
						motor_runzz_ew(p_motor);
					  p_timeslave=&hms_variant[2];
						eastsou_slave_add(p_timeslave);
						push_ram62256();
					}
			
					for(count=0;count<10;count++)
					{
					  p_motor=motor_forward_ew;//初始化指针
						motor_runzz_sn(p_motor);
					  p_timeslave=&hms_variant[3];
						westnor_slave_add(p_timeslave);
						push_ram62256();
					}
					for(count=0;count<10;count++)
					{
					  p_motor=motor_forward_sn;//初始化指针
						motor_runzz_sn(p_motor);
						p_timeslave=&hms_variant[4];
						westnor_slave_add(p_timeslave);
						push_ram62256();
					}*/
					utlk2(0xc4,0x0b);	
					XBYTE[MOTO1_PORT]=0x00;
					XBYTE[MOTO2_PORT]=0x00;
				}
			}		
		}
	
		void motor_runzz_ew(uchar code *pointer)/*东面及西面机芯一次正走3秒钟的角度!*/
		{
			uchar  ix;uchar iy;uchar code *temp;
			temp=pointer;
			if(MOTO_STOP_FLAG==0)	
			{	utlk2(0xc0,0x0b);
				for(iy=0;iy<16;iy++)
				{
					for(ix=0;ix<6;ix++)
					{
						XBYTE[MOTO1_PORT]=*pointer;
						delay_ms(0x05);
						pointer++;	
					}
					pointer=temp;
				}
			 	XBYTE[MOTO1_PORT]=0x00;
				XBYTE[MOTO2_PORT]=0x00;
				utlk2(0xc4,0x0b);
			}
		}
		void motor_runzz_sn(uchar code *pointer)/*南面及北面机芯一次正走3秒钟的角度!*/
		{
			uchar  ix;uchar iy;uchar code *temp;
			temp=pointer;	
			if(MOTO_STOP_FLAG==0)
			{	utlk2(0xc0,0x0b);
				for(iy=0;iy<16;iy++)
				{
					for(ix=0;ix<6;ix++)
					{
						XBYTE[MOTO2_PORT]=*pointer;
						delay_ms(0x05);
						pointer++;	
					}
					pointer=temp;
				}
				XBYTE[MOTO1_PORT]=0x00;
				XBYTE[MOTO2_PORT]=0x00;
				utlk2(0xc4,0x0b);
			}
		}
		
		void motor_runfz_ew(uchar code *pointer)/*东面及西面机芯一次反走3秒钟的角度!*/
		{
			uchar  ix;uchar iy;uchar code *temp;
			temp=pointer;
			if(MOTO_STOP_FLAG==0)	
			{
				utlk2(0xc0,0x0b);
				for(iy=0;iy<16;iy++)
				{
					for(ix=0;ix<6;ix++)
					{
						XBYTE[MOTO1_PORT]=*pointer;
						delay_ms(0x05);
						pointer++;	
					}
					pointer=temp;
				}
			  XBYTE[MOTO1_PORT]=0x00;
				XBYTE[MOTO2_PORT]=0x00;
				utlk2(0xc4,0x0b);
			}
		}	  
		
		void motor_runfz_sn(uchar code *pointer)/*南面及北面机芯一次反走3秒钟的角度!*/
		{
			uchar  ix;uchar iy;uchar code *temp;
			temp=pointer;
			if(MOTO_STOP_FLAG==0)
			{	
				utlk2(0xc0,0x0b);
				for(iy=0;iy<16;iy++)
				{
					for(ix=0;ix<6;ix++)
					{
						XBYTE[MOTO2_PORT]=*pointer;
						delay_ms(0x05);
						pointer++;	
					}
					pointer=temp;
				}
				XBYTE[MOTO1_PORT]=0x00;
				XBYTE[MOTO2_PORT]=0x00;
				utlk2(0xc4,0x0b);
			}
		}


⌨️ 快捷键说明

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