万年历数字钟及可调时钟系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

万年历数字钟及可调时钟系统

一、引言

万年历数字钟是一种用万年历时钟芯片实现年、月、日、时、分、秒计时,并通过单片机处理后送给显示芯片显示的装置,与机械式时钟相比具有更高的准确性和直观性,且具有更长的使用寿命。本系统还可以扩展为可调的自动开关,对家电对用电设备进行控制,笔者在随后改制成为可调时的自动断电的供电系统.

二、原理图设计

1.单片机及其外围电路设计

复位采用X25045芯片,复位电路如图1所示。

图1 复位电路设计

单片机采用贴片封装的AT89S51,晶振为11.0592MHz。其中P1.5~P1.7为下载程序使用,电路如图2所示。

图2 单片机89S51外围电路设计

2.时钟芯片电路设计

时钟芯片采用PCF8563,晶振采用32.768K,电容使用15pf。PCF8563 是PHILIPS 公司推出的一款工业级内含I2C 总线接口功能的具有极低功耗的多功能时钟日历芯片。内部时钟电路、内部振荡电路、内部低电压检测电路(1.0V)以及两线制I2C 总线通讯方式,不但使外围电路及其简洁,而且也增加了芯片的可靠性。同时每次读写数据后,内嵌的字地址寄存器会自动产生增量。电路如图3所示。

图3 时钟芯片电路设计

3.显示芯片电路设计

显示芯片采用ZLG7289,晶振为12MHz。ZLG7289A 是广州周立功单片机发展有限公司自行设计的,具有SPI 串行接口功能的可同时驱动8 位共阴式数码管(或64 只独立LED )的智能显示驱动芯片,该芯片同时还可连接多达64 键的键盘矩阵,单片即可完成LED 显示﹑键盘接口的全部功能。电路如图4所示。

图4 显示芯片电路设计

4.双电源电路设计

系统采用双电源,平时使用V1=10V的外接电源,停电时使用电池,由V2输入。电池有6节,其电压为9V。当电池电压低于6V时,LED亮,说明电池电量不足。电路如图5所示。

图5 双电源电路设计

三、程序设计

程序开始时先对系统初始化,并设置好各种中断。下步操作主要是对时钟芯片进行操作,首先要给时钟芯片设置初值,时钟芯片便自行计数。此时检测是否有按键按下,按键是为了调整时钟。有按键按下则执行按键中断程序,没有按键按下则执行下一步的操作,即取时钟芯片中的时钟值,然后送显示。程序流程图如下。

图6 总体流程图

四、源程序

#include

void RESWDI(void);

void WREN(void);

void WRDI(void);

void WRSR(void);

unsigned char RSDR(void);

void WIPCHK(void);

void OUTByte(unsigned char Byte);

unsigned char INPUTByte(void);

unsigned char ReadByte(unsigned char ADD);

void WriteByte(unsigned char Byte,ADD);

#define _Nop() _nop_()

sbit zlg7289_cs =P1^1;

sbit zlg7289_clk =P2^6;

sbit zlg7289_dio =P2^7;

sbit zlg7289_key =P3^2;

sbit p07=P0^7;

sbit p06=P0^6;

sbit CS=P2^4;

sbit SCK=P2^2;

sbit SO=P2^5;

sbit SI=P2^3;

sbit p10=P1^0;

sbit SDA=P1^2; *模拟I2C数据传送位*

sbit SCL=P1^3; *模拟I2C时钟控制位*

uchar buf[9]={0x00,0x00,0x30,0x23,0x15,0x1,0x05,0x04,0x05}; uchar bufdata,bb,date;

uchar SLA=0xA2,SUBA=0x00;

uchar *p;

uchar keychange=0;

uchar key=0; *键盘值*

bit keyint=0; *按键中断标志*

bit keyok=1; *数据是否修改好*

uchar num=0; *移位键移到哪个LED*

void delay(uchar i)

{

while(i--);

}

******************** TIMER1 interrupt process *************************** timer0 (void) interrupt 1 using 1

{

TH0=0x3c;

TL0=0xb0;

RESWDI();

}

void RESWDI(void) 复位看门狗(喂狗)

{

zlg7289_cs=1;

CS =1;

CS =0;

CS =1;

zlg7289_cs=1;

}

void WREN(void) 写使能复位使用)?

{

zlg7289_cs=1;

SCK=0;

CS=0;

OUTByte(0x06); 发送06H写使能命令字

SCK=0;

CS=1;

zlg7289_cs=1;

}

void WRDI(void) 写使能复位(禁止写{

{

zlg7289_cs=1;

SCK=0;

CS=0;

OUTByte(0x04); 发送04H写禁止命令字SCK=0; CS=1;

zlg7289_cs=1;

}

相关文档
最新文档