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

📄 pcf8583.c

📁 采用普通单片机控制的电桥测试仪
💻 C
字号:
/*
*********************************************************************************************************
* 									File Name:PCF8583.c
*
*				         	   Last Modified Data:2005-06-22
*
*									 Last Version:V1.0
*
*							  Description:PCF8583时钟芯片接口函数
*
*********************************************************************************************************
*/
#define  _PCF8583_
#include "..\Inc\Include.h"
/*
********************************************************************************************************
* Function:TimeRest
*
* Descriptions:复位PCF8583时钟芯片
*
* Input:无
* 
* OutPut:无	  
*******************************************************************************************************
*/
void  InitPCF8583(void)
{
	uchar x;
	
    x = READ_TIME(0xF0);
    if (x!=0x23)					// 判断PCF8583是否第一次上电...
    {
    	WriteTimeNow();				// 将TimeNow中时间写入
        WriteTimeNow();
        WRITE_TIME(0xF0,0x23);  	// 置标志位
	}
	else
	{
		ReadTimeNow();
		//ReadTimeNow();
	}
}   
/*
********************************************************************************************************
* Function:ReadTimeNow
*
* Descriptions:读时间
*
* Input:无
* 
* OutPut:无
*******************************************************************************************************
*/
void ReadTimeNow(void)
{  
	uchar i, x, tmp;
	
	IIWR(PCF_8583, 0x00, 0x40); 				// 保持当前时间单元
	for (i=1; i<6; i++)	
	{
		x = READ_TIME(0x07-i);					// 命令从0x02开始,分别读 年 月 日 时 分 秒
		if (MaxTime[i] > 39)		tmp = 0x70;
		else if(MaxTime[i] > 19)	tmp = 0x30;
		else						tmp = 0x10;
		TimeNow[i] = ((x & tmp) >> 4) * 10 + (x & 0x0f);
	}											// 将BCD码转换成十进制
	x = READ_TIME(0x05);
	TimeNow[0] = TimeNow[0] + ((x&0xC0)>>6);
	IIWR(PCF_8583,0x00,0x00);

}	
/*
********************************************************************************************************
* Function:WriteTimeNow
*
* Descriptions:写时间
*
* Input:无
* 
* OutPut:无	 
*******************************************************************************************************
*/
void  WriteTimeNow(void)
{        
	uchar i, x; 
	
	IIWR(PCF_8583, 0x00, 0x80); 			// 停止计数                       
    for (i=1; i<6; i++)
    {
    	x = (TimeNow[i] / 10) * 16 + (TimeNow[i] % 10);
    										// 将十进制转换成BCD码依次写入
    	IIWR(PCF_8583, 0x07-i, x);
    }
    IIWR(PCF_8583,0x00,0x00);				// 启动计数
}
/*---------------------------------------End-----------------------------------------------------*/

⌨️ 快捷键说明

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