📄 pcf8563lib.c
字号:
#include "PCF8563lib.h"
void PCF8563_Delay(uint n)
{
uint i;
for(i=0;i<n;i++);
}
void PCF8563_SetCS(struct c_s cs) /*设置控制/状态子函数*/
{
IICWrite(0xa2,0,(uchar*)&cs,sizeof(struct c_s)); /*指针转换*/
PCF8563_Delay(100);
}
void PCF8563_ReadCS(struct c_s* cs) /*读控制/状态字*/
{
IICRead(0xa2,0,(uchar*)cs,sizeof(struct c_s));
}
void PCF8563_ReadTime(struct time* tm) /*读时间函数*/
{
IICRead(0xa2,2,(uchar*)tm,sizeof(struct time));
tm->seconds &= 0x7f; /*屏蔽无关位*/
tm->minutes &= 0x7f;
tm->hours &= 0x3f;
tm->days &= 0x3f;
tm->weekdays &= 0x07;
tm->mon_cen &= 0x1f;
}
bit PCF8563_SetTime(struct time tm) /*设定时间函数*/
{
tm.seconds = (tm.seconds%10) | ((tm.seconds/10)<<4); /*HEX到BCD*/
tm.minutes = (tm.minutes%10) | ((tm.minutes/10)<<4);
tm.hours = (tm.hours%10) | ((tm.hours/10)<<4);
tm.days = (tm.days%10) | ((tm.days/10)<<4);
tm.weekdays = tm.weekdays;
tm.mon_cen = (tm.mon_cen%10) | ((tm.mon_cen/10)<<4);
tm.years = (tm.years%10) | ((tm.years/10)<<4);
IICWrite(0xa2,2,(uchar*)&tm,sizeof(struct time));
PCF8563_Delay(100);
return 0;
}
void PCF8563_ReadAlarm(struct alarm* alm) /*读闹钟函数*/
{
IICRead(0xa2,9,&alm->minute,1);
IICRead(0xa2,10,&alm->hour,1);
IICRead(0xa2,11,&alm->day,1);
IICRead(0xa2,12,&alm->weekday,1);
alm->minute &= 0x7f; /*屏蔽无关位*/
alm->hour &= 0x3f;
alm->day &= 0x3f;
alm->weekday &= 0x07;
}
bit PCF8563_SetAlarm(struct alarm alm,bit min,bit hou,bit day,bit wee)
/*设定闹钟函数*/
{
if(min){ /*如果需要使能分钟报警*/
alm.minute = (alm.minute%10) | ((alm.minute/10)<<4);
alm.minute = alm.minute & 0x7f;
}else{
alm.minute = alm.minute | 0x80;
}
if(hou){ /*如果需要使能小时报警*/
alm.hour = (alm.hour % 10) | ((alm.hour/10)<<4);
alm.hour = alm.hour & 0x7f;
}else{
alm.hour = alm.hour | 0x80;
}
if(day){ /*如果需要使能天报警*/
alm.day = (alm.day % 10) | ((alm.day/10)<<4);
alm.day = alm.day & 0x7f;
}else{
alm.day = alm.day | 0x80;
}
if(wee){ /*如果需要使能星期报警*/
alm.weekday = (alm.weekday % 10) | ((alm.weekday/10)<<4);
alm.weekday = alm.weekday & 0x7f;
}else{
alm.weekday = alm.weekday | 0x80;
}
IICWrite(0xa2,9,(uchar*)&alm,sizeof(struct alarm)); /*指针转换*/
PCF8563_Delay(100);
return 0;
}
void PCF8563_StartTimer(char freq) /*启动定时器*/
{
uchar cmd;
switch(freq)
{
case 0:cmd = 0x80;break;
case 1:cmd = 0x81;break;
case 2:cmd = 0x82;break;
case 3:cmd = 0x83;break;
default:cmd = 0x82;break;
}
IICWrite(0xa2,14,&cmd,1);
}
void PCF8563_StopTimer(void) /*启动定时器*/
{
uchar cmd;
IICRead(0xa2,14,&cmd,1);
cmd & = 0x7f;
IICWrite(0xa2,14,&cmd,1);
}
void PCF8563_SetTimerCount(uchar count) /*设置定时器初值*/
{
IICWrite(0xa2,15,&count,1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -