您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页基于单片机电子万年历_的设计毕业论文

基于单片机电子万年历_的设计毕业论文

来源:华佗小知识


毕业设计(论文)说明书

课题名称:基于单片机的电子万年历设计

院 (系):

专 业: 班 级: 学生姓名: 学 号:

指导教师:

I

摘 要

电子万年历是一种应用非常广泛日常计时工具,对现代社会越来越重要。此电子万年历在硬件方面主要采用STCC52单片机作为主控核心,由DS1302时钟芯片提供时钟、1602LCD液晶显示屏显示。STCC52单片机是由宏晶公司推出的,功耗小,电压可选用4~6V电压供电;DS1302时钟芯片是美国DALLAS公司推出的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;对于数字电子万年历采用直观的数字显示,数字显示是采用的1602LED液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。此外,该电子万年历还具有时间校准等功能。在软件方面,主要包括日历程序、时间调整程序,显示程序等。所有程序编写完成后,在Keil软件中进行调试,确定没有问题后,烧写到单片机上进行测试。

此设计主要由时钟芯片DS1302和温度传感器DS18B20采集数据到单片机进行处理再通过LCD1602显示出来,本论文主要研究了液晶显示器LCD及时钟芯片DS1302,温度传感器DS18B20与单片机之间的硬件互联及通信,对数种硬件连接方案进行了详尽的比较,在软件方面对日历算法也进行了论述。

关键词:单片机;DS1302;DS18B20;LCD1602

II

Abstract

Electronic calendar is a widely used tool for the daily time, more and more important in modern society. The electronic calendar in terms of hardware as the main control mainly STCC52 microcontroller core, provided by the DS1302 clock chip clock, 1602LCD LCD display. STCC52 microcontroller by Hongjing introduced, the power consumption, voltage can be selected 4 ~ 6V voltage power supply; DS1302 clock chip introduced in the United States DALLAS low-power real time clock chip, which can be year, month, day, week, hours, minutes and seconds time, but also has leap-year compensation, and other functions, and the DS1302's long life, small error; for digital electronic calendar using an intuitive digital display, digital display is used 1602LED LCD screen to display, you can also shows year, month, day, week, hours, minutes, seconds and other information. In addition, the electronic calendar is also a time calibration and other functions. In terms of software, including calendar, time to adjust procedures, display procedures. All programming is completed, the Keil software debugging, make sure that no problem, programmed into the microcontroller for testing.

This design mainly by the clock chip DS1302 temperature sensor to the microcontroller DS18B20 collect data for processing and then through the LCD1602 display, this thesis, the liquid crystal display LCD and clock chip DS1302, temperature sensor and microcontroller DS18B20 interconnection and communication between the hardware on Several hardware connection scheme for a detailed comparison of algorithms in software on the calendar have also been discussed.

Key words: SCM; DS1302; DS18B20; LCD1602

III

目 录

摘 要 .................................................................................................................................................................... II Abstract .............................................................................................................................................................. III 第 1 章 绪 论 .................................................................................................................................................. 1

1.1课题背景 ............................................................................................................................................... 1 1.2 课题意义 .............................................................................................................................................. 1 1.3国内外现状及水平 ............................................................................................................................... 1 第2章基于单片机万年历的方案研究 .............................................................................................................. 2

2.1 系统基本方案选择和论证 .................................................................................................................. 2

2.1.1 单片机芯片的选择 .................................................................................................................. 2 2.1.2 显示模块选择方案和论证 ...................................................................................................... 2 2.1.3 时钟芯片的选择方案和论证 .................................................................................................. 3 2.1.4 温度传感器的选择方案与论证 .............................................................................................. 3 2.2 电路设计最终方案决定 ...................................................................................................................... 4 2.3 DS1302,DS18B20和LCD1602的原理及说明 ................................................................................... 4

2.3.1 LCD1602工作原理及说明 ....................................................................................................... 4 2.3.2 DS1302原理及说明 ................................................................................................................. 5 2.3.3 DS18B20工作原理及说明 ....................................................................................................... 6

第3章 系统的硬件设计与实现 ........................................................................................................................ 7

3.1电路设计框图 ....................................................................................................................................... 7 3.2系统硬件概述 ....................................................................................................................................... 7 3.3 主要模块电路的设计 .......................................................................................................................... 8

3.3.1 STCC52单片机主控制模块的设计 ..................................................................................... 8 3.3.2时钟电路模块的设计 ............................................................................................................. 10 3.3.3温度采集模块设计 ..................................................................................................................11 3.3.4 显示模块的设计 .....................................................................................................................11 3.4各模块电路原理图 ............................................................................................................................. 12

3.4.1电源电路 ................................................................................................................................. 12 3.4.2复位电路 ................................................................................................................................. 12 3.4.3振荡电路 ................................................................................................................................. 13 3.4.4温度采集电路 ......................................................................................................................... 13 3.4.5蜂鸣器电路 ............................................................................................................................. 14 3.4.6显示电路 ................................................................................................................................. 15 3.4.7键盘电路 ................................................................................................................................. 15

