基于单片机的简易灯光时钟设计 毕业论文(带程序).doc

上传人:哈尼dd 文档编号:3923295 上传时间:2019-10-10 格式:DOC 页数:59 大小:3.44MB
返回 下载 相关 举报
基于单片机的简易灯光时钟设计 毕业论文(带程序).doc_第1页
第1页 / 共59页
基于单片机的简易灯光时钟设计 毕业论文(带程序).doc_第2页
第2页 / 共59页
基于单片机的简易灯光时钟设计 毕业论文(带程序).doc_第3页
第3页 / 共59页
基于单片机的简易灯光时钟设计 毕业论文(带程序).doc_第4页
第4页 / 共59页
基于单片机的简易灯光时钟设计 毕业论文(带程序).doc_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《基于单片机的简易灯光时钟设计 毕业论文(带程序).doc》由会员分享,可在线阅读,更多相关《基于单片机的简易灯光时钟设计 毕业论文(带程序).doc(59页珍藏版)》请在三一文库上搜索。

1、 本科毕业论文(设计)本科毕业论文(设计) 题题 目:目: 基于单片机的简易灯光时钟设计基于单片机的简易灯光时钟设计 专专 业:业: 电子信息工程电子信息工程 学生姓名:学生姓名: 学生学号:学生学号: 100305044100305044 院院 系:系: 物理与电子工程学院物理与电子工程学院 年级、班:年级、班: 1010 级级 5 5 班班 指导教师:指导教师: 2014年 5 月 6 日 宜宾学院宜宾学院 YIBINYIBIN UNIVERSITYUNIVERSITY I 摘要摘要 本文介绍了一个基于单片机的简易灯光时钟的设计,它具有显示年、月、日、 时钟、分钟和秒、星期的显示功能,还具

2、有闰年补偿等功能,时钟芯片采用的 是 DS1302,DS1302 能存储时间信息,并且可以掉电保存。单片机通过读取 DS1302 的信息后通过 LCD1602 显示在液晶屏幕上面。本设计包含 4 个按键,编 号分别为 1、2、3、4,每个按键的功能分别为功能选择、光标移动、加按键以 及减按键,可以设置闹钟,当 DS1302 上面的时间跟单片机所设定的闹钟时间一 致后,单片机可以驱动蜂鸣器进行闹铃提醒。除此之外,系统还附带整点报时, 以及任何时候通过按键语音报时功能。 关键词关键词:单片机;单片机; LCD1602;蜂鸣器;蜂鸣器;DS1302;闹钟;语音报时;闹钟;语音报时; II Abstr

3、actAbstract This paper is aim to introduce a design which is based on simple chip microcomputer clock. It owns two main functions, namely, showing time, including year, month, day, hour, minute and second; and compensation of the leap year. The chip of this design is called DS1302, which can save ti

4、me information even when the electricity was cut down accidently. The Single-Chip Microcomputer is also capable of reading the information on DS1302 and reflects the data on the LCD screen through the LCD1602. The design includes four buttons, numbered 1,2,3,4, respectively, each button function sel

5、ection, cursor movement, plus buttons and minus buttons, you can set the alarm. The Microcontroller can drive the buzzer to make the clock alarming when the time on these two equipments the same are. Besides, the basic functions in this microcontroller, such as: Chime on every hour and the time spea

6、king by telephone, are also included in this design. KeyKey wordswords: : chipchip microcomputer,microcomputer, LCD1602,LCD1602, buzzer,buzzer, DS1302,DS1302, alarmalarm clock.clock. III 目录目录 摘要摘要I I ABSTRACTABSTRACTIIII 第一章第一章 绪论绪论1 1 1.1 目的和意义1 1.2 本系统实现的主要功能1 第二章第二章 总体方案论证与设计总体方案论证与设计2 2 2.1 主控模块

