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

📄 ds12887.c

📁 高精度时钟芯片。avr驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
应用范围:
入口参数:
出口参数:
*************************************************************/   
void InitDs12c887()
{
    StartDs12c887();
	write_ds(chRegB,chRegB | MASK_SETB_SET);/* 禁止刷新 */
	write_ds(chRegB,chRegB & MASK_CLR_DM | MASK_SETB_2412 & MASK_CLR_DSE);
                            
                /* 使用BCD码格式、24小时模式、不使用夏令时 */
	write_ds(chCenturyChannel,0x21);               /* 设置为21世纪 */
	write_ds(chRegB,chRegB & MASK_CLR_SET);
}

/************************************************************* 
函数功能:该函数用来从时钟芯片读取秒字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetSeconds(void)
{
    return(read_ds(chSecondsChannel));
}

/************************************************************* 
函数功能:该函数用来从时钟芯片读取分字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetMinutes(void)
{
    return(read_ds(chMinutesChannel));
}

/************************************************************* 
函数功能:该函数用来从时钟芯片读取小时字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetHours(void)
{
    return(read_ds(chHoursChannel));
}

/************************************************************* 
函数功能:该函数用来从时钟芯片读取日字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetDate(void)
{
    return(read_ds(chDateChannel));
}
/************************************************************* 
函数功能:该函数用来从时钟芯片读取月字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetMonth(void)
{
    return(read_ds(chMonthChannel));
}

/************************************************************* 
函数功能:该函数用来从时钟芯片读取年字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetYear(void)
{
    return(read_ds(chYearChannel));
}

/************************************************************* 
函数功能:该函数用来从时钟芯片读取世纪字节
应用范围:
入口参数:
出口参数:
*************************************************************/   
unsigned char GetCentury(void)
{
    return(read_ds(chCenturyChannel));
}    

/************************************************************* 
函数功能:该函数用来设置时钟芯片的时间
应用范围:
入口参数:chSeconds、chMinutes、chHours是设定时间的压缩BCD码
出口参数:
*************************************************************/   
void SetTime(unsigned char chSeconds,unsigned char chMinutes,unsigned char 
chHours)
{
   write_ds(chRegB,chRegB | MASK_SETB_SET);  /* 禁止刷新 */
   write_ds(chSecondsChannel,chSeconds);
   write_ds(chMinutesChannel,chMinutes);
   write_ds(chHoursChannel,chHours);
   write_ds(chRegB,chRegB & MASK_CLR_SET);/* 使能刷新 */
}

/************************************************************* 
函数功能:该函数用来设置时钟芯片的日期
应用范围:
入口参数:chDate、chMonth、chYear是设定日期的压缩BCD码
出口参数:
*************************************************************/   
void SetDate(unsigned char chDate,unsigned char chMonth,unsigned char chYear)
{
    write_ds(chRegB,chRegB | MASK_SETB_SET);        /* 禁止刷新 */
	write_ds(chDateChannel,chDate);
    write_ds(chMonthChannel,chMonth);
    write_ds(chYearChannel,chYear);
    write_ds(chRegB,chRegB & MASK_CLR_SET);           /* 使能刷新 */
}     

/*******************************************************************/
/*                                                                 */
/* 时间 正常显示菜单                                            */
/*                                                                 */
/*******************************************************************/
void  Natural_Menu ()
{
   uchar  m;
   LCD1602_initial();                //初始化LCD 
   LCD1602_gotoXY(1,0);          //设置显示位置为第一行的第1个字符
   LCD1602_sendstr("DATE: 2008-08-08");
//   for(m=0;m<16;m++) 
//   LCD1602_sendbyte(iDat,cdis1[m]);

   LCD1602_gotoXY(2,0);             //设置显示位置为第二行第1个字符
   LCD1602_sendstr("TIME: 08: 08: 08");
//   for(m=0;m<16;m++) 
//   LCD1602_sendbyte(iDat,cdis2[m]);        //显示字符
} 
/*******************************************************************/
/*                                                                 */
/* 日期 正常显示数据                                            */
/*                                                                 */
/*******************************************************************/
void daydis()
{
	display[0]=(temp_data1[0]>>4)+0x30;
	display[1]=(temp_data1[0]&0x0F)+0x30;
	display[2]=(temp_data1[1]>>4)+0x30;
	display[3]=(temp_data1[1]&0x0F)+0x30;
	display[4]=(temp_data1[2]>>4)+0x30;
	display[5]=(temp_data1[2]&0x0F)+0x30;
	
	LCD1602_gotoXY(1,8);
	LCD1602_sendbyte(iDat,display[0]); 
	LCD1602_sendbyte(iDat,display[1]);
	LCD1602_gotoXY(1,11);
	LCD1602_sendbyte(iDat,display[2]);
	LCD1602_sendbyte(iDat,display[3]);
	LCD1602_gotoXY(1,14);
	LCD1602_sendbyte(iDat,display[4]);
	LCD1602_sendbyte(iDat,display[5]);

}
/*******************************************************************/
/*                                                                 */
/* 时间 正常显示数据                                            */
/*                                                                 */
/*******************************************************************/
void timedis()
{
	display[0]=(temp_data2[0]>>4)+0x30;
	display[1]=(temp_data2[0]&0x0F)+0x30;
	display[2]=(temp_data2[1]>>4)+0x30;
	display[3]=(temp_data2[1]&0x0F)+0x30;
	display[4]=(temp_data2[2]>>4)+0x30;
	display[5]=(temp_data2[2]&0x0F)+0x30;
	LCD1602_gotoXY(2,6); 
	LCD1602_sendbyte(iDat,display[0]); 
	LCD1602_sendbyte(iDat,display[1]);
	LCD1602_gotoXY(2,10);
	LCD1602_sendbyte(iDat,display[2]);
	LCD1602_sendbyte(iDat,display[3]);
	LCD1602_gotoXY(2,14);
	LCD1602_sendbyte(iDat,display[4]);
	LCD1602_sendbyte(iDat,display[5]);
	

}

/************************************************************* 
函数功能:主函数
应用范围:
入口参数:
出口参数:
*************************************************************/  
void main(void)
{
	unsigned char sec,sec_bak=sec;
	Board_init();
	PORTA=0XFF;
	PORTC=0X1F;
	InitDs12c887();
	SetDate(0x15,0x10,0x08);
	SetTime(0x10,0x10,0x11);	
	Natural_Menu ();
	PORTD=0xFF;

	
	while(1)
	{
		PORTC&=0X1F;
		sec=GetSeconds();

		if(sec!=sec_bak)
		{
		 				
			sec_bak=sec;
			temp_data1[0]=GetYear();
			temp_data1[1]=GetMonth();
			temp_data1[2]=GetDate();
			temp_data2[0]=GetHours();
			temp_data2[1]=GetMinutes();
			temp_data2[2]=GetSeconds();
			daydis();
			timedis();
			if(sec%2)
			{
				LCD1602_gotoXY(2,12);
				LCD1602_sendstr(" ");
				PORTC|=BIT(PC3);
			}
			else
			{
				LCD1602_gotoXY(2,12);
				LCD1602_sendstr(":");
				PORTC&=~BIT(PC3);
			}
			PORTD=0xFF;
		}
	}


}

⌨️ 快捷键说明

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