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

📄 tz_clock.c

📁 是一个关于驱动外部塔钟(多面)的C程序
💻 C
📖 第 1 页 / 共 3 页
字号:




	 	void eastsou_slave_add(COMPLEX * ux)
		{	 ux->second+=3;
			 if(ux->second>=60)
			 {  ux->second=0;
				  ux->minute+=1;
					if(ux->minute>=60)
					{
						ux->minute=0;
						ux->hour++;
						ux->hour%=12;
					}	
		   }
		}
		void eastsou_slave_sub(COMPLEX * ux)
		{  ux->second-=3;
			 if(ux->second>=0xfd)
			 {  ux->second=57;
				  ux->minute-=1;
					if(ux->minute==0xff)
					{
						ux->minute=59;
						ux->hour-=1;
						if(ux->hour==0xff)
						ux->hour=11;
						ux->hour%=12;
					}	
			}
		}
		void westnor_slave_add(COMPLEX * ux)
		{   ux->second+=3;
			  if(ux->second>=60)
			  { ux->second=0;
				  ux->minute+=1;
					if(ux->minute>=60)
					{
						ux->minute=0;
						ux->hour++;
						ux->hour%=12;
					}	
		    }
		}
		void westnor_slave_sub(COMPLEX * ux)
		{   ux->second-=3;
			  if(ux->second>=0xfd)
			  { ux->second=57;
				  ux->minute-=1;
					if(ux->minute==0xff)
					{
						ux->minute=59;
						ux->hour-=1;
						if(ux->hour==0xff)
						ux->hour=11;
						ux->hour%=12;
					}	
			}
		}