第4章 系统的软件设计 .................................................................................................................................. 17

4.1 程序流程框图: ................................................................................................................................ 17 第5章 系统测试 .............................................................................................................................................. 18

5.1 硬件测试 ............................................................................................................................................ 18 5.2 软件测试 ............................................................................................................................................ 18 结束语 ................................................................................................................................................................ 19 致谢 .................................................................................................................................................................... 20 参考文献 ............................................................................................................................................................ 21 附录1:程序 ..................................................................................................................................................... 22

IV

第 1 章 绪 论

1.1课题背景

在当代繁忙的工作与生活中,时间与我们每一个人都有非常密切的关系,每个人都受到时间的影响,随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。为了在观测时间的同时,能够了解其它与人类密切相关的信息,比如温度、星期、日期等,电子万年历诞生了,它集时间、日期、星期和温度功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势。伴随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便,作为一种附加功能,现在越来越广泛的被应用于各种电子产品中,具有广阔的市场前景。

1.2 课题意义

电子万年历作为电子类小产品不仅是市场上的宠儿,也是是单片机设计培训中一个很实用的题目。因为这个课题有很好的开放性和可发挥性,对制作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且要求设计的电子万年历在操作上力求简洁,功能上尽量齐全,显示界面也要出色。所以,电子万年历制作无论从实用目的,还是从培养能力的角度来看都是很有价值的毕业设计课题。本电子万年历的设计在硬件方面主要采用STCC52单片机作为主控核心,由DS1302时钟芯片提供时钟、1602LCD液晶显示屏显示。STCC52单片机是由宏晶公司推出的,功耗小,电压可选用4~6V电压供电;DS1302时钟芯片是美国DALLAS公司推出的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,而且DS1302的使用寿命长,误差小;数字显示是采用的LED液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。此外,该电子万年历还具有时间校准等功能。在软件方面,主要包括日历程序、时间调整程序,显示程序等。所有程序编写完成后,在Keil软件中进行调试,确定没有问题后,烧写到单片机上进行测试。最后在老师同学的帮助以及自己的努力下完成了此次电子万年历的设计。

1.3国内外现状及水平

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着非常现实的意义。它可以对

1

年、月、日、周日、时、分、秒进行计时,对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。

综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。近些年我国也开始重视对电子万年历的开发与设计,让更多的电子时钟能够走进人民生活,跟多人能够应用到功能强大,精度高的电子时钟。但是仍然存在很多问题。

中国电子万年历产业发展出现的问题中,许多情况不容乐观,如产业结构不合理、产业集中于劳动力密集型产品;技术密集型产品明显落后于发达工业国家;生产要素决定性作用正在削弱;产业能源消耗大、产出率低、环境污染严重、对自然资源破坏力大;企业总体规模偏小、技术创新能力薄弱、管理水平落后等。

从什么角度分析中国电子万年历产业的发展状况?以什么方式评价中国电子万年历产业的发展程度?中国电子万年历产业的发展定位和前景是什么?中国电子万年历产业发展与当前经济热点问题关联度如何……诸如此类,都是电子万年历产业发展必须面对和解决的问题——中国电子万年历产业发展已到了岔口;中国电子万年历产业生产企业急需选择发展方向。

中国电子万年历产业发展研究报告阐述了世界电子万年历产业的发展历程,分析了中国电子万年历产业发展现状与差距,开创性地提出了“新型电子万年历产业” 及替代品产业概念,在此基础上,从四个维度即“以人为本”、“科技创新”、“环境友好”和“面向未来”准确地界定了“新型电子万年历产业” 及替代产品的内涵。根据“新型电子万年历产业” 及替代品的评价体系和量化指标体系,从全新的角度对中国电子万年历产业发展进行了推演和精准预测,在此基础上,对中国的行政区划和四大都市圈的电子万年历产业发展进行了全面的研究。

第2章基于单片机万年历的方案研究

2.1 系统基本方案选择和论证

2.1.1 单片机芯片的选择

本设计采用STCC52芯片作为硬件核心,该芯片采用Flash ROM,内部具有8KB ROM存储空间,相对于本设计而言程序空间完全够用。能于5V电压工作,而且与MCS-51系列单片机完全兼容,而且运用于电路设计中时具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,避免芯片的多次拔插对芯片造成的损坏。

2.1.2 显示模块选择方案和论证

方案一:

采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显

2

示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。

方案二:

采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。但是由于数码管动态扫描需要借助74LS1移位寄存器进行移位,该芯片在电路调试时往往会有很多障碍,所以不采用LED数码管作为显示。

方案三:

采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,对于电子万年历而言,一个1602的液晶屏即可,价格也还能接受,需要的接口线较多,但会给调试带来诸多方便,所以此设计中采用LCD1602液晶显示屏作为显示模块。

2.1.3 时钟芯片的选择方案和论证

