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

📄 d.c

📁 此程序是使用ds12887始终芯片实现度时间的显示
💻 C
字号:
#include <reg52.h>
#include <absacc.h>
#include "intrins.h"
#include <dis.h>
#define uchar unsigned char
#define uint unsigned int
#define REG_A XBYTE[0x030A]
#define REG_B XBYTE[0x030B]
#define REG_C XBYTE[0x030C]
#define REG_D XBYTE[0x030D]
uchar tabwei1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar xdata *DS12887=0x0300;
uchar code PIAN_YI[6]={9,8,7,4,2,0 };/*-- 年、月、日、时、分、秒-- */
uchar idata DS12887_time[6]={8,12,6,20,27,00};/*----- 06/5/29 14:03:10 -----*/
uchar idata Time[20];/*-----提取时间各个位数据-----*/
//uchar key;
void delay()			
{
	uchar i,j,k;									 
	for(i=2;i>0;i--)
	for(j=3;j>0;j--)
	for(k=60;k>0;k--);
}


 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 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 dis_play()
{
  read_timebit();
	mydisplay(0,Time[6]);
	delay();
	mydisplay(1,Time[7]);
	delay();
	mydisplay(2,10);
	delay();
	mydisplay(4,Time[9]);
	delay();
	mydisplay(3,Time[8]);
	delay();
	mydisplay(5,10);
	delay();
	mydisplay(7,Time[11]);
	delay();
	mydisplay(6,Time[10]);
	delay();
}


uint scankey()
{
  uchar i;
  tabwei1[i];
  //sendshur(10);
  //sendshul(10);
  if((readkey==0)&&(tabwei1[i]==0x01))
	{
	  
	    return 1;
	}
  if((readkey==0)&&(tabwei1[i]==0x02))
	{
	    return 2;
	}  
  i++;
 if(i==8)
    i=0;
}

void shanshuo_dis1()
{
   read_timebit();
	mydisplay(0,11);
    delay();
	mydisplay(1,11);
	delay();
	mydisplay(2,10);
	delay();
	mydisplay(4,Time[9]);
	delay();
	mydisplay(3,Time[8]);
	delay();
	mydisplay(5,10);
	delay();
	mydisplay(7,Time[11]);
	delay();
	mydisplay(6,Time[10]);
	delay();
}
void shanshuo_dis2()
{
   read_timebit();
    mydisplay(0,Time[6]);
	delay();
	mydisplay(1,Time[7]);
	delay();
	delay();
	mydisplay(2,10);
	delay();
	mydisplay(4,11);
	delay();
	mydisplay(3,11);
	delay();
	mydisplay(5,10);
	delay();
	mydisplay(7,Time[11]);
	delay();
	mydisplay(6,Time[10]);
	delay();
}
void shanshuo1()
{
   uchar j,i,t,n;
  while(t==0)
{
   for(i=60;i>0;i--)
     {
        dis_play(); 
     }
   for(j=60;j>0;j--)
     {
         shanshuo_dis1();
     }
    n=scankey();
    if(n!=0)
      t=2;
}
}
void shanshuo2()
{
   uchar j,i,t,n;
  while(t==0)
{
   for(i=60;i>0;i--)
     {
        dis_play(); 
     }
   for(j=60;j>0;j--)
     {
         shanshuo_dis2();
     }
   n=scankey();
    if(n!=0)
      t=2;
}
}
void main (void)
 {
    uchar k,key;
		REG_A=0x20;
		REG_B=0x26;
		while(1)
		{
            dis_play();
              key=scankey();
          if(key==2)
             {
              k++;
              if(k==1)
              shanshuo1();
              else 
               shanshuo2();
             } 
         
        }
	
		
}

⌨️ 快捷键说明

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