7、的选型和论证 2 2.2 显示模块的选型和论证 2 2.3 时钟芯片的选型和论证 2 2.4 温度检测模块的选型和论证 3 2.5 整点报时模块的选型和论证 3 2.6 电源模块3 2.7 系统整体设计概述 3 第三章第三章. .系统硬件电路设计系统硬件电路设计5 5 3.1 主控模块 5 3.1.1 单片机的最小系统设计5 3.2 LCD 液晶显示器简介 6 3.2.1 液晶原理介绍6 3.2.2 液晶模块简介 6 3.2.3 液晶显示部分与 STC89C52 的接口 .6 3.3 键盘模块设计 7 3.4 蜂鸣器模块设计 8 3.5 时钟模块的设计 8 3.6 温度检测模块设计 .10 3

8、.6.1 温度传感器工作原理 .10 3.6.2 DS18B20 硬件电路设计 .11 3.7 语音模块设计.11 第四章第四章. .系统软件设计系统软件设计1212 4.1 系统软件总体设计 .12 4.2 程序设计原理 .16 5.5.系统调试系统调试1818 5.1 硬件调试 .18 5.2 软件调试 .18 参考文献参考文献2020 致谢致谢2121 附录附录2222 系统整体原理图系统整体原理图2222 系统系统 PCBPCB 图图2222 元件清单元件清单2424 系统源程序系统源程序2525 1 第一章 绪论 1.1 目的和意义 现代社会已经迈上了信息化的步伐,微电子技术的发展也

9、越来越快,单片 机的运用也日渐广泛。无论是通信业的学生,老师或者是研发人员,对于单片 机的运用均青睐有加,因此单片机已成为研发人员必须掌握的能力之一,而且 单片机也会发展成为一个高薪行业。 而时钟作为电子类的一个小设计,不仅深受人们的喜爱,也是单片机实验 中一个非常常见的题目。由于单片机给人有很大的发挥空间,是以会对制作人 以高要求对待,并且在掌握设计的同时程序要以简洁为主,功能上要能满足人 们需求,显示界面要大胆创新,标新立异。LCD 显示的数字时钟清晰直观的显 示准确时间、而且精度很是高、并且有夜视功能,还扩展出多种与人方便功能。 本设计中的简易灯光时钟既是一个时间控制系统,又包含温度检测

10、系统, 既能准确无误的显示出正确的高精度的时间又能检测当前的温度 本文提出了以 STC51 系列单片机为核心,采用 DS1302 作为电子时钟的核 心芯片的设计方案,与温度传感器 DS18B20、LED 显示、时钟芯片 DS1302、 按键等模块组成硬件的电子电路系统。显示采用 LCD,以实现显示年、月、日、 时、分钟、秒、星期、温度。设计过程中使用 Keilc51 软件,采用 C 语言编程; 此外,还要从多方面保障系统的稳定性,提高系统的性能指标 本设计可以对时间进行实时的校准,读取时间方便、能直观显示实时时间、 功能方面体现多样话、简单明了的电路、低廉的成本都是该设计的优点,满足 未来电子

11、设计的发展要求,市场前景好。 1.2 本系统实现的主要功能 本系统设计制作一个基于单片机的简易灯光时钟。能实现以下几种功能: (1)键盘扫描,设计按键扫描程序下载到单片机,每个按键赋予一个功能, 单片机通过扫描程序检测用户按键,确定后实现功能。 (2)通过单片机的 ds1302 的数据采集,并实时显示年,月,日,时,分, 秒,和星期在液晶屏上,并且可以设置时间,系统不供电的情况时钟芯片依然 可以由后备纽扣电池供电,使其掉电时间保存。 (3)用户可以设定闹钟时间,当时间到了之后,系统自动驱动蜂鸣器发响。 (4)系统附带有整点报时功能,以及任何时候通过按键报时功能。 (5)系统还带有测温功能,单片