方案一:

直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然可以减少时钟芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。

方案二:

采用DS1302时钟芯片实现时钟,DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。因此,本设计中采用DS1302提供时钟。 2.1.4 温度传感器的选择方案与论证

方案一:

使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换。此设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差。

方案二:

采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数

3

据线进行数据传输,易于与单片机连接,可以避免A/D模数转换模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量范围广等优点。因此,本设计DS18B20温度传感器作为温度采集模块。

2.2 电路设计最终方案决定

综上各模块的选择方案与论证,确定最后的主要硬件资源如下:采用STCC52

作为主控制系统;DS1302提供时钟;DS18B20作为数字式温度传感器;LCD1602液晶屏作为显示。

2.3 DS1302,DS18B20和LCD1602的原理及说明

2.3.1 LCD1602工作原理及说明

(1)寄存器选择控制

1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符,图形寄存器选择控制表如表2.1所示:

表2.1 LCD1602寄存器选择控制表

RS

0 0 1 1

R/W 操作说明 0 1 0 1

写入指令寄存器(清屏指令等) 读busy flag,以及读取位址计数器(DB0~DB6)的值 写入数据寄存器(显示各字型等) 从数据寄存器读取数据

(2)指令集

1602通过D0~D7的8位数据端传输数据和指令。显示模式设置(初始化)00111000[0x38]设置16×2显示,5×7点阵,8位数据接口;显示开关及光标设置:(初始化) 00001DCBD显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)。000001NS N=1(读或写一个字符后地址指针加1并且光标加1),N=0(读或写一个字符后地址指针减1并且光标减1),S=1且N=1(当写一个字符后,整屏显示左移),S=0当写一个字符后,整屏显示不移动。数据指针设置:数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)。其他设置:01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。

4

2.3.2 DS1302原理及说明 (1) 时钟芯片DS1302的工作原理

DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把

RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图2.2所示。图2.1为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表2.2为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。

(2) DS1302的控制字

DS1302的控制字如图2.1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。

图2.1 DS1302的控制字

(3) 数据输入输出

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图2.2所示:

5

图2.2 DS1302读与写的时序图

(3) DS1302的寄存器

DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表2.2。

表2.2 DS1302的日历、时间寄存器

此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 2.3.3 DS18B20工作原理及说明

DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 DS18B20测温原理如图2.3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数

6

器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2.3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

图2.3 DS18B20测温原理框图

第3章 系统的硬件设计与实现

3.1电路设计框图

本系统的电路系统框图如图3.1所示。STCC52单片机对DS1302和DS18B20

写入控制字并读取相应的数据,继而控制LCD1602作出对应的显示。 按键控制模块 温度采集模块 LCD1602液晶显示模块 STCC52主控模块 蜂鸣器模块 图3.1 系统硬件框图 DS1302时钟模块 3.2系统硬件概述

本电路是由STCC52单片机作为控制核心,能在5V电压工作,STCC52是一个低功

7

耗,高性能CMOS 8位单片机,片内含8kBytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C52引脚结构,芯片内集成了通用8位处理器和ISP Flash存储单元,功能强大的微型计算机的STCC52可为许多嵌入式控制应用系统提供高性价比的解决方案;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的采集由DS18B20完成,它具有独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,测温范围 -55℃~+125℃,固有测温分辨率0.5℃,支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温,工作电源:3~5V/DC,在使用中不需要任何外围元件;显示部份由LCD1602液晶显示器完成,该显示器为工业字符型液晶,能够同时显示16x02即32个字符(16列2行)。

3.3 主要模块电路的设计

3.3.1 STCC52单片机主控制模块的设计

STC系列单片机是由STMicroelectronics 公司生产,并有宏晶公司做代理的。本设计使用STCC52作为控制核心,其管脚兼容其他51系列的单片机,以下对STCC52进行简单讲解。

STCC52单片机包含处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。采用40Pin封装的双列直接DIP结构,图3.2是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在对各引脚功能说明如下(图3.2): (1)主电源引脚 Vcc :接+5V电源正端。 Vss :接+5V电源地端。 (2)输入/输出引脚

P.0~P0.7:P0口的8个引脚。在不接片外存储器与不扩展I/O接口时,可作为准双向输入/输出接口。在接有片外存储器或扩展I/O接口

8

图3.2 STCC52单片机管脚图

时,P0口分时复用为低8位地址总线和双向数据总线。

P1.0~P1.7:P1口的8个引脚。可作为准双向I/O接口使用。对于52子系列,P1.0 与 P1.1还有第二种功能:P1.0 可用作定时器/计数器2的计数脉冲输入端T2。P1.1可用作定时器/计数器2的外部控制端T2EX。

P2.0~P2.7:P2口的8个引脚。可作为准双向I/O接口;有接有片外存储器或扩展I/O接口且寻址范围超过256个字节时,P2口用作高8位地址总线。

