c语言编的万年历_第1页
c语言编的万年历_第2页
c语言编的万年历_第3页
c语言编的万年历_第4页
c语言编的万年历_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、万年历数字钟及可调时钟系统 一、 引言 万年历数字钟是一种用万年历时钟芯片实现年、月、日、时、分、秒计时,并通过单片机处理后送给显示芯片显示的装置,与机械式时钟相比具有更高的准确性和直观性,且具有更长的使用寿命。本系统还可以扩展为可调的自动开关,对家电对用电设备进行控制,笔者在随后改制成为可调时的自动断电的供电系统.二、 原理图设计 1 单片机及其外围电路设计 复位采用X25045芯片,复位电路如图1所示。图1 复位电路设计 单片机采用贴片封装的AT89S51,晶振为11.0592MHz。其中P1.5P1.7为下载程序使用,电路如图2所示。图2 单片机89S51外围电路设计 2 时钟芯片电路设

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

3、式数码管(或64 只独立LED )的智能显示驱动芯片,该芯片同时还可连接多达64 键的键盘矩阵,单片即可完成LED 显示键盘接口的全部功能。电路如图4所示。图4 显示芯片电路设计4 双电源电路设计 系统采用双电源,平时使用V110V的外接电源,停电时使用电池,由V2输入。电池有6节,其电压为9V。当电池电压低于6V时,LED亮,说明电池电量不足。电路如图5所示。图5 双电源电路设计三、 程序设计 程序开始时先对系统初始化,并设置好各种中断。下步操作主要是对时钟芯片进行操作,首先要给时钟芯片设置初值,时钟芯片便自行计数。此时检测是否有按键按下,按键是为了调整时钟。有按键按下则执行按键中断程序,没

4、有按键按下则执行下一步的操作,即取时钟芯片中的时钟值,然后送显示。程序流程图如下。图6 总体流程图 四、 源程序#include#include#include #define uchar unsigned char /*宏定义*/#define uint unsigned intuchar close_date,open_date;void RESWDI(void);void WREN(void);void WRDI(void);void WRSR(void);unsigned char RSDR(void);void WIPCHK(void);void OUTByte(unsigned c

5、har Byte);unsigned char INPUTByte(void);unsigned char ReadByte(unsigned char ADD);void WriteByte(unsigned char Byte,ADD);#define _Nop() _nop_() /*定义空指令*/ sbitzlg7289_cs=P11;sbitzlg7289_clk=P26;sbitzlg7289_dio=P27;sbitzlg7289_key=P32;sbit p07=P07;sbit p06=P06;sbit CS=P24;sbit SCK=P22;sbit SO=P25;sbit

6、 SI=P23;sbit p10=P10; sbit SDA=P12; /*模拟I2C数据传送位*/sbit SCL=P13; /*模拟I2C时钟控制位*/ uchar buf9=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;/*移位键移到

7、哪个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

8、;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; void WRSR(void) /写状态寄存器WREN();zlg7289_cs=1;SCK=0;CS=0;OUTByte(0x01); /发送01H写寄存器命令字OUTByte(0x00); /发送寄存器值BL0,BL1为0没写保护,WD0=0 W01=1/WD1=0WD1=0看门狗复位时间1.4SSCK=0;CS=1;zlg7289_cs=1;WIP

9、CHK(); /判断是否写入 unsigned char RSDR(void) /读状态寄存器unsigned char Temp;zlg7289_cs=1;SCK=0;CS=0;OUTByte(0x05); /发送05H读状态寄存器命令字Temp = INPUTByte(); /读状态寄存器值SCK=0;CS=1;return Temp;/这一个调试时没有执行,Temp的值总是0xFF;?zlg7289_cs=1; void WIPCHK(void) /检查WIP位,判断是否写入完成 unsigned char Temp,TempCyc;for(TempCyc=0;TempCyc50;Tem

10、pCyc+)Temp = RSDR(); /读状态寄存器if (Temp&0x01=0)TempCyc = 50; /单字节指令或数据写入X25045/在SI线上输入的数据在SCK的上升沿被锁存。 void OUTByte(unsigned char Byte) /输出一个定节unsigned char TempCyc;zlg7289_cs=1;for(TempCyc=0;TempCyc8;TempCyc+) SCK = 0; if(Byte&0x80) SI = 1; else SI = 0; SCK = 1; Byte = Byte1; /右移 SI=0; /使SI处于确定的状态zlg72

11、89_cs=1; /单字节数据从X25045读到单片机/数据由SCK的下降沿输出到SO线上。unsigned char INPUTByte(void) /输入一个字节unsigned char Temp=0, TempCyc; zlg7289_cs=1;for(TempCyc=0;TempCyc8;TempCyc+)Temp = Temp1; /右移SCK = 1;SCK=0;if (SO)Temp = Temp|0x01; /SO为1,则最低位为1 elseTemp&=0xFE;return Temp;/这一个调试时没有执行,Temp的值总是0zlg7289_cs=1; unsigned c

12、har ReadByte(unsigned char ADD) /读地址中的数据这里不做先导字处理,只能读00-FFH unsigned char Temp;zlg7289_cs=1;SCK=0;CS=0;SO=1;SI=1;OUTByte(0x3); /发送读指令03H 如要支持000-FFF则要把高位地址左移3位再为03H相或OUTByte(ADD); /发送低位地址Temp = INPUTByte();SCK=0;CS=1;return Temp;/这一个调试时没有执行,Temp的zlg7289_cs=1; void WriteByte(unsigned char Byte,ADD) /

13、向地址写入数据这里同样不做先导字处理,只能写00-FFHWREN();zlg7289_cs=1;SCK=0;CS=0;SO=1;SI=1;OUTByte(0x2); /发送写指令02H 如要支持000-FFF则要把高位地址左移2位再为02H相或OUTByte(ADD); /发送低位地址OUTByte(Byte); /发送数据SCK=0;CS=1;WIPCHK();zlg7289_cs=1; /*模拟I2C总线传输程序*/bit ack; /*应答标志位*/ /* 起动总线函数 */void Start_I2c() SDA=1; /*发送起始条件的数据信号*/ _Nop(); SCL=1; _Nop(); /*起始条件建立时间大于4.7us,延时*/ _Nop(); _Nop(); _Nop(); _Nop(); SDA=0; /*发送起始信号*/ _Nop(); /* 起始条件锁定时间大于4s*/ _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; /*钳住I2C总线,准备发送或接收数据 */ _Nop(); _Nop(); /* 结束总线函数 */vo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论