12、机可以实时读取 DS18B20 的温度数据并在 液晶上显示。 2 第二章 总体方案论证与设计 本系统可以由主控、显示、时钟、温度检测、电源等模块组成,以下是讨 论这几个模块的选型和论证。 2.1 主控模块的选型和论证 方案一: 采用 MSP430F149,MSP430F169 系列单片机,该单片机是 TI 公司 1996 年 开始推向市场的一种 16 位超低功耗的混合信号处理器。其内部集成了很多模拟 电路、数字电路和微处理器,提供 12 位 ADC,具有采样、保持、自动扫描, 有 2 个 16 位计数器等强大的功能。但芯片价格昂贵,不适合一般的设计和开发。 方案二 采用 52 系列的单片机,该

13、单片机具有可靠性高,价格成本低,解密难,高 性能的特点,32 个 IO 口,且 STC 系列的单片机可以在线编程、调试。 因此选用方案二中的 52 系列单片机作为主控芯片。 2.2 显示模块的选型和论证 方案一: 用点阵式数码管显示,它是由发光二极管八行和八列显示文本,更适合用 于显示文字,如进行数字显示使用就太浪费了,而且价格比较高,所以不用此 种作为显示。 方案二: 使用 LED 数码管动态扫描,LED 数码管虽然价格适中,最适合数字显示, 采用动态扫描的方法与单片机连接,单片机口线占用得少。但是由于数码管动 态扫描需要借助 74LS164 移位寄存器,74LS164 在调试的时候,电路方

14、面常出 故障,所以不采用 LED 数码管作为显示。 方案三: 选用 LCD 液晶显示屏,它可以清晰可见的显示文字,图像,功能很是强大, 关于本设计的要求,我们使用一个 LCD1602 即能满足要求,成本低,虽然接口 线有点多,但是调试会很方便。 所以本设计中方案三中的 LCD1602 液显示屏作为显示模块。 2.3 时钟芯片的选型和论证 方案一: 用程序控制单片机实现时间计数。采取该方案虽然能够缩小时钟芯片的使 用量,节省成本开支,但是,误差会非常大。 方案二: 采用 DS1302 时钟芯片实现时钟,DS1302 是美国 DALLAS 公司推出的一 种性能比较高、性价比高,功耗较低、带 RAM

15、 的实时时钟电路,它可以对年、 月、日、时钟、分钟、秒以及星期进行计时,还能进行闰年补偿,工作电压为 2.5V5.5V。DS1302 里面含有一个 8*31 的 RAM 存储器,用于临时存放数据。 DS1302 主要特点是采用串行数据传输,具有可编程充电和掉电保护功能,采用 普通 32.768KHz 晶振作为标准时钟。 3 因此本设计中采用方案二中的 DS1302 作为时钟模块 2.4 温度检测模块的选型和论证 方案一: AD590 感温电流源的输出电流与绝对温度成比例。电源电压在 4 V30 V 范围内,AD590 可充当一个高阻抗,调节系数为 1 A/K 为恒流调节器。通过激 光调整的片内

16、薄膜电阻,用于校准装置,使该器件在 25C 时有 298.2 A 的输 出电流。由于该芯片输出为模拟量还同时需要 AD 转换器对其进行采集。因此不 适用于本设计 方案二: DS18B20 数字温度传感器耐磨耐碰,体积小,主要根据应用场合的不同而 外观不同,DS18B20 用途广泛,如电缆沟测温,机房测温,弹药库测温、农业 大棚测温,高炉水循环测温,锅炉测温,洁净室测温等场合。使用场合广,价 格低,实用性强。 因此本设计采用方案二中的 DS18B20 芯片进行温度采集。 2.5 整点报时模块的选型和论证 整点报时模块集成的语音芯片 NY3P035,NY3P035 是一款具有 PWM 输出 的 O