P3.0~P3.7:P3口的8个引脚。除作为准双向I/O接口使用外,还具有第二种功能 ,详见表3.1。

表3.1 P3口第二功能表

引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 第二功能 RXD(串行口输入) TXD(串行口输出) ¯NI¯T¯0¯(外部中断0输入) ¯NI¯T¯1¯(外部中断1输入) T0(定时器0的外部输入) T1(定时器1的外部输入) ¯RW¯(片外数据存储器写控制信号) ¯DR¯(片外数据存储器读控制信号) (3)控制总线

ALE/PROG:地址锁存有效信号输出端。在访问片外程序存储器期间,每机器周期该信号出现两次,其下降沿用于控制锁存P0口输出的低8位地址。对于片内含EPROM的机型,在编程期间,此引脚用作编程脉冲PROG的输入端。

PSEN:片外程序存储器读选通信号输出端,或称片外取指信号输出端。在向片外程序存储器读取指令或常数期间,每个机器周期该信号两次有效(低电平),以通过数据总线P0口读回指令或常数。在访问片外数据存储器期间,PSEN信号将不出现。

RST/V:(RST 是 RETET 简略写法。)是复位端。单片机的振荡器工作时,该引脚上出现持续两个机器周期的高电平就可实现复位操作,使单片机回复到初始状态。上电时,考虑到振荡器有一定的起振时间,该引脚上高电平必须持续10ms以上才能保证有效复位。

Vcc掉电期间,该引脚如接备用电源VPD(电压范围+4.5V至+5.5V),可用于保存片内RAM中的数据。当Vcc下降到某规定值以下VPD,便向片内RAM供电。

EA/VDD:片外程序存储器选用端。该引脚有效(低电平)时只选用片外程序存储器,否则计算机上电或6复位后先选用片内程序存储器。

(4)外接晶振引脚

XTAL1:片内反相放大器输入端。

XTAL2:片内反相放大器输出端。外接晶体时,XTAL1和 XTAL2各接晶体的一端,借外接晶体与片内反相放大器构成振荡器。

9

图3.3单片机最小系统

3.3.2时钟电路模块的设计

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周、时、分、秒进行计时,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK为时钟输入端。DS1302的控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时

10

钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。实际上,在调试程序时可以不加电容器,只加一个32.768kHz 的晶振即可。只是选择晶振时,不同的晶振,误差也较大。另外,还可以在上面的电路中加入DS18B20,同时显示实时温度。只要占用CPU一个口线即可。 3.3.3温度采集模块设计

采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P3.5与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0V至5.5V无需备用电源 测量温度范围为-55度至+125度。-10度至+85度范围内精度为±0.5度温度传感器可编程的分辨率为9~12位。

3.3.4 显示模块的设计

