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

📄 d.c

📁 此程序是使用ds12887始终芯片实现度时间的显示
💻 C
字号:
#include <reg52.h>
#include <absacc.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char code Tab[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00};
unsigned char code	Tabc[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit Dat=P1^0;
sbit G=P1^1;
sbit SCK=P1^2;							
sbit rck=P1^3;
sbit readkey=P1^4;
sbit scs= P1^5;
sbit beer=P2^0;
#define REG_A XBYTE[0x030A]
#define REG_B XBYTE[0x030B]
#define REG_C XBYTE[0x030C]
#define REG_D XBYTE[0x030D]
uchar xdata *DS12887=0x0300;
uchar code PIAN_YI[6]={9,8,7,4,2,0 };/*-- 年、月、日、时、分、秒-- */
uchar idata DS12887_time[6]={8,12,6,8,32,10};/*----- 06/5/29 14:03:10 -----*/
uchar c,v,*p,k,k1,k2,k3,k4,dao[6];
uchar idata Time[10];/*-----提取时间各个位数据-----*/
void delay()			
{
	uchar i,j,k;									 
	for(i=2;i>0;i--)
	for(j=3;j>0;j--)
	for(k=100;k>0;k--);
}
void delay_10()			
{
	uchar i,j,k;									 
	for(i=20;i>0;i--)
	for(j=30;j>0;j--)
	for(k=240;k>0;k--);
}
void out(void)
{
	rck=0;
	_nop_();
	rck=1;
}
void send_num(uchar num)
{
	uchar j;
	for(j=0;j<8;j++)
	{
		SCK=0;
        Dat=num&0x80;
		SCK=1;
		num=num<<1;
	}
	SCK=0;
}
uchar seat(uchar j,uchar i,uchar k)
{
	uchar num,a;
	G=1;
	num=Tab[j];
	send_num(Tab[k]);
    send_num(num);
	a=Tabc[i];
	send_num(a);
    G=0;
	out();
	delay();
   	if(readkey==0&&a==Tabc[0])
	  return 1;
	if(readkey==0&&a==Tabc[1])
	  return 2;
	if(readkey==0&&a==Tabc[2])
	  return 3;
	if(readkey==0&&a==Tabc[3])
	  return 4;

}
 void DS12887_Set0(void ) 		// 设置初始化时间

{

	uchar idata i;
	
	REG_B=0x86;
	
	for(i=0;i<6;i++)
	
	{
	
		*(DS12887+PIAN_YI[i])=DS12887_time[i];
		
	}
	
}

void DS12887_Read(void)// 读取实时时间
{
	uchar idata k,i;
	
	do
	
	{ 
	
		k=REG_A;
	
	}while(k&0x80);
	
	for(i=0;i<6;i++)
	
	{
	
		DS12887_time[i]=*(DS12887+PIAN_YI[i]);
	
	}

}	
void set_p(uchar a,uchar j)
{
	if(	*(DS12887+a)+1>=0&&*(DS12887+a)+1<j)
	{
		*(DS12887+a)=*(DS12887+a)+1;
		
	}
}
void set_m(uchar a,uchar j)
{
	if(	*(DS12887+a)-1>=0&&*(DS12887+a)-1<j)
	{
		*(DS12887+a)=*(DS12887+a)-1;
		
	}
}
void change_0()
{
   uchar i,j,m,n,s,add=2;	 
   uchar k;
   		
    	REG_A=0;

		if(k==1)
		add=2;	
		if(k==2)

		add=4;
	  	for(i=80;i>0;i--)
		{
		 if(k1==1)
		{
			s++;
			if(s==20)
			{
				k++;
				s=0;
			}
/
			if(k==3)
			{
				c=0;
				REG_A=0x20;
				k=0;
			}
		}
	  	k1=seat(Time[11],0,dao[0]);
	   	k2=seat(Time[10],1,dao[1]);
		k3=seat(10,2,10);
    	k4=seat(Time[9],3,dao[2]);					     
	    seat(Time[8],4,dao[3]);
		seat(10,5,10);	
		seat(Time[7],6,dao[4]);
		seat(Time[6],7,dao[5]);
		if(k2==2)
		{
		 	m++;
			if(m==23)
			{
			  set_p(add,60);
			  m=0;
			}
		} 
		if(k3==3)
		{
			n++;
			if(n==23)
			{
			   set_m(add,60);
			   n=0;
			}
		 }
		}
		for(j=80;j>0;j--)
	   {
	 	if(k1==1)
		{
			s++;
			if(s==20)
			{
				k++;
				s=0;
			}
			if(k==3)
			{
				c=0;
				REG_A=0x20;
				k=0;
			}
		} 
		k1=seat(Time[11],0,dao[0]);
		k2=seat(Time[10],1,dao[1]);
     	k3=seat(10,2,10);
		seat(10,5,10);
		if(k==1)
		{
	    	k4=seat(11,3,dao[2]);					     
		    seat(11,4,dao[3]);
	        seat(Time[7],6,dao[4]);
		    seat(Time[6],7,dao[5]);
		}	
		if(k==2)
		{	
			k4=seat(Time[9],3,dao[2]);					     
		    seat(Time[8],4,dao[3]);
			seat(11,6,dao[5]);
		    seat(11,7,dao[6]);
		}
	    if(k!=1&&k!=2)
		{
		   	k4=seat(Time[9],3,dao[2]);					     
		    seat(Time[8],4,dao[3]);
			seat(Time[7],6,dao[4]);				  
			seat(Time[6],7,dao[5]);
			c=0;
			REG_A=0x20;
			k=0;
		} 
   		if(k2==2)
		{
		 	m++;
			if(m==23)
			{
			  set_p(add,60);
			  m=0;
			}
		} 
		if(k3==3)
		{
			n++;
			if(n==23)
			{
			   set_m(add,60);
			   n=0;
			}
		 }
		}
	 
}
void read_timebit()
{
  	   	DS12887_Read();
		
		Time[0]=DS12887_time[0]/10;//年十位0~9
		
		Time[1]=DS12887_time[0]%10;//年个位0~9
		
		Time[2]=DS12887_time[1]/10;//月十位0~1
		
		Time[3]=DS12887_time[1]%10;//月个位0~9
		
		Time[4]=DS12887_time[2]/10;//日十位0~3
		
		Time[5]=DS12887_time[2]%10;//日个位0~9
		
		Time[6]=DS12887_time[3]/10;//时十位0~2
		
		Time[7]=DS12887_time[3]%10;//时个位0~9
		
		Time[8]=DS12887_time[4]/10;//分十位0~5
		
		Time[9]=DS12887_time[4]%10;//分个位0~9
		
		Time[10]=DS12887_time[5]/10;//秒十位0~5
		
		Time[11]=DS12887_time[5]%10;//秒个位0~9
}

void set_dao(uchar a)
{
	uchar x,y;
   	if(k2==2)
	{
	 	x++;
		if(x==23)
		{
		  *p++;
		  x=0;
		  if(*p==10)
		  {
		  	*p=0;
		  	*(p+a)++;
			if(*(p+a)>5)
			{
				*(p+a)=5;
				*p=9;
			}
		  }
		}
	} 
	if(k3==3)
	{
		y++;
		if(y==23)
		{
		   *p--;
		   y=0;
		   if(*p==-1)
		   {
		   	  *p=9;
			  *(p+a)--;
			  if(*(p+a)<0)
			  {
			  	*(p+a)=0;
				*p=0;
			  }	
		   }
		}
	}
}
void get_dao()
{
	uchar i,m,a;
	 REG_B=0x26;
	
		for(i=80;i>0;i--)
		{
		   	read_timebit();
			k1=seat(Time[11],0,dao[0]);
			k2=seat(Time[10],1,dao[1]);
			k3=seat(10,2,10);	
			k4=seat(Time[9],3,dao[2]);
			seat(Time[8],4,dao[3]);
			seat(10,5,10);	
			seat(Time[7],6,dao[4]);
			seat(Time[6],7,dao[5]);
			if(k4==4)
	    	{
				m++;
				if(m==20)
				{
					k++;
					m=0;
				}
				if(k==3)
				{
					REG_B=0x36;
					k=0;
					v=0;
				}
	    	}
			if(k==1)
			a=0;
			if(k==2)
			a=2;
			if(k==3)
			a=4;
			set_dao(a);
		}
		for(i=80;i>0;i--)
		{
		   	read_timebit();
			k3=seat(10,2,10);
			seat(10,5,10);
			if(k==0)
			{
				k1=seat(Time[11],0,11);
				k2=seat(Time[10],1,11);
				k4=seat(Time[9],3,dao[2]);
				seat(Time[8],4,dao[3]);	
				seat(Time[7],6,dao[4]);
				seat(Time[6],7,dao[5]);
			//	set_dao(b0,b1,5);
		
			}	
			if(k==1)
			{
				k1=seat(Time[11],0,dao[0]);
				k2=seat(Time[10],1,dao[1]);
				k4=seat(Time[9],3,11);
				seat(Time[8],4,11);	
				seat(Time[7],6,dao[4]);
				seat(Time[6],7,dao[5]);
			}
			if(k==2)
			{
				k1=seat(Time[11],0,dao[0]);
				k2=seat(Time[10],1,dao[1]);
				k4=seat(Time[9],3,dao[2]);
				seat(Time[8],4,dao[3]);	
				seat(Time[7],6,11);
				seat(Time[6],7,11);
			}
			if(k!=0&&k!=1&&k!=2)
			{
				k1=seat(Time[11],0,dao[0]);
				k2=seat(Time[10],1,dao[1]);
				k4=seat(Time[9],3,dao[2]);
				seat(Time[8],4,dao[3]);	
				seat(Time[7],6,dao[4]);
				seat(Time[6],7,dao[5]);
			}
			if(k4==4)
		    {
				m++;
				if(m==20)
				{
					k++;
					m=0;
				}
				if(k==3)
				{
					REG_B=0x36;
					k=0;
					v=0;
				}
			}
			if(k==1)
			a=0;
			if(k==2)
			a=2;
			if(k==3)
			a=4;
			set_dao();
		}

}
void main (void)
 {

	uchar add=2,m,n;
		p=&dao[0];
    	EA=1;
		EX0=1;
		scs=0;//DS12887片选--0有效
       // DS12887_Set0();
		REG_A=0x20;
		REG_B=0x26;
		while(1)
		
		{
		  read_timebit();

	 	if(k1==1)
		{													
			m++;
			if(m==23)
			{
				c++;
				m=0;
			}
		}
		 if(k4==4)
		{
			n++;
			if(n==23)
			{
				v++;
				n=0;
			}
		}
	   if(c==1)
		change_0();
		if(v==1)
		get_dao();
		k1=seat(Time[11],0,dao[0]);
		k2=seat(Time[10],1,dao[1]);
		k3=seat(10,2,10);	
		k4=seat(Time[9],3,dao[3]);
		seat(Time[8],4,dao[4]);
		seat(10,5,10);	
		seat(Time[7],6,dao[6]);
		seat(Time[6],7,dao[7]);
		}		
 
		
}
void interrupt0(void) interrupt 0
{
	uchar a;
	if(dao[0]<=0)
	dao[0]=10;
	dao[0]--;
	a= REG_C;
} 

⌨️ 快捷键说明

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