17、TP 语音标准芯片,该芯片内部集成了 09 以及一些常用单位的录音。使用 时只要根据录音存放的位置依次读出就能播报出当前的重量和价格。 2.6 电源模块 方案一: 选用以下两块芯片 LM337 和 LM317 自制一个可调的电源模块,LM317 和 LM337 分别是三端可调式输出正电压稳压器和三端可调式输出负电压稳压器。 通过这 2 块芯片,我们可以很容易的得到正负 5V,正负 12V 和正 3V 电压,但 由于本设计需求各模块体积小,而自制电源体积较大,故不采用此方案。 方案二: 采用 USB 接口供电,既能够下载程序,也能供电,一举两得,故采用此方 案。 2.7 系统整体设计概述 语音芯

18、片扬声器 蜂鸣器模块 主控模块 单片机 液晶显示模块 LCD1602 温度测量模块 DS18B20 时钟模块 DS1302 按键模块 图 2.7 系统结构框图 4 本系统是以 STC89C52 单片机为核心,首先要对系统进行初始化,然后单 片机对键盘,DS18B20 等模块进行扫描,实现对键盘的响应,实时显示分钟、 秒等,对 1602 液晶显示,闹钟、温度测量等功能,其中,单片机起到控制和协 调各功能模块的工作。系统的结构框图见图 2.7。 5 第三章.系统硬件电路设计 3.1 主控模块 单片机在全部设计中起到了统领全局,承前启后的作用,在该设计中单片 机需要完成的任务主要有对键盘扫描,对 D

19、S18B20 进行及时的检测,驱动蜂鸣 器,驱动液晶显示需要显示的内容,所以,在本设计中我们选用 52 系列的单片 机作为系统的总控制模块。 如图 3.1 所示为 STC89C52 单片机的结构框图。 时钟电路 ROM/EPROM/Flash 4KB RAM128B SFR 21个 定时个/计数器2 CPU 总线控制 中断系统 5个中断源 2个优先级 串行口 全双工1个 4个并行口 XTAL2XTAL1 RST EA ALE PSEN P0P1P2P3 Vss Vcc 图 3.1 STC89C52 单片机结构框图 3.1.1 单片机的最小系统设计 6 P1.0 1 P1.1 2 P1.2 3

20、P1.3 4 P1.4 5 P1.5/MOSI 6 P1.6/MISO 7 P1.7/SCK 8 RESET 9 P3.0 10 P3.1 11 P3.2 12 P3.3 13 P3.4 14 P3.5 15 P3.6 16 P3.7 17 XTAL2 18 XTAL1 19 VSS 20 P2.0 21 P2.1 22 P2.2 23 P2.3 24 P2.4 25 P2.5 26 P2.6 27 P2.7 28 PSEN 29 ALE 30 EA 31 P0.7 32 P0.6 33 P0.5 34 P0.4 35 P0.3 36 P0.2 37 P0.1 38 P0.0 39 VCC 4

21、0 U1 供供供 +5V 12 Y2 12MHZ 30pFC3 30pFC4 1 2 3 4 5 6 7 8 9 P110K供供 +5V S1 SW-PB 10K R3 10uF C2 +5V 图 3.1.1 单片机最小系统电路图 图 3.1.1 所示的电路图是单片机在本设计中的最小系统,时钟电路选用 12M 的晶振,作用是为单片机提供一个时钟基准,其执行一条指令需要一个机 械周期,单片机的复位电路是让单片机的状态回到刚上电的状态,因为 P0 口是 一个漏极准双向的 I/O 口,所以需要上拉电阻才能正常工作。 3.2 LCD 液晶显示器简介 由于本设计中要求显示界面显示一些参数,因此这里选用了