采用LCD1602液晶显示器,单片机P0口作为数据输出口,通过10R的上拉电阻连接到VCC,VCC接5V电源,GND接地。GND为液晶显示器对比度调整端,可以通过滑动变阻器RH1调显示器的对比度(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。E(或EN)端为使能(enable)端,下降沿使能。DB0-DB7为双向数据总线,同时最高位DB7也是忙信号检测位。BLA、BLK分别为显示器背光灯的正、负极。

11

3.4各模块电路原理图

3.4.1电源电路

由电池盒接口供5V电压,此电源电路能够给单片机提供稳定的电压,使系统能够稳定工作如图3.7所示

图3.7电源电路

3.4.2复位电路

无论用户使用哪种类型的单片机 ,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的,本电路设计采用可靠的手动复位方式,单片机复位电路如图3.8所示

12

图3.8复位电路

3.4.3振荡电路

对于一个高可靠性的系统设计,晶体的选择非常重要。在振荡回路中,晶体既不能过激励(容易产生高次谐波)也不能欠激励(不容易起振)。晶体的选择至少必须考虑:谐振频点,负载电容,激励功率,温度特性,长期稳定性。

在本设计中采用了12MHZ的晶振。单片机振荡电路如图图3.9所示。

图3.9震荡电路

3.4.4温度采集电路

单片机使用VCC与上拉电阻相连,再与DS18B20的2号引脚相接,上拉电阻取值10K。温度传感器采用外部供电方案,由1、3引脚提供电源。电路图如下图3.10:

13

图3.10温度采集电路

3.4.5蜂鸣器闹铃电路

采用三极管驱动蜂鸣器的方式

图3.11串口通信电路

14

3.4.6显示电路

显示电路由1602液晶接口插槽组成,如下图3.12所示。液晶显示器R/W端接P0.1。

使能端E由单片机P0.2引脚控制,数据/命令选择端由单片机的P0.0引脚控制。由于P0口是开漏,所以控制端分别接上拉电阻。偏压信号VL端与滑动变阻器相连,通过滑动变阻器可以调节显示器的显示对比度。显示器数据端口与单片机的P2对应相连,单片机通过P2口可以向显示器中输入控制命令或要显示的字符。

图3.12显示电路

3.4.7键盘电路

按键电路采用按键方式,用来设置闹铃,调整时间等。

15

图3.13按键电路

16

第4章 系统的软件设计

程序流程框图:

开始 系统初始化 判断DS1302是 N 初始化时间 否设置过时间 Y While(1)大循环 Y N

按键扫描 flag是否为 N 1 Y Y 闹钟设置 显示时间 4.1

17

图4.1主程序流程图

主程序流程图如上图4.1所示。由于LCD1602,DS18B20,DS1302的数据读取及指令写入函数均已在各自的头文件中完成,在主程序中只须引用即可。

第5章 系统测试

5.1 硬件测试

在调试硬件时遇到过很多问题,但只要细心、认真检查这些问题都是可以避免的,主要问题及解决办法现列如下:

(1) 认真检查电路是否有短路的地方,线与线之间,管脚刺破邻近的漆包线之间是否连接在一起,有的话要用刀划开,或者重新焊接。

(2) 检查完毕后接通电源后LCD1602没有正确的显示。在不通电状态下用万用表检测电路是否正常连接,在检查回路时发现有的点之间看似连接,但由于虚焊导致其并无电气连接,只能对焊脚进行在加工直到解决问题。

5.2 软件测试

由于本系统涉及到多个子程序,多个芯片的编程。首先必须对可编程芯片的控制字即其控制指令要熟记于心。其次,芯片很多都有时钟输入端,需要晶振支持。对芯片的读写都需要在相应的触发沿到来时才能进行。由于DS18B20是串行通信数据,只用一个口线传输,在处理采集的模拟信号时需要一定的时间,会对延时有较高要求。

18

结束语

以上所述即是基于单片机电子万年历的设计全过程,经过多次的反复测试与分析,对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力.经过此设计,基本完成了设计任务的要求。硬件层面而言操作相对简单,界面比较友好。

在硬件电路方面,详尽解析了各个元件的选择依据,对数种方案进行了全面的比较。在时钟芯片的选择上,若直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然可以减少时钟芯片的使用,节约成本,但是,实现的时间误差较大。因此采用专业的时钟芯片DS1302,它可以对年、月、日、周日、时、分、秒进行计时,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能;在显示模块的选择上,若采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。但是由于数码管动态扫描需要借助74LS1移位寄存器进行移位,该芯片在电路调试时往往会有很多障碍,因此本次设计选择了LCD1602,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见;在温度采集模块的选择上,没有采用热敏电阻,因为设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差。最后选择了DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以避免A/D模数转换模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量范围广等优点。从元件性能和组装电路后的测试结果来看,硬件电路的设计是比较成功的,各个功能都能实现了。

19

致谢

自己写

20

参考文献

[1]胡乾斌,李光斌,李玲,喻红.单片微型计算机原理与应用.华中科技大学出版社,1996. [2]刘勇.数字电路.电子工业出版社,2004.

[3]陈正振.电子电路设计与制作.广西交通职业技术学院信息工程系,2007. [4]杨子文.单片机原理及应用.西安电子科技大学出版社,2006. [5]王萍.电子技术实验教程.机械工业出版社,2009.

[6]沈红卫.单片机应用系统设计实例与分析,北京:北京航空航天大学出版社.2003 [7]李光飞.单片机课程设计实例指导,北京:北京航空航天大学出版社. 2004 [8]王法能.单片机原理及应用,科学出版社. 2004

[9]楼然苗,李光飞.51系列单片机设计实例[M].北京航空航天大学出版社,2003. [10]朱定华,戴汝平.单片微机原理与应用[M].清华大学出版社,2003. [11]胡汉才.单片机原理与接口技术[M].清华大学出版社,2004.

[12]余家春.Protel 99 SE电路设计实用教程[M].中国铁道出版社,2004.

[13]张培仁.基于汇编语言编程MCS-51单片机原理与应用.北京:清华大学出版社,2003. [14]T.Someya,J.Small,P.Kim,C.Nuckolls,J.T.Yardley.Alcohol vapor sensors based on single-walled carbon nanotube field effect transistors[M].Nano Letters,2003.

[15]M.Penza et al.Alcohol detection using carbon nanotubes acoustic and optical sensors[M].Applied Physics Letters,2004.

[16]F.Rettig,R.Moos.Direct thermoelectric gas sensors Design aspects and first gas

sensors[M].Sens Actuators B,2007.

21

附录1:程序

#include #include\"lcd1602.h\" #include\"ds1302.h\" #include\"ds18b20.h\"

sbit buzz=P3^7; sbit s1=P1^0; sbit s2=P1^1; sbit s3=P1^2; sbit s4=P1^3;

int miao=0,fen=0,shi=12,nian=12,yue=10,ri=8,xingqi=4,ashi,afen; uchar s1num=0; //光标位置标志 uchar s4num; uchar flag=1;

uchar Read_flag=1;

uchar flag1;//闹铃标志位

uchar code w1[]={0x01,0x03,0x1D,0x11,0x1D,0x03,0x01,0x00}; //小喇叭图像uchar code tab0[]=\" 20 / / W \"; uchar code tab1[]=\" : : C\";

uchar code tab2[]={'0','1','2','3','4','5','6','7','8','9'}; uchar code tab5[]=\"OFF\";

uchar code tab4[]=\"reset clock\"; void dis_laba(); void keyscan(); void buzzer(); void naozhong();

void main() { init_lcd1602(); lcd_bad_check() ; RESET_DS18B20(); Reset_DS1302(); delay(500); if((DS1302_Rdata(0x81)&0x80) != 0) {

22

init_ds1302(nian,yue,ri,shi,fen,miao,xingqi);//*****初始化时间***** } write_lcd1602(0x01,0); display_lcd1602_text(0,0,tab0); display_lcd1602_text(1,0,tab1); while(1) { keyscan(); if(flag) { naozhong(); delay(20); display_lcd1602_byte(0,3,tab2[DS1302_Rdata(0x8d)/16]); //*****读取年***** display_lcd1602_byte(0,4,tab2[DS1302_Rdata(0x8d)%16]); display_lcd1602_byte(0,6,tab2[DS1302_Rdata(0x)/0x10]); //*****读取月***** display_lcd1602_byte(0,7,tab2[DS1302_Rdata(0x)%0x10]); display_lcd1602_byte(0,9,tab2[DS1302_Rdata(0x87)/0x10]); //*****读取日***** display_lcd1602_byte(0,10,tab2[DS1302_Rdata(0x87)%0x10]); display_lcd1602_byte(0,15,tab2[DS1302_Rdata(0x8b)%0x10]); //*****读取星期***** display_lcd1602_byte(0,14,0x7e); //显示 向右箭头 display_lcd1602_byte(1,12,tab2[Read_DS18B20_TEMP()/10]); //*****读取温度***** display_lcd1602_byte(1,13,tab2[Read_DS18B20_TEMP()%10]); display_lcd1602_byte(1,14,0xdf); //显示 。 display_lcd1602_byte(1,2,tab2[DS1302_Rdata(0x85)/0x10]); //*****读取时***** display_lcd1602_byte(1,3,tab2[DS1302_Rdata(0x85)%0x10]); display_lcd1602_byte(1,5,tab2[DS1302_Rdata(0x83)/0x10]); //*****读取分***** display_lcd1602_byte(1,6,tab2[DS1302_Rdata(0x83)%0x10]); display_lcd1602_byte(1,8,tab2[DS1302_Rdata(0x81)/0x10]); //*****读取秒***** display_lcd1602_byte(1,9,tab2[DS1302_Rdata(0x81)%0x10]); } } }

void keyscan() { if(Read_flag) //*****存储标志位*****

23

{ nian = DS1302_Rdata(0x8d)/16*10+DS1302_Rdata(0x8d)%16; yue = DS1302_Rdata(0x)/16*10+DS1302_Rdata(0x)%16; ri = DS1302_Rdata(0x87)/16*10+DS1302_Rdata(0x87)%16; shi = DS1302_Rdata(0x85)/16*10+DS1302_Rdata(0x85)%16; fen = DS1302_Rdata(0x83)/16*10+DS1302_Rdata(0x83)%16; miao = DS1302_Rdata(0x81)/16*10+DS1302_Rdata(0x81)%16; xingqi = DS1302_Rdata(0x8b)/16*10+DS1302_Rdata(0x8b)%16; }

if((s1==0)&&(s4num==0)) { delay(5); if(s1==0) { while(!s1); //*****等待按键抬起***** buzzer(); DS1302_Wdata(0x8e,0); //*****开启写寄存器***** DS1302_Wdata(0x80,80); //*****时钟停止等待设置时间***** Read_flag = 0; flag=0; s1num++; switch(s1num) { case 1: write_lcd1602(0x0f,0); //*****液晶开启光标显示***** write_lcd1602(0x80+4,0); //*****光标显示的位置***** break; case 2: yue = DS1302_Rdata(0x)/16*10+DS1302_Rdata(0x)%16; if((yue==4) || (yue==6) || (yue==9) || (yue==11)) { if(ri>30)ri=30; } else if(yue==2) { if(((nian)%4==0)) { if(ri>29)ri=29; //平年 } else { if(ri>28)ri=28; }

}

24

display_lcd1602_byte(0,9,tab2[ri/10]); display_lcd1602_byte(0,10,tab2[ri%10]); write_lcd1602(0x80+7,0); //*****光标显示的位置***** break; case 3: write_lcd1602(0x80+10,0); //*****光标显示的位置***** break; case 4: write_lcd1602(0x80+15,0); //*****光标显示的位置***** break; case 5: write_lcd1602(0x80+0x40+3,0); //*****光标显示的位置+0x40为在第二行显示***** break; case 6: write_lcd1602(0x80+0x40+6,0); //*****光标显示的位置***** break; case 7: write_lcd1602(0x80+0x40+9,0); //*****光标显示的位置***** break; case 8: write_lcd1602(0x0c,0); //*****关闭光标显示***** DS1302_Wdata(0x8e,80); //*****控制命令,WP=1,写保护禁止写***** init_ds1302(nian,yue,ri,shi,fen,miao,xingqi); Read_flag = 1; flag=1; break; } if(s1num==8) s1num=0; } } if(s1num!=0) { if(s2==0) delay(5); if(s2==0) //*****如果 + 按键被按下***** { while(!s2); //*****等待按键抬起***** buzzer(); switch(s1num)

25

{ case 1: //*****年 ++ ***** nian++; if(nian==100) nian=99; display_lcd1602_byte(0,3,tab2[nian/10]); display_lcd1602_byte(0,4,tab2[nian%10]); write_lcd1602(0x80+4,0);//*****控制光标显示的位置***** break; case 2: //*****月 ++ ***** yue++; if(yue==13) yue=12; if(((yue==4) || (yue==6) || (yue==9) || (yue==11))&&(ri==31)) { ri=30; } else if(yue==2) { if(((nian)%4==0)) { if(ri>29)ri=29; //平年 } else { if(ri>28)ri=28; } } display_lcd1602_byte(0,9,tab2[ri/10]); display_lcd1602_byte(0,10,tab2[ri%10]); display_lcd1602_byte(0,6,tab2[yue/10]); display_lcd1602_byte(0,7,tab2[yue%10]); write_lcd1602(0x80+7,0); //*****控制光标显示的位置***** break; case 3: //*****日 ++ ***** ri++; if(((yue==4) || (yue==6) || (yue==9) || (yue==11))&&(ri==31)) { ri=30; } else if(yue==2) { if(((nian)%4==0))

{

26

if(ri>29)ri=29;

} else { if(ri>28)ri=28; }

} else { if(ri>31)ri=31; } display_lcd1602_byte(0,9,tab2[ri/10]); display_lcd1602_byte(0,10,tab2[ri%10]); write_lcd1602(0x80+10,0); //*****控制光标显示的位置***** break; case 4: //*****星期 ++ ***** xingqi++; if(xingqi==8) xingqi=7; display_lcd1602_byte(0,15,tab2[xingqi%10]); write_lcd1602(0x80+15,0); //*****控制光标显示的位置***** break; case 5: //*****时 ++ ***** shi++; if(shi==24) shi=0; display_lcd1602_byte(1,2,tab2[shi/10]); display_lcd1602_byte(1,3,tab2[shi%10]); write_lcd1602(0x80+0x40+3,0); //*****控制光标显示的位置***** break; case 6: //*****分 ++ ***** fen++; if(fen==60) fen=0; display_lcd1602_byte(1,5,tab2[fen/10]); display_lcd1602_byte(1,6,tab2[fen%10]); write_lcd1602(0x80+0x40+6,0); //*****控制光标显示的位置***** break; case 7: //*****秒 ++ ***** miao++; if(miao==60) miao=0; display_lcd1602_byte(1,8,tab2[miao/10]);

27

display_lcd1602_byte(1,9,tab2[miao%10]);

write_lcd1602(0x80+0x40+9,0); //*****控制光标显示的位置***** break;

}

}

}

if(s1num!=0) { if(s3==0) delay(5); if(s3==0) { while(!s3); buzzer(); switch(s1num) { case 1: //*****年 -- ***** nian--; if(nian==-1) nian=1; display_lcd1602_byte(0,3,tab2[nian/10]); display_lcd1602_byte(0,4,tab2[nian%10]); write_lcd1602(0x80+4,0);//*****控制光标显示的位置***** break; case 2: //*****月 -- ***** yue--; if(yue==0) yue=1; display_lcd1602_byte(0,6,tab2[yue/10]); display_lcd1602_byte(0,7,tab2[yue%10]); write_lcd1602(0x80+7,0);//*****控制光标显示的位置***** break; case 3: //*****日 -- ***** ri--; if(((yue==4) || (yue==6) || (yue==9) || (yue==11))&&(ri==31)) { ri=30; } else if(yue==2) { if(((nian)%4==0)) { if(ri>29)ri=29;

28

} else { if(ri>28)ri=28; }

} else { if(ri==0) ri=1; } display_lcd1602_byte(0,9,tab2[ri/10]); display_lcd1602_byte(0,10,tab2[ri%10]); write_lcd1602(0x80+10,0);//*****控制光标显示的位置***** break;

case 4: //*****星期 -- ***** xingqi--; if(xingqi==0) xingqi=1; display_lcd1602_byte(0,15,tab2[xingqi%10]); write_lcd1602(0x80+15,0);//*****控制光标显示的位置***** break;

case 5: //*****时 -- ***** shi--; if(shi==-1) shi=23; display_lcd1602_byte(1,2,tab2[shi/10]); display_lcd1602_byte(1,3,tab2[shi%10]); write_lcd1602(0x80+0x40+3,0);//*****控制光标显示的位置***** break;

case 6: //*****分 -- ***** fen--; if(fen==-1) fen=59; display_lcd1602_byte(1,5,tab2[fen/10]); display_lcd1602_byte(1,6,tab2[fen%10]); write_lcd1602(0x80+0x40+6,0);//*****控制光标显示的位置***** break;

case 7: //*****秒 -- ***** miao--; if(miao==-1) miao=59;

29

display_lcd1602_byte(1,8,tab2[miao/10]); display_lcd1602_byte(1,9,tab2[miao%10]); write_lcd1602(0x80+0x40+9,0);//*****控制光标显示的位置***** break; } } }

/*********************闹钟设定***************************/ if((s4==0)&&(s1num==0)) { delay(5); if(s4==0) delay(500); if(s4!=0) { while(!s4); buzzer(); flag=0; s4num++; if(s4num==4) s4num=1; switch(s4num) { case 1: write_lcd1602(0x01,0); //液晶清屏 display_lcd1602_text(0,2,tab4); //显示reset clock display_lcd1602_text(1,7,tab5); //显示 OFF write_lcd1602(0x0c,0); //*****关闭光标显示***** flag1=0; break; case 2: write_lcd1602(0x0f,0); //*****开启光标显示***** display_lcd1602_byte(1,5,tab2[ashi/10]);//*****显示闹铃时间***** display_lcd1602_byte(1,6,tab2[ashi%10]); display_lcd1602_byte(1,7,':'); display_lcd1602_byte(1,8,tab2[afen/10]); display_lcd1602_byte(1,9,tab2[afen%10]); write_lcd1602(0x80+0x40+6,0); //*****控制光标显示的位置***** flag1=1; //闹铃标志位置 开启闹铃 break; case 3: display_lcd1602_byte(1,5,tab2[ashi/10]);//*****显示闹铃时间***** display_lcd1602_byte(1,6,tab2[ashi%10]);

30

display_lcd1602_byte(1,7,':'); display_lcd1602_byte(1,8,tab2[afen/10]); display_lcd1602_byte(1,9,tab2[afen%10]); write_lcd1602(0x80+0x40+9,0); //*****控制光标显示的位置***** flag1=1; //闹铃标志位置 开启闹铃 break; } } if(s4==0) //*****显示设置闹铃界面***** { while(!s4); s4num=0; write_lcd1602(0x01,0); write_lcd1602(0x0c,0); display_lcd1602_text(0,0,tab0); display_lcd1602_text(1,0,tab1); flag=1; //闹铃设置完毕 跳回主界面 } }

if(s4num!=0) { if(s2==0) delay(5); if(s2==0) { while(!s2); buzzer(); switch(s4num) //*****闹铃时间调整 数值 + ***** { case 2: ashi++; if(ashi==24) ashi=0; display_lcd1602_byte(1,5,tab2[ashi/10]); display_lcd1602_byte(1,6,tab2[ashi%10]); write_lcd1602(0x80+0x40+6,0); break; case 3: afen++; if(afen==60) afen=0; display_lcd1602_byte(1,8,tab2[afen/10]); display_lcd1602_byte(1,9,tab2[afen%10]); write_lcd1602(0x80+0x40+9,0);

31

break; } } } if(s4num!=0) { if(s3==0) delay(5); if(s3==0) { while(!s3); buzzer(); switch(s4num) //*****闹铃时间调整 数值 - ***** { case 2: ashi--; if(ashi==-1) ashi=23; display_lcd1602_byte(1,5,tab2[ashi/10]); display_lcd1602_byte(1,6,tab2[ashi%10]); write_lcd1602(0x80+0x40+6,0); break; case 3: afen--; if(afen==-1) afen=59; display_lcd1602_byte(1,8,tab2[afen/10]); display_lcd1602_byte(1,9,tab2[afen%10]); write_lcd1602(0x80+0x40+9,0); break; } } } }

void buzzer() { buzz=0; delay(50); buzz=1; }

void naozhong() { if(flag1)

32

{ dis_laba(); //*****显示小喇叭图像***** if(ashi==(DS1302_Rdata(0x85)/16*10+DS1302_Rdata(0x85)%16)) //***** 读取小时读取分钟看是否与闹铃设定值匹配 若相等闹铃响起一分钟 ***** { delay(5); if(afen==(DS1302_Rdata(0x83)/16*10+DS1302_Rdata(0x83)%16)) buzzer(); } } }

void dis_laba() { uchar i; write_lcd1602(0x40,0); //*****设定CGRAM地址***** for(i=0;i<8;i++) //*****将自定义字符串写入CGRAM地址***** write_lcd1602(w1[i],1); write_lcd1602(0x80+0x40+1,0); //*****显示位置***** write_lcd1602(0x00,1); }

本次设计的原理图,PCB图和实物图

本次设计的原理图

33

PCB图

34

实物图

35

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务