电子时钟系统设计
数字电子钟设计报告

数字电子钟一.摘要数字电子钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。
它的计时周期为24小时,显示满刻度为23时59分59秒。
因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器、校时电路和振荡器组成。
主电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路组成。
秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。
将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
“时计数器”采用24进制计时器,可实现对一天24小时的累计。
译码显示电路将“时”、“分”、“秒”计数器的输出状态用七段显示译码器译码,通过七段显示器显示出来。
校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整。
采用74160,74393实现24进制和60进制,从而实现计数功能。
目录一.正文 (3)1.1系统设计 (3)1.11设计原理(数字电子钟结构框图): (3)1.12石英晶体振荡器 (3)1.2单元电路设计 (4)1.21时、分、秒计数器的设计: (4)1.2.1.1 元器件的选择:74LS160 同步十进制计数器、与非门 (4)1.2.1.2 二十四进制计数器电路图 (5)1.2.1.3 六十进制计数器电路图 (6)1.2.1.4 秒脉冲谐振电路: (6)1.3系统的测试 (8)1.3.1 N进制级联 (8)1.3.2分频器电路 (8)1.3.3.调校电路 (9)1.4 总结 (10)参考文献 (10)附录 (11)1.元器件的明细表 (12)一.正文1.1系统设计1.11设计原理(数字电子钟结构框图):数字电子钟是一个典型的数字电路系统,其由直流稳压电源,秒脉冲发生器,时、分、秒计数器以及校时和显示电路组成结构框图如下:图表 11.12石英晶体振荡器:石英晶体振荡器的特点是振荡频率准确,电路结构简单,频率易调节。
基于51单片机的多功能电子钟设计

基于51单片机的多功能电子钟设计1. 本文概述随着现代科技的发展,电子时钟已成为日常生活中不可或缺的一部分。
本文旨在介绍一种基于51单片机的多功能电子钟的设计与实现。
51单片机因其结构简单、成本低廉、易于编程等特点,在工业控制和教学实验中得到了广泛应用。
本文将重点阐述如何利用51单片机的这些特性来设计和实现一个具有基本时间显示、闹钟设定、温度显示等功能的电子钟。
本文的结构安排如下:将详细介绍51单片机的基本原理和特点,为后续的设计提供理论基础。
接着,将分析电子钟的功能需求,包括时间显示、闹钟设定、温度显示等,并基于这些需求进行系统设计。
将详细讨论电子钟的硬件设计,包括51单片机的选型、时钟电路、显示电路、温度传感器电路等。
软件设计部分将介绍如何通过编程实现电子钟的各项功能,包括时间管理、闹钟控制、温度读取等。
本文将通过实验验证所设计的电子钟的功能和性能,并对实验结果进行分析讨论。
通过本文的研究,旨在为电子钟的设计提供一种实用、经济、可靠的方法,同时也为51单片机的应用提供一个新的实践案例。
2. 51单片机概述51单片机,作为一种经典的微控制器,因其高性能、低功耗和易编程的特性而被广泛应用于工业控制、智能仪器和家用电器等领域。
它基于Intel 8051微处理器的架构,具备基本的算术逻辑单元(ALU)、程序计数器(PC)、累加器(ACC)和寄存器组等核心部件。
51单片机的核心是其8位CPU,能够处理8位数据和执行相应的指令集。
51单片机的内部结构主要包括中央处理单元(CPU)、存储器、定时器计数器、并行IO口、串行通信口等。
其存储器分为程序存储器(ROM)和数据存储器(RAM)。
程序存储器通常用于存放程序代码,而数据存储器则用于存放运行中的数据和临时变量。
51单片机还包含特殊功能寄存器(SFR),用于控制IO端口、定时器计数器和串行通信等。
51单片机的工作原理基于冯诺伊曼体系结构,即程序指令和数据存储在同一块存储器中,通过总线系统进行传输。
基于单片机电子时钟的设计

