武汉理工大学《单片机原理与应用》课程设计说明书11DS1302实时时钟(1)时钟芯片DS1302的工作原理:DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图所示。为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。(2)DS1302的控制字节DS1302的控制字如表-1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出表-1DS1302的控制字格式RAMRD1A4A3A2A1A0/CK/WR(3)数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图1所示武汉理工大学《单片机原理与应用》课程设计说明书2图1DS1302读/写时序图(4)DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表-2。表-2DS1302的日历、时间寄存器此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。写寄存器读寄存器Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H12/24010时时AM/PM86H87H0010日日88H89H00010月月8AH8BH00000星期8CH8DH10年年8EH8FHWP0000000武汉理工大学《单片机原理与应用》课程设计说明书32方案论证与设计2.1控制器部分方案设计硬件控制电路主要用了AT89C52芯片处理器、1602LCD显示器、DS1302实时时钟、DB18B20温度传感器。根据各自芯片的功能互相连接成电子万年历的控制电路。软件控制程序主要有主控程序、电子万年历的时间控制程序、时间显示及温度显示程序等组成。设计框图如图2.1所示图2.1框图设计2.2显示部分的方案论证方案一:采用8段数码管虽经济实惠,但操作比液晶显示来说略显繁琐。方案二:液晶显示方式。液晶显示效果出众,可以运用菜单项来方便操作,比较简单,所以,最后选择液晶显示方案。显示电路图如图2.2所示。图2.2液晶显示电路2.3实时时钟电路设计图2.3是DS1302与单片机的连接,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768KHz晶振。AT89C52主控模块1602液晶显示DS1302时钟电路独立键盘电路DS18B20实时环境温度采集电路蜂鸣器武汉理工大学《单片机原理与应用》课程设计说明书4图2.3DS1302时钟电路2.4温度采集模块设计如图2.4所示,采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P3.7与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。图2.4DS18B20温度采集模块2.5功能按钮设计当按钮被按下时,该按钮对应的I/O口被拉为低电平,松开时按钮对应的I/O口由内部的上拉电阻将该I/O拉为高电平,如图2.5所示:图2.5键盘电路设计武汉理工大学《单片机原理与应用》课程设计说明书52.6总体电路图武汉理工大学《单片机原理与应用》课程设计说明书63软件设计流程3.1系统总流程图系统总体流程图如图3.1所示,系统流程图设计分析如下:首系统初始化,系统运行,当有设置键按下时进入时间修改模式,无按键按下时读取时间温度等数据送入显示器显示。在时间修改模式下设置时间完成后再将时间送入显示器显示。图3.1系统流程图3.2温度程序流程图温度读取程序流程图如图3.2所示。流程图分析:开始进入初始化DS18B20,就是通过主机拉低单线产生复位脉冲然后释放总线,如果有应答就发起ROM命令,当成功执行操作命令后,就使用温度转换,当温度转换完成后又初始化DS18B20是否有应答脉冲,若有就发起读暂存器和CRC命令,同时读出第一第二字节即温度数据。武汉理工大学《单片机原理与应用》课程设计说明书7图3.2温度读取程序流程图3.3DS1302时钟程序流程图时钟流程图如图3.3所示,流程图分析:DS1302开始计时时,首先进行初始化,当有中断信号时,读取时钟芯片的时间数据送入液晶显示。这时若有设置键按下,进行时间修改,完成后将时间数据送入1302芯片,若没有按键按下,直接送入EPROM中,送入液晶显示。武汉理工大学《单片机原理与应用》课程设计说明书8图3.3时钟程序流程图DS1302时钟部分子程序voidwrite_byte(uchardat)//写一个字节{ACC=dat;RST=1;for(a=8;a0;a--){IO=ACC0;SCLK=0;//产生上升沿写入数据,从低位写入SCLK=1;ACC=ACC1;武汉理工大学《单片机原理与应用》课程设计说明书9}}ucharread_byte()//读一个字节{RST=1;for(a=8;a0;a--){ACC7=IO;SCLK=1;//产生下降沿输出数据,先输出低位,保存到ACC中SCLK=0;ACC=ACC1;}return(ACC);}voidwrite_1302(ucharadd,uchardat)//向1302芯片写函数,指定写入地址,数据{RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;}ucharread_1302(ucharadd)//从1302读数据函数,指定读取数据来源地址{uchartemp;RST=0;SCLK=0;RST=1;武汉理工大学《单片机原理与应用》课程设计说明书10write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);}ucharBCD_Decimal(ucharbcd)//BCD码转十进制函数,输入BCD,返回十进制{ucharDecimal;Decimal=bcd4;return(Decimal=Decimal*10+(bcd&=0x0F));}voidds1302_init()//1302芯片初始化子函数(2012-06-18,12:00:00,week7){RST=0;SCLK=0;write_1302(0x8e,0x00);//允许写,禁止写保护write_1302(0x80,0x00);//向DS1302内写秒寄存器80H写入初始秒数据00write_1302(0x82,0x00);//向DS1302内写分寄存器82H写入初始分数据00write_1302(0x84,0x12);//向DS1302内写小时寄存器84H写入初始小时数据12write_1302(0x8a,0x07);//向DS1302内写周寄存器8aH写入初始周数据4write_1302(0x86,0x17);//向DS1302内写日期寄存器86H写入初始日期数据18write_1302(0x88,0x06);//向DS1302内写月份寄存器88H写入初始月份数据06write_1302(0x8c,0x12);//向DS1302内写年份寄存器8cH写入初始年份数据12write_1302(0x8e,0x80);//打开写保护}武汉理工大学《单片机原理与应用》课程设计说明书113.4LCD显示程序流程图显示流程图如图3.4所示,流程图分析如下:首先对1602显示屏进行初始化(初始化大约持续10ms),然后检查忙信号,若BF=0,则获得显示RAM地址,写入相应的数据显示。若BF=1,则代表模块正在进行内部操作,不接受任何外部指令和数据,直到BF=0为止。图3.4LCD显示程序流程图武汉理工大学《单片机原理与应用》课程设计说明书124万年历的仿真与调试结果上电后的显示秒调节功能按键,自上而下功能依次为调节按键、加按键、减按键武汉理工大学《单片机原理与应用》课程设计说明书135心得体会本次设计是我们遇到过的较大的设计,所以遇到的问题也比较的多,尤其是以前没有接触过如此复杂的硬件电路以及软件编程,在软、硬件设计和调试中遇到了不少的困难,在同学的帮助才逐一克服了难题,学习到了不少的专业知识。在整个设计过程之前,我已经在网上找了相关方面的资料,万事开始难,一开始不知道从哪里下手。后来慢慢学会分析系统,将系统模块化,各个模块可以在软件或者硬件上实现。在确保各个模块的硬件电路和与之相搭配的程序能够正常工作后在把它们组成一个系统。在今后的日子里,我会进一步加强自己的动手能力,丰富自己的知识面。武汉理工大学《单片机原理与应用》课程设计说明书14参考文献[1]李朝青.单片机原理及接口技术[M],北京:北京航天航空大学出版社,2005[2]李广弟.单片机基础[M],北京:北京航空航天大学出版社,2000[3]万光毅.单片机实验与实践教程[M],北京:北京航空航天大学出版社,2003[4]唐亚平、李移伦.单片机原理实训与学习指导[M],长沙:中南大学出版社,2006[5]刘军.单片机原理与接口技术[M],华东理工大学出版社,2006[6]谢自美.电子线路设计、实验、测试[M],武汉:华中理工大学出版社,2000武汉理工大学《单片机原理与应用》课程设计说明书15附件万年历源程序#includereg51.h#includeDS18B20_3.H#defineuintunsignedint#defineucharunsignedcharuchara,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;//flag用于读取头文件中的温度值,和显示温度值#defineyh0x80//LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)#defineer0x80+0x40//LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)//液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)sbitrs=P2^6;//寄存器选择sbiten=P2^7;//下降沿使能sbitrw=P2^5;//读写信号线//DS1302时钟芯片与C51之间的引脚连接定义sbitIO=P3^4