22、 LCD1602 作为 界面显示,可以把一些相关的参数进行显示。 3.2.1 液晶原理介绍 显示部分选用 LCD1602 字符型液晶,辅以必要的外接电路组成显示模块, 单片机控制带字符的 LCD1602 查找其字符库,从中选出要显示的字符,设置光 标,将之前查找到的字符在此对应即可。 3.2.2 液晶模块简介 LCD1602 液晶模块的引脚图如图 3.2.2 所示。 图 3.2.2 LCD1602 引脚图 7 液晶寄存器选择控制如表 1。 表 1 寄存器选择控制 RSR/W操作说明 00写入指令寄存器(清除屏幕内容显示等) 01读位地址计数器(DB0DB6)和 busy flag(DB7) 1

23、0写入数据寄存器(显示各字型等) 11从数据寄存器读取数据 3.2.3 液晶显示部分与 STC89C52 的接口 如图 3.2.3 所示。用 STC89C52 的 P0 口作为数据线,用 P1.2、P1.1、P1.0 分别作为 LCD 的 EN、R/W、RS。其中 EN 作为片选信号,在出现下降沿的时 候触发,RS 是寄存器选择信号,R/W 是读写信号,在整个显示模块中,我们 主要设计步骤如下:首先进行清屏,显示模块初始化。然后将接口数据位设置 为 8 位,显示行数设置为 2 行,设定字型为 57 点阵,然后取消光标和字体闪 烁, 显示设置为整体显示,最后设置为正向增量方式且不移位。将要显示的

24、字 符送到对应的数组中,最后进行统一显示。 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5/MOSI 6 P1.6/MISO 7 P1.7/SCK 8 RESET 9 P3.0 10 P3.1 11 P3.2 12 P3.3 13 P3.4 14 P3.5 15 P3.6 16 P3.7 17 XTAL2 18 XTAL1 19 VSS 20 P2.0 21 P2.1 22 P2.2 23 P2.3 24 P2.4 25 P2.5 26 P2.6 27 P2.7 28 PSEN 29 ALE 30 EA 31 P0.7 32 P0.6 33 P0.5 34 P0

25、.4 35 P0.3 36 P0.2 37 P0.1 38 P0.0 39 VCC 40 U1 供供供 +5V 12 Y2 12MHZ 30pFC3 30pFC4 1 2 3 4 5 6 7 8 9 P110K供供 VSS 1 VCC 2 VEE 3 RS 4 RW 5 EN 6 DB0 7 DB1 8 DB2 9 DB3 10 DB4 11 DB5 12 DB6 13 DB7 14 A 15 K 16 LCD1 lcd1602 +5V 10K R1 +5V +5V +5V S1 SW-PB 10K R3 10uF C2 +5V 图 3.2.3 LCD1602 与 STC89C52 的接口 3

26、.3 键盘模块设计 本按键模块按键一端接单片机的 I/O 口,另一端接地,由于单片机的 I/O 8 口内部都有上拉电阻,所以在没有按键按下的时候,我们会检测到高电平,当 按键被按下,I/O 口与地面等电势,此时为低电平,因此通过 I/O 端口的状态变 化检测即可知道按下了哪个按键。4 个按键分别代表以下功能,第一为功能选 择按键,可以切换不同参数设置界面,第二个为切换按键,可以切换时、分、 秒等参数进行设置,第三个为增加按键,第四个为减少按键。其中按键还可以 设置闹钟,重置时间等功能。键盘模块电路图如图 3.3 所示。 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1

27、.5/MOSI 6 P1.6/MISO 7 P1.7/SCK 8 RESET 9 P3.0 10 P3.1 11 P3.2 12 P3.3 13 P3.4 14 P3.5 15 P3.6 16 P3.7 17 XTAL2 18 XTAL1 19 VSS 20 P2.0 21 P2.1 22 P2.2 23 P2.3 24 P2.4 25 P2.5 26 P2.6 27 P2.7 28 PSEN 29 ALE 30 EA 31 P0.7 32 P0.6 33 P0.5 34 P0.4 35 P0.3 36 P0.2 37 P0.1 38 P0.0 39 VCC 40 U1 供供供 +5V S2