#elif (TZ3_OR_TZ9==1)
		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<4;count++)
					{
					  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<4;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<4;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<4;count++)
					{
					  p_motor=motor_forward_sn;//初始化指针
						motor_runzz_sn(p_motor);
						p_timeslave=&hms_variant[4];
						westnor_slave_add(p_timeslave);
						push_ram62256();
					}
					XBYTE[MOTO1_PORT]=0x00;
				  XBYTE[MOTO2_PORT]=0x00;
					utlk2(0xc4,0x0b);
				}
			}		
		}
		
		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<10;iy++)
				{
					for(ix=0;ix<8;ix++)
					{
						XBYTE[MOTO1_PORT]=*pointer;
						delay_ms(0x03);
						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<10;iy++)
				{
					for(ix=0;ix<8;ix++)
					{
					  XBYTE[MOTO2_PORT]=*pointer;
						delay_ms(0x03);
						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<10;iy++)
				{
					for(ix=0;ix<8;ix++)
					{
						XBYTE[MOTO1_PORT]=*pointer;
						delay_ms(0x03);
						++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;	
			utlk2(0xc0,0x0b);
			if(MOTO_STOP_FLAG==0)
			{	for(iy=0;iy<10;iy++)
				{
					for(ix=0;ix<8;ix++)
					{
						XBYTE[MOTO2_PORT]=*pointer;
						delay_ms(0x03);
						++pointer;	
					}
					pointer=temp;
				}
				XBYTE[MOTO1_PORT]=0x00;
				XBYTE[MOTO2_PORT]=0x00;
				utlk2(0xc4,0x0b);
			}
		}
		
		void eastsou_slave_add(COMPLEX * ux)
		{	 ux->second+=3;
			 if(ux->second>=60)
			 {  ux->second=0;
				  ux->minute+=1;
					if(ux->minute>=60)
					{
						ux->minute=0;
						ux->hour++;
						ux->hour%=12;
					}	
		   }
		}
		void eastsou_slave_sub(COMPLEX * ux)
		{  ux->second-=3;
			 if(ux->second>=0xfd)
			 {  ux->second=57;
				  ux->minute-=1;
					if(ux->minute==0xff)
					{
						ux->minute=59;
						ux->hour-=1;
						if(ux->hour==0xff)
						ux->hour=11;
						ux->hour%=12;
					}	
			}
		}
		void westnor_slave_add(COMPLEX * ux)
		{   ux->second+=3;
			  if(ux->second>=60)
			  { ux->second=0;
				  ux->minute+=1;
					if(ux->minute>=60)
					{
						ux->minute=0;
						ux->hour++;
						ux->hour%=12;
					}	
		    }
		}
		void westnor_slave_sub(COMPLEX * ux)
		{   ux->second-=3;
			  if(ux->second>=0xfd)
			  { ux->second=57;
				  ux->minute-=1;
					if(ux->minute==0xff)
					{
						ux->minute=59;
						ux->hour-=1;
						if(ux->hour==0xff)
						ux->hour=11;
						ux->hour%=12;
					}	
			}
		}

#endif

void bs_on_off(void)
{ uchar js_count;	 //连续发送6次报时动作

  if(MP3_FLAG==0)//表示是固化报时
	{		
			if((p_timemu->minute==59 && ZS_FLAG==0))
			{
				ZS_FLAG=1;
				if(function_bs()==1)
				{	for(js_count=0;js_count<6;js_count++)
					{	XBYTE[0x800d]=0xf1;BS_PIN=0;
						utlk_bs(0x80,p_timemu->hour+1);
						delay_ms(30);
						//utlk_bs(0x80,0);
					}//打开扩大机
				}
			}
			/*else if(p_timemu->minute==29 && ZS_FLAG==0)
			{	
				ZS_FLAG=1;
				if(function_bs()==1)
			  {	for(js_count=0;js_count<6;js_count++)
				  {	XBYTE[0x800d]=0xf1;BS_PIN=0;
						utlk_bs(0x80,p_timemu->hour);//送出现在的小时及30分钟!
						delay_ms(30);																					 
						utlk_bs(0x80,30);
					}
				}//打开扩大机
			}*/
			else if(p_timemu->minute==1){XBYTE[0x800d]=0xf0;BS_PIN=1;ZS_FLAG=0;}//关断扩大机	
			//else if(p_timemu->minute==31){XBYTE[0x800d]=0xf0;BS_PIN=1;ZS_FLAG=0;}//关断扩大机	
	
	}
}
//向外部ram里压入15个字节分别是母时分秒+4个子时分秒+报时上下限+0xf0/0xf1+0x00/0xee
void push_ram62256(void)	//发送15个数据给网管!
{	uchar temp1;uchar xdata *p_pointer;
  p_pointer=RAM62256;
	*p_pointer=p_timemu->hour;
	p_pointer++;
	*p_pointer=p_timemu->minute;
	p_pointer++;
	*p_pointer=p_timemu->second;
	p_pointer++;

	p_timeslave=&hms_variant[1];
  for (temp1=0;temp1<4;temp1++)
	{	
		*p_pointer=p_timeslave->hour;
		p_pointer++;
		*p_pointer=p_timeslave->minute;
		p_pointer++;
		p_timeslave++;
	}
	 p_timeslave=&hms_variant[5];
	 *p_pointer=p_timeslave->hour;
		p_pointer++;
		p_timeslave=&hms_variant[6];
	 *p_pointer=p_timeslave->hour;

		p_pointer++;
	 *p_pointer=XBYTE[0x800d];

		p_pointer++;
		if(GPS_FLAG==1){*p_pointer=0xee;}
		else{*p_pointer=0x00;}
}

void outram_topc(void)
{	uchar xdata *temp;uchar js;
	temp=RAM62256;//为指针,如果写成temp=XBYTE[0x8000]表示是内容
	for(js=0;js<15;js++)
	{
		SBUF=*temp;while(TI==0);TI=0;
		temp++;
	}
}

void initial_gps3100(void)
{utlk2(0xc4,0x0b);}
void initial_bs3100(void)
{utlk_bs(0xc4,0x0b);}
void initial_device3100(void)
{utlk_device(0xc4,0x0b);}


/*发送TX1,TX2的16位数据到MAX3100的进端,同时接收数据送RX1,RX2*/
uchar utlk1(uchar tx1,uchar tx2)
{
	uchar rx1=0;
	MAX3100_GPS=0;/*使MAX3100的片选端有效*/
	rx1=byte8(tx1);/*发送并接收高八位数据*/
	byte8(tx2);/*发送并接收低八位数据*/
	MAX3100_GPS=1;/*使MAX3100的片选端无效*/
	return rx1;/*取回接收到的数据准备用*/	
}
uchar utlk2(uchar tx1,uchar tx2)
{
	uchar rx2=0;
	MAX3100_GPS=0;/*使MAX3100的片选端有效*/
	byte8(tx1);/*发送并接收高八位数据*/
	rx2=byte8(tx2);/*发送并接收低八位数据*/
	MAX3100_GPS=1;/*使MAX3100的片选端无效*/
	return rx2;/*取回接收到的数据准备用*/	
}
uchar utlk3(uchar tx1,uchar tx2)
{
	uchar rx2=0;
	MAX3100_GPS=0;/*使MAX3100的片选端有效*/
	byte8(tx1);/*发送并接收高八位数据*/
	rx2=byte8(tx2);/*发送并接收低八位数据*/
	MAX3100_GPS=1;/*使MAX3100的片选端无效*/
	return rx2;/*取回接收到的数据准备用*/	
}

void utlk_bs(uchar tx1,uchar tx2)
{
	MAX3100_BS=0;/*使MAX3100的片选端有效*/
	byte8(tx1);/*发送并接收高八位数据*/
	byte8(tx2);/*发送并接收低八位数据*/
	MAX3100_BS=1;/*使MAX3100的片选端无效*/
}
void utlk_device(uchar tx1,uchar tx2)
{
	MAX3100_DEVICE=0;/*使MAX3100的片选端有效*/
	byte8(tx1);/*发送并接收高八位数据*/
	byte8(tx2);/*发送并接收低八位数据*/
	MAX3100_DEVICE=1;/*使MAX3100的片选端无效*/
}

uchar byte8(uchar x)/*从DIN端移位输出8位数据,并从DOUT端接收8位数据*/
{
	uchar i;/*8位传送,循坏8次*/
	out_data=x;/*把X的值放入可位寻址的变量out_data中*/
	MAX3100_DOUT=1;/*确保8052能够从端口MAX3100_DOUT接收数据*/
	for(i=0;i<8;i++)
	{
		MAX3100_DIN=DIN_DATA;
		MAX3100_SCLK=1;/*时钟端MAX3100_SCLK的上跳沿*/
		out_data<<=1;	
		DOUT_DATA=MAX3100_DOUT;/*时钟端跳正跳变后读取数据位*/
		MAX3100_SCLK=0;/*时钟端MAX3100_SCLK下跳沿*/
	}
	x=out_data;
	return x;
}

void send_device_4byte(void)
{
	utlk_device(0x80,0x30);
	delay_ms(30);
	utlk_device(0x80,p_timemu->second);
	delay_ms(30);
	utlk_device(0x80,p_timemu->minute);
	delay_ms(30);
	utlk_device(0x80,p_timemu->hour);
	delay_ms(30);
	utlk_device(0x80,p_timemu->hour+p_timemu->minute+p_timemu->second);
	delay_ms(950);
	initial_gps3100();
}
void send_device_16byte(void)//0x5c+年高+年低+月+日+周+母时+母分+母秒+子时+子分+子秒+路数+地址+状态+累加和
{	uchar xiaoyan=0;
 if(COMPARE_FLAG==0)
 {  utlk_device(0x80,0x5c);
		delay_ms(5);
		utlk_device(0x80,20);
		delay_ms(5);
		utlk_device(0x80,8);
		delay_ms(5);
		utlk_device(0x80,7);
		delay_ms(5);
		utlk_device(0x80,18);
		delay_ms(5);
		utlk_device(0x80,5);
		delay_ms(5);
		utlk_device(0x80,p_timemu->hour);
		delay_ms(5);
		utlk_device(0x80,p_timemu->minute);
		delay_ms(5);
		utlk_device(0x80,p_timemu->second);
		delay_ms(5);
		utlk_device(0x80,0);
		delay_ms(5);
		utlk_device(0x80,0);
		delay_ms(5);
		utlk_device(0x80,0);
		delay_ms(5);
		utlk_device(0x80,1);
		delay_ms(5);
		utlk_device(0x80,1);
		delay_ms(5);
		utlk_device(0x80,0);
		delay_ms(5);
		xiaoyan=20+8+7+18+5+(p_timemu->hour)+(p_timemu->minute)+(p_timemu->second)+1+1;
		utlk_device(0x80,xiaoyan);
		delay_ms(5);
		//delay_ms(800);
		initial_gps3100();
		COMPARE_FLAG=1; 
 	}
}

void delay_ms(uint x)
{
	uchar j;
	while(x--)
	{	
		for(j=0;j<125;j++)
		{;}
	}
}

⌨️ 快捷键说明

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