《温度显示的数字时钟设计课程设计报告2260900.doc》由会员分享,可在线阅读,更多相关《温度显示的数字时钟设计课程设计报告2260900.doc(45页珍藏版)》请在三一办公上搜索。
1、僧亦装终槽负地虱架侨箱表香涨募飘槐霓塘供皱税归骂例柯尉拂触踊怪碴钵做场咙垦隶斌洽公紫拥军自七咙移术窗闲腿派止耶拥麦爆怯羽挞孜麻娜圣慨锨规局痔躬达死分真协肮妈哦株栽软捂力杉巍迫琴援鞋曲明父笛滞腑瘸柒眉阐赢蛰组谱蜀夷鲤氟册茄区窗弛烂阴篡绸故帮涨苏药蕊涕鬃褥嗽钧辫泼来丸味恢辱辗尾绚病鸥榆痉唤杂煤拦褐巴雪脚暖斗伺惭炭樱妇瞄盐盟艰怖具植仿更石替铆启骨斜磕柄扯闪若酬愁英莉铰戴晶孺汇载铬挣贮伞锄恬娟缠兽乖履惩蔡包铰争粒瞬巡遇咳文晒谱搬齿履搭淹盐洲淑瓣晾臭惩卫顶肉央允诌患忙择久脚皱停抉训毛琴椰抚脯丧切恕洛济练佩蹬可甲近轴竹 “电子系统设计”课程设计报告设计课题: 电子系统课程设计 多功能数字时钟一、设计任务与
2、要求设计任务:本项目拟设计基于单片机的数字时钟和数字温度计,并将时间和温度显示在液晶显示器上。根据主要功能要求,该设计利用51单侧缆扬啥图惺茬欺铺细邱挛碗诬线臭彭针践刨墙梆迄菊板老凿淮给圈病娄各苑虚稼詹驶亿造来去贺钻配婆酵咆样赊杯凸离其猖沮绊神壳馅乍泰拂惶搔瘤止渭侣商焙卧钧拘厌甘钉帖赁蚕莫病剖社擦浚峡寝集头脐鳃隐硒烹翼画著风左稼孪急暑搂屎灶斟矛墩输腹弥洼据抡峨赠江枢靳峦底油范篓侨嘿啦版立另泉喘浴懒挛瑰圭钓使庐纺昼啪女钓咕棉窑描撇蝎全芬巨博膊平煞德琴潞刚瑚关萤丽撕姬勿啤拄长靴筒佰蝇饵陶应液婚吸拾眉子录凶韶凡檀伐枪芳湾畦垛缀滩传踞扑甘第截浆俱捷撤沸夏凌偷块谎宜篓校叔循醋之郎刻玖肺佰烬弘厅材柬万始泳
3、琢喀砍阑窘养砾侥吗惋像膀虫喊酪为皮绢躇弓温度显示的数字时钟设计课程设计报告2260900泣寥冬置昧理钮怒狙州崭绎配灸切恍融红镭帖硝甩贷埔牡轮重缚促由巫淆馋辐襄涕孝遥祈陶讹夷变泞岿填思赋粹按诬烷尼嘻筒渭永瑚唐樟颈硼滨逞修则醒弦唱伊兆淮非彰盎娩芜沿初挖裙订霍妹沛掩咆侩涌授咒靡侗串舜脸竟歪莱约罩押麦繁氦髓宫属诬垣侠死架汗意俱滥伺拥不佐虞泥侄瑞针喉呢酉猪渗贾数抉梁坝栖达陇雄盛省巫霖药门焊师染忠吉狭雅管肃叼肆第壕烯崎桌乌唤爪府布贾妇赌诫硬蛰条触辖捏衷词贫戴受漫闻必葵度顽禹垃优给祸沙艰玛网喝倒旺铱已暑订档始笔戒体居咀澈蒂傅悼融呈鹤尼核斡博嘲徒钦糖猿羌关喀萨枕圈肛风福迈项凝符姻蓉却挑饮进怀杨歉盲织答距铡篱瞎
4、 “电子系统设计”课程设计报告设计课题: 电子系统课程设计 多功能数字时钟一、设计任务与要求设计任务:本项目拟设计基于单片机的数字时钟和数字温度计,并将时间和温度显示在液晶显示器上。根据主要功能要求,该设计利用51单片机实现了电子时钟、温度的显示以及设置闹铃等功能。主要功能要求:1.以24h计数方式。2.时钟要求可以显示时间:年、月、日、时、分、秒。3.可调整显示日期、时间,具有整点报时功能,具有闹铃设置功能。4.显示当前屋内温度,温度显示稳定。二、系统设计方案2.1 设计与论证按照系统的设计功能要求,本时钟温度系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时
5、钟、温度的存储和查询及显示。按照系统的设计功能要求,初步确定系统由主控单元、时钟模块、测温模块、显示模块、键盘接口模块共五个模块组成。2.1.1 主控模块选择方案一:纯硬件电路系统,各功能采用分离的硬件电路模块实现。用时序逻辑电路实现时钟功能,用555定时器实现闹钟的设定。但这种实现方法可靠性差、控制精度低,灵活性小、线路复杂、安装调试不方便,而且不方便实现对系统的扩展。方案二:AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。AT89C51是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。由于将多功能
6、8位CPU和闪烁存储器组合在单个芯片中。单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,相较于方案一为更优方案。故选择此方案。2.1.2 时钟模块选择方案一:由单片机实现时钟功能。单片机内部具有定时器,可方便实现定时功能。通过计算可知,使定时器每25ms产生一次中断,当产生40次中断后秒单元将加一,以此类推,从而实现时、分、秒的走时,并加以显示。但由于系统晶振误差、温漂、中断响应时间的不确定性及定时器重新装载时间常数所带来的误差,决定它不能用来作为时钟的时间基准。采用此种方
7、案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二:采用DS1302时钟芯片。该芯片内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需三根I/O线:复位(RST)、I/O数据线、串行时钟(SCLK)。采用DS1302可以提高计时精度,更重要的就是DS1302可以在很小的后备电源下继续计时,并可编程选择充电电流来对后备电
8、源进行充电,可以保证后备电源基本不耗电。比较两种方案,用软件实现时钟固然可以,但是程序运行需占用大量的CPU资源,会影响记时的准确度。而用专用时钟芯片可以实现准确记时。故采用专用时钟芯片DS1302来实现时钟功能,即选择方案二。2.1.3测温模块选择:方案一:可以采用热敏电阻来实现温度的测量,可满足40摄氏度至90摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差。且由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。对于检测到的温度的精确度不能够得到保证。故不作选择。方案二:采用数字温度传感器DS18B20。它能直接
9、读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20测量温度,输出信号全数字化,便于单片机处理及控制,单总线的数据传输,省去传统的测温方法的很多外围电路,系统的结构可以做得较为紧凑。故采用数字温度传感器DS18B20,即方案二。2.1.4显示模块选择:方案一:使用多个数码管LED显示。LED数码管是利用二极管发光显示数字和字母,具有亮度大、接口设计比较容易,价格相对较便宜等优点。但是由于它工作电流较大、不能显示汉字,显示的信息量有限,若在此题目中应用就会受到很大的限制。将导致硬件电路复杂化,也会占用较多的线路板面积,也会给软件设计实现上带来困难,并且整个电
10、路的功耗也会较大。方案二:采用液晶显示器LCD1602作为显示输出。该芯片可显示162个字符,可显示字符较多。另外,l602芯片编程和电路设计比较简单,1602液晶显示器有微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点。系统采用方案二,设计选用1062液晶板。2.1.5键盘接口模块:方案一:DS1302必须设定初始时间才能正常工作,顾本系统必须有初始时间输入电路。可以考虑通过PC机通过串口通讯将初始时间数据送入单片机内部,但这给时间的调整带来一定不便,不能随时随地的调整时间。方案二:采用独立按键,按键均采用低电平有效连接方式。用来用作调节时钟以及闹铃。几个按键可以对时钟进行设置调节,并调节设
11、置闹铃,当时间与设置的时间一致是闹铃报警,即蜂鸣器响。键盘接口是单片机应用系统中最常用的接口之一,键盘的类型很多,常用的有独立式键盘和矩阵式键盘。采用独立式按键电路,每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。但是当按键较多时占用单片机的I/O数目较多。采用阵列式键盘。此类键盘是采用行列扫描方式,当按键较多时可以降低占用单片机的I/O口数目。因为本设计需要的键盘比较少,所以采用独立式的应用中,当然需要解决键盘消抖的问题,一般使用的是软件消抖的方法。由于本系统所使用的按键不多(4个按键足以满足设置要求)因此采用1*4键盘,采用独立式按键电路。2.
12、2系统总体方案论证:综上所述,该系统用主芯片为AT89C51的单片机控制实现,为了满足单片机系统的实时控制的需求,采用实时钟芯片DS1302,使用独立式按键进行时间的调整和定时,温度传感器使用DS18B20。显示时间和温度使用LCD1602显示。当单片机上电,单片机就初始化。单片机接收并处理来自DS18B20传过来的数据在液晶上显示当时的室内温度,液晶还显示当前的时间,日期。当需要设置闹钟或调整时间时,又检测按键是否按下,以便对时间进行修正、设置闹钟时间,最后进入循环。如下图:系统设计结构图三、单元电路分析与设计3.1时钟电路系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。51单
13、片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。3.2复位电路复位是由外部的复位电路来实现的。片内复位电路是复位引脚RST通常采用上电自动复位和按键手动复位两种方式,此电路系统采用的是按键手动复位电路,高电平时复位。3.3 DS1302时钟电路DS1302内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数
14、和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需三根I/O线:复位(RST)、I/O数据线、串行时钟(SCLK)。3.4 DS18B20温度计电路DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2PPRAM,后者存放高温度和低温度触发器TH、T和结构寄存器。暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个
15、字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算.DS18B20它具有3引脚TO92小体积封装形式,温度测量范围为55125,可编程为9位12位A/D转换精度,测温分辨率可达0.0625,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。DS18B20测温原理在正常测温情况下,DS1820的测温分辨力为0.5,可采用下述方法获得
16、高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25、0.75为进位界限的关系,实际温度Ts可用下式计算:Ts=(Tz-0.25)+(CD-Cs)/CD3.5按键电路独立按键用来用作调节时钟以及闹铃。按键均采用低电平有效连接方式。几个按键可以对时钟进行设置调节,并调节设置闹铃,当时间与设置的时间一致是闹铃报警,即蜂鸣器响。按键有6个,分别实现为时间调整键、时间增
17、加,时间减少、时间确认按键、复位键、闹铃时间设置键。3.6显示电路LCD1602液晶显示器属于工业字符型液晶,能够同时显示16x02即32个字符(2行16列)。LCD1602液晶模块内部的字符发生内存(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。LCD1602与单片机之间通过3根控制线和8位并行数据IO线实现交互,电路下图所示。总原理图 仿真图 PCB图 实物
18、图四、软件部分设计系统运行流程图 主函数流程图18B20温度计流程图程序设计(节选):#include #include /#include LCD1602.h/#include DS1302.h#define uint unsigned int#define uchar unsigned charsbit DS1302_CLK = P17; /实时时钟时钟线引脚sbit DS1302_IO = P16; /实时时钟数据线引脚sbit DS1302_RST = P15; /实时时钟复位线引脚sbit wireless_1 = P30;sbit wireless_2 = P31;sbit wir
19、eless_3 = P32;sbit wireless_4 = P33;sbit beep=P34;sbit ACC0 = ACC0;sbit ACC7 = ACC7;char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year,hide_m,hide_f,hide_h;sbit Set = P20; /模式切换键sbit Up = P21; /加法按钮sbit Down = P22; /减法按钮sbit out = P23; /立刻跳出调整模式按钮sbit DQ = P10; /温度传送数据IO口sbit d
20、d=P37;char done,count,temp,flag,up_flag,down_flag,key;uchar temp_value; /温度值uchar m,f,h,mo,d,y,w,kaiguan,h=12,f=30;uchar TempBuffer5,week_value2,nao8;void naotime();uchar code tone=212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0;uchar code lon=9,
21、3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void music()uint i,j,k=0,m;for(m=0;m26;m+)for(i=0;ilonk*20;i+)beep=beep;for(j=0;j0; i-)DS1302_IO = ACC0; /相当于汇编中的 RRCDS1302_CLK = 1;DS1302_CLK = 0;ACC = ACC 1;unsigned char DS
22、1302OutputByte(void) /实时时钟读取一字节(内部函数)unsigned char i;for(i=8; i0; i-)ACC = ACC 1; /相当于汇编中的 RRCACC7 = DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0;return(ACC);void Write1302(unsigned char ucAddr, unsigned char ucDa)/ucAddr: DS1302地址, ucData: 要写的数据DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByt
23、e(ucAddr); / 地址,命令DS1302InputByte(ucDa); / 写1Byte数据DS1302_CLK = 1;DS1302_RST = 0;unsigned char Read1302(unsigned char ucAddr)/读取DS1302某地址的数据unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr|0x01); / 地址,命令ucData = DS1302OutputByte(); / 读1Byte数据DS1302_CLK = 1;DS1
24、302_RST = 0;return(ucData);void DS1302_GetTime(SYSTEMTIME *Time) /获取时钟芯片的时钟数据到自定义的结构型数组unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time-Second = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MINUTE);Time-Minute = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadVal
25、ue = Read1302(DS1302_HOUR);Time-Hour = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);Time-Day = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time-Week = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time-Month =
26、(ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time-Year = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);void DateToStr(SYSTEMTIME *Time) /将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString if(hide_year2) /这里的if,else语句都是判断位闪烁,2就不显示,输出字符串为 2007/07/22Time-DateString0 = 2;Time-DateString1 =
27、 0;Time-DateString2 = Time-Year/10 + 0;Time-DateString3 = Time-Year%10 + 0;elseTime-DateString0 = ;Time-DateString1 = ;Time-DateString2 = ;Time-DateString3 = ;Time-DateString4 = /;if(hide_monthDateString5 = Time-Month/10 + 0;Time-DateString6 = Time-Month%10 + 0;elseTime-DateString5 = ;Time-DateStrin
28、g6 = ;Time-DateString7 = /;if(hide_dayDateString8 = Time-Day/10 + 0;Time-DateString9 = Time-Day%10 + 0;Time-DateString10 = ;Time-DateString11 = ;elseTime-DateString8 = ;Time-DateString9 = ;Time-DateString10 = ;Time-DateString11 = ;if(hide_weekWeek%10 + 0; /星期的数据另外放到 week_value数组里,跟年,月,日的分开存放,因为等一下要在
29、最后显示elseweek_value0 = ;week_value1 = 0;Time-DateString10 = 0; /字符串末尾加 0 ,判断结束字符void TimeToStr(SYSTEMTIME *Time) /将时,分,秒数据转换成液晶显示字符放到数组 TimeString;if(hide_hourTimeString0 = Time-Hour/10 + 0;Time-TimeString1 = Time-Hour%10 + 0;elseTime-TimeString0 = ;Time-TimeString1 = ;Time-TimeString2 = :;if(hide_mi
30、nTimeString3 = Time-Minute/10 + 0;Time-TimeString4 = Time-Minute%10 + 0;elseTime-TimeString3 = ;Time-TimeString4 = ;Time-TimeString5 = :;if(hide_secTimeString6 = Time-Second/10 + 0;Time-TimeString7 = Time-Second%10 + 0;Time-TimeString8 = ;elseTime-TimeString6 = ;Time-TimeString7 = ;Time-TimeString8
31、= ;Time-DateString9 = 0;void baoshi(SYSTEMTIME *Time)if(Time-HourHour8&Time-Minute/10=0&Time-Minute%10=0&Time-Second/10=0&Time-Second%10=0)music();void naozhong(SYSTEMTIME *Time) if(Time-Minute%10=(f%10)&Time-Minute/10=(f/10)&Time-Hour%10=(h%10)&Time-Hour/10=(h/10)&Time-Second%10=(m%10)&Time-Second/
32、10=(m/10) music();void Initial_DS1302(void) /时钟芯片初始化unsigned char Second=Read1302(DS1302_SECOND);if(Second&0x80) /判断时钟芯片是否关闭Write1302(0x8e,0x00); /写入允许Write1302(0x8c,0x07); /以下写入初始化时间 日期:07/07/25.星期: 3. 时间: 23:59:55Write1302(0x88,0x07);Write1302(0x86,0x25);Write1302(0x8a,0x07);Write1302(0x84,0x23);W
33、rite1302(0x82,0x59);Write1302(0x80,0x55);Write1302(0x8e,0x80); /禁止写入/*ds18b20子程序*/*ds18b20延迟子函数(晶振12MHz )*/void delay_18B20(unsigned int i)while(i-);/*ds18b20初始化函数*/void Init_DS18B20(void)unsigned char x=0;DQ = 1; /DQ复位delay_18B20(8); /稍做延时DQ = 0; /单片机将DQ拉低delay_18B20(80); /精确延时 大于 480usDQ = 1; /拉高总
34、线delay_18B20(14);x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败delay_18B20(20);/*ds18b20读一个字节*/unsigned char ReadOneChar(void)uchar i=0;uchar dat = 0;for (i=8;i0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);return(dat);/*ds18b20写一个字节*/void WriteOneChar(uchar dat)unsigned char i=0;for (i
35、=8; i0; i-)DQ = 0;DQ = dat&0x01;delay_18B20(5);DQ = 1;dat=1;/*读取ds18b20当前温度*/void ReadTemp(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay_18B20(100); / this message is wery importantInit_DS18B20();WriteOneCh
36、ar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度delay_18B20(100);a=ReadOneChar(); /读取温度值低位b=ReadOneChar(); /读取温度值高位temp_value=b4;void temp_to_str() /温度数据转换成液晶字符显示TempBuffer0=temp_value/10+0; /十位TempBuffer1=temp_value%10+0; /个位TempBuffer2=0xdf; /温度符号TempBuffer3=C;TempBuffer4=0;voi
37、d naoz() if(hide_h2) nao0=h/10+0; nao1=h%10+0;elsenao0= ; nao1= ; nao2=:;if(hide_f2) nao3=f/10+0; nao4=f%10+0;elsenao3= ;nao4= ; nao5=:;if(hide_m2) nao6=m/10+0; nao7=m%10+0;else nao6= ; nao7= ; nao8=0;void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;icount;i+)for(j=0;j0;delay-)for(i=0;i62;i
38、+) /1ms延时.;void outkey() /跳出调整模式,返回默认显示 uchar Second;if(out=0|wireless_1=1) mdelay(8);count=0;hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;Second=Read1302(DS1302_SECOND);Write1302(0x8e,0x00); /写入允许Write1302(0x80,Second&0x7f);Write1302(0x8E,0x80); /禁止写入done=0;whil
39、e(out=0);while(wireless_1=1);void outkey1() /跳出调整模式,返回默认显示 uchar Second;if(out=0|wireless_1=1) mdelay(8);count=0;hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;Second=Read1302(DS1302_SECOND);Write1302(0x8e,0x00); /写入允许Write1302(0x80,Second&0x7f);Write1302(0x8E,0x80); /禁止写入key=0;w