单片机原理课程设计_基于AT89C52的电子时钟设计说明
基于51系列AT89C52单片机课程设计-电子时钟
目录第一章﹑设计背景 (2)第二章﹑设计方案 (4)2.1. 设计内容 (4)第三章﹑电子时钟 (5)3.1.电子时钟简介 (5)3.2.电子时钟的基本特点 (5)3.3.电子时钟的原理 (5)第四章﹑AT89C52简介 (6)第五章﹑系统软件程序设计 (10)5.1.主程序 (10)5.2.数码管显示模块 (10)5.3.定时器/计数器T0中断服务程序 (10)5. 4.按键处理模块 (11)5.5.汇编语言程序 (13)第六章﹑系统硬件电路的设计 (18)第七章﹑课程设计总结 (21)参考文献 (22)附录 (23)摘要设计背景:1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。
数字电子钟一般由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路等组成。
秒信号是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。
将秒信号送入秒计数器,它是六十进制计数器。
每累计六十秒发出一个“分脉冲”信号,这个信号作为“分计数器”的时钟脉冲。
“分计数器”也是六十进制计数器,它每累计六十分钟,发出一个“时脉冲”信号,此信号将被送到“时计数器”。
“时计数器”采用二十四进制计数器,可以实现一天二十四小时的累计。
译码显示电路将“时”、“分”、“秒”计数器的输出状态经七段显示译码器译码,通过六位LED显示器显示出来。
校时电路是用来对“时”、“分”、“秒”显示数字进行校对调整的。
在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力这里采用应用广泛的AT89C52作为时钟控制芯片,利用单片机内部的定时/计数器T0 实现软时钟的目的。
首先将T0设定工作于定时方式,对机器周期计数形成基准时间(50ms),然后用另一个定时/计数器T1对基准时间计数形成秒,妙计60次形成分,分计60形成小时,小时计到12。
基于AT89S52单片机的数字电子钟毕业设计
摘要单片机在电子产品中的应用越来越广泛,特别是51系列的单片机,由于其使用方便、价格低廉等优势,在市场上占有很大的份额。
AT89S52就是51系列中的一个比较成熟的型号,它完全兼容51单片机的指令。
本文详细介绍了基于AT89S52单片机的数字电子钟的设计,本电子钟可以实现日期、时间的显示和调整,带有整点提示和一个闹钟,并且可以显示当前气温。
本设计包括硬件设计和软件设计两部分。
主要硬件有:三端稳压器LM7805、AT89S52单片机、字符型液晶显示模块HY1602A、单总线数字温度计DS18B20和若干按键等。
软件大致思路为:使用12MHz的晶振,单片机内部的定时器0工作在方式1,每计数50000个机器周期(即50ms)产生一次中断,中断20次就是一秒,这样就可以实现精确计时的目的。
用数字温度计DS18B20测量当前气温,在把实时数据显示在LCD1602上的同时,不断扫描按键,如果有按键按下,则对按键做出相应的响应。
关键字:单片机;电子钟;测温; LCD1602;AbstractMCU in the application of electronic products becomes more widely, particularly the 51 series of MCU, because of its ease of use, low prices and other advantages,it’s in a large market share. AT89S52 is a more mature models in the51series, it is fully compatible with the directive MCU 51.This paper describes the MCU based on the AT89S52 the design of digital electronic clock, the electronic clock can be achieved date, time and adjust the show, it also has the exact point timekeeping and a clock,for the better it can display the current temperature.The design includes hardware and software design in two parts. Main hardware: three-terminal regulator LM7805, AT89S52 MCU, character LCD module HY1602A, single-bus digital thermometer DS18B20 and a number of buttons. the general idea for Software: by use of 12 MHz crystal, the MCU's internal timer 0 works in the methods 1, each count 50,000 machine cycle (50 ms) resulted in an interruption, Composition a second by interruptting 20 times, so that you can achieve precise The purpose of time. After DS18B20 digital thermometer measuring the current temperature,it will be displayed the real-time data on the LCD1602 at the same time, and constantly scan button, if a button is depressed, it will be produce the corresponding response with the button.Keywords: MCU; electronic clock; Temperature measure; LCD1602;目录摘要 (i)Abstract ................................................................................................................ i i 1 绪论 (1)1.1 设计要求 (1)1.2 设计思路 (1)1.3 设计重难点 (2)2 硬件设计 (3)2.1 器件选型 (3)2.2 硬件总图 (3)2.3 器件介绍 (4)2.3.1 电源模块 (4)2.3.2 单片机AT89S52 (5)2.3.3 数字式温度传感器DS18B20 (12)2.3.4 LCD1602显示模块 (15)3 软件设计 (19)3.1 软件设计思路 (19)3.1.1 实现功能 (19)3.1.2 显示状态 (19)3.1.3 定义变量 (19)3.1.4 接线方式 (20)3.1.5 编程思路 (20)3.2 主程序流程图 (21)3.3 程序清单及注释 (22)3.3.1 主程序“电子钟.C” (23)3.3.2 延时子程序“DELAY.C” (39)3.3.3 扫描按键子程序“KEY_SCAN.C” (40)3.3.4 温度测量子程序“DS18B20.C” (41)3.3.5 液晶显示子程序“LCD1602.C” (43)4 精度分析 (49)4.1 误差来源 (49)4.1.1 硬件误差 (49)4.1.2 软件误差 (49)4.1.3 消除误差的办法 (49)5 总结与展望 (52)致谢 (53)参考文献 (54)附录:硬件电路设计图 (55)1 绪论“一寸光阴一寸金,寸金难买寸光阴”!时间对于我们每一个人都是非常宝贵的,所以钟表作为人们掌握时间的工具就显得十分重要!钟表的出现已经有几百年历史,尤其是摆钟和后来的怀表,可以称作钟表中的经典,不仅大方实用,而且制作精美。
基于AT89C52单片机的数字钟设计方案
2
接口、MP3解码器、CAN或者I C总线控制器等,LED LCD或VFD显示驱动器也 开始集成在8位单片机中。
2、高效率和高性能
为了提高执行速度和执行效率,单片机开始使用RISC流水线和DSP的设 计技术,使单片机的性能有了明显的提高, 表现为:单片机的时钟频率得到提高; 同样频率的单片机运行效率也有了很大的提升; 由于集成度的提高, 单片机的寻 址能力、片内R0(FLASH和RAM勺容量都突破了以往的数量和限制。
(2)办公自动化领域
单片机作为嵌入式系统广泛应用于现代办公设备,如计算机的键盘、磁盘 驱动、打印机、复印机、电话机和传真机等。
(3)商业应用领域
商业应用系统部分与家用和办公应用系统相似, 但更加注重设备的稳定性、 可靠性和安全性。 商用系统中广泛使用的电子计量仪器、 收款机、条形码阅读器、 安全监测系统、 空气调节系统和冷冻保鲜系统等, 都采用了单片机构成的专用系 统。与通用计算机相比, 这些系统由于比较封闭, 可以更有效地防止病毒和电磁 干扰等,可靠性更高。
(4)工业自动化
在工业控制和机电一体化控制系统中,除了采用工控计算机外,很多都是 以单片机为核心的单片机和多机系统。
(5)智能仪表与集成智能传感器 目前在各种电气测量仪表中普遍采用了单片机应用系统来代替传统的测量 系统,使得测量系统具有存储、数据处理、查询及联网等智能功能。将单片机和 传感器相结合, 可以构成新一代的智能传感器。 它将传感器变换后的物理量作进 一步的变化和处理,使其成为数字信号,可以远距离传输并与计算机接口。
单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、 秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置, 具有更更长的使用寿命,因此得到了广泛的使用。
毕业设计(论文)基于at89c52单片机的液晶显示的数字钟的设计与实现
目录摘要 (1)关键词 (1)Abstract (1)Key words. (1)1. 引言 (2)2. 系统总体设计方案 (4)系统可实现的功能 (4)2.2 数字时钟的硬件系统框图 (5)2.3各元器件的选用 (6)2.3.1 单片机AT89C52 (6)2.3.2 时钟芯片DS1302 (9)2.3.3 显示器的结 (10)3. 系统硬件设计 (11)3.1单片机复位电路的设计 (11)3.1.1 设计原理 (11)3.1.2 方案的比较与选择 (11)3.1.3 复位电路与单片机的连接 (11)3.2单片机时钟电路的设计 (12)3.2.1振荡器电路原理 (12)3.2.2 DS1302时钟电路 (13)3.3 显示器和单片机的接口电路 (14)3.3.1 显示电路 (14)3.3.2 显示器的接入 (15)4. 系统软件设计 (16)4.1软件系统中的主模块设计 (16)4.1.1 主模块的C语言实现 (16)5. 系统的实现 (18)5.1 电路的仿真 (18)6. 总结 (18)参考文献 (18)致谢: (20)液晶显示的数字钟的设计与实现(湖南人文科技学院湖南娄底)摘要:数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。
本文介绍了一款基于AT89C52单片机数字钟的设计,通过多功能数字钟的设计思路,详细叙述了系统硬件、软件的具体实现过程。
软件采用简单流通性强的C语言编写实现。
本设计实现了年、月、日和时、分、秒的显示功能。
并且运用Proteus软件进行仿真,通过对比实际的时钟,查找出了误差的来源,确定了调整误差的方法,尽可能的减少误差,使得系统可以达到实际数字钟的允许误差范围内。
关键词:AT89C52单片机数字钟 Proteus.The Design and Implementation of LCD Digital ClockFang He(Hunan Institute of Humanities Science and Technology,Loudi,Hunan) Abstract:A digital clock is a kind of device which is used by digital circuit technology to achieve the timing . It is higher than the mechanical clock in accuracy and intuitive . And it has no machinery and has more longer service life, so it has been widely used . The design of LCD digital clock based on SCM of AT89C52 was introduced in the paper , the specific process of how the system hardware and software achieved were detailed description through the design of multifunction digital clock. Software design used the C language to achieve because of its simple and strong negotiability. In this design, the functions of the year, month, day , hour, minute and seconds display have been achieved.,andthe Proteus software has been used to simulate. By comparing the actual clock, we can find out the source of the error and determine the method of adjusting error, reduce errors as much as possibly, so this system can achieve a practical digital clock with error within the permissible range.Key words :AT89C52 microcontroller; Digital clock; Proteus .1引言现今数字钟已成为人们日常生活必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来了极大的方便,由于数字集成技术的发展和采用先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等特点,它还应用于计时、自动报时及自动控制等各个领域,尽管目前的市场上已经有现成的数字钟集成电路芯片出售,价钱便宜、使用方便,但鉴于数字钟集成电路的基本电路包含了数字电路的主要部分,因此进行数字的设计是必要的,研究数字钟及扩大其应用有着非常现实的意义。
基于STC89C52单片机时钟的设计与实现
基于STC89C52单片机时钟的设计与实现1. 本文概述本文主要介绍了基于STC89C52单片机和DS1302时钟芯片的电子时钟设计与实现。
该电子时钟系统具有年月日等基本时间显示功能,并集成了秒表计时处理、闹钟定时、蜂鸣器和温度显示等附加功能。
系统采用LCD1602作为液晶显示器件,通过单片机对时钟和温度等数据进行处理后传输至LCD进行显示。
用户可以通过按键对时间进行调节,同时,单片机还通过扩展外围接口实现了温度采集等功能。
本文的目标是提供一个功能丰富、易于操作的电子时钟系统,为学习和应用单片机技术提供一个实用的案例。
2. 系统设计要求在设计基于STC89C52单片机的时钟系统时,我们需要考虑以下几个关键的设计要求:时钟系统必须具备基本的时间显示功能,能够以小时、分钟和秒为单位准确显示当前时间。
系统还应支持设置闹钟功能,允许用户设定特定的时间点进行提醒。
系统需要保证长时间稳定运行,具备良好的抗干扰能力,确保在各种环境下都能准确计时。
还应具备一定的容错能力,即使在操作失误或外部干扰的情况下,也能保证系统的正常运行。
用户界面应简洁直观,便于用户快速理解和操作。
时钟的显示部分应清晰可见,即使在光线较暗的环境下也能保持良好的可视性。
同时,设置和调整时间的操作应简单易懂,方便用户进行日常使用。
在设计时钟系统时,应考虑到未来可能的功能扩展,如温度显示、日期显示等。
系统的设计应具有一定的灵活性和扩展性,以便在未来可以轻松添加新的功能模块。
鉴于时钟系统可能需要长时间运行,能耗是一个重要的考虑因素。
设计时应选择低功耗的元件,并优化电源管理策略,以延长电池寿命或减少能源消耗。
在满足上述所有要求的同时,还需要控制成本,确保产品的市场竞争力。
这可能涉及到对单片机的编程优化、选择性价比高的外围元件等措施。
通过满足上述设计要求,我们可以确保开发出一个功能完善、稳定可靠、用户友好、易于扩展、节能环保且成本效益高的STC89C52单片机时钟系统。
基于AT89C52单片机的数字电子钟
基于AT89C51单片机的数字电子钟摘要本设计是基于单片机的定时闹钟设计。
单片机是在一块半导体芯片上集成了CPU、存储器以及输入和输出接口电路的微型计算机;其集成度高、功能强、通用性好,特别是它具有体积小、重量轻、能耗低、价格便宜、抗扰、能力强和使用方便等特点。
它不仅仅是一项技术性上的突破,同时也是对能源方面的有效节约与有效利用,因此深受国家有关技术部门和能源部门的重视和支持。
其组合而成的配件产品在日常生活的使用过程中非常方便、简单且实用,深受着广大消费者的喜爱,从而使单片机技术在社会中得到了广泛的发展和应用。
目前,已成为测量控制应用系统中的优选机种和新电子产品的关键部件。
特别是20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快,推广率高,市场利润率高。
而51单片机是各单片机中最为典型和最有代表性的一种。
本次设计的定时闹钟在硬件方面就采用了AT89C52芯片,用6位LED数码管来进行显示。
LED用P0口进行驱动,采用的是动态扫描显示,能够比较准确显示时时.分分.秒秒。
通过P2.4功能按键可以实现对时钟和闹钟时间的修改和定时,P2.5功能按键实现闹钟的开关,定时时间到喇叭可以发出报警声并自动关闭。
在软件方面采用汇编语言编程。
整个定时闹钟系统能完成时间的显示,调时和定时闹钟、闹钟开关,复位等功能,并经过系统仿真后得到了正确的结果。
Key: XXXXX目录1 概述 (1)1.1设计意义 (1)1.2设计任务 (1)1.3设计系统的主要功能 (1)2 系统总体方案及硬件设计 (2)2.1系统总体方案 (2)2.2系统设计方框图 (2)2.3硬件设计 (2)2.3.1芯片:AT89C52 (2)2.3.2蜂鸣器:BUZZER (5)2.3.3时钟电路 (5)2.3.4显示器模块的设计 (6)3 软件设计 (9)3.1程序流程图 (9)3.2系统的软件构成及功能 (10)3.2.1显示时间,闹钟时间的设置程序 (10)3.2.2中断程序设计............................................................ 错误!未定义书签。
毕业论文《基于AT89C52单片机的显示时钟与日历、测量环境温度的多功能电子时钟的设计》
摘要电子时钟主要是利用电子技术讲时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性强的特点,被广泛用于生活和工作当中。
另外,在生活和工农业生产中,也常常需要温度,这就需要电子钟具有多功能性。
本设计为一款实现显示时钟/日历、测量环境温度的多功能电子时钟。
本设计采用AT89C52芯片作为核心,LCD液晶显示,使用DS1302实时时钟日历芯片完成时钟/日历芯片的基本功能,同时利用DS18B20温度传感器测量环境温度。
关键词:电子时钟;多功能;AT89C52;时钟日历芯片;温度传感器AbstractThe electronic clock mainly uses the electronic computerization, the digitization, with the clock precision, small, scalable performance and other characteristics, was widely used in life and work .measure temperature are required in life、industry and agricultural production, so Multi-function is necessary。
The design use AT89C52 as a cope chips, LCD displaying, using real-time clock chip to complete the basic function of the clock/calendar. At the same time the design use of DS18B20 temperature sensors to collect the temperature .Key words:Electronic Clock ; Multi-function;A T89C52; DS1302;DS18B20.目录第一章绪论 (1)1.1 引言 (1)1.2 选题背景与意义 (1)1.3 论文主要研究内容 (1)1.4 电子时钟的功能 (2)1.5 主要章节安排 (2)第二章单片机简介 (3)2.1 单片机概述 (3)2.2单片机的应用 (4)2.3单片机的输入输出口 (4)2.3.1 P0口 (5)2.3.2 P1口 (7)2.3.3 P2口 (8)2.3.4 P3口 (9)2.4 复位状态 (9)2.5单片机应用系统的一般调试方法 (10)2.5.1 硬件调试 (10)2.5.2 软件调试 (10)2.5.3系统联调 (11)第三章多功能电子时钟设计方案分析 (12)3.1 芯片的选择 (12)3.2显示模块选择 (12)3.3时钟信号的选择 (12)3.4温度采集模块的选择 (13)3.5 电路设计最终方案决定 (13)第四章多功能电子时钟的硬件设计 (14)4.1电子时钟设计框图 (14)4.2时钟电路设计 (14)4.3环境温度采集电路设计 (16)4.4 显示电路设计 (17)4.5 按键电路设计 (19)4.6 晶振、复位电路设计 (19)第五章多功能电子时钟的软件设计 (21)5.1液晶显示子程序 (21)5.2实时时钟日历芯片子程序 (22)5.3时间设置子程序 (22)5.4主程序流程 (23)第六章多功能电子时钟的系统仿真 (25)6.1 Keil 简介 (25)6.2 Proteus简介 (27)6.3 多功能电子时钟的详细仿真过程 (32)第七章样机制作与调试 (34)7.1元器件清单 (34)7.2 线路板焊接及其检查 (34)7.3 样机调试、运行结果 (35)第八章总结与展望 (37)致谢 (38)参考文献 (39)附录A (40)第一章绪论1.1引言20世纪末,单片机技术获得了飞速的发展,在其推动下,现在电子产品几乎渗透了社会的各个领域,有力地推动了社会生产的发展和社会信息化程度的提高,同时也使现在电子产品性能进一步提高,产品跟新换代越快越快。
单片机原理课程设计基于AT89C52的电子时钟设计说明书
word格式文档单片机原理课程设计题目: 基于AT89C52的电子时钟设计姓名:学院:专业:班级:学号:指导教师:年月日南京农业大学教务处制aortiu目录摘要 (2)关键词 (2)引言 (2)1设计要求与方案论证 (2)1.1设计要求 (2)1.2系统方案选择方案和论证 (2)1.2.1单片机芯片的选择方案和论证 (2)1.2.2 显示模块选择方案和论证 (3)1.2.3 时钟芯片的选择方案和论证 (3)2.系统的硬件设计与实现 (3)2.1电路设计框图 (3)2.2系统硬件概述 (3)2.3主要单元电路的设计 (4)2.3.1 单片机主控制模块的设计 (4)2.3.2时钟电路模块的设计 (4)2.3.3 键盘模块设计 (5)2.3.4蜂鸣器模块的设计 (5)2.3.5显示模块的设计 (5)3.系统的软件设计 (6)3.1程序流程框图 (6)3.2程序的设计 (7)4.系统调试 (7)4.1软件调试 (7)4.2硬件调试 (8)4.3 实验箱调试结果 (8)5.总结心得体会 (9)附录一:系统程序 (9)基于AT89C52的电子时钟设计指导教师:吕成绪胡飞摘要:单片机在电子产品中的应用越来越广泛,特别是51系列的单片机,由于其使用方便、价格低廉等优势,在市场上占有很大的份额。
AT89C52就是51系列中的一个比较成熟的型号。
本设计是一个多功能的实时时钟,带秒表、整点报时、闹铃、调整时间等功能。
可按键直接设置闹铃时间。
由AT89C51单片机、DS1302、LCD1602等模块组成。
现代社会,时间就是金钱,时钟是每个人的必备品。
本设计实现了所需功能,给大家带来方便,整体性好、人性化强、可靠性高,实现了时钟的多功能应用。
关键词:电子时钟;DS1302;LCD1602;引言:随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。
美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。
毕业设计(论文)_基于at89c52单片机的多功能电子钟设计[管理资料]
多功能电子钟的设计摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
而51单片机是各单片机中最为典型和最有代表性的一种。
本次设计以AT89C52芯片为核心,辅以必要的外围电路,设计了一个简易的电子时钟,它由220V交流电源供电。
在硬件方面,除了CPU外,使用6个七段LED数码管来进行显示,LED采用的是静态显示。
通过LED能够比较准确显示时、分、秒。
两个简单的按键实现对时间的调整。
软件方面采用汇编语言编程。
整个电子钟装置能完成时间的显示、调时、定时闹钟、秒表、复位等功能。
通过这次设计让我更深入了解单片机基本电路、如何控制和定时器和中断编程的基本方法,从而锻炼了我学习、设计和开发软、硬件的能力。
关键词:电子时钟、多功能、AT89C52、LED数码显示The Design with Investigation of the Multi-function Electron ClockAbstractBecause of its extremely high performance-price ratio, the single-chip computer (SCC) has been paid great attention to ever since it came out in 1970s of 20th Century, and has gained an extensive applicable field and fast development. Among all kinds of SCCs, 51 SCC is the most typical and representative one.This design, adopting AT89C52 chip as the core part with some necessary peripheral circuits, is a simple electronic clock which uses 220V AC as the power supply. In hardware aspect, besides the CPU, six seven-segment LED digi-tubes are used for display, which work in a statically display mode. The LEDs can accurately indicate hour and minute and two buttons can be used to adjust the time. While in the software aspect, the programming language is assembly language. The whole electronic clock system has functions of time display, adjustment, bell-setting , stopwatch and reset, etc.This design enables me to have greater insight into the basic circuit of SCC, and the basic methods of timer control and interruption programming, so that is a training of my ability of learning, designing and developing software and hardware.Key Words:Electronic clock、Multi-function、AT89C52、LED目录引言 ............................................................................................................................... - 1 -第1章绪论 ......................................................................................................................... - 2 -方案要求 ............................................................................................................................. - 2 -方案设计 ............................................................................................................................. - 2 -硬件框图 ............................................................................................................................. - 3 -第2章硬件设计 ................................................................................................................. - 4 -AT89C52的管脚说明....................................................................................................... - 4 -T0和T1的设置 ............................................................................................................... - 6 -T2的设置.......................................................................................................................... - 8 -模块设计 ........................................................................................................................... - 10 -电源部分 ..................................................................................................................... - 10 -复位部分 ..................................................................................................................... - 11 -振荡器部分 ................................................................................................................. - 11 -发声部分 ..................................................................................................................... - 11 -显示部分 ..................................................................................................................... - 12 -第3章软件设计 ............................................................................................................... - 16 -主程序流程图 ................................................................................................................... - 16 -中断程序流程图 ............................................................................................................... - 17 -源程序 ............................................................................................................................... - 20 -结论与展望 ......................................................................................................................... - 21 -参考文献 ............................................................................................................................. - 22 -致谢 ............................................................................................................................. - 22 -附录A 系统电路原理图 ................................................................................................... - 23 -附录B 引用的外文文献及其译文 ................................................................................... - 24 -附录C 主要参考文献的题录及摘要 ............................................................................... - 30 -附录D 电子时钟源程序 ................................................................................................... - 32 -插图清单图1- 1 多功能电子钟原理框图.................................................................................. - 3 -图2- 1 AT89C52芯片PDIP封装引脚图................................................................. - 5 - 图2- 2 电源电路........................................................................................................ - 10 -图2- 3 按键复位电路................................................................................................ - 11 -图2- 4 振荡器............................................................................................................ - 11 -图2- 5 发声电路........................................................................................................ - 12 -图2- 6 数码管显示电路............................................................................................ - 12 -图2- 7 DM7447AN引脚功能图............................................................................. - 14 -图2- 8 七段显示器对DM7447AN 之保护电路图................................................. - 16 -图3- 1 主程序流程图................................................................................................ - 17 - 图3- 2 T2中断流程图 ............................................................................................ - 18 -图3- 3 T1中断流程图 ............................................................................................ - 19 -图3- 4 T0中断流程图 ............................................................................................ - 20 -表格清单表2- 1 ........................................................................................................................ - 6 -表2- 2 P3口各位的第二功能................................................................................... - 6 -表2- 3 TMOD ............................................................................................................ - 7 -表2- 4 TCON ............................................................................................................. - 7 -表2- 5 计数器工作方式............................................................................................ - 7 -表2- 6 T2CON ........................................................................................................... - 8 -表2- 7 T2CON的各位功能...................................................................................... - 8 -表2- 8 T2MOD .......................................................................................................... - 9 -表2- 9 定时器2工作方式........................................................................................ - 9 -表2- 10 数码管数据和数码管每段的对应关系...................................................... - 13 -表2- 11 数码管断码和字型的对应关系(共阳极).............................................. - 13 -表2- 12 DM7447AN 真值表.................................................................................. - 15 -引言一寸光阴一寸金,寸金难买寸光阴。
基于STC89C52的电子时钟的设计(有闹钟调时间)
单片机课程设计基于STC89C52的电子时钟的设计电路图程序:#include <reg52.h>sbit beep=P1^0; //蜂鸣器sbit l1=P1^1; //第一个红灯sbit l2=P1^2; //第一个绿灯sbit w4=P1^4; //第1位sbit w3=P1^5; //第2位sbit w2=P1^6; //第3位sbit w1=P1^7; //第4位sbit k1=P3^2; //按键1 +sbit k2=P3^3; //按键2 —sbit k3=P3^6; //按键3 时分调整sbit k4=P3^7; //按键4 功能选择秒表闹钟时间unsigned int a,b,c,d,e,f,num,num1,num2,num3,sum;unsigned char code table[]={0xc0 ,0xf9,0xa4,0xb0,0x99, //15-i0x92,0x82,0xf8,0x80,0x90}; //0011 1111 1100 0000 void keyscan();void sound();void time();void display(); // 时间显示void display2(); // 秒表显示void delay(unsigned int t){unsigned int i,j;for(i=t;i>0;i--)for(j=110;j>0;j--);}void init(){num=45;num2=59;num3=11;TMOD=0x11;TH1=(65536-45872)/256;TL1=(65536-45872)%256;EA=1;ET1=1;TR1=1;beep=0;delay(300);beep=1;delay(500);}void main(){init();while(1){keyscan();display();time();}}void sound(){beep=0;delay(100);beep=1;}void time(){if(num==59) //整点报时 2 miao {beep=0;}else if(num==0) //整点报时{beep=1;}}void keyscan() //按键检测{if(k3==0){TR1=0;sum++;delay(30);}switch(sum){case 1: if(k1==0){num2++;sound(); //蜂鸣叫while(!k1)if(num2==60){num2=0;}break;}if(k2==0){num2--;sound(); //蜂鸣叫while(!k2)if(num2==-1){num2=59;}break;}break;case 2: if(k1==0){num3++;sound(); //蜂鸣叫while(!k1)if(num3==24){num3=0;}break;}if(k2==0){num3--;sound(); //蜂鸣叫while(!k2)if(num3==-1){num3=23;}break;}break;case 3: sum=1;TR1=1;break;}if(k4==0){P0=table[0];w1=0;w2=0; //初始化w3=0;w4=0;while(1){display2();}}}void display(){a=num/10;b=num%10;c=num2/10; //时分秒的个位和十位d=num2%10;e=num3/10;f=num3%10;P0=table[e];w1=0; //第1位delay(2);w1=1;P0=table[f];w2=0; //第2位delay(2);w2=1;P0=table[c];w3=0; //第3位delay(2);w3=1;P0=table[d];w4=0; //第4位delay(2);w4=1;}void display2() {P0=table[e];w1=0; //第1位delay(2);w1=1;P0=table[f];w2=0; //第2位delay(2);w2=1;P0=table[c];w3=0; //第3位delay(2);w3=1;P0=table[d];w4=0; //第4位delay(2);w4=1;}void T1_time()interrupt 3{TH1=(65536-45872)/256;TL1=(65536-45872)%256;num1++;if(num1==20){l1=~l1;num1=0;num++;if(num==60){l2=~l2;num=0; //秒到60跳到0num2++;if(num2==60){num2=0; //分到60跳到0num3++;if(num3==13) //时位到13 跳到0{num3=1;}}} //num记秒num2计分num3计时}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机原理课程设计题目: 基于AT89C52的电子时钟设计姓名:学院:专业:班级:学号:指导教师:年月日农业大学教务处制aortiu目录摘要 (2)关键词 (2)引言 (2)1设计要求与方案论证 (2)1.1设计要求 (2)1.2系统方案选择方案和论证 (2)1.2.1单片机芯片的选择方案和论证 (2)1.2.2 显示模块选择方案和论证 (3)1.2.3 时钟芯片的选择方案和论证 (3)2.系统的硬件设计与实现 (3)2.1电路设计框图 (3)2.2系统硬件概述 (3)2.3主要单元电路的设计 (4)2.3.1 单片机主控制模块的设计 (4)2.3.2时钟电路模块的设计 (4)2.3.3 键盘模块设计 (5)2.3.4蜂鸣器模块的设计 (5)2.3.5显示模块的设计 (5)3.系统的软件设计 (6)3.1程序流程框图 (6)3.2程序的设计 (7)4.系统调试 (7)4.1软件调试 (7)4.2硬件调试 (8)4.3 实验箱调试结果 (8)5.总结心得体会 (9)附录一:系统程序 (9)基于AT89C52的电子时钟设计指导教师:吕成绪胡飞摘要:单片机在电子产品中的应用越来越广泛,特别是51系列的单片机,由于其使用方便、价格低廉等优势,在市场上占有很大的份额。
AT89C52就是51系列中的一个比较成熟的型号。
本设计是一个多功能的实时时钟,带秒表、整点报时、闹铃、调整时间等功能。
可按键直接设置闹铃时间。
由AT89C51单片机、DS1302、LCD1602等模块组成。
现代社会,时间就是金钱,时钟是每个人的必备品。
本设计实现了所需功能,给大家带来方便,整体性好、人性化强、可靠性高,实现了时钟的多功能应用。
关键词:电子时钟;DS1302;LCD1602;引言:随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。
美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。
它可以对年、月、日、周、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。
对于数字电子时钟采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。
该设计以AT89C51单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。
综上所述,此电子时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
1.设计要求与方案1.1 设计要求:(1)启动时显示制作的年、月、日、制作者的学号等信息。
(2)24小时计时功能(精确到秒)(3)整点报时功能。
(4)秒表功能(5)省电功能模式(未设计)1.2 系统基本方案选择1.2.1单片机芯片的选择方案和论证方案一:采用89C51芯片作为硬件核心,采用Flash ROM,部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
方案二:采用AT89S52,片ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。
相比之下,我们在实验箱实际仿真时选择采用AT89S52作为主控制系统,由于proteus库中没有AT89S52,在原理图仿真时采用了AT89C51.1.2.2 显示模块选择方案和论证方案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示.方案二:采用LCD液晶显示屏,液晶显示屏的显示功能强大,显示多样,清晰可见.本设计采用LCD1602.1.2.3时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、时、分、秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。
所以不采用此方案。
方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V围,2.5V时耗电小于300nA.综上各方案所述,对此次作品的方案选定: 采用AT89C52作为主控制系统, DS1302提供时钟计时,LCD1602屏幕显示.2.系统的硬件设计与实现2.1 电路设计框图本电路是由AT89C51单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302部有一个31*8的用于临时性存放数据的RAM寄存器。
可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;显示部份由LCD1602构成.2.3主要单元电路的设计2.3.1单片机主控制模块的设计图-1 主控制系统AT89C51单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3。
单片机的最小系统如上图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路.如图-1 所示.2.3.2时钟电路模块的设计图-2 DS1302的引脚图图-2示出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进行操作。
如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。
中有在SCLK 为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。
SCLK始终是输入端。
2.3.3 键盘模块设计图-3 键盘模块如图-3,K1、K2、K3、K4均为多功能键。
K1为秒表设置键,按K4键时为时钟确定键;K2在K4按下时为时钟下调键,在K3按下时为闹钟确定键,在K1按下时为秒表开始键;K3为闹钟设置键,在K4按下时为时钟上调键,在K1按下时为秒表暂停键;K4为时钟设置键,在K3按下时为闹钟移位键,在K1按下时为秒表退出键。
2.3.4蜂鸣器模块的设计图-4 声音输出模块闹铃时间到和整点时,P3_7给低电平,蜂鸣器响。
2.3.5显示模块的设计图-5 LCD显示输出模块如图—5,1脚VSS和3脚VEE为电源接地,第2管脚VDD接电源,第4管脚RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器;RW为读写信号线,高电平1时进行读操作,低电平0时进行写操作;E(或EN)端为使能(enable)端;第7~14脚D0~D7为8位双向数据端。
控制和数据端都接了上拉电阻用来驱动。
3.系统的软件设计3.1程序流程框图图-A 主程序流程图图-B 时间调整程序流程图3.2程序的设计见附录4.系统调试4.1软件调试结果时钟主界面用户设置闹铃界面秒表界面时钟仿真图4.2 硬件调试结果起初蜂鸣器有点问题不响,后来发现是定义错端口引起的。
其他功能正常。
4.3实验箱调试结果实现功能的具体方法:时钟主界面时按下K1键进入秒表功能,按K2秒表开始,再按K3秒表停,按键K4返回时间显示;按K4开始调试(移位“年→秒”),接着按K2、K3调节时间增减;按K2开启闹钟,K3调节时间,K4(移位“时分”);按“年→秒”的顺序移位,按键K2进行减运算,按键K3进行加运算,按键K1返回到主界面并显示设置值。
按下K3键,实现闹钟定时调整,按键K4进行“分-秒”移位,按键K3进行上调,按键K2返回到主界面。
主界面K2实现开启/关闭闹钟的功能。
按下K1键进入秒表,按键K2开始计时,K3暂停计时,K4返回到主界面。
5.总结心得体会:这次实习我们组选择的是电子时钟设计。
实习任务包括理论设计、调试与仿真、撰写设计报告等。
其中理论设计又包括选择总体方案,硬件系统设计、软件系统设计;硬件设计包括单元电路,选择元器件及计算参数等;软件设计包括模块化层次结构图,程序流程图。
程序设计是课程设计的关键环节,开始以为时钟会很简单,就算遇到问题应该也很好解决,但当自己真正去做的时候,发现了好多困难。
于是查资料,问同学。
经过和同学的探讨,通过调试进一步完善程序设计,最后虽然省电模式没实现但其他基本达到课题所要求的指标。
完成了实习任务。
这次实习我更加了解了单片机的应用,更加牢牢的掌握了书本知识与现实的结合,总之这是实习收获很大,以后还需多动手实践,多练习编程,才能熟练掌握单片机。
附录一:程序:#include<reg52.h>#include<INTRINS.H>#include<lcd1602.h>#include<ds18b20.h>#define uchar unsigned char#define uint unsigned int#define TIME (0X10000-50000)#define FLAG 0xf4 //闹钟标志sbit rst=P1^2; //DSsbit clk=P1^0;sbit dat=P1^1;sbit rs=P2^0; //LCDsbit rw=P2^1;sbit e=P2^2;sbit beep=P1^3;sbit mbkey=P1^4;uchar k;uchar flag;uchar i=20,j,time1[16];uchar alarm[2],time2[15],time[3];time5[3];uchar code Day[]={31,28,31,30,31,30,31,31,30,31,30,31}; //12个月的最大日期(非闰年)uchar key2num,ms=0,mbmiao=0,mbfen=0,mbkeynum,num; //ms秒表进数,mbmiao.mbfen秒表的秒.分,key2num是key5的计数uchar code table[]=" 32210324 GYY";uchar code table1[]=" 32210326 GLQ";uchar code table4[]=" 00:00:00 MB ";void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}delay1ms(uchar time) //延时1ms{ uchar i,j;for(i=0;i<time;i++){ for(j=0;j<250;j++);}}//LCD驱动部分enable(){ rs=0;rw=0;e=0;delay1ms(3);e=1;}write2(uchar i){ P0=i;rs=1;rw=0;e=0;delay1ms(2);e=1;}write1(uchar data *address,m){ uchar i,j;for(i=0;i<m;i++,address++){ j=*address;write2(j);}}//LCD显示lcdshow(){ P0=0XC; //显示器开、光标关enable();P0=0x80; //第一行0~15enable();write1(time1,16);P0=0xc1; //第二行1~14enable();write1(time2,15);}//DS1302读写子程序write(uchar address){ uchar i;clk=0;_nop_();rst=1;_nop_();for(i=0;i<8;i++){ dat=address&1;_nop_();clk=1;address>>=1;clk=0;}}uchar read(){ uchar i,j=0;for(i=0;i<8;i++){ j>>=1;_nop_();clk=0;_nop_();if(dat)j|=0x80;_nop_();clk=1;}return(j);}//部分显示数据初始化timestart(){time1[6]=time1[9]='-';time1[2]='2',time1[3]='0';time2[2]=time2[5]=':';write(0xc1);alarm[0]=read();rst=0;write(0xc3);alarm[1]=read();rst=0;write(0xc5);time1[0]=read();rst=0;}//读取时间readtime(){ uchar i,m,n;write(0x8d); //读取年份rst=0;time1[4]=m/16+0x30;time1[5]=m%16+0x30;time1[15]=m+0x30;for(i=7,n=0x89;i<11;i+=3,n-=2) //读取月份和日期{ write(n);m=read();rst=0;time1[i]=m/16+0x30;time1[i+1]=m%16+0x30;}for(m=0,i=0,n=0x85;i<7;i+=3,n-=2,m++) //读取时,分,秒{ write(n);time[m]=read(); //将实时的时分秒给time[] rst=0;time2[i]=time[m]/16+0x30;time2[i+1]=time[m]%16+0x30;}}baoshi() //整点报时{ beep=1;if(time[1]==0)if(time[2]==0){beep=0;delay(10);beep=1;}}//闹钟部分showalarm(){ uchar i;for(i=1;i<10;i++){beep=0;delay(1000);beep=1;}}//根据日期的变动自动调整星期//设置时间settime(){uchar i=0x85,year,month,day,n;time2[6]=time2[7]=0x30,time1[14]=time1[15]=0x20;while(1){P0=0x0e; //显示器开显示、开光标enable();P0=i; //定光标enable();P1=0xf0;if(P1!=0Xf0) //有按钮按下{delay1ms(100); //延时0.1s去抖动if(P1!=0Xf0){j=7;if(P1==0X70) //K1,设置时钟{i+=3;if(i==0x8e)i=0xc2;else if(i>0xc5)i=0x85;}else if(P1==0xb0) //K2,上调{year=(time1[4]&0xf)*10+(time1[5]&0xf);month=(time1[7]&0xf)*10+(time1[8]&0xf);day=(time1[10]&0xf)*10+(time1[11]&0xf);if(i==0x85){year++;if(year>99)year=0;if((year%4)!=0)if(month==2&&day==29)day=28;}else if(i==0x88){month++;if(month>12)month=1;if(day>Day[month-1]){day=Day[month-1];if(month==2&&(year%4)==0)day=29;}}else if(i==0x8b){day++;if(day>Day[month-1]){if(month==2&&(year%4)==0){if(day>29)day=1;}if(month!=2)day=1;}}else if(i==0xc2){n=(time2[0]&0xf)*10+(time2[1]&0xf);n++;if(n>23)n=0;time2[0]=n/10+0x30;time2[1]=n%10+0x30;}else{n=(time2[3]&0xf)*10+(time2[4]&0xf);n++;if(n>59)n=0;time2[3]=n/10+0x30;time2[4]=n%10+0x30;}time1[4]=year/10+0x30;time1[5]=year%10+0x30;time1[7]=month/10+0x30;time1[8]=month%10+0x30;time1[10]=day/10+0x30;time1[11]=day%10+0x30;lcdshow();}else if(P1==0xd0) //K3,下调.{ year=(time1[4]&0xf)*10+(time1[5]&0xf);month=(time1[7]&0xf)*10+(time1[8]&0xf);day=(time1[10]&0xf)*10+(time1[11]&0xf);if(i==0x85){year--;if(year<1)year=99;if((year%4)!=0)if(month==2&&day==29)day=28;}else if(i==0x88){month--;if(month<1)month=12;if(day>Day[month-1]){day=Day[month-1];if(month==2&&(year%4)==0)day=29;}}else if(i==0x8b){day--;if(day<1){if(month==2&&(year%4)==0){day=29;}if(month!=2)day=Day[month-1];}}else if(i==0xc2){n=(time2[0]&0xf)*10+(time2[1]&0xf);n--;if(n<0)n=23;time2[0]=n/10+0x30;time2[1]=n%10+0x30;}else{n=(time2[3]&0xf)*10+(time2[4]&0xf);n--;if(n<0)n=59;time2[3]=n/10+0x30;time2[4]=n%10+0x30;}time1[4]=year/10+0x30;time1[5]=year%10+0x30;time1[7]=month/10+0x30;time1[8]=month%10+0x30;time1[10]=day/10+0x30;time1[11]=day%10+0x30;lcdshow();}else if(P1==0xe0) //K4,确定设置{ delay1ms(1000);write(0x8c);write((time1[4]&0xf)*16+(time1[5]&0xf));rst=0;write(0x8a);rst=0;for(i=7,n=0x88;i<11;i+=3,n-=2){write(n);write((time1[i]&0xf)*16+(time1[i+1]&0xf));rst=0;}for(i=0;i<7;i+=3,n-=2){write(n);write((time2[i]&0xf)*16+(time2[i+1]&0xf));rst=0;}TR0=0;return;else{TR0=0;return;}}}if(j==0){TR0=0;return;}}}//设置闹钟setalarm(){uchar i,n;for(i=1;i<16;i++){time1[i]=0x20;}time2[0]=alarm[0]/16+0x30;time2[1]=(alarm[0]&0x0f)+0x30;time2[3]=alarm[1]/16+0x30;time2[4]=(alarm[1]&0x0f)+0x30;time2[6]=time2[7]=0x30;lcdshow();i=0xc2;while(1){P0=0xe; //显示器开、光标开enable();P0=i; //定光标enable();P1=0xf0;if(P1!=0Xf0) //有按钮按下{delay1ms(100); //延时0.1s去抖动if(P1!=0Xf0){j=7;if(P1==0X70)i+=3;if(i>0xc5)i=0xc2;}else if(P1==0xb0) //按K2,设闹钟{if(i==0xc2){n=(time2[0]&0xf)*10+(time2[1]&0xf);n++;if(n>23)n=0;time2[0]=n/10+0x30;time2[1]=n%10+0x30;}else{n=(time2[3]&0xf)*10+(time2[4]&0xf);n++;if(n>59)n=0;time2[3]=n/10+0x30;time2[4]=n%10+0x30;}lcdshow();}else if(P1==0xd0) //确定闹钟设置{write(0xc0);write((time2[0]&0x0f)*16+(time2[1]&0x0f));rst=0;write(0xc2);write((time2[3]&0xf)*16+(time2[4]&0xf));rst=0;time1[0]=FLAG;write(0xc4);write(time1[0]);rst=0;TR0=0;timestart();return;}elseTR0=0;timestart();return;}}}if(j==0){TR0=0;timestart();return;}}}//lcdwrite() LCD写指令void lcdwrite(uchar write){rs=0;P0=write;delay(1);e=1;delay(1);e=0;}//lcdshuju() LCD写数据void lcdshuju(uchar shuju){rs=1;P0=shuju;delay(1);e=1;delay(1);e=0;}//秒表部分void write_sfm(uchar add ,uchar date) //秒显示函数{ uchar shi,ge;shi=date/10;ge=date%10;lcdwrite(0x80+0x40+add);lcdshuju(0x30+shi);lcdshuju(0x30+ge);}void mbiao( ) //秒表函数{ lcdwrite(0x80+0x40);for(num=0;num<16;num++)lcdshuju(table4[num]);start:while(1){ if(P1!=0Xf0){ delay1ms(100); //延时0.1s去抖动 if(P1!=0Xf0)if(P1==0xd0) //秒表开始计数{TR1=1;ET1=1;}else if(P1==0xb0) //秒表暂停计数{ TR1=0;}else if(P1==0x70) //退出{return;}goto start;}}}void init(){ e=0;rw=0;lcdwrite(0x38);//显示模式lcdwrite(0x0c);//开显示,光标不闪烁lcdwrite(0x80);for(i=0;i<16;i++){lcdshuju(table[i]);delay(200);}lcdwrite(0x80+0x40);for(i=0;i<16;i++){lcdshuju(table1[i]);delay(200);}delay(500);lcdwrite(0x01);}main(){init();IE=0X82;TMOD=0x11;write(0x8E); //关闭写保护write(0);rst=0;P0=1; //清屏并光标复位enable();P0=0X38; //设置显示模式:8位2行5x7点阵enable();P0=6; //文字不动,光标自动右移enable();timestart();while(1){readtime(); //读取时间lcdshow(); //显示时间baoshi();if(time1[0]!=0x20){beep=1;if(time[0]==alarm[0])if(time[1]==alarm[1])if(time[2]==0)showalarm();}P1=0xf0;if((P1&0Xf0)!=0Xf0){delay1ms(100); //延时0.1s去抖动if((P1&0Xf0)!=0Xf0){j=7;TH0=TIME/256,TL0=TIME%256;TR0=1; //关闭时钟if(P1==0x70){settime();}else if(P1==0Xb0){setalarm();}else if(P1==0Xd0){TR0=0; //开启时钟if(time1[0]==FLAG)time1[0]=0x20;elsetime1[0]=FLAG;write(0xc4);write(time1[0]);rst=0;}else if(P1==0Xe0&&mbkey==0) //开启秒表{mbiao();}}}delay1ms(100);}}void time0() interrupt 1 using 1{i--;if(i==0){if(j!=0)j--;i=20;}TH0=TIME/256,TL0=TIME%256;}void timer1() interrupt 3 //秒表定时器{TH1=(65536-10000)/256;TL1=(65536-10000)%256;ms++;write_sfm(8,ms);if(ms==1*30){mbmiao++;write_sfm(5,mbmiao);ms=0;if(mbmiao==60){mbmiao=0;mbfen++;write_sfm(2,mbfen);}}}。