基于单片机电子时钟的设计一、设计背景随着科技的不断进步,电子设备在我们的生活中扮演着越来越重要的角色。
时钟作为时间的测量工具,也从传统的机械时钟逐渐发展为电子时钟。
单片机作为一种集成度高、功能强大的微控制器,为电子时钟的设计提供了高效、可靠的解决方案。
基于单片机的电子时钟具有精度高、易于编程、成本低等优点,能够满足人们对时间测量和显示的各种需求。
二、系统设计方案1、硬件设计单片机选择:选择合适的单片机是整个系统设计的关键。
常见的单片机如STM32、AT89C51 等,具有不同的性能和特点。
根据系统需求,我们选择了 AT89C51 单片机,其具有成本低、性能稳定等优点。
时钟芯片:为了保证时间的准确性,需要选择高精度的时钟芯片。
DS1302 是一款常用的实时时钟芯片,具有低功耗、高精度等特点,能够为系统提供准确的时间信息。
显示模块:显示模块用于显示时间。
常见的显示模块有液晶显示屏(LCD)和数码管。
考虑到显示效果和成本,我们选择了 1602 液晶显示屏,能够清晰地显示时间、日期等信息。
按键模块:按键模块用于设置时间和调整功能。
通过按键可以实现时间的校准、闹钟的设置等功能。
电源模块:为整个系统提供稳定的电源。
可以选择电池供电或外部电源供电,根据实际使用场景进行选择。
2、软件设计编程语言:选择合适的编程语言进行软件编程。
C 语言是单片机编程中常用的语言,具有语法简单、可读性强等优点。
主程序流程:主程序首先进行系统初始化,包括单片机端口初始化、时钟芯片初始化、显示模块初始化等。
然后读取时钟芯片中的时间信息,并将其显示在液晶显示屏上。
通过按键检测模块,判断是否有按键操作,如果有,则进行相应的处理,如时间校准、闹钟设置等。
中断服务程序:为了保证时间的准确性,需要使用定时器中断来实现时钟的计时功能。
在中断服务程序中,对时钟芯片进行时间更新,确保时间的准确性。
三、硬件电路设计1、单片机最小系统单片机:AT89C51 单片机是整个系统的核心,负责控制和协调各个模块的工作。
基于单片机的数字电子时钟设计

基于单片机的数字电子时钟设计数字电子时钟是一种非常常见的电子产品,它可以帮助我们实现精确的时间显示,让我们的生活更加方便。
随着科技的不断发展,数字电子时钟也在不断更新和发展,基于单片机的数字电子时钟已经成为当前最先进的技术之一。
本文将介绍基于单片机的数字电子时钟的设计原理和实现方法。
一、数字电子时钟的设计原理数字电子时钟的实现原理就是把时间信号转换成数字信号,再通过计算机芯片来显示时间。
其中,时间信号可以是电缆信号或者无线信号,并且也可以通过外部的控制电路进行调节。
而计算机芯片可以采用单片机、PLC控制器等方案进行设计。
基于单片机的数字电子时钟,可以使用数字时钟芯片和定时器芯片来完成。
数字时钟芯片是一种能够实现数据的统计、时钟显示等功能的IC芯片,通过将其与定时器芯片相连,就能够实现精确的时间统计和显示。
此外,在设计时还需要进行软硬件电路的优化和调试。
二、基于单片机的数字电子时钟的实现方法1、硬件设计基于单片机的数字电子时钟的硬件设计,主要包含单片机控制电路、显示电路、外设接口电路、供电电路、时钟芯片和定时器芯片等部分。
其中,时钟芯片用于提供精准的时间信号,定时器芯片则用于进行计时,而单片机和外设接口电路则用于控制整个数字电子时钟的功能。
另外,数字电子时钟还需要进行外观设计,通常采用的是数码管或液晶屏幕显示时间。
通过优化电路布局和参数匹配,可以有效地提高整个数字电子时钟的稳定性和精度。
2、软件设计在数字电子时钟的软件设计中,主要包含固件设计和操作系统设计两部分。
固件设计是指对单片机系统进行程序编写、调试和优化,以实现时钟的各种功能;而操作系统设计,则是对固件进行封装,建立起一套完整的操作环境,方便用户进行操作。
在固件设计中,需要考虑到时钟的显示、调节、闹钟、定时等多种功能的实现。
通常,这些功能都会涉及到多个模块和数据结构的设计,需要通过循序渐进的方式逐步实现。
在操作系统设计中,需要对时钟的各种操作进行封装,形成一套完整的操作界面。
基于plc的电子钟控制系统设计

