1、 学号 201225110207中州大学毕业设计(论文)题 目 电子万年历的设计 学 院 工程技术学院 专 业 应用电子技术 年 级 12 班 级 2 学生姓名 xxx 指导教师 孙 建 延 职称 副教授 时 间 2014 年 12 月 4 日 电子万年历的设计摘 要: 随着电子技术的迅速发展,特别是随着大规模集成电路的出现,给人类生活带来根本性的改变。尤其是单片机技术的应用产品已走进千家万户。电子万年历的出现给人们的生活带来了诸多方便。电子万年历是一种非常广泛的日常计时工具,在现代社会越来越流行。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且 DS1302 的使
2、用寿命长,误差小。对于电子万年历采用直观的 1602 液晶显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用 AT89S52 单片机作为核心,功耗小,能在 3V 的低压工作,电压可选用 35V 电压供电。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。在编写程序过程中发现以现有的相关知识要独自完成编写任务困难重重,在老师和同学的帮助下才完成了程序部分的编写。本万年历的设计采用 C
3、语言,根据功能需求进行程序的编写与调试,保证软硬件正常工作,具有结构简单,成本低廉,显示清晰,稳定可靠等优点。并且可进行扩充,加入闹钟的功能,更加方便于你使用。关键词: 单片机 DS18B20 DS1302 1602 液晶 PCBTheDesignOf Electronic CalendarAbstract: With the rapid development of electronic technology, especially along with large scale integrated circuit, the appearance of human life to bring
4、 fundamental change. Especially the application of single chip microcomputer products have already walked into the country. The emergence of electronic calendar to the life of people brought many convenient. Electronic calendar is a very wide range of daily timing tool, in modern society is more and
5、 more popular. It can be to year, month, day, Sunday, when the clock, minutes and seconds, also has a leap year compensation, etc DuoZhong function, and the DS1302 long service life and small error. For electronic calendar by using object 1602 LCD display, can also shows that year, month, day, Sunda
6、y, when, minutes and seconds and temperature, information, but also has time calibration etc. Function. This circuit AT89S52 SCM as the core, low consumption, in 3 V of low-pressure work, voltage can choose 3 5 V voltage power supply. In the design at the same time the SCM theoretical basis and peri
7、pheral expansion knowledge is compared to overall. In the hardware and software design, no good basic knowledge and practical experience is very limited, every function to a need that kind of hardware, and the program this how to write, how to realize the algorithm, not a foundation will not be very
8、 good implementation. In the process of program found that by the existing knowledge to finish writing task alone difficulties, the teachers and students of help to finish the program, and the writing of the part.The design of this calendar using C language, according to the function requirements of
9、 the procedures to write and debugging, ensure software and hardware normal work, the structure is simple, the cost is low and the show clear, stable and reliable. And can be extended, join the alarm clock function, it is more convenient to use you.Keywords: DS18B20 DS1302 1602LCD PCB SCM目 录第一章 绪论 6
10、1.1 本课题的研究的背景以及现实意义 .61.2 本课题对于专业知识的综合应用情况 .61.3 课题论述总体结构安排 .7第二章 电子万年历的工作概述以及原理分析 82.1 电子万年历的工作概述 .82.2 确保电子万年历的工作性能稳定的相关措施 .82.3 系统硬件电路总体结构框图 .82.4 电子万年历总体电路原理图 .92.5 各部分单元电路介绍 .92.5.1 DS18B20 温度传感器电路介绍 92.5.2 DS1302 电路 .102.5.3 单片机最小系统电路 .102.5.4 1602 液晶显示电路 11第三章 应用 Protel 实现电路原理图的绘制及 PCB 设计 .12
11、3.1Protel 简介 123.2 绘制电路原理图的主要步骤 .123.3PCB 人工布局、人工布线设计 .13第四章 电子万年历 C 程序的编写与实现 .154.1 程序流程框图 .154.2 电子万年历 C 语言程序 174.2.1 键盘扫描部分程序 .174.2.2 DS18B20 部分程序 274.2.3 DS1302 部分程序 .304.2.41602 液晶显示部分程序 .32第五章 总结 365.1 设计功能分析 .365.2 心得体会 36参考文献 37致 谢 .38附录 39第一章 绪论1.1 本课题的研究的背景以及现实意义时钟在现实生活中占有非常重要作用,目前时钟的使用已经
12、从原来单一的机械式计时工具发展为同时具有计时、时间调节、温度显示以及相关附加功能。针对这样的发展实际情况,在完成学院的毕业设计工作中,我决定采用所学习的单片机知识以及相关的电路知识来进行电子万年历的设计。目前市场上电子万年历的发展,其功能也逐渐从单一的计时发展到事迹、日期、温度显示,甚至有的还具有闹钟、问候语显示等功能,让人能清楚地知道当前的日期、时间、温度等物理量。所以本课题的研究具有一定的现实应用意义。1.2 本课题对于专业知识的综合应用情况因为学习的知识深度的限制以及实际情况的考虑,我设计的电子万年历的功能确定为能够正确显示日期、时间、温度。显示的方式采用 ATMEL 公司 AT89S5
13、1单片机为驱动 1602LCD 显示器进行显示。采用 TB 上购买的 mini80E 单片机开发电路板作为电路实现的主要功能载体。在学院三年的单片机学习过程中,我们学习单片机都是采用 TB 上买的单片机开发板以及 C 语言进行学习,TB 的 51 单片机开发板在单片机最小系统的基础上配置了数码管显示、LCD 显示区、LCD 显示区、独立键盘输入区以及模拟量输入、A/D 转换等资源,满足了单片机实际开发的绝大部分要求。同时开发板上的电路结构也能够较好地锻炼自己电路方面的知识。采用 C 语言进行编程能够综合锻炼自己的实际程序编写的能力以及程序的调试功能。本课题的选题难度适中,能够对应用电子技术专业
14、学习的专业课程有较为全面的应用与掌握,同时也与自己的专业能力符合。1.3 课题论述总体结构安排第一章叙述了电子万年历研究的背景以及现实意义第二章则主要介绍设计工作总体概述以及产品工作的原理,按照功能电路的分别进行详细的分析讨论,最终分析电路的总体工作原理。第三章主要讨论应用 Protel 软件来实现电路原理图的绘制以及印制板设计第四章是电子万年历的软件实现部分,主要是利用 C 语言进行程序的编写,完成电路的测量功能。第五章为总结和展望,总结本课题设计的总体思路,产品的功能以及对于产品功能升级等进行情景展望。第二章 电子万年历的工作概述以及原理分析2.1 电子万年历的工作概述电子万年历是由数据采
15、集,MCU,输入输出,数据存储四个功能部分构成。其中数据的采集是由 DS1302 和 DS18B20 来完成的,DS1302 芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高。数字式温度传感器 DS18B20,仅需要一条数据线进行数据传输,易于与单片机连接,可以去除 A/D 模块,降低硬件成本,简化系统电路。当数据送入 AT89S51 单片机后,单片机将对 INT1 脚的信号进行计数,当计数的脉冲达到1KM 的时候,INT1 申请中断,对外输出信号,输出的信号由显示部分送 LCD 进行显示,显示当前日期、时间、温度。其中键盘是人机交互的接口,系
16、统设计使得键盘能够实现调节日期、时间的功能。2.2 确保电子万年历的工作性能稳定的相关措施电子万年历能实时地将所测的温度和当前时间显示出来,主要是 DS1302 通过串行口与单片机进行通讯,实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息。每个月的天数和闰年的天数可与自动调整,时钟操作可以通过AM/PM 标志位决定采用 24 或 12 小时时间格式。DS1302 与单片机之间能采用简单的同步串行进行通信仅需三根 I/O 线。D S18B20 在 与 微 处 理 器 连 接 时 仅 需 要 一条 口 线 即 可 实 现 微 处 理 器 与 DS18B20 的 双 向 通 讯 。 其 测
17、温 范 围 55 +125 , 固 有 测 温 分 辨 率 0.5 。设计应综合考虑测温精度和系统反应时间。本设计采用 9 位的分辨率,因而具有较高的快的计算速度。在计算环境温度的时候省去了末尾几位。为了保证系统的实时性,系统的速度转换模块和显示数据转 BCD 码模块都采用快速算法。另外,还应尽量保证其他子模块在编程时的通用性和高效性。本设计的里程值采用两位显示。2.3 系统硬件电路总体结构框图LED 数码管动态扫描显示模块DS1302 时钟模块键盘模块温度采集模块AT89S52主控制模 块图 2-1 电子万年历总体结构框图2.4 电子万年历总体电路原理图电子万年历总体电路原理图由 DS130
18、2 和 DS18B20 电路以及单片机开发板电路三部分组成。图 2-2 为电路总原理图之一,单片机开发板电路的电路原理图。图 2-2 电子万年历电2.5 各部分单元电路介绍2.5.1 DS18B20 温度传感器电路介绍 DS18B20 是在一根 I/O 线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20 有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完
19、成数据接收。数据和命令的传输都是低位在先。DS18B20 温度传感器电路图如图 2-4 所示图 2-4 基于运放的有源滤波器电路图2.5.2 DS1302 电路DS1302 采 用 三 线 接 口 与 CPU 进 行 同 步 通 信 , 并 可 采 用 突 发 方 式 一 次 传 送多 个 字 节 的 时 钟 信 号 或 RAM 数 据 。 DS1302 内 部 有 一 个 318 的 用 于 临 时 性 存放 数 据 的 RAM 寄 存 器 。 DS1302 是 DS1202 的 升 级 产 品 , 与 DS1202 兼 容 , 但增 加 了 主 电 源 /后 备 电 源 双 电 源 引 脚
20、 , 同 时 提 供 了 对 后 备 电 源 进 行 涓 细 电 流 充电 的 能 力 。 DS1302 电路原理图如图 2-5 所示图 2-5 基于运放的信号放大电路2.5.3 单片机最小系统电路单片机最小系统电路由单片机、单片机复位电路、晶体振荡回路组成,能够完成单片机工作的最基本需要,单片机最小系统电路如图 2-6 所示EA/VP31X119 X218RESET9RD17 WR16INT012 INT113T014 T115P101 P112P123 P134P145 P156P167 P178P00 39P01 38P02 37P03 36P04 35P05 34P06 33P07 3
21、2P20 21P21 22P22 23P23 24P24 25P25 26P26 27P27 28PSEN 29ALE/P30TXD 11RXD 10U1AT89C51C130PC230PY1CRYSTALR1R2C4S1P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P27P10P11P12P13P14P15P16P17P30P31P32P33P34P35P36P37 ALERSTPSEN*X1X2VCC图 2-6 单片机最小系统电路2.5.4 1602 液晶显示电路单片机将计算处理的结果采用 1602 液晶进行显示,显示电路的电路原理图如图 2-7
22、 所示P1.0P1.0P1.P1.P1.2P1.2P1.3P1.3P1.4P1.4P1.5P1.5P1.6P1.6P1.7P1.7RSTRSTP3.0P3.0P3.1P3.1P3.2P3.2P3.P3.P3.4P3.4P3.5P3.5P3.6P3.6P3.7P3.7X2X2X1X1GNDGNDP2.0P2.0P2.1P2.1P2.P2.P2.3P2.3P2.4P2.4P2.5P2.5P2.6P2.6P2.7P2.7PSENPSENALEALEEAEAP0.7P0.7P0.6P0.6P0.5P0.5P0.4P0.4P0.3P0.3P0.2P0.2P0.1P0.1P0.P0.VCVCU3 AT89
23、S51GNDVCVLRSRWED0D1D2D3D4D5D6D7PSBNCRSTVOBL+BL-12864三三三R21 1.5M三三R20 1.5P1.2P1.1P1.0P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7VC三三三三三+ 三三- 三三三三三三三三三三三三三三三三三8三三三三三三三三三三三三三三三/三三三三三三三三三 三三三三三三E三三RW三三RSVC图 2-7 1602 液晶显示电路第三章 应用 Protel 实现电路原理图的绘制及 PCB 设计3.1Protel 简介使用电脑设计电路原理图和电路板图是把电子技术从理论运用到实际的第一步。只有会设计电路原理图和电路板
24、图才能进行电子产品的研发与开发。本软件就是从理论走向实际,掌握电子产品开发的基本技术。Protel99SE 是澳大利亚 ProtelTechnology 公司推出的一个全 32 位的电路板设计软件。该软件功能强大,人机界面友好,易学易用,使用该软件设计者可以容易设计电路原理图、画元件图、设计电路板图、画元件封装图和电路仿真,是夜内人士首选的电路板设计工具。3.2 绘制电路原理图的主要步骤1、进入 Protel 99SE 环境2、使用菜单 File/New 建立新设计数据库文件3、使用菜单 File/New 在打开窗口选择 Schematic Document 图标,建立新原理图文件4、将原理图
25、打开5、设置画图环境6、添加元件库7、将所需元件从元件库中取出来,放置在图纸上,并且调整好位置8、使用连线工具将元件连起来,设置元件属性,对元件进行编号9、进行电气规格检查(ERC)10、建立网络表,为制作电路板图做准备3.3PCB 人工布局、人工布线设计人工布局就是将所有的元件一个一个放置到 PCB 上各个位置。操作较为繁琐,但是能够结合工艺的要求以及设计中实际要求进行,人工布局的效果一般来说效果要比自动布局好很多。在设计中,工程师基本都是采用自动布局的方案进行。这也要求作为电路板设计人员要具有丰富的经验以及长时间坚持的毅力。元件的布局与走线对产品的寿命、稳定性、电磁兼容都有很大的影响,是应
26、该特别注意的地方。一般来说应该有以下一些原则:在放置顺序上应该先放置与结构有关的固定位置的元器件,如电源插座、指示灯、开关、连接件之类,这些器件放置好后用软件的 LOCK 功能将其锁定,使之以后不会被误移动。再放置线路上的特殊元件和大的元器件,如发热元件、变压器、IC 等。最后放置小器件。元件布局还要特别注意散热问题。对于大功率电路,应该将那些发热元件如功率管、变压器等尽量靠边分散布局放置,便于热量散发,不要集中在一个地方,也不要高电容太近以免使电解液过早老化。 布线原则,每人都会有自己的体会,但还是有些通行的原则的。高频数字电路走线细一些、短一些好,大电流信号、高电压信号与小信号之间应该注意
27、隔离(隔离距离与要承受的耐压有关,通常情况下在 2kv 时板上要距离 2mm,在此之上以比例算还要加大,例如若要承受 3KV的耐压测试,则高低压线路之间的距离应在 3.5mm 以上,许多情况下为避免爬电,还在印制线路板上的高低压之间开槽。),两面板布线时,两面的导线宜相互垂直、斜交、或弯曲走线,避免相互平行,以减小寄生耦合;作为电路的输人及输出用的印制导线应尽量避兔相邻平行,以免发生回授,在这些导线之间最好加接地线。走线拐角尽可能大于 90 度,杜绝 90 度以下的拐角,也尽量少用 90 度拐角同是地址线或者数据线,走线长度差异不要太大,否则短线部分要人为走弯线作补偿。走线尽量走在焊接面,特别
28、是通孔工艺的 PCB,尽量少用过孔、跳线,单面板焊盘必须要大,焊盘相连的线一定要粗,能放泪滴就放泪滴,一般的单面板厂家质量不会很好,否则对焊接和 RE-WORK 都会有问题,大面积敷铜要用网格状的,以防止波焊时板子产生气泡和因为热应力作用而弯曲,但在特殊场合下要考虑 GND 的流向,大小,不能简单的用铜箔填充了事,而是需要去走线,元器件和走线不能太靠边放,一般的单面板多为纸质板,受力后容易断裂,如果在边缘连线或放元器件就会受到影响;必须考虑生产、调试、维修的方便性;模拟电路来说处理地的问题是很重要的,地上产生的噪声往往不便预料,可是一旦产生将会带来极大的麻烦,应该未雨绸缎。对于功放电路,极微小
29、的地噪声都会因为后级的放大对音质产生明显的影响;在高精度 A/D 转换电路中,如果地线上有高频分量存在将会产生一定的温漂,影响放大器的工作。这时可以在板子的 4 角加退藕电容,一脚和板子上的地连,一脚连到安装孔上去(通过螺钉和机壳连),这样可将此分量虑去,放大器及 AD 也就稳定了。另外,电磁兼容问题在目前人们对环保产品倍加关注的情况下显得更加重要了。一般来说电磁信号的来源有 3 个:信号源,辐射,传输线。晶振是常见的一种高频信号源,在功率谱上晶振的各次谐波能量值会明显高出平均值。可行的做法是控制信号的幅度,晶振外壳接地,对干扰信号进行屏蔽,采用特殊的滤波电路及器件等。第四章 电子万年历 C
30、程序的编写与实现4.1 程序流程框图图-A 主程序流程图开始初始化读、写日期、时间和温度分离日期时间温度显示值显示子程序农历自动更新子程序日期、时间修改子程序闰月子程返回定时闹铃子程序图-B 计算阳历程序流程图图-C 时间调整程序流程图图-D 阴历程序流程图4.2 电子万年历 C 语言程序4.2.1 键盘扫描部分程序if(key1=0)/-key1 为功能键(设置键)-delay(9);/延时,用于消抖动if(key1=0)/延时后再次确认按键按下buzzer=0;/蜂鸣器短响一次delay(20);buzzer=1;while(!key1);key1n+;if(key1n=9)key1n=1
31、;/设置按键共有秒、分、时、星期、日、月、年、返回,8 个功能循环switch(key1n)case 1: TR0=0;/关闭定时器/TR1=0;write_1602com(er+0x09);/设置按键按动一次,秒位置显示光标write_1602com(0x0f);/设置光标为闪烁temp=(miao)/10*16+(miao)%10;/秒数据写入 DS1302write_1302(0x8e,0x00);write_1302(0x80,0x80|temp);/miaowrite_1302(0x8e,0x80);break;case 2: write_1602com(er+6);/按 2 次 f
32、en 位置显示光标/write_1602com(0x0f);break;case 3: write_1602com(er+3);/按动 3 次,shi/write_1602com(0x0f);break;case 4: write_1602com(yh+0x0e);/按动 4 次,week/write_1602com(0x0f);break;case 5: write_1602com(yh+0x0a);/按动 5 次,ri/write_1602com(0x0f);break;case 6: write_1602com(yh+0x07);/按动 6 次,yue/write_1602com(0x0
33、f);break;case 7: write_1602com(yh+0x04);/按动 7 次,nian/write_1602com(0x0f);break;case 8:write_1602com(0x0c);/按动到第 8 次,设置光标不闪烁TR0=1;/打开定时器temp=(miao)/10*16+(miao)%10;write_1302(0x8e,0x00);write_1302(0x80,0x00|temp);/miao 数据写入 DS1302write_1302(0x8e,0x80);break;/-加键 key2-if(key1n!=0)/当 key1 按下以下。再按以下键才有效
34、(按键次数不等于零)if(key2=0) /上调键delay(10);if(key2=0)buzzer=0;/蜂鸣器短响一次delay(20);buzzer=1;while(!key2);switch(key1n)case 1:miao+;/设置键按动 1 次,调秒if(miao=60)miao=0;/秒超过 59,再加 1,就归零write_sfm(0x08,miao);/令 LCD 在正确位置显示“ 加“设定好的秒数temp=(miao)/10*16+(miao)%10;/十进制转换成 DS1302 要求的 DCB码write_1302(0x8e,0x00); /允许写,禁止写保护 wri
35、te_1302(0x80,temp); /向 DS1302 内写秒寄存器 80H 写入调整后的秒数据 BCD 码write_1302(0x8e,0x80); /打开写保护write_1602com(er+0x09);/因为设置液晶的模式是写入数据后,光标自动右移,所以要指定返回/write_1602com(0x0b);break;case 2:fen+;if(fen=60)fen=0;write_sfm(0x05,fen);/令 LCD 在正确位置显示“加“设定好的分数据temp=(fen)/10*16+(fen)%10;/十进制转换成 DS1302 要求的 DCB 码write_1302(0
36、x8e,0x00);/允许写,禁止写保护 write_1302(0x82,temp);/向 DS1302 内写分寄存器 82H 写入调整后的分数据 BCD 码write_1302(0x8e,0x80);/打开写保护write_1602com(er+6);/因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置break;case 3:shi+;if(shi=24)shi=0;write_sfm(2,shi);/令 LCD 在正确的位置显示 “加“设定好的小时数据temp=(shi)/10*16+(shi)%10;/十进制转换成 DS1302 要求的 DCB 码write_1302
37、(0x8e,0x00);/允许写,禁止写保护 write_1302(0x84,temp);/向 DS1302 内写小时寄存器 84H 写入调整后的小时数据 BCD 码write_1302(0x8e,0x80);/打开写保护write_1602com(er+3);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位break;case 4:week+;if(week=8)week=1;write_1602com(yh+0x0C);/指定 加 后的周数据显示位置write_week(week);/指定周数据显示内容temp=(week)/10*16+(week)%10;/十进制转换成
38、DS1302 要求的DCB 码write_1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x8a,temp);/向 DS1302 内写周寄存器 8aH 写入调整后的周数据 BCD 码write_1302(0x8e,0x80);/打开写保护write_1602com(yh+0x0e);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位break;case 5:ri+;if(ri=32)ri=1;write_nyr(9,ri);/令 LCD 在正确的位置显示“ 加“设定好的日期数据temp=(ri)/10*16+(ri)%10;/十进制转换成 DS130
39、2 要求的 DCB 码write_1302(0x8e,0x00);/允许写,禁止写保护write_1302(0x86,temp);/向 DS1302 内写日期寄存器 86H 写入调整后的日期数据 BCD 码write_1302(0x8e,0x80);/打开写保护write_1602com(yh+10);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位break;case 6:yue+;if(yue=13)yue=1;write_nyr(6,yue);/令 LCD 在正确的位置显示“ 加“设定好的月份数据temp=(yue)/10*16+(yue)%10;/十进制转换成 DS13
40、02 要求的 DCB 码write_1302(0x8e,0x00);/允许写,禁止写保护write_1302(0x88,temp);/向 DS1302 内写月份寄存器 88H 写入调整后的月份数据 BCD 码write_1302(0x8e,0x80);/打开写保护write_1602com(yh+7);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位break;case 7:nian+;if(nian=100)nian=0;write_nyr(3,nian);/令 LCD 在正确的位置显示 “加“设定好的年份数据temp=(nian)/10*16+(nian)%10;/十进制转
41、换成 DS1302 要求的 DCB码write_1302(0x8e,0x00);/允许写,禁止写保护write_1302(0x8c,temp);/向 DS1302 内写年份寄存器 8cH 写入调整后的年份数据 BCD 码write_1302(0x8e,0x80);/打开写保护write_1602com(yh+4);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位break;/-减键 key3,各句功能参照加键 注释-if(key3=0)delay(10);/调延时,消抖动if(key3=0)buzzer=0;/蜂鸣器短响一次delay(20);buzzer=1;while(!k
42、ey3);switch(key1n)case 1:miao-;if(miao=-1)miao=59;/秒数据减到-1 时自动变成 59write_sfm(0x08,miao);/在 LCD 的正确位置显示改变后新的秒数temp=(miao)/10*16+(miao)%10;/十进制转换成 DS1302 要求的DCB 码write_1302(0x8e,0x00); /允许写,禁止写保护 write_1302(0x80,temp); /向 DS1302 内写秒寄存器 80H 写入调整后的秒数据 BCD 码write_1302(0x8e,0x80); /打开写保护write_1602com(er+0
43、x09);/因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置/write_1602com(0x0b);break;case 2:fen-;if(fen=-1)fen=59;write_sfm(5,fen);temp=(fen)/10*16+(fen)%10;/十进制转换成 DS1302 要求的 DCB 码write_1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x82,temp);/向 DS1302 内写分寄存器 82H 写入调整后的分数据 BCD 码write_1302(0x8e,0x80);/打开写保护write_1602com(er+6
44、);/因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置break;case 3:shi-;if(shi=-1)shi=23;write_sfm(2,shi);temp=(shi)/10*16+(shi)%10;/十进制转换成 DS1302 要求的 DCB 码write_1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x84,temp);/向 DS1302 内写小时寄存器 84H 写入调整后的小时数据 BCD 码write_1302(0x8e,0x80);/打开写保护write_1602com(er+3);/因为设置液晶的模式是写入数据后,指针自
45、动加一,所以需要光标回位break;case 4:week-;if(week=0)week=7;write_1602com(yh+0x0C);/指定 加 后的周数据显示位置write_week(week);/指定周数据显示内容temp=(week)/10*16+(week)%10;/十进制转换成 DS1302 要求的DCB 码write_1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x8a,temp);/向 DS1302 内写周寄存器 8aH 写入调整后的周数据 BCD 码write_1302(0x8e,0x80);/打开写保护write_1602com(yh+
46、0x0e);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位break;case 5:ri-;if(ri=0)ri=31;write_nyr(9,ri);temp=(ri)/10*16+(ri)%10;/十进制转换成 DS1302 要求的 DCB 码write_1302(0x8e,0x00);/允许写,禁止写保护write_1302(0x86,temp);/向 DS1302 内写日期寄存器 86H 写入调整后的日期数据 BCD 码write_1302(0x8e,0x80);/打开写保护write_1602com(yh+10);/因为设置液晶的模式是写入数据后,指针自动加一,所以
47、需要光标回位break;case 6:yue-;if(yue=0)yue=12;write_nyr(6,yue);temp=(yue)/10*16+(yue)%10;/十进制转换成 DS1302 要求的 DCB 码write_1302(0x8e,0x00);/允许写,禁止写保护write_1302(0x88,temp);/向 DS1302 内写月份寄存器 88H 写入调整后的月份数据 BCD 码write_1302(0x8e,0x80);/打开写保护write_1602com(yh+7);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位break;case 7:nian-;if
48、(nian=-1)nian=99;write_nyr(3,nian);temp=(nian)/10*16+(nian)%10;/十进制转换成 DS1302 要求的 DCB 码write_1302(0x8e,0x00);/允许写,禁止写保护write_1302(0x8c,temp);/向 DS1302 内写年份寄存器 8cH 写入调整后的年份数据 BCD 码write_1302(0x8e,0x80);/打开写保护write_1602com(yh+4);/因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位break;4.2.2 DS18B20 部分程序void DS18_delay(int useconds) int s;for (s=0; si; temp write_bit(temp); DS18_delay(5);位读取函数功能:从单总线上读取一位信号,所需延时时间为 15s,因此无法调用前面定义* 的 DS18_delay()函数,而采用一个 for()循环来实现延时。* unsigned char read_bit(