28、SW-PB S3 SW-PB S4 SW-PB S5 SW-PB 图 3.3 键盘模块电路图 3.4 蜂鸣器模块设计 本设计还带有闹钟功能,用户可以通过按键设定好闹钟,当当前时间跟闹 钟时间一致的时候,单片机就可以驱动蜂鸣器发声。 通过试验,发现单片机的 I/O 口无法直接驱动蜂鸣器,是因为蜂鸣器的工 作电流一般比较大,所以我们利用三极管开关电路来提供足够大的驱动电流。 本处选用的是 8550 三极管,它是一个 PNP 型的三极管,当基极给低电平的时候 三极管导通,这时候蜂鸣器发声,当给高电平的时候,三极管关闭,蜂鸣器不 发声。 蜂鸣器模块的电路图如图 3.4 所示。 1K R4 +5V P3

29、.2 LS1 供供供 Q1 8550 图 3.4 蜂鸣器驱动电路电路图 3.5 时钟模块的设计 在本设计中,时钟模块的设计,我们把 DS1302 这块串行日历时钟芯片作为 核心,因为 DS1302 具有与单片机的连线很少,节省单片机的系统资源的有点 ,单片机通过 I/O 读取 DS1302 上的数据可以得到实时时间。 由于采用单片机作为计时模块会占用硬件资源,而且采用中断、查询等方 式也要耗费单片机的资源,可能会造成很大的浪费,而采用 DS1302 却可以很好 9 的解决这类问题。 DS1302 是美国 DALLAS 公司推出的一种带 RAM、高性能、能对年、月、日、 星期、时、分、秒进行计时

30、,并且低功耗,可以进行闰年补偿的时钟电路,工 作电压为 2.5V5.5V。采用 24 小时或是 12 小时的格式。此外,DS1302 采用双 电源供电,主电源和备用电源,VCC1 作为备用电源,在模块整体供电中提供电 压相对低的电压,而 VCC2 作为主电源,VCC1 和 VCC2 的供电模式决定如下: VCC2VCC1+0.2 时 由 VCC2 供电 VCC2/单片机头文件 #include“LCD1602.h“/液晶 #include“DS1302.h“ /时钟 #include“key.h“/按键 #include“DS18B20.h“/温度传感器 void DisplayInit(vo

