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

📄 pcf8563.c

📁 ATMEGA128的PCF8536驱动程序
💻 C
字号:
/************************************************
文件:PCF8563.h
用途:PCF8563函数头文件
注意:系统时钟8M
创建:2008.1.25
修改:2008.1.25
Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
************************************************/
#include "..\config.h"
unsigned char syserr;
unsigned char *week_list[7]={
	 				 		    "  Sunday ",
			 					"  Monday ",
			 					" Tuesday ",
								"Wednesday",
			 					"Thursday ",
			 					" Friday  ",
			 					"Saturday "
};
unsigned char write_buff[8],read_buff[8],time_tmp[]="00:00:00",data_tmp[]="2008.01.01",*week_tmp;
unsigned char time[7]={
		 	  		   0x40/*秒*/,
					   0x59/*分*/,
					   0x23/*时*/,
					   0x29/*天*/,
					   0x05/*星期*/,
					   0x02/*月/世纪*/,
					   0x08/*年*/
};
/*************************************************************************
** 函数名称: clear(unsigned char *p,unsigned char num)
** 功能描述: 清除指定区域指定长度的数据
** 输 入: unsigned char *p :起始地址   unsigned char num :零数据长度
** 输出	 : 
** 全局变量: 
** 调用模块: 
** 说明:
** 注意:
**************************************************************************/
void clear(unsigned char *p,unsigned char num)
{
 for(;num>0;num--)
 	{
	 *p=0;
	 p++;
	}
}
/*************************************************************************
** 函数名称: PCF8536_wt(unsigned int add,unsigned char data)
** 功能描述: 向PCF8563指定地址写入一条数据
** 输 入: unsigned int add    :高八位为器件地址,低八位为内部寄存器地址
   		   unsigned char data  :需要写入的数据
** 输出	 : 
** 全局变量: 
** 调用模块: 
** 说明:
** 注意:
**************************************************************************/
void PCF8536_wt(unsigned int add,unsigned char data)
{
 unsigned char t;
 t=add>>8;
 t<<=1;
 i2cstart();
 if(i2cwt(W_ADD_COM+t)==SLAW)
 	{
	 i2cwt(add);
	 i2cwt(data);
	}
 else syserr=ERR_SLAW;
 i2cstop();
}
/*************************************************************************
** 函数名称: PCF8536_wt_p(unsigned int add,unsigned char *p,unsigned char num)
** 功能描述: 向PCF8563地址连续的寄存器写入系列数据
** 输 入: unsigned int add    :高八位为器件地址,低八位为内部寄存器地址
   		   unsigned char *p    :需要写入的数据域的起始地址
		   unsigned char num   :写入数据的个数
** 输出	 : 
** 全局变量: 
** 调用模块: 
** 说明:写入数据区域为地址连续的寄存器
** 注意:
**************************************************************************/
void PCF8536_wt_p(unsigned int add,unsigned char *p,unsigned char num)
{
 unsigned char t;
 t=add>>8;
 t<<=1;
 i2cstart();
 if(i2cwt(W_ADD_COM+t)==SLAW)
 	{
	 i2cwt(add);
	 for(;num>0;num--)
	 	{
		 i2cwt(*p);
		 p++;
		 _NOP();
		}
	}
 else syserr=ERR_SLAW;
 i2cstop();
}
/*************************************************************************
** 函数名称: PCF8536_rd(unsigned int add,unsigned char *p,unsigned char num)
** 功能描述: 读PCF8563
** 输 入: unsigned int add    :高八位为器件地址,低八位为内部寄存器地址
   		   unsigned char *p    :读出的数据存放地址的起始地址
		   unsigned char num   :读出数据的个数
** 输出	 : 
** 全局变量: 
** 调用模块: 
** 说明:
** 注意:
**************************************************************************/
void PCF8536_rd(unsigned int add,unsigned char *p,unsigned char num)
{
 unsigned char t;
 t=add>>8;
 t<<=1;
 i2cstart();
 if(i2cwt(W_ADD_COM+t)==SLAW)
 	{
	 i2cwt(add);
	}
 else syserr=ERR_SLAW;
 
 i2cstart();
 if(i2cwt(R_ADD_COM+t)==SLAW)
 	{
	 i2cwt(add);
	}
 else syserr=ERR_SLAW;
 
 for(;num>0;num--)
 	{
	 *p=i2crd();
	 p++;
	} 
}
/*************************************************************************
** 函数名称: PCF8563_init(void)
** 功能描述: PCF8563初始化
** 输 入: 
** 输出	 : 
** 全局变量: 
** 调用模块: 
** 说明:
** 注意:
**************************************************************************/
void PCF8563_init(void)
{
 clear(write_buff,8);
 clear(read_buff,8);
 
 PCF8536_wt(0x00,0x20);//写寄存器1,停止计时
 //PCF8536_wt_p(0x02,time,7);//设定时间
 PCF8536_wt(0x00,0x00);//写寄存器1,开始计时
}
/*************************************************************************
** 函数名称: Updata_time(void)
** 功能描述: 刷新时间寄存器及相关数组内容
** 输 入: 
** 输出	 : 
** 全局变量: 
** 调用模块: 
** 说明:
** 注意:
**************************************************************************/
/*void Updata_time(void)
{
 PCF8536_rd(0x02,time,7);//读取时间
 
 time[0]=time[0]&0x7F;
 time[1]=time[1]&0x7F;
 time[2]=time[2]&0x3F;
 time[3]=time[3]&0x3F;
 time[4]=time[4]&0x07;
 time[5]=time[5]&0x1F;
 //处理时间
 time_tmp[7]=(time[0]&0x0F)+0x30;
 time_tmp[6]=(time[0]>>4)+0x30;
 time_tmp[4]=(time[1]&0x0F)+0x30;
 time_tmp[3]=(time[1]>>4)+0x30;
 time_tmp[1]=(time[2]&0x0F)+0x30;
 time_tmp[0]=(time[2]>>4)+0x30;
 //处理日期
 data_tmp[9]=(time[3]&0x0F)+0x30;
 data_tmp[8]=(time[3]>>4)+0x30;
 data_tmp[6]=(time[5]&0x0F)+0x30;
 data_tmp[5]=(time[5]>>4)+0x30;
 data_tmp[3]=(time[6]&0x0F)+0x30;
 data_tmp[2]=(time[6]>>4)+0x30;
 //处理星期
 week_tmp=week_list[time[4]&0x0F];
}*/

⌨️ 快捷键说明

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