电子万年历设计论文byfr.docx
桂林航天工业高等专科学校毕业设计(论文)第1章 引言随着微电电子技术术的高速速发展,单单片机在在国民经经济的个个人领域域得到了了广泛的的运用。单单片机以以体积小小、功能能全、性性价比高高等诸多多优点,在在工业控控制、家家用电器器、通信信设备、信信息处理理、尖端端武器等等各种测测控领域域的应用用中独占占鳌头,单单片机开开发技术术已成为为电子信信息、电电气、通通信、自自动化、机机电一体体化等专专业技术术人员必必须掌握握的技术术。而电子万万年历作作为电子子类小设设计不仅仅是市场场上的宠宠儿,也也是单片片机实验验中一个个很常用用的题目目。因为为它有很很好的开开放性和和可发挥挥性,因因此对设设计者的的要求也也比较高高,不仅仅考察了了对单片片机的掌掌握能力力,更加强强调了对对单片机机扩展的的应用。而而且在操操作的设设计上要要力求简简洁,功功能上尽尽量齐全全,显示示界面也也要出色色。数字字显示的的日历钟钟已经越越来越流流行,特特别是适适合在家家庭居室室、办公公室、大大厅、会会议室、车车站和广广场等使使用。集温度、时时间、日日历、星星期于一一体,采采用液晶晶显示,设设计电路路更加简简单直观观,省去去了用数数码管显显示的电电路复杂杂性。通通过按键键可以调调整更改改时间和和日历,并并且还可可以设置置闹钟,这这样就组组成了一一个多功功能的万万年历。56第2章 方案论论证2.1 方案案设计与与论证2.1.1 控控制部分分的方案案选择用可编程程逻辑器器件设计计,使用用FPGGA构造造数字电电子系统统,设计计者可以以不用考考虑芯片片内部的的具体结结构,也也不用顾顾虑与外外部的电电路连接接。设计计者只需需依据电电路所要要完成的的具体逻逻辑功能能,然后后设法用用软件描描述出来来即可。至至于数据据在芯片片内部的的处理过过程,设设计者不不用考虑虑,但设设计者可可以通过过仿真软软件观察察和验证证数据的的处理结结果。这这种设计计方法,极极大地降降低了设设计难度度,提高高了工作作效率,但设计成成本较高高。用单片机机来作为主主控制部部分,实实现时间间、温度度同步显显示的万万年历,为为了使用用的方便便性,还还可以通通过设置置按键来来更改时时间和闹闹钟。这这正是利利用了551单片片机的多多管脚功功能性,44个8位位并行II/O口口,定时时计数端端口,中中断端口口,这使使得操作作起来更更加方便便,通过过软件可可以随时时的调整整和更改改,使得得更加精精确。通过认真真的分析析与讨论论,最终终决定采采用单片片机来作作为主控控制部分分,这样样制作也也方便,价价格也相相对较低低。2.1.2 显显示部分分的方案案选择可以通过过数码管管来显示示时钟的的日历、时时间、温温度,使使用数码码管的优优点是直直观清楚楚,适合合用在光光线较暗暗的地方方,但是是数码管管的功耗耗大,显显示单一一,并且且在电路路制作上上布线复复杂,难难度较高高。显示电路路还可以以采用液液晶16602来来实现。液晶显示器具有微功耗、体积小、显示内容丰富、超薄轻巧等诸多优点,在本题的制作中,用液晶来实现数字信息的显示是比较合适的一种选择。2.2 系统整整体方案案的设计计与论证证通过初步步的选择择,我们们最终决决定采用用单片机机AT899C522作为时时钟的主主控制部部分,LLCD116022作为显显示部分分,时钟钟信号采采用芯片片DS113022,DSS18bb20温温度传感感器用作作温度采采集,通通过设置置4个按按键来实实现时间间的调整整,闹钟钟的开关关。这五五个主要要部分基基本上就就实现了了集日历历、时间间、星期期、温度度、闹钟钟于一体体的多功功能万年年历。精精确度高高,显示示直观,轻轻巧的优优越性具具有很高高的使用用价值。第3章 硬件件电路设设计3.1 系统硬硬件设计计框图此系统的的硬件部部分主要要由主控控制器单单片机,显显示电路路,时钟钟电路,温温感电路路构成。系系统电路路框图如如图3-1所示示。时钟电路DS1302温感器DS18B20AT89C52单片机液晶显示闹钟按键控制图 3-13.2 主控电电路时钟主控控电路由由单片机机AT889C552芯片片控制,88位P00口作为为数据的的输出通通道,外外接时钟钟电路,复复位电路路,蜂鸣鸣器,温温度传感感器。PP3.44管脚接收收时钟芯芯片DSS13002发出出的时钟钟信号,PP3.33管脚与时时钟芯片片的数据据传输口口相连,收收发读写写信号,PP3.22管脚用来来驱动蜂蜂鸣器,PP2.44-P22.7管管脚分别别接按键键,用来来调整修修改时间间。P11.4管管脚与温温度传感感器DSS18BB20相相连,接接收温感感信号。3.3 AT889C552主要要性能介介绍AT899C52是一一种低功功耗、高高性能CCMOSS8位微微控制器器,具有有8K在线系统可可编程FFlassh 存存储器。使使用Attmell 公司司高密度度非易失失性存储储器技术术制造,与工业业80CC51产品品指令和和引脚完完全兼容容。片上上Flaash允允许程序序存储器器在系统统可编程程,亦适适于常规规编程器器。在单单芯片上上,拥有有灵巧的的8 位CPUU 和在在系统可可编程FFlassh,使使AT899C52为众众多嵌入入式控制制应用系系统提供供高灵活活、超有有效的解解决方案案。AT899C52具有有以下标标准功能能:8k字节节Flaash,2566字节RAAM,32 位I/OO 口线线,看门门狗定时时器,22 个数数据指针针,三个个16 位定时时器/计数器器,一个个6向量2级中断断结构,全全双工串串行口,片片内晶振振及时钟钟电路。另另外,AAT899S522可降至至0Hzz 静态态逻辑操操作,支支持2种软件件可选择择节电模模式。空空闲模式式下,CCPU停停止工作作,允许许RAMM、定时时器/计数器器、串口口、中断断继续工工作。掉掉电保护护方式下下,RAAM内容容被保存存,振荡荡器被冻冻结,单单片机一一切工作作停止,直到下下一个中中断或硬硬件复位位为止。P0口是是一个88位漏极极开路的的双向II/O口口。作为为输出口口,每位位能驱动动8个TTLL逻辑电电平。对对P0端口口写“1”时,引引脚用作作高阻抗抗输入。当当访问外外部程序序和数据据存储器器时,PP0口也也被作为为低8位地址址/数据复复用。在在这种模模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1口是是一个具具有内部部上拉电电阻的88 位双双向I/O 口口,p11 输出出缓冲器器能驱动动4个TTL 逻辑电电平。对对P1 端口写写“1”时,内内部上拉拉电阻把把端口拉拉高,此此时可以以作为输输入口使使用。作作为输入入使用时时,被外外部拉低低的引脚脚由于内内部电阻阻的原因因,将输输出电流流(IIIL)。此此外,PP1.00和P1.2分别别作定时时器/计数器器2的外部部计数输输入(PP1.00/T22)和时时器/计数器器2的触发发输入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。P2 口口是一个个具有内内部上拉拉电阻的的8 位双双向I/O 口口,P22 输出出缓冲器器能驱动动4个TTLL 逻辑辑电平。对对P2 端口写写“1”时,内内部上拉拉电阻把把端口拉拉高,此此时可以以作为输输入口使使用。作作为输入入使用时时,被外外部拉低低的引脚脚由于内内部电阻阻的原因因,将输输出电流流(IIIL)。在在访问外外部程序序存储器器或用116位地地址读取取外部数数据存储储器(例例如执行行MOVVX DPTTR)时时,P22 口送送出高八八位地址址。在这这种应用用中,PP2 口口使用很很强的内内部上拉拉发送11。在使使用8位地址址(如MMOVXX RRI)访访问外部部数据存存储器时时,P22口输出出P2锁存存器的内内容。在在flaash编编程和校校验时,P2口也接收高8位地址字节和一些控制信号。P3 口口是一个个具有内内部上拉拉电阻的的8 位双双向I/O 口口,p22 输出出缓冲器器能驱动动4 个TTLL 逻辑辑电平。对对P3 端口写写“1”时,内内部上拉拉电阻把把端口拉拉高,此此时可以以作为输输入口使使用。作作为输入入使用时时,被外外部拉低低的引脚脚由于内内部电阻阻的原因因,将输输出电流流(IIIL)。P33口亦作作为ATT89C52特殊殊功能(第第二功能能)使用用,如图图3-22所示。在flaash编编程和校校验时,P3口也接收一些控制信号。图 3-23.4 DSS13002芯片片的介绍绍DS13302 是DALLLASS 公司司推出的的涓流充充电时钟钟芯片内内含有一一个实时时时钟/日历和和31 字节静静态RAAM 通通过简单单的串行行接口与与单片机机进行通通信实时时时钟/日历电电路提供供秒分时时日日期期月年的的信息每每月的天天数和闰闰年的天天数可自自动调整整时钟操操作可通通过AMM/PMM 指示示决定采采用244 或12 小时格格式DSS13002 与与单片机机之间能能简单地地采用同同步串行行的方式式进行通通信仅需需用到三三个口线线1 RRES 复位2 I/OO 数据据线3 SCLLK串行行时钟时时钟/RRAM 的读/写数据据以一个个字节或或多达331 个个字节的的字符组组方式通通信DSS13002 工工作时功功耗很低低保持数数据和时时钟信息息时功率率小于11mW。DS13302 是由DSS12002 改改进而来来增加了了以下的的特性双双电源管管脚用于于主电源源和备份份电源供供应Vccc1 为可编编程涓流流充电电电源附加加七个字字节存储储器它广广泛应用用于电话话传真便便携式仪仪器以及及电池供供电的仪仪器仪表表等产品品领域下下面将主主要的性性能指标标作一综综合:1.实时时时钟具具有能计计算21100 年之前前的秒分分时日日日期星期期月年的的能力还还有闰年年调整的的能力2.311×8位暂存存数据存存储RAAM3. 串串行I/O 口口方式使使得管脚脚数量最最少4. 宽宽范围工工作电压压2.00-5.55V5. 工工作电流流2.00V 时时,小于3000nAA6. 读读/写时钟钟或RAAM 数数据时有有两种传传送方式式单字节节传送和和多字节节传送7. 88脚DIPP 封装装或可选选的8 脚SOIIC 封封装(根根据表面面装配)8. 简简单3 线接口口9. 与与TTLL 兼容容Vccc=5VV10.可可选工业业级温度度范围-40 +8553.4.1 管脚说说明管脚描述述: 管管脚配置置:图 3-3 图 33-43.4.2DSS13002时钟钟信号设设置模式式如图3-5所示示图 3-53.5 LCCD16602液液晶介绍绍模块组件件内部主主要由LLCD显显示屏、控控制器、列列驱动器器和偏压压产生电电路构成成。LCD显显示屏为为行和列列交叉形形成的点点阵,以以5×8点阵阵的字符符结构模模式和设设置的显显示字符符数目,选选择适宜宜的行数数,分单单屏、双双屏或者者多屏显显示规定定的字符符。对于于双屏或或者多屏屏显示结结构的LLCD,每每一显示示屏结构构部分,均均由各自自独立的的使能信信号E控控制。列驱动器器与控制制器配套套使用,它它接收来来自控制制器的振振荡、帧帧同步输输出、串串行输出出的数据据和移位位及锁存存脉冲,产产生列交交流扫描描驱动信信号。控制器接接受来自自MPUU的指令令和数据据,控制制着整个个模块的的工作,由由CGRROM、CCGRAAM、DDDRAAM等字字符存储储域、以以及与MMPU和和列驱动动器的II/O接接口、指指令寄存存和译码码机构、地地址计数数器等部部分组成成。在控控制器的的控制下下,模块块通过数数据总线线DB00DBB7和EE、R/W、RRS三个个输入控控制端与与MPUU接口。这这三根控控制线按按照规定定的时序序相互协协调作用用,使控控制器通通过数据据总线DDB接收收MPUU发送来来的指令令和数据据,从CCGROOM中找找到欲显显示字符符的字符符码,送送入DDDRAMM,在LLCD显显示屏上上与DDDRAMM存储单单元对应应的规定定位置显显示出该该字符。控控制器还还可以根根据MPPU的指指令,实实现字符符的显示示、闪烁烁和移位位等显示示效果。3.5.1端口口的定义义:管脚号符号功能1Vss电源地(GGND)2Vdd电源电压压(+55V)3V0LCD驱驱动电压压(可调调)4RS寄存器选选择输入入端,输输入MPPU选择择模块内内部寄存存器类型型信号;RS=00,当MMPU进进行写模模块操作作,指向向指令寄寄存器;当MPUU进行读读模块操操作,指指向地址址计数器器;RS=11,无论论MPUU读操作作还是写写操作,均均指向数数据寄存存器5R/W读写控制制输入端端,输入入MPUU选择读读/写模模块操作作信号;R/W=0 读读操作;R/WW=1 写操作作6E使能信号号输入端端,输入入MPUU读/写写模块操操作使能能信号;读操作时时,高电电平有效效;写操操作时,下下降沿有有效7DB数据输入入/输出出口,MMPU与与模块之之间的数数据传送送通道8DB数据输入入/输出出口,MMPU与与模块之之间的数数据传送送通道9DB数据输入入/输出出口,MMPU与与模块之之间的数数据传送送通道10DB数据输入入/输出出口,MMPU与与模块之之间的数数据传送送通道11DB数据输入入/输出出口,MMPU与与模块之之间的数数据传送送通道12DB数据输入入/输出出口,MMPU与与模块之之间的数数据传送送通道13DB数据输入入/输出出口,MMPU与与模块之之间的数数据传送送通道14DB数据输入入/输出出口,MMPU与与模块之之间的数数据传送送通道15A背光的正正端+55V16K背光的负负端0VV3.5.2 操操作时序序图写操作时时序如图图3-66图3-66读操作时时序如图图3-77图 3-73.5.3 指指令说明明一般情况况下,内内部RAAM的数数据传送送的功能能使用最最为频繁繁,因此此,RAAM中的的地址指指针所具具备的自自动加一一或减一一功能,在在一定程程度上减减轻了MMPU编编程负担担。此外外,由于于数据移移位指令令与写显显示数据据可同时时进行,这这样用户户就以最最少系统统开发时时间,达达到最高高的编程程效率。这里值得得一提的的是,在在每次访访问模块块之前,MMPU应应首先检检测忙标标志BFF,确认认BF=0后,访访问过程程才能进进行。 Cleear dissplaay 清清显示指指令码:Retuurn homme 归归位指令令码:Entrry mmodee seet 设设置输入入模式指指令码:I/D=1,完完成一个个字符码码传送后后,ACC自动加加1;I/D=0, 完成一一个字符符码传送送后,AAC自动动减1;S=1,将将全部显显示向右右(I/D=00)或者者向左(I/DD=1)移位;S=0, 显示示不发生生移位;Dispplayy onn/offf cconttroll 显示示开/关关控制指指令码:D:显示示开/关关控制标标志:DD=1,开开显示;D=00,关显显示;C:光标标显示控控制标志志:C=1,光光标显示示;C=0,光光标不显显示;B:闪烁烁显示控控制标志志:B=1,光光标所指指位置上上,交替替显示全全黑点阵阵和显示示字符,产产生闪烁烁效果。Curssor or dissplaay sshifft 光光标或显显示移位位指令码码:光标或显显示移位位指令可可使光标标或显示示在没有有读写显显示数据据的情况况下,向向左或向向右移动动;运用用此指令令可以实实现显示示的查找找或替换换;在双双行显示示方式下下,第一一行和第第二行会会同时移移位;当当移位越越过第一一行第四四十位时时,光标标从第一一行跳到到第二行行,但显显示数据据只在本本行内水水平移位位,第二二行的显显示决不不会移进进第一行行;倘若若仅执行行移位操操作,地地址计数数器ACC的内容容不会发发生改变变。S/CR/L说明0 0光标向左左移动,AAC自动动减一01光标向右右移动,AAC自动动加一10光标和显显示一起起向左移移动11光标和显显示一起起向右移移动第4章 系统程程序的设设计多功能万万年历系系统的软软件设计计主要由由主程序序、温度度子程序序、时钟钟程序、定定时中断断子程序序及液晶晶显示子子程序组组成。由由于C语语言编写写的程序序逻辑性性强,也也方便移移植。而而汇编虽虽然效率率高,但但相对比比较繁琐琐,特别别是遇到到综合性性强的逻逻辑运算算时,执执行起来来比较困困难。下下面主要要对时钟钟程序和和闹钟子子程序加加以详细细介绍。4.1 高准确确度时钟钟程序算算法电子计时时器通常常以石英英晶振为为时钟源源。时钟钟源的频频率通常常为几十十khzz乃至几几十mhhz,而而所用时时钟的最最小计单单位一般般在0.01ss1ss。高频频的时钟钟源脉冲冲通过分分频器后后产生基基本定时时脉冲。电电子计时时器的计计时部分分就是对对基本定定时脉冲冲进行累累加,产产生秒、分分、时等等时间信信息乃至至日、月月、年等等日期信信息。而而常常一一个电子子时钟会会出现走走时误差差,一个个常规电电子计时时器的计计时准确确度,取取决于晶晶振标称称频率(ffs)与与实际频频率(ffo)的的频率偏偏差和晶晶振频率率的时漂漂、温漂漂等离散散参数。普普通晶振振的实际际频率与与标称频频率有较较大的偏偏差,可可达万分分之五,折折算到一一天计时时误差就就是433.2ss。而减减少计时时误差的的最好方方法就是是用软件件控制,我我们本实实验中用用到的AAT899C522的晶振振频率是是12MMHZ,实际长期平均振荡频率fo=12.0006mhz,量化精度取1字节,取tns=10ms,则分频系数为: n00=foo/(112×ttns)=122.00006/(122×100 6××10 -2)=1000000.5 令nn=innt(nn0)=100000 ni为第第i决定定时值,可可能是1100000或1100001,这这取决于于ntii的进位位;ntti为第第i次尾尾数暂存存值。每每次定时时中断服服务程序序均执行行上式,取取得第ii次定时时计数值值,然后后实时时时钟增加加10mms,完完成时钟钟功能。这样进行软件计时校正后,每10天的计时误差<1s。所以这种基于软件提高时钟准确度的算法,具有极高的实用价值。4.2 定时闹闹钟程序序时钟的闹闹钟主要要是通过过外部设设置的按按键来定定时,当当时钟的的时间与与设置的的时间相相同时,将将会触发发中断源源,进入入闹钟子子程序,这这时蜂鸣鸣器将会会被接通通,发出出声音。当当中断时时间达到到规定的的时间后后,闹钟钟程序讲讲会自动动退出,蜂蜂鸣器停停止响。闹闹钟工作作的程序序框图如如图3-8所示示设置闹钟时间是否到时?蜂鸣器响闹时过否?NNYYY图 3-8第5章 调试与与结果分分析经过理论论分析和和仿真调调试后,最最后按照照硬件电电路制作作出了成成品多功能能电子万万年历,现现在进入入了最后后的调试试阶段。开开始为整整个系统统接上电电源后,液液晶显示示器不亮亮,通过过调节与与液晶显显示器电电源端相相连的电电位器,显显示屏点点亮了。5.1 调试我们发现现虽然显显示屏亮亮了,但但是时钟钟不走,复复位也不不起作用用,4个个时间设设置按键键也没有有反应,通通过认真真的分析析后,软软件应该该是没有有问题的的,因为为在仿真真的时候候是能正正常工作作的,这这只可能能是在硬硬件上出出现了问问题,通通过检查查电路的的焊接,连连线都没没有错误误的情况况下,最最后确定定应该是是某个模模块没有有正常工工作,通通过查资资料,发发现时钟钟芯片DDS13302的的数据端端口和时时钟信号号端口要要接上拉拉电阻,这这样才能能正常的的工作,通通过调试试,最后后时钟开开始走起起来,达达到了预预期的效效果。5.2 结果分分析 时钟虽虽然是正正常的走走了,整整个系统统也运行行顺畅,但但是时钟钟精度不不够高。5.2.1 误误差分析析一个常规规的电子子时钟走走时不准准的原因因主要是是时钟标标称频率率与实际际频率有有误差,这这样导致致时钟计计数不准准确,另另外是环环境的温温度影响响,也会会导致走走时有误误差,因因为每个个元器件件都有一一个正常常工作温温度范围围,但超超出这个个范围后后,就会会使元件件不能正正常工作作,这样样也就导导致了整整个系统统的误差差产生。第6章 总结多功能万万年历是是能同时时显示日日历、星星期、时时间、温温度的电电子时钟钟。这次次的毕业业设计从从选题上上也花了了很多时时间,板板也做了了一块又又一块,在在做的过过程中还还是出现现了很多常常见的错错误,比比如在画画原理图图的时候候,连线线连错,网网络标号号不对应应,电源源和地接接反,这这些都是是很小的的错误,但但是小错错误也能能成大错错,导致致最后做做出来的的板不能能实现预预期的功功能。另另外就是是对一些些芯片的的运用不不熟悉,导导致显示示乱码也也是很正正常的,比比如时钟钟芯片DDS13302的的数据端端口和信信号端口口必须接接上拉电电阻后再再接电源源端,否否则芯片片不能正正常工作作,软件件无法正正常运行行,整个个系统也也将瘫痪痪无法正正常显示示。还有有液晶显显示器的的电源端端也要接接个电位位器,一一是方便便调节明明暗度,二二是防止止电流过过大,烧烧坏显示示屏,这这些都是是很基本本的知识识,但必必须要熟熟记和掌掌握,以以致才能能运用的的更加熟熟练。另外对于于这次的的毕业设设计,感感觉自己己的能力力又得到到了一定定的提高高,特别别是对设设计的整整体流程程有了更更清晰的的认识,包包括选题题、设计计,制版版,调试试、写报报告。但但是还有有很多要要弥补的的地方,比比如写软软件程序序,对于于一个学学单片机机的人来来说,不不仅要懂懂硬件,更更要懂软软件,只只有都懂懂了,才才能设计计出更好好的电路路,要学学好这些些,只有有不断的的去尝试试,尝试试中不断断的发现现错误,不不断的改改正错误误,只有有这样能能力才能能得到一一步步的的提高。参考文献献1 陈权权昌.李李兴富··单片机机原理及及应用··华南理理工大学学出版社社,20007年年8月2陈陈正振.电子电电路设计计与制作作广西交交通职业业技术学学院信息息工程系系 20007年年3 求是是科技.80551系列列单片机机C程序序设计.北京:人民邮邮电出版版社,220066年4 谭浩浩强.CC程序设设计.北北京:清清华大学学出版社社,19991年年附录附录一 电路路原理图图附录二 电路路PCBB图附录三 元件清清单元件类型个数电阻1K3排阻10K1晶振12M1晶振32.7768KK1电解电容容22u1瓷片电容容22p4单片机AT899C5221温感器DS188B2001三极管NPN1时钟芯片片DS133021电位器10K1蜂鸣器1附录四 源程序序#inccludde<rreg551.HH>#inccludde<IINTRRINSS.H>>#deffinee uccharr unnsiggnedd chhar #deffinee uiint unssignned intt#deffinee TIIME (0XX100000-500000)#deffinee FLLAG 0XEEF/闹闹钟标志志sbitt rsst=PP355;sbitt cllk=PP344;sbitt daat=PP333;sbitt rss=P115;sbitt rww=P116;sbitt e=P17;sbitt DQQ=P114; /温度度输入口口sbitt P33_2=P32;sbitt ACCC_77=ACCC77;uchaar ii=200,j,timme116;/全全局变量量及常量量定义uchaar aalarrm22,ttimee2115,timme33;uchaar ccodee Daay=331,228,331,330,331,330,331,331,330,331,330,331;/112个月月的最大大日期(非闰年年)/音律律表uintt coode tabble11=6442600,6444000,6445244,6445800,6446844,6447777,648220,6648998,6649668,6650330,6650558,6651110,6651557,6651778,6652117;/发声声部分的的延时时时间uchaar ccodee taablee2=00x822,1,0x881,00xf44,0xxd4,0xbb4,00xa44,0x944,0xxe2,1,00xe11,0xxd4,0xbb4,00xc44,0xxb4,4,00;/LCCD自建建字uchaar ccodee taab=00x188,0xx1b,5,44,4,5,33,0,0x088,0xx0f,00x122,0xx0f,00x0aa,0xx1f,00x022,0xx02,/年年0x0ff,0xx09,0x00f,00x099,0xx0f,00x099,0xx11,0x000,/月0x0ff,0xx09,0x009,00x0ff,0xx09,0x009,00x0ff,0xx00;/日 /*温温度小数数部分用用查表法法*/Uchaarcoode dittab16=00x000,0xx01,0x001,00x022,0xx03,0x003,00x044,0xx04,0x005,00x066,0xx06,0x007,00x088,0xx08,0x009,00x099;/闹钟钟中用的的全局变变量uchaar tth1,tl11;uchaar ttempp_daata2=0xx00,0x000; / 读出温温度暂放放bit flaag;/118b220存在在标志位位/*111微秒秒延时函函数*/delaay(uuintt t)forr(;tt>0;t-);/*118B220复位位函数*/ow_rreseet(vvoidd)uchhar i;DQ=1;_nopp_();_nnop_();DQ=0; /dellay(50); / 5550uusDQ=1; / dellay(6); / 666ussforr(i=0;ii<0xx30;i+)iff(!DDQ)ggotoo d11;flaag=00;/清清标志位位,表示示ds118200不存在在DQ=1;retturnn;d1:dellay(45); /延时时5000usflaag=11;DQ=1;/置置标志位位,表示示ds118200存在 /*188B200写命令令函数*/向 1-WWIREE 总线线上写一一个字节节voidd wrritee_byyte(uchhar vall)uchhar i;forr (ii=8; i>>0; i-) /DQQ=1;_noop_();_nopp_(); DQQ=0;_noop_();_nopp_();_nnop_();_noop_();_nopp_();/5ussDQQ=vaal&00x011; /最低位位移出deelayy(6); /666ussvaal=vval/2; /右右移一位位DQ=1;dellay(1); /*18BB20读读1个字字节函数数*/从总总线上读读取一个个字节uchaar rreadd_byyte(voiid)uchhar i;uchhar vallue=0;forr (ii=8;i>00;i-)DQQ=1;_noop_();_nopp_();vaaluee>>=1;DQQ=0; /_nnop_();_noop_();_nopp_();_nnop_(); /44usDQQ=1;_noop_();_nopp_();_nnop_();_noop_(); /4uus iff(DQQ)vvaluue|=0x880;deelayy(6); /666ussDQ=1;retturnn(vaaluee);/*读读出温度度函数*/readd_teemp()ow_resset(); /总总线复位位if(!fllag)/判判断dss18220是否否存在?若dss18bb20不不存在则则返回reeturrn;/wwritte_bbytee(0xxCC); / Skiip RROM/wwritte_bbytee(0xx44); / 发转换换命令/ddelaay(770);wriite_bytte(00xCCC); /发发Skiip RROM命命令wriite_bytte(00xBEE); /发发读命令令temmp_ddataa0=reead_bytte(); /温度低低8位temmp_ddataa1=reead_bytte(); /温度高高8位ow_resset();wriite_bytte(00xCCC); / Skiip RROMwriite_bytte(00x444); / 发转换换命令/*温温度数据据处理函函数*/workk_teemp()uchhar n=00,m; if(temmp_ddataa1>1227)/负温温度求补补码teemp_datta11=(2566-teemp_datta11);teemp_datta00=(2566-teemp_datta00);n=1;timme213=diitabbteemp_datta00&00x0ff+''0'timme212='.'m=(teemp_datta00&00xf00)>>>4)|(ttempp_daata1&&0x00f)<<<4);/if(n)m-=166;timme29=m/1100+'0''timme211=m%1000;timme210=tiime22111/110+''0'timme211=tiime22111%110+''0'if(timme29='00')/最高高位为00时都不不显示tiime229=0xx20;iff(n)/负负温度时时最高位位显示""-"ttimee299=''-'iff(tiime22100='0'')iif(nn)timme210='-'timme29=0x220;eelseetimme210=0xx20;iif(ttimee2111='00'&&&timme213=''0')timme211=tiime22122=00x200;delaay1mms(uuchaar ttimee)/延延时1mmsuchhar i,jj;forr(i=0;ii<tiime;i+)foor(jj=0;j<2250;j+);/LCCD驱动动部分enabble()rs=0;rw=0;e=00;dellay11ms(3);e=11;writte2(uchhar i)P0=i;rs=1;rw=0;e=00;dellay11ms(2);e=11;writte1(uc