31、id)/初始化 LCD 和时钟的显示,初始化定时器 LCDInit(); /初始化液晶 void Display1(void)/显示正常界面,时间的函数 DS1302_read_time(); /读取 DS1302 时间 LCDDispNum(1,1,(Nian4); /在液晶上显示年的十位 LCDDispNum(2,1,(Nian/在液晶上显示年的个位 LCDDispChar(3,1,-);/在液晶上显示字符- LCDDispNum(4,1,(Yue4);/在液晶上显示月的十位 LCDDispNum(5,1,(Yue /在液晶上显示月的个位 LCDDispChar(6,1,-);/在液晶上显

32、示字符- LCDDispNum(7,1,(Ri4); /在液晶上显示日的十位 LCDDispNum(8,1,(Ri/在液晶上显示日的个位 LCDDispNum(1,2,(Shi4); /在液晶上显示十的十位 LCDDispNum(2,2,(Shi/在液晶上显示十的个位 LCDDispChar(3,2,:); /在液晶上显示显示字符: LCDDispNum(4,2,(Fen4); /在液晶上显示分的十位 LCDDispNum(5,2,(Fen/在液晶上显示分的个位 LCDDispChar(6,2,:);/在液晶上显示显示字符: LCDDispNum(7,2,(Miao4);/在液晶上显示秒的十位

33、 LCDDispNum(8,2,(Miao/在液晶上显示秒的个位 XingQi = (XingQi /星期 if(XingQi = 1) /判断并显示星期的字符 27 LCDDispString(12,1,“Mon.“); /如果星期等于 1 则显示 Mon. else if(XingQi = 2) LCDDispString(12,1,“Tues“); /如果星期等于 2 则显示 Tues else if(XingQi = 3) LCDDispString(12,1,“Wed.“); /如果星期等于 3 则显示 Wed. else if(XingQi = 4) LCDDispString(1

34、2,1,“Thu.“); /如果星期等于 4 则显示 Thu. else if(XingQi = 5) LCDDispString(12,1,“Fri.“); /如果星期等于 5 则显示 Fri. else if(XingQi = 6) LCDDispString(12,1,“Sat.“); /如果星期等于 6 则显示 Sat. else if(XingQi = 7) LCDDispString(12,1,“Sun.“); /如果星期等于 7 则显示 Sun. FenA = (Fen /把分的 BCD 码转成 10 进制 ShiA = (Shi /把时的 BCD 码转成 10 进制 /闹铃,判

35、断是否有闹铃。如果时间到,则蜂鸣器响,否则不响 if(AlarmFlag0 = 1 else BEEP = 1; /转点时的闹钟标志位要清零 if(Shi = 0 if(Fen = 0 if(Shi4)!=0) if(Shi4)=1) Music(L_shi); else Music(Shi4)+1); Music(L_shi); if(Shi else Music(Shi Music(L_dian); Music(L_zheng); /读取温度的值 ReadTemperature(); /显示温度的值 LCDDispString(12,2,temperatureDate); void mai

36、n(void) /初始化操作 DisplayInit(); Music(L_1); while(1)/死循环 if(gFunctionCount = 0)/判断是否为正常显示界面 Display1();/显示子函数 1 KeyScan(); /按键扫描子函数 #include #include“lcd1602.h“ /* Function: void DelayN40us(unsigned int n) Description: 延时函数,延时 40us 的整数倍,传入值 n 代表延时 时间到 n *40us,不能实现准确延时,只能实现大 概时间的延时,利用的是指令实现延时功能。 Calls:

37、 没有调用其它函数 Called By: void LCDWriteCommand(unsigned char dat); void LCDWriteData(unsigned char dat); Input: unsigned int n - 用于延时时间的确定,取值、 为 165535 Output: 无 Return: 无 */ 29 void DelayN40us(unsigned int n) unsigned int i; unsigned char j; for(i=n;i0;i-) for(j=0;j 0 ; x-) for(y = 110 ; y 0 ; y-); void

38、 Music(z) unsigned char i; SHUJU=0; RST=1; for(i=0;i0) SHUJU=1; for(i=0;i4) * 10);/把分的 BCD 码转成 10 进 制 Shi = (Shi /把时的 BCD 码转成 10 进 制 if(AlarmFlag0=1 /取消闹铃标志位 else gFunctionCount+; /小菜单计数加一,进入下一个设置的参 数界面 gTimeCount = 0; /每次都从秒开始设定 if(gFunctionCount = 1 /读取时钟芯片的时间 Miao = (Miao /把秒的 BCD 码转成 10 进制 Fen =

39、 (Fen /把分的 BCD 码转成 10 进制 Shi = (Shi /把时的 BCD 码转成 10 进制 Ri = (Ri /把日的 BCD 码转成 10 进制 Yue = (Yue /把月的 BCD 码转成 10 进制 Nian = (Nian /把年的 BCD 码转成 10 进制 XingQi = (XingQi /把星期的 BCD 码转成 10 进制 LCDDispNum(7,2,(Miao/10);/写的是显示光标的前一个字符 LCDCursor(); /显示光标 35 else if(gFunctionCount = 2)/闹钟 1 设定 DS1302_set_time();/把

40、增加的时间写入 1302 LCDWriteCommand(0x01);/*清除屏幕显示*/ Scan10MsDelay();Scan10MsDelay();Scan10MsDelay();Scan10MsDelay();/延时 等到清屏 LCDDispString(2,1,“Alarm Clock“); /显示字符串 LCDDispNum(2,2,AlarmClock00/10);/显示闹钟值 LCDDispNum(3,2,AlarmClock00%10);/显示闹钟值 LCDDispChar(4,2,:);/显示字符: LCDDispNum(5,2,AlarmClock01/10);/显示闹

41、钟值 LCDDispNum(6,2,AlarmClock01%10);/显示闹钟值 LCDDispChar(7,2,:);/显示字符: LCDDispNum(8,2,AlarmClock02/10);/显示闹钟值 LCDDispNum(9,2,AlarmClock02%10);/显示闹钟值 if(AlarmFlag0) /判断是否设定了闹钟 /如果设定了闹钟,显示 ON LCDDispChar(12,2, );LCDDispChar(14,2,N);LCDDispChar(13,2,O); else/否则显示 OFF LCDDispChar(12,2,O);LCDDispChar(14,2,F

42、);LCDDispChar(13,2,F); else if(gFunctionCount = 3)/此级菜单显示时钟是否需要复位 LCDNotCursor();/取消光标显示 LCDWriteCommand(0x01);/*清除屏幕显示*/ Scan10MsDelay();Scan10MsDelay();Scan10MsDelay();Scan10MsDelay(); LCDDispString(3,1,“Reset Clock“);/显示字符串 else if(gFunctionCount = 4)/回主菜单 gFunctionCount = 0;/菜单计数清零 LCDWriteComma

43、nd(0x01);/*清除屏幕显示*/ Scan10MsDelay();Scan10MsDelay();Scan10MsDelay();Scan10MsDelay(); 36 while(!Key1); /未松手时,不跳出循环,避免误检测 /-/ if(Key2 = 0) /同上,判断第二个按键情况 /功能键 Scan10MsDelay();/延时消抖 if(Key2 = 0) gTimeCount+; /小菜单计数增加 if(gFunctionCount = 1 else if(gFunctionCount = 1 else if(gFunctionCount = 1 else if(gFu

44、nctionCount = 1 else if(gFunctionCount = 1 else if(gFunctionCount = 1 else if(XingQi = 2) LCDDispString(14,1,“e“); else if(XingQi = 3) LCDDispString(14,1,“d“); else if(XingQi = 4) LCDDispString(14,1,“u“); else if(XingQi = 5) LCDDispString(14,1,“i“); else if(XingQi = 6) LCDDispString(14,1,“t“); else

45、if(XingQi = 7) LCDDispString(14,1,“n“); else if(gFunctionCount = 1 LCDDispNum(7,2,(Miao/10); else if(gFunctionCount = 2 DoneFlag0=1;LCDDispString(12,2,“ ON“);LCDDispNum(8,2,AlarmClock02/10); else if(gFunctionCount = 2 else if(gFunctionCount = 2 else if(gFunctionCount = 2 DoneFlag0=0;LCDDispChar(12,2

46、,O);LCDDispChar(14,2,F); LCDDispChar(13,2,F);gTimeCount=0; else if(gFunctionCount = 3) /重设时间 LCDDispString(4,2,“reset ok“); Miao =0; /设定时间的值 Fen =0; Shi =0; Ri =15; Yue =4; XingQi=1; Nian =12; DS1302_set_time();/将设定值写入芯片 while(!Key2); /松手检测 /-/ if(Key3 = 0) /同上,判断第三个按键情况 /增加键 Scan10MsDelay(); if(Key3 = 0) if(gFunctionCount = 1) /当前时间的增加 switch (gTimeCount)/根据小菜单计数值的不同来调整不同的值 case 0:/改变秒 Miao+;/秒增加 if(Miao = 60)/当增加到 60 时要归 0 Miao = 0; 38 LCDDispNum(8,2,(Miao%10);/显示刷新 个位 LCDDispNum(7,2,(Miao/10); break; case 1:/改变分 Fen+; if(Fen =

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1