基于plc的电子钟控制系统设计摘要:本篇论文主要基于PLC(可编程逻辑控制器)的技术,设计并实现一款电子钟控制系统。
首先,文章介绍了电子钟的基本原理和设计要求,然后对PLC的基本结构和工作方式进行了详细的介绍。
接着,我们通过PLC控制器及时更新的时间来驱动电子钟的工作,使其具有电子脉冲控制、时钟设定、数据传输等功能。
最后,我们对该系统进行了实验检验,结果表明本设计的PLC电子钟控制系统能够正常、精确地显示时间,并且也具有良好的可拓展性和可靠性。
关键词:PLC,电子钟,控制系统,时间显示一、介绍在现代社会中,电子钟是一个非常常见和实用的设备。
在各种场所(如家庭、办公室、学校和制造厂等)都会使用该设备作为时间的显示和管理。
目前,市面上的电子钟通常采用数字LED显示屏,并且通过电源来保证其可靠性和稳定性。
然而,在一些需要定制或特殊需求的场景下,一个基于PLC的电子钟控制系统则可能更加符合要求。
本文将着重描述基于PLC技术的电子钟控制系统的设计和实现,并且通过实验展示其实用性和性能。
此外,我们还将探讨PLC和电子钟之间的关系,以及如何实现电子钟控制系统的常见功能。
二、PLC的基本结构和工作原理PLC是一种专门用来控制以及监测工厂自动化流程的计算机设备。
它将人类的指令翻译成计算机的指令,并将其输出到控制器的输出端。
PLC通常由五个部分组成:交流电源、CPU(处理器)、输入/输出(I/O)模块、编程工具和各种接口。
其中,CPU是PLC系统的心脏,用于处理输入、输出信号的处理器。
与CPU相连的就是I/O模块,它负责通过数字电平的高低来控制各种开关和继电器。
通过这个过程,PLC就能够自动控制响应的设备、机器,并且使其工作自主化和精准化。
三、电子钟的基本结构和功能电子钟的核心部分是时钟芯片和显示屏,其工作过程通过振荡器来驱动。
时钟芯片是一个用于计算时间的集成电路,其输出用于控制数字屏幕的刷新和更新。
根据所需功能的不同,电子钟还有许多其他的元件,如报警、音乐播放、闹钟、计时器等功能模块。
AT89C2051数字电子钟的设计

AT89C2051数字电子钟的设计一、设计任务与要求1.通过单片机技术使 LED 数码管输出显示时间。
2. 可通过按键设置闹钟功能,且停闹无须手工操作。
3. 提高计时精度,使计时误差最小。
4. 通过键盘 2 个键,从左到右依次标名为 SET,DOWN,UP,ENTER, 用来修改和设置系统时钟。
二、方案设计与论证其主要设计思想是:整个系统用单片机为中央控制器,由单片机执行采集时钟芯片的时间信号并通过显示模块来输出信号及相关的控制功能。
时钟芯片产生时钟信号,利用单片机的 I/O 口传给单片机;并通过 I/O 口实现 LCD 的显示。
系统设有 4 个按键可以对时间星期年月日进行调整,还可以设置闹钟。
本电路以一片AT89C2051 单片机为主体,其显示数据从P3.0-P3.7 口输出,P1 口输出对应的六位位选信号。
电子钟程序设计时使用了 T0 作为计时,T1 为调整时显示用。
只要对程序稍加更改,可以很容易的实现 8 路定时功能。
电子钟只用一个轻触式按键来完成所有的设置。
为了使闹钟音量足够大,采用了 PNP 型三极管 8550 来驱动蜂鸣器,驱动电阻用 1K 的,蜂鸣器为 5V 小型蜂鸣器。
若用 NPN 来驱动蜂鸣器音量要小一点。
LED 数码管位驱动用8850,电子钟采用自制的 3A 开关电源供电。
AT89C205 是一个低电压,高性能 CMOS 8 位单片机,片内含 2k bytes 的可反复擦写的只读 Flash 程序存储器和 128 bytes 的随机存取数据存储器(RAM),器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 MCS-51 指令系统,片内置通用 8 位中央处理器和 Flash 存储单元,功能强大。
但它只有 20 个引脚,15 个双向输入/输出(I/O)端口,其中 P1 是一个完整的 8 位双向 I/O 口,两个外中断口,两个 16 位可编程定时计数器,两个全双向串行通信口,一个模拟比较放大器。
基于STC89C52单片机时钟的设计与实现

