?? 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 + -