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

📄 pcf8563.c

📁 LCD图形显示_菜单管理程序
💻 C
字号:
#include "Includes.h"

/*--------------------------------变量定义------------------------------------*/
INT8U GetClock[8],SetClock[8];													// 时间数据缓缓冲区
/*------------------------------PCF8563初始化---------------------------------*/
void PCF8563Init(void)
{
	INT8U temp[8];
	
	temp[0] = 0x00;	   															// 写入超始地址
	
	temp[1] = 0x00;																// 状态寄存器1设置普通模式、芯片运行、电源复位无效
	temp[2] = 0x00;     												        // 状态寄存器2 清除报警标志位
	if (GetClock[0]&0x80)    	  												// 秒寄存器设置正确读数
	{
   		temp[3] = GetClock[0]&0x7f;		
	}	 
	TWI_MasterSendNI(TARGET_ADDR, 4, temp); 
	
	temp[0] = 0x09;				  	 											// 写入超始地址
	
    temp[1] = 0x80;																// 关闭分钟报警 
	temp[2] = 0x80;																// 关闭小时报警
	temp[3] = 0x80;																// 关闭日报警
	temp[4] = 0x80;																// 关闭星期报警
	temp[5] = 0x83;															    // CLKOUT输出1Khz方波
	temp[6] = 0x83;																// 关定时寄存器
	temp[7] = 0x00;																// 清除定时寄存器数值 
	 
	TWI_MasterSendNI(TARGET_ADDR, 8, temp); 
}
/*--------------------------------------读取时间--------------------------------
//读取时钟芯片PCF8563的时间,设置要读的第一个时间类型0x02,则会一次
//把时间读取到GetClock
//			顺序:0x02:秒0x03:分0x04:小时0x05:日0x06:星期0x07:月0x08:年
//I2C总线规定,每一个字节传送完成后,都要一个应答位。当主机接收时,
//器释放SDA线,是主机能产生一个结主机对最后一个字节不予应答,以向
//从机指出数据传送的结束,从发送结束信号。
//----------------------------------------------------------------------------*/
void GetPCF8563(void)
{
	INT8U temp[8];

    temp[0]=0x02;																// 读取起始地址
    /*发送地址*/ 
    TWI_MasterSendNI(TARGET_ADDR, 1, temp); 
    /*接收数据*/ 
    TWI_MasterReceiveNI(TARGET_ADDR, 7, temp); 
	/* 将时间转为十进制*/
	GetClock[SECOND	]=(((temp[SECOND]&0x70)>>4)*10)+(temp[SECOND]&0x0f);		// 秒
	GetClock[MINUTE	]=(((temp[MINUTE]&0x70)>>4)*10)+(temp[MINUTE]&0x0f);		// 分
	GetClock[HOUR	]=(((temp[HOUR  ]&0x30)>>4)*10)+(temp[HOUR  ]&0x0f);		// 时
	GetClock[DAY	]=(((temp[DAY   ]&0x30)>>4)*10)+(temp[DAY   ]&0x0f);		// 日
	GetClock[WEEK	]=   temp[WEEK  ]&0x07;							    		// 周
	GetClock[MONTH	]=(((temp[MONTH ]&0x10)>>4)*10)+(temp[MONTH ]&0x0f);		// 月
	GetClock[YEAR	]=(((temp[YEAR  ]&0xf0)>>4)*10)+(temp[YEAR  ]&0x0f);		// 年后两位
	if ((temp[MONTH]&0x80)==0) 													// 世纪位C=0 指定世纪数为20 C=1 指定世纪数为19
	{
		GetClock[YEARH]=20;
	}
	else
	{
		GetClock[YEARH]=19;
	}
}
/*------------------------------------调整时间----------------------------------
//调整时钟。0x02是要改的时间类型起始位,SetClock是新设置的时间值。
//0x02:秒/0x03:分/0x04:小时/0x05:日/0x06:星期/0x07:月(世纪)/0x08:年
//---------------------------------------------------------------------------*/
void SetPCF8563(void)
{         
	INT8U i,temp[8];
	  
    temp[0]=0x02;																// 读取起始地址
	
  	for (i=0;i<7;i++)	
	{
		temp[i+1] = (SetClock[i]/10)<<4;    
		temp[i+1] = temp[i+1]|(SetClock[i]%10);
	}
	/*发送数据*/ 
    TWI_MasterSendNI(TARGET_ADDR, 8, temp); 
   
}
/*------------------------------------------------------------------------------
                                        0ooo
						      ooo0     (   ) 
                              (   )     ) /
						       \ (     (_/
	    				        \_) 
------------------------------------------------------------------------------*/

⌨️ 快捷键说明

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