基于STC89C52单片机时钟的设计与实现1. 本文概述本文主要介绍了基于STC89C52单片机和DS1302时钟芯片的电子时钟设计与实现。
该电子时钟系统具有年月日等基本时间显示功能,并集成了秒表计时处理、闹钟定时、蜂鸣器和温度显示等附加功能。
系统采用LCD1602作为液晶显示器件,通过单片机对时钟和温度等数据进行处理后传输至LCD进行显示。
用户可以通过按键对时间进行调节,同时,单片机还通过扩展外围接口实现了温度采集等功能。
本文的目标是提供一个功能丰富、易于操作的电子时钟系统,为学习和应用单片机技术提供一个实用的案例。
2. 系统设计要求在设计基于STC89C52单片机的时钟系统时,我们需要考虑以下几个关键的设计要求:时钟系统必须具备基本的时间显示功能,能够以小时、分钟和秒为单位准确显示当前时间。
系统还应支持设置闹钟功能,允许用户设定特定的时间点进行提醒。
系统需要保证长时间稳定运行,具备良好的抗干扰能力,确保在各种环境下都能准确计时。
还应具备一定的容错能力,即使在操作失误或外部干扰的情况下,也能保证系统的正常运行。
用户界面应简洁直观,便于用户快速理解和操作。
时钟的显示部分应清晰可见,即使在光线较暗的环境下也能保持良好的可视性。
同时,设置和调整时间的操作应简单易懂,方便用户进行日常使用。
在设计时钟系统时,应考虑到未来可能的功能扩展,如温度显示、日期显示等。
系统的设计应具有一定的灵活性和扩展性,以便在未来可以轻松添加新的功能模块。
鉴于时钟系统可能需要长时间运行,能耗是一个重要的考虑因素。
设计时应选择低功耗的元件,并优化电源管理策略,以延长电池寿命或减少能源消耗。
在满足上述所有要求的同时,还需要控制成本,确保产品的市场竞争力。
这可能涉及到对单片机的编程优化、选择性价比高的外围元件等措施。
通过满足上述设计要求,我们可以确保开发出一个功能完善、稳定可靠、用户友好、易于扩展、节能环保且成本效益高的STC89C52单片机时钟系统。
PLC课程设计--时钟系统设计

