基于PCF8563時(shí)鐘芯片的萬年歷制作
萬年歷時(shí)鐘芯片很多,筆者認(rèn)為,比起DSl302來說,采用飛利浦公司的PCF8563時(shí)鐘芯片,LCM1602作顯示,可以取得較理想的效果。電路圖如圖1所示。
PCF8563是低功耗的CMOS實(shí)時(shí)時(shí)鐘/日歷芯片,提供1個(gè)可編程時(shí)鐘輸出、1個(gè)中斷輸出和掉電檢測器,所有的地址和數(shù)據(jù)通過I2C總線接口串行傳遞。最大總線速度為400kbit/s,在數(shù)據(jù)交換時(shí)只要按照I2C總線模式進(jìn)行操作,對時(shí)序的要求也不是太高。PCF8563內(nèi)部寄存器地址與數(shù)據(jù)格式描述如附表所示。
本電路采用89S51作主控MCU,PCF8563產(chǎn)生時(shí)鐘信息,LCM1602液晶模塊作顯示。Y1為32.768kHz晶振,Y2為12MHz晶振,BT1作為后備電源,保持時(shí)鐘數(shù)據(jù)萬年不丟失;RP1和RP2是9腳l0kΩ排阻;S1~S4用于調(diào)整時(shí)間。S2用于進(jìn)入調(diào)整模式;并且每按一次改變調(diào)整項(xiàng)目;S1用于退出調(diào)整狀態(tài),S3、S4用于加1減1操作。
LCMl602的驅(qū)動(dòng)程序如下,可移植。
#defineLCM1602_DB0_DB7PO//定義LCM1602的數(shù)據(jù)總線
sbitLCM1602_RS=P2^6;//定義LCMl602的RS控制線
sbitLCM1602_RW=P2^5;//定義LCM1602的RW控制線
sbitLCM1602_E=P2^4;//定義LCM1602的E控制線
sbitLCM1602_Busy=P0^7;//定義LCM1602的測忙線
unsignedcharcodePCF8563[]={“PCF8563”};
voidLCM1602_Delay(unsignedcharcount)
{
unsignedcharI;
while(--count!=0)
{
for(I=0;I《125;I++);
}
}
voidLCM1602_TestBusy(void)
{
do
{
LCM1602_DB0_DB7=0xff;
LCM1602_RS=0;
LCM1602_RW=1;
LCM1602_E=0;
LCM1602_Delay(2);
LCM1602_E=1;
}
while(LCM1602_Busy);
}
voidLCM1602_WriteCMD(unsignedcharLCM1602_command)
{
LCM1602_DB0_DB7=LCM1602_command;
LCM1602_RS=0;
LCM1602_RW=0;
LCM1602_E=0;
LCM1602_TestBusy();
LCM1602_E=1;
}
voidLCM1602_WriteData(unsignedcharLCM1602data)
{
LCM1602_DB0_DB7=LCM1602_data;
LCMl602_RS=1;
LCM1602_RW=0;
LCM1602_E=0;
LCM1602_TestBusy();
LCM1602_E=1;
}
voidLCM1602_Int(void)
{
LCM1602_WriteCMD(0x01);//顯示清屏
LCM1602_WriteCMD(0x38);//顯示模式設(shè)置:顯示2行,每個(gè)字符為5x7個(gè)像素
LCM1602_WriteCMD(0x06);//顯示光標(biāo)移動(dòng)設(shè)置:文字不動(dòng),光標(biāo)右移·
LCM1602_WriteCMD(0x0c);//顯示開及光標(biāo)設(shè)置:顯示開,光標(biāo)關(guān),閃爍關(guān)
}
voidprint(unsignedchara,unsignedchar*str)
{
LCM1602_WriteCMD(a);
while(*str!=’