时钟系统设计一、设计背景近年来,随着电子产品的发展,人们对数字时钟的要求越来越高,本文针对人们的这一需求,设计了一种有PLC控制的智能化数字时钟,功能强大,界面友好,更好的满足了人们对它的智能化要求。
随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。
多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。
在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉。
但是却很少知道其他类型的内部结构以及工作原理。
由PLC 的CPU模块作为数字钟的核心控制器,可以通过它的时钟信号进行计时实现计时功能,将其时间数据经PLC的外部接口输出,利用显示器显示出来。
通过开关可以进行定时、校时功能。
输出设备显示器可以用液晶显示技术和数码管显示技术。
时钟系统是一种用数字电路技术实现年、月、日、周、时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
此时钟系统是基于PLC技术的应运而设计的,该系统包括了硬件电路部分和程序实现部分。
二、设计目的及要求巩固《PLC技术》课程学过的知识,加强理论与实践的联系。
以西门子S7-300系列PLC 为例,通过本课程设计,达到了解硬件设备,熟悉PLC系统设计流程,灵活运用基本指令和高级指令的目的。
时钟系统包含年、月、日、周、时、分、秒的显示和设置。
为简化程序,不需要判断闰年,即大月为31天,普通小月为30天,2月为28天。
系统分两种模式,由一个选择开关进行切换。
1、运行模式初始运行,或上电时,系统默认为运行模式,系统按照一个默认初值运行时钟。
2、修改模式选择开关打到修改模式,系统时钟停止运行,进入修改状态。
修改值由两个拨码开关输入,可单独对年~分进行修改并确定。
修改完毕,打到运行模式,系统按照修改的时钟进行运行。
系统设计部分要求:两种模式由信号灯进行区别:绿灯亮表示系统处于运行模式;红灯闪烁,闪烁频率为0.5s 表示系统处于修改模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书题目电子时钟系统设计专业、班级电信11-02学号 8 瑞主要容、基本要求、主要参考资料等:一、主要容:①熟悉单片机应用系统的设计方法和规,达到综合的目的。
②学习文件检索和查找数据手册的能力。
③学习protel软件的使用。
④学会整理和总结设计文档报告。
二、基本要求:①以MCS-51系列单片机为核心,组成一个电子时钟系统。
②系统显示由6位数码管显示组成,分别显示时间值的时、分、秒。
③能够随时对当前时间进行调整。
④能够随时输入定时(闹钟)时间。
⑤定时(闹钟)时间到,发出闹钟提醒信号。
⑥闹钟提醒信号的声音为断续形式,最长不超过1分钟。
三、主要参考资料:①毅坤等单片微型计算机原理及应用电子科技大学②建忠编著单片机原理及应用电子科技大学完成期限:2015年1月17日指导教师签名:课程负责人签名:2015年1月4 日目录摘要 (1)1 设计方案选择 (2)1.1 单片机选型 (2)1.2 按键模块 (2)1.3 显示模块 (2)1.4 计时参考模块 (3)1.5 显示器驱动模块 (3)1.6 闹钟响铃模块 (4)1.7 电源模块 (4)2 硬件接线及设计 (4)2.1 单片机晶振配置 (5)2.2复位电路设计 (5)2.3 按键电路设计 (6)2.4 蜂鸣器驱动电路设计 (6)2.5 显示模块电路设计 (7)3 软件部分 (7)3.1 主函数流程图 (7)3.2 定时器T0中断服务程序流程图 (8)3.3 闹钟响应程序流程图 (9)3.4 键盘扫描程序流程图 (10)4 系统综述 (11)4.1 上电界面 (11)4.2 调时界面 (11)4.3 闹钟设定界面 (11)4.4 正常走时界面 (12)4.5 闹钟响应 (12)附录1 总体设计电路图 (15)附录2 PCB图 (16)附录3 元件清单 (17)附录4 总程序 (18)摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广泛、发展很快。
Intel公司生产的MCS-8051系列单片机是各单片机中最为典型和最有代表性的一种。
本次设计以MCS-8051芯片为核心,辅助以必要的外围电路,设计了一个结构简单功能齐全的数值时钟。
在硬件方面,单片机外接12MHz芯片进行驱动。
通过数码管能够准确明亮的显示时、分、秒;四个简单的按键实现对时间的调整;蜂鸣器实现闹钟响铃功能;软件方面采用c语言编程。
整个电子钟系统能完成时间的显示、调试和一组定时闹钟的功能。
关键词:51单片机定时器闹钟数码管1 设计方案选择1.1 单片机选型根据选题芯片采用MCS-8051单片机,Intel公司生产的 51 系列 8 位单片机,凭借其成熟的技术标准和很高的性价比得到了广泛的普及与应用,其功能强大,用来做电子表硬件易实现,编程规。
1.2 按键模块方案一:4×4行列式键盘如果选择此方案,那么在修改时钟或设置闹铃时间时就可以直接从键盘输入,方便、快捷。
缺点也很明显,一是浪费按键,用全键盘来实现设定时间的小功能不免大材小用;二是从实用性考虑,全键盘体积大,明显不经济不方便。
故放弃。
方案二:独立式按键如果设置过多按键,将会占用较多I/O口,而且会给布线带来不便,同时浪费按键,不高效,程序繁琐。
本次设计适用于按键较少的情况。
为了尽量实现按键的高效性,此次设计采用四个独立式按键,分别定义为key_mode、key_add、key_move,key_confirm,依次是模式键、加数键、移位键、确认键。
1.3 显示模块方案一:液晶显示器LCD如果选择此方案,将会降低系统的功耗,可以用电池供电,便于携带,但液晶显示器的驱动电路复杂,使用起来有一定的难度。
方案二:数码管LED数码管的驱动电路简单,使用方便,如果选择了此方案,那么在夜间看时间的时候就不需要有光源,非常方便。
其缺点是功耗较大。
按照此次任务书设计要求,选择两个4位一体七段数码管用于显示。
1.4 计时参考模块方案一:专用时钟芯片如果使用时钟芯片,系统就不怕掉电且时间精确,但这种芯片比较贵,浪费资源不经济。
方案二:单片机部定时/计数器由于本次设计本主要是为了学习单片机程序的编写和调试,以及设计硬件电路的一些方法,因此采用软件的方法来计时。
本次设计用单片机部定时/计数器T0作为电子时钟参考。
1.5 显示器驱动模块由于通过数码管公共极的电流较大,单片机I/O口驱动能力是不够的,故LED驱动模块必不可少。
为避免过多地使用分立元件,本次设计采用一片 74LS245来驱动位码,用P2口进行位选扫描。
图1 74LS245元件封装图74LS245是常用来驱动LED或者其他的设备,它是 8 路同相三态双向总线收发器,可双向传输数据,74LS245还具有双向三态功能。
片选端CE,接低电平时传输数据,接高电平时A、B均为高阻态。
方向选择端AB/BA,接高电平时信号由A向B传输(发送),接低电平时信号由B向A传输(接收)。
1.6 闹钟响铃模块通过三极管放大后驱动蜂鸣器工作,单片机I/O接三极管基极。
1.7 电源模块本系统采用了数码管作为显示器,功耗较大,不便于使用电池供电。
况且本系统的体积较大,即使使用电池供电也不便于随身携带,因此用5V外部稳压电源来供电。
2 硬件接线及设计图2 系统硬件框图2.1 单片机晶振配置图3 单片机晶振配置和复位电路晶振选择 12MHz ,接到如图所示引脚。
2.2复位电路设计图4 复位电路复位电路兼具上电复位功能以及按键复位功能,接到如图所示引脚。
2.3 按键电路设计图5 按键电路采用4个独立按键配以4个上拉电阻实现对时钟和闹钟的设定及修改。
四个独立式按键分别定义为key_mode、key_add、key_move、key_confirm,依次是模式键、调时加键、调时移位键、确认键。
2.4 蜂鸣器驱动电路设计图6 蜂鸣器驱动电路蜂鸣器采用NPN三极管放大电路驱动,接到如图所示引脚。
2.5 显示模块电路设计显示设备为共阳7段数码管(LED),用单片机P0口作为LED段选控制端,用单片机P2口作为LED位选控制端,并采用集成块74LS245作为位驱动模块。
片选端CE接地,方向选择端AB/BA接电源。
3 软件部分3.1 主函数流程图图7 主函数程序流程图3.2 定时器T0中断服务程序流程图图8 定时器T0中断服务程序流程图3.3 闹钟响应程序流程图图9 闹钟响应程序流程图3.4 键盘扫描程序流程图图10 键盘扫描程序流程图4 系统综述4.1 上电界面电子表上电后自动初始化,接着从 00-00-00 开始走时,显示正常走时界面,此时闹钟默认关掉。
按下key_mode键,可依次切换到调时界面、调闹钟界面、正常走时界面,如此循环往复。
上电初始化后,调时初值为00 00-00,闹钟初值为00-00 00。
4.2 调时界面调时界面,从左至右依次显示时、分、秒,数字右下角小点代表调整位到达位置。
在调时界面下,按下key_move键可以移动调整位,数字下标小点用以指示当前操作的数位,按下key_add键可以对调整位进行加数操作。
当且仅当在调时界面下,按下key_confirm键可确认设定,电子表按设定时间更新并走时,同时自动清零设定时间。
此时再按 key_mode 键切换回正常走时界面即能看到时间已经更新。
如果调时后没有按下key_confirm键确认,而是直接按key_mode键切换回正常走时界面,则设置时间被保存,当前时间并不更新。
4.3 闹钟设定界面闹钟设定界面,从左至右依次显示时、分、秒,数字右下角小点代表调整位到达位置。
在闹钟设定界面下,按下key_move键可以移动调整位,数字下标小点用以指示当前操作的数位,按下key_add键可以对调整位进行加数操作。
闹钟设置好后直接按key_mode键返回正常正常走时界面即可,无需按key_confirm键确认,闹钟设定值会自动保存。
4.4 正常走时界面正常走时界面,从左至右依次显示时、分、秒,小点亮灭代表闹钟开闭。
在正常走时界面下,按下key_add键和key_move键不产生操作,LED显示无变化;按下key_confirm键可循环开闭闹钟,LED显示对应变换提示闹钟的开闭;按下key_mode键可依次切换到调时模式、闹钟设定模式、正常走时模式,循环往复。
4.5 闹钟响应当正常走时到达闹铃设定值后,闹铃响应,正常情况下持续蜂鸣一分钟后自动关闭蜂鸣器。
闹铃响铃过程中,若按下key_confirm键可立刻关闭蜂鸣器。
闹铃响应后自动等待下次响应。
总结在这次课程设计中,运用到了很多以前的专业知识,虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。
另外,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的部结构有一个系统的了解,知道该单片机有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。
设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不能灵活运用。
参考文献[1] 君里,应启珩,为理. 信号与系统(第二版)上册[M]. 高等教育,2000[2] 君里,应启珩,为理. 信号与系统(第二版)下册[M]. 高等教育,2000[3] 谭浩强. C程序设计(第二版)[M]. 清华大学,2003[4] 于京.51系列单片机C程序设计与应用案例[M].:中国电力,2006.[5] 育才.ATMEL新型AT89S52系列单片机及其应用[M].:清华大学,2005.[6] 吴坚,高平.基于GPRS网络的点对点图像传输方案[J].计算机应用研究,2004,附录附录1 总体设计电路图附录2 PCB图附录3 元件清单附录4 总程序//****************头文件及宏定义*******************************#include <reg51.h>#define uchar unsigned char#define uint unsigned int//****************软件延时程序*********************************void delay(uint ii){ while(--ii); }//****************定义数码管驱动码******************************uchar duan[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF,0X7F}; //段选,0 1 2 3 4 5 6 7 8 9 - 灭 . uchar wei[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//位选,共阳,从右至左//****************定义变量**************************************uchar t=0,sec=0,min=0,hour=0; //正常走时时间变量uchar sec1=0,min1=0,hour1=0; //时间设定值变量uchar sec2=0,min2=0,hour2=0; //闹钟设定值变量uchar alarm_en=0; //闹钟开关变量uchar alarm_flag=0; //闹钟定时到达标志变量uchar p3=0,moshi=0,mov=0; //P3口查询,模式值,调整位//显示缓冲区,依次为正常、调时、闹钟设定、调整位带点标记uchar temp[8],temp1[8],temp2[8],temp3[8];//****************函数声明*************************************void initialize(void); //初始化void show(void); //正常走时显示void show1(void); //时间设定显示void show2(void); //闹钟设定显示void show3(void); //调整位标记void show4(void); //闹钟开关标记void keyscan(void); //键盘扫描void add(void); //调时调闹钟加数程序void confirm(void); //调时确认,闹钟开关void alarm_judge(void); //闹钟定时到达判定void beep(void); //闹钟响铃程序//******************主函数***************************void main(){initialize();while(1){keyscan();alarm_judge();switch(moshi){case 0:show(); show4();break; //显示正常走时case 1:show1();show3();break; //显示设置时间case 2:show2();show3();break; //显示闹钟时间}if(alarm_flag==1 && alarm_en==1) //定时时间到达且闹钟打开{ beep(); }}}//*****************定时器初始化**************************void initialize(void){TMOD = 0x01;TH0 = 0X3C;TL0 = 0XB0; //50msET0 = 1;EA = 1;TR0 = 1;P1=0X7F; //初始化时关掉蜂鸣器alarm_flag=alarm_en=0;}//*****************定时器T0中断服务程序****************void Timer0(void) interrupt 1{TL0 = 0XB0;TH0 = 0X3C;t++;if(t==20) // (50ms*20=1s){ t=0; sec++; }if(sec==60) // 秒为60,则清零,分加1 { sec=0; min++; }if(min==60) // 分为60,则清零,时加1 { min=0; hour++;}if(hour==24) // 时为24,则清零{ hour=0;}if(sec1==60){ sec1=0; min1++; }if(min1==60){ min1=0; hour1++;}if(hour1==24){ hour1=0;}if(sec2==60){ sec2=0; min2++; }if(min2==60){ min2=0; hour2++;}if(hour2==24){ hour2=0;}}//******************正常时间显示程序******************* void show(void){uchar i=0;temp[0]=sec%10;temp[1]=sec/10;temp[2]=10;temp[3]=min%10;temp[4]=min/10;temp[5]=10;temp[6]=hour%10;temp[7]=hour/10;for(i=0;i<8;i++){P2=wei[i];P0=duan[temp[i]];delay(100);}}//******************调时模式显示程序******************* void show1(void){uchar i=0;temp1[0]=sec1%10;temp1[1]=sec1/10;temp1[2]=10;temp1[3]=min1%10;temp1[4]=min1/10;temp1[5]=11;temp1[6]=hour1%10;temp1[7]=hour1/10;for(i=0;i<8;i++){P2=wei[i];P0=duan[temp1[i]];delay(100);}}//******************闹钟设定模式显示程序******************* void show2(void){uchar i=0;temp2[0]=sec2%10;temp2[1]=sec2/10;temp2[2]=11;temp2[3]=min2%10;temp2[4]=min2/10;temp2[5]=10;temp2[6]=hour2%10;temp2[7]=hour2/10;for(i=0;i<8;i++){P2=wei[i];P0=duan[temp2[i]];delay(100);}}//******************调整位标记显示程序******************* void show3(void){uchar movv=0;switch(mov){case 0:movv=0; break;case 1:movv=3; break;case 2:movv=6; break;}P2=wei[movv];P0=duan[12];delay(100);}//*********************闹钟开闭显示程序******************* void show4(void){if(alarm_en==1){P2=wei[2]+wei[5];P0=duan[12];delay(100);}}//******************键盘扫描程序*********************** void keyscan(void){P3=0XFF;p3=P3;if(p3==0XFF) return;if(p3==0XFE) //key_mode键{delay(10);if(p3==0XFE){moshi++;if(moshi>=3) moshi=0;}while(p3==0XFE) // key_mode键按下到弹起期间{p3=P3;switch(moshi){case 0:show(); break; //显示正常走时case 1:show1();break; //显示设置时间case 2:show2();break; //显示闹钟时间 }}}if(p3==0XFD) //key_add键{delay(10);if(p3==0XFD){add();}while(p3==0XFD) // key_add键按下到弹起期间{p3=P3;switch(moshi){case 0:show(); break; //显示正常走时case 1:show1();break; //显示设置时间case 2:show2();break; //显示闹钟时间 }}}if(p3==0XFB) //key_move键{delay(10);if(p3==0XFB){mov++;if(mov>=3) mov=0;}while(p3==0XFB) // key_move键按下到弹起期间{p3=P3;switch(moshi){case 0:show(); break; //显示正常走时case 1:show1();break; //显示设置时间case 2:show2();break; //显示闹钟时间 }}}if(p3==0XF7) //key_confirm键{delay(10);if(p3==0XF7){confirm();}while(p3==0XF7) // key_confirm键按下到弹起期间{p3=P3;switch(moshi){case 0:show(); break; //显示正常走时case 1:show1();break; //显示设置时间case 2:show2();break; //显示闹钟时间}}}}//******************调时调脑钟增数程序*********************** void add(void){//模式1,调时模式,调时增数if(moshi==1 && mov==0){sec1++;}if(moshi==1 && mov==1){min1++;}if(moshi==1 && mov==2){hour1++;}//模式2,闹钟设定模式,闹钟增数if(moshi==2 && mov==0){sec2++;}if(moshi==2 && mov==1){min2++;}if(moshi==2 && mov==2){hour2++;}}//******************确认键服务函数*************************** void confirm(void){if(moshi==1) //模式1,调时环境下校正时间{t=TF0=0;sec=sec1;min=min1;hour=hour1;sec1=min1=hour1=0;}alarm_en++; //开闭闹钟if(alarm_en>1) alarm_en=0;}//******************闹钟判断函数****************************** void alarm_judge(void){if(hour==hour2 && min==min2 && sec==sec2 ) //定时到达设定标志 { alarm_flag=1; }if(hour==hour2 && min==min2+1) //常规响铃一分钟 { alarm_flag=0; }}//******************闹钟响铃函数****************************** void beep(void){P1=!P1;}。