版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 .PAGE28 / NUMPAGES36Xxxx届毕业设计说明书设计题目:数字电子时钟作 者 姓 名 xxx 作 者 学 号 xxxx 专 业 班 级 电气自动化-4班 指导教师 xxx 专业技术职称 讲 师 Xxxx学院机电系2011年06月10日毕业设计(论文)任务书题 目: 数字电子时钟 专 业: 电气自动化 班 级: 2008-4班 学生: xx 学号:xxxxxXxx年xx 月xx 日至 xx 月 xx 日共 xx 周一、设计容(论文阐述的问题)数字时钟在日常生活中很常见,应用也很广泛。本次设计就是设计一款数字时钟,以AT89C51单片机为核心,配备数码管显示模板、按键等功能模块。
2、数字时钟采用24小时制方式显示时间,在数码管上显示小时、分钟等功能。设计的核心主要包括硬件设计和软件编程两个方面。硬件电路设计主要包括中央处理单元电路、时钟电路、执行电路等几部分。软件用汇编语言来实现,电路简单明了,系统稳定性高。由于系统所用元器件较少,单片机所被占用的I/O口不多,因此系统具有一定的可扩展性。二、设计原始资料与要求(1)利用定时器或软件延时,可编程并行芯片AT89C51,LED显示控制。(2)显示无误(3)走时准确三、设计完成后提交的文件和图表(论文完成后提交的文件)1.图纸部分:系统硬件电路图四、毕业设计(论文)进程安排序号设计(论文)各阶段工作容时间分配(起止日期)1毕业
3、调查实习,与指导老师交流设计事宜3月15日-3月28日2查阅文献,收集资料3月29日-4月 4 日3确定系统的设计方案4月5日-4月 11 日4总体设计、结构设计、详细计算、编程与调试等容4月12日-5月 3 日5编写设计说明书5月4日-5月 25 日6指导教师批改、同时自己继续完善修改5月26日-6月 5 日7进一步核定数据、修改设计图纸和说明书6月6日-6月 14 日8毕业设计答辩6月15日-6月16日五、主要参考资料1家健、柏荣、汪志峰 编著.单片机原理与应用技术.高等教育2严天峰 单片机应用系统设计与仿真调试.航空航天大学3廖芳.电子产品生产工艺与管理M.清华大学2003.4建民.模拟
4、电子技术基础M.清华大学2006.5嘉奎.电子线路(线性部)M.第四版.:高等教育,19996自美.电子电路设计 实验测试M. 武昌华中理工大学,19947童诗白.模拟电子技术基础M.第二版.:人民邮电,19998康华光主编,电子技术基础M (数学部分、模拟部分),高等教育,19889胡宴如. 模拟电子技术M. :高等教育,2004,210志忠.数字电子技术M. : 高等教育,2003,12学 生 (签 字): 教研室主任(签字):指导教师(签字): 系主任 (签字):摘 要 数字时钟在日常生活中很常见,应用也很广泛。本次设计就是设计一款数字时钟,以AT89C51单片机为核心,配备数码管显示模
5、板、按键等功能模块。数字时钟采用24小时制方式显示时间,在数码管上显示小时、分钟等功能。设计的核心主要包括硬件设计和软件编程两个方面。硬件电路设计主要包括中央处理单元电路、时钟电路、执行电路等几部分。软件用汇编语言来实现,电路简单明了,系统稳定性高。由于系统所用元器件较少,单片机所被占用的I/O口不多,因此系统具有一定的可扩展性。主要包括主程序,键盘扫描子程序,时间设置子程序等软件模块。关键词:AT89C51,单片机,数码显示,中断ABSTRACTDigital clock in daily life is very common, and is also widely used. This
6、design is the design of a digital clock, with AT89C51, equipped with digital pipe display template, such as keys function modules. Digital clock with the 24-hour system in digital displays the time, displayed on the hour, minute tube etc. Function. Design core mainly includes hardware design and sof
7、tware programming two aspects. Hardware circuit design includes the central processing unit circuit, clocking circuit and executive circuit segments. Software to realize with assembly language, including the main program, the keyboard scan subroutines, time setting subroutines software modules.KEY W
8、ORDS: AT89C51, microcontroller, digital display, interrupts目录第一章 引言1第二章 方案论证32.1方案一.32.2方案二.32.3方案三.3第三章 主要电路模块的设计.103.1 系统方框图.43.2系统说明.43.3总电路图.43.4单片机电路.43.4.1时钟电路.43.4.2复位电路.43.5按键电路.63.6示电路.73.6.1方案论证.73.6.2 LED的结论与与原理.83.7电源电路.10第四章 软件设计流程图.124.1时钟主程序流程图.114.2按键扫描程序流程图.114.3时钟程序流程图.12第五章 硬软件系统的
9、调试.14参考文献.15结论.16致 .16附件.27第一章 引言时钟,自从它被发明的那天起,就成为人们生活中必不可少的一种工具,尤其是在现在这个讲究效率的年代,时钟更是在人类生产、生活、学习等多个领域得到广泛的应用。然而随着时间的推移,人们不仅对于时钟精度的要求越来越高,而且对于时钟的要求也越来越多,时钟已不仅仅是一种用来显示时间的工具在很多实际应用中他还需要能够实现更多其他的功能。比如闹钟功能、日历显示功能、温度测量功能、湿度测量功能、电压测量功能、频率测量功能、过欠压报警功能等。钟表的数字化给人们的生产生活带来了极大的方便,而且大扩展了钟表原先的报时功能等。比如定时自动报警、按时自动打铃
10、、时间程序自动控制、定时广播、自动启闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电器的自动启用等,所用这些,都是以钟表数字化为基础的。可以说,设计多功能数字时钟的意义以不只在于数字时钟本身,更大的意义在于多功能数字时钟在许多实时控制系统中的应用。在很多实际应用中只要对数字时钟的程序和硬件电路加以一定的修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。因此研究数字时钟与扩大其应用,有着非常现实的意义。 怎样让时钟更好的为我们服务?怎样让时钟更符合实际应用的需求?这就要求人们设计出新型时钟,不断设计出适合实际应用的多功能时钟。本毕业设计方案正是根据以上所述并结合日常生活中多时钟
11、功能需要的分析,运用单片机技术,设计出一个适合日常生活需要的多功能数字钟。此多功能数字时钟除了传统的显示时间功能之外还具日历功能以与定时闹钟功能。第二章 方案论证2.1 方案一采用TTL、CMOS集成电路实现的,其系统方框图如图1所示。数字钟主要由以下几个部分组成:信号源、分频器、十进制计数器、六进制计数器、二进制计数器、RCD-七段显示译码/驱动器、LED(light-emitting-diode)七段显示数码管、时间校准电路和闹时电路。 这是一种纯硬件电路系统,用时序逻辑电路实现时钟功能,用555定闹钟报时的设定。该电路具有抗干扰强、计算精确,使用元器件种类少等优点,但是这种实现方法可靠性
12、差、控制精度低、灵活性小、线路复杂、安装调试部方便,且不具备对测温信号进行数据处理的功能。要实现测温功能必须在添加处理芯片,系统集成度低。2.2方案二利用可编程逻辑器件PLD(Programmab logic Devices )实现。可编程逻辑器件PLD具有集成度高、速度快、功耗小、可靠性高等优点。且EDA(Electronic Design Automation)软件的功能和时序仿真功能和时序仿真功能使得电路功能的调试变得十分的方便。这种方案与前一种相比,可靠性增加,同时可以很好的完成时钟的功能。但是对于温度测量,其不具备对测温数据的处理功能,无法很好的完成扩展功能的要求。同时这种方案只能选
13、用数码管显示,显示的效果不够理想。因此,系统的灵活性不够。2.3方案三利用单片机部具有的计数器实现时钟功能。以12MHZ晶振为例,通过计算可知,使定时器每50秒产生一次中断,当产生20次中断后秒单元将加一,以此类推,从而实现时、分、秒的走时,并加以显示。虽然这种方法存在由于系统晶振误差、温度、中断响应时间的不确定性与定时器重新装载时间常数带来的误差等不足。而且用这种方法实现的时钟在断电的情况下降停止走时,通电后必须再初始化,需要重新调表。但是利用这种方法实现的系统具有一定的可扩展性。由于时钟的实现大部分是有软件的编程来实现的,因此没有前几种方案中来自硬件的束缚。只要对数字时钟的程序和硬件电路加
14、以一定的修改,就可以应用到一些实时控制的系统中去。系统的实用意义更大。通过以上三种方案的比较,决定采用方案三。第三章 主要电路模块的设计3.1系统方框图系统方框图如1-1所示图表1-1系统方框图3.2系统说明系统由51系列单片机AT89C51、按键、数码管显示、电源等部分构成。单片机部分包括时钟电路、复位电路;按键部分能够实现对时间的调整、设定。三个按键的功能分别为;小时的调整,分钟的调整,复位。电源部分(实验室配备电源)可输出一个电压;5V。5V电压给小系统硬件提供电源。3.3总电路图电子钟总电路图见附录1所示。3.4单片机电路3.4.1时钟电路时钟电路由外接谐振荡器、时钟发生器与关断控制信
15、号等组成。时钟时钟振荡器是单片机的时钟源,时钟发生器对振荡器的输出信号进行二分频。 CPU 的时钟正当信号有两个来源;一是采用部振荡器,此时需要在XTALI和XTAL2脚连接一只频率围为0-33MHZ的晶体振荡或瓷振荡器与两只30pf电容。二是采用外部振荡,此时应将外部振荡器的输出信号接至XTALI脚,将XTAL2脚浮空。 利用单片机部定时功能实现时钟的走时,通过编程实现每50毫秒产生一次中断,中断20此后,秒单元加1,秒单元加到60时,跳回到零再继续加1;同时分单元加1;当分单元加到60时,跳到0再继续加,同时时单元的各位加1,以此类推,从而实现秒分小时的走时。本次设计采用的是部振荡器,频率
16、为12MHZ的晶振振荡器与30pf的瓷片电容。如图1-3所示。图1-3时钟电路3.4.2复位电路复位是指在规定的条件下,单片机自动将CPU以与与程序运行相关的主要功能部件、IO口等设置为确定初始状态的过程。如果电路参数不符合规定的条件或干扰导致单片机不能正确的复位,系数将无法进行正常的工作,因此,复位电路除了要符合厂家规定的参数外,还要滤除可能的干扰。AT89S52单片机部有一个由施密特触发器等组成的复位电路。复位信号时从其9脚,即RST脚输入的。AT89S52单片机规定,当其处于正常工作基于51单片机的数字时钟的设计77状态,且振荡工作稳定后,在RST端有从高电平到低电平,且高电平时间大于两
17、个机器周期的复位信号时,CPU将完成对系统的复位。有两点需要注意:一、复位信号是高电平有效,二、高电平的保持时间必须大于两个机器周期,可见高电平保持时间与振荡率有关。 本次设计中采用上电复位电路,上电复位是指在系统上电时,RST端自动产生复位所需要的信号将单片机复位,本次设计中的上电位复位电路如图所示。上电时,RST端高电平的维持时间取决于R(lk)和C(22uF)的值。要使单片机可靠的复位,设计中使其维持的时间足够长。如图1-4所示。 图1-4复位电路3.5按键电路方案一: 采用阵列式键盘,此类键盘是采用行列式扫描方式,当按键较多时间可以减少占用单片机的I/O数目。 方案二:采用独立式按键电
18、路,每个键单独占用一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。但是当按键较多时占用单片机的I/O数目较多。本系统只需两个按键,因此选择方案二。 如果按键采用中断的话,可以使单片机工作更加灵活、效率更高。由于该系统要用到两个按键,考虑到单片机的中断资源不够,所以就只用外部INT1和INT2中断,与P1.2和P1.3口。电路如图1-5所示。 图1-5按键电路3.6显示电路3.61方案论证 方案一:采用动态显示,这种工作方式是分时轮流选通用数码管的公共端,使得各个数码管轮流导通。当所有的数码管依次显示一遍后,软件控制循环,使每位显示器分时点亮。这种方式不但能提高数
19、码管的发光效率,并且由于各个数码管的字段线是并联使用的,因而大大简化了硬件线路。各个数码管虽然是分时轮流通电,单由于发光数码管具有余辉特性与人眼具有视觉暂留作用,所以适当选取循环扫描频率时,看上去所有数码管是同时点亮的,察觉不出有闪烁现象。 方案二:采用静态显示 数码管工作在静态显示方式下,共阴极或共阳极点连接在一起接地或高电平。每位的段选线与一个8位并行口相连。只要在该位的段选线上保持段选码电平,该位就能保持相应的显示字符。该工作方式常采用串行口设定方式0输出,外接74LS164移位寄存器构成显示电路。 由于该系统用到数码管不多,单片机的I/O口资源够。采用静态显示,一个数码管就就要对应一片
20、74LS164芯片,从编程和提供的硬件等方面综合考虑后,决定采用静态先显示的方法。 采用4片74LS164级联的方法来带动4个数码管显示。分钟的个位的短选线连接到第一片74LS164,分钟的十位的短选线连接在第二片74LS164,小时的个位的段选线连接在第三片74LS164,小时的十位的短选线接在第四片74LS164,第一片的A、B脚由单片机的数字信号P1.7输入,第二片的A、B脚接到第一片的QH,第三片的A、B脚接到第四片的QH,四片74LS164的CLK脚共同接到单片机的时钟信号端P1.5。 发送第1个数据时数据暂存在第一片164芯片中;发送第2个数据时,第1个数据就移到第二片164芯片,
21、而第2个数据就存在第一芯片中;发送第3个数据时,第1个数据就移到第三片芯片,第2个数据就移到第二片芯片,而第3个数据就存在第一片芯片中;发送第4个数据时,第1个数据就移到第四片芯片,第2数据就移到第三片芯片,而3数据就移到第二片芯片,第4数据就移到第一片芯片中。当连续发送完4个数据后,把电源拨到ON时,这时数码管就显示第一次的4个数;依次下去数码管就可以显示全部的数据。如图1-6所示。 图1-6显示电路LED显示器的结构与原理3.6.2 LED的结构与原理 下面以最简单的七段数码显示器为例进行说明。通常用的七段数码显示器的部有8个发光二极管,其中7个发光二极管就组成了数字“8”,剩下一个发光二
22、极管就是这位数字所带的小数点。数码管结构图如图1-7所示。 一般数码管部有共阴和共阳两种连接方式。共阴就是将各个发光二极管的阴极连接地,共阴数码管如图(1所示。图中一个发光二极管就相当于一个数码管。若给某段加上高电平,那么相对的段就会亮。根据要想现实的数值给各段数码管加上相应的高电平就可以显示不同的数值了。共阳就是将各个发光二极管的阴极一起接在高电平上。公阳数码管如图(3)所示,从图(3)中可以看出共阳的显示器与共阴的显示器有一点区别。图1-7是8段LED数码的结构示意图,其部实质上8只发光二极管。图1-7(1)LED的结构图 图1-7(2)共阴数码 图1-7(3)共阳数码 由于它部构造不同,
23、在显示时代码也有所不同,共阴和共阳七段LED段选码表如表1-1和表1-2所示。 表1-1共阴七段LED段选码显示字符数显代码显示字符数显代码03FH56DH106H67DH258H7F8H34FH880H466H990H 表1-2共阳七段LED段选码显示字符显示代码显示字符显示代码0C0H592H1F9H682H2A4H7F8H3B0H880H499H990H3.7电源电路 该部分有一个输出电压5V。220V交流市电通过电源变压器变换成交流12V低压,再经过桥式整流电路D1D4和滤波电容2200uf的整流和滤波,在固定式三端稳压器LM7809的Vin和GND两端形成一个并不十分稳定的直流电压(
24、该电压常常会因为市电电压的波动或负载的变化等原因而发生变化)。此直流电压经过LM7809的稳压和100uf电容的滤波后,便在稳压电源的输出产生了精度高、稳定度好的直流输出9V电压。9V电压给可调分流基准芯片TL431提供电源。TL431的主要作用是给A/D转换芯片TLC1594提供比较精确的参考电压。9V电源再经过LM7805稳压后,给各个芯片提供电源。电路见图1-8。三端稳压器是标准化、系列化的通用线性稳压电源集成电路,以其体积小、成本低、性能好、工作可靠性高、使用简洁等特点,成为目前稳压电源中应用最为广泛的一种单片式集成稳压器件。三端稳压器的工作原理(以78系列为例)如下:他与一般分立元件
25、组成的串联式稳压电路基本相似。不同的是增加了启动电路、保护电路和恒流源。启动电路时为恒流源建立工作点而设置的。恒流源随着在基准电压形成和误差放大器电路中,是为了使稳压器能够在比较大的电压变化围正常可靠工作。在芯片设置了两种较完善的保护电路:一是过流保护,一是过热保护。 图1-8 电源电路第四章 软件设计流程图4.1时钟主程序流程图时钟主程序流程图如图1-9所示。 图1- 9时钟主程序流程4.2按键扫描程序流程图 按键扫描程序流程图如图1-10所示。 图1-10按键扫描程序流程4.3时钟程序流程时钟程序流程如图1-11所示。第五章 硬软件系统的调试 硬件调试的主要任务是排除硬件故障,其中包括线的
26、连接,按键是否接上了上拉电阻等。由于最小系统出了点错误,导致写好的芯片无法显示。经用万用表检测,手工慢慢焊接好接入电源。在用万用表检查各个芯片管脚的电压是否达到正常的工作电压,然后判断是否有存在短路现象等,经一步步修改后把硬件调试好。 程序的调试是采用一个模块一个模块的进行,首先单独调试个功能子程序,检验程序是否能够实现预期的功能等;最后逐步将各子程序连接起来总调。联调需要注意的是,各程序模块间能否正确传递参数。 在程序调试过程当中,出现了以下几个问题:LED闪烁问题:虽然本次设计的最终方案是采用LCD显示屏实现显示功能,但是在进行方案比较时曾采用过LED显示方法,最初数码管显示不正常,出现闪
27、烁现象。通过调试发现这是由于延时时间选择不当造成的。由于数码管是采用动态显示方式,为了使人眼长生视觉暂留效果,每一次显示时都必须加入适当的时间延时。由于一开始所选用的延时时间太短,因此出现闪烁现象,在增加显示延时之后,数码管显示正常。闹铃蜂鸣器异常启动问题:闹铃蜂鸣器的启动/关闭是通过单片机输出的控制信号来实现的,当当前时间与闹钟设置时间比较吻合时,单片机将对闹铃控制口P3.4执行取反命令,从而启动蜂鸣器发声。一开始编写程序时,没有对P3.4口的最初状态作正确设置,由于系统开机复位后,P3.4口处于高电平状态,因此出现一开机蜂鸣器就处于启动状态的情况。通过在主程序最开始加入对P3.4口取零命令
28、后,蜂鸣器启动/关闭控制恢复正常。按键消抖问题:在最初编写程序时,按键控制部分按照常例加入了按键消抖程序。在实际调试中,发现按键出现反映不灵敏现象。这是因为在键盘控制程序中除了消抖程序外,还加入了按键提示音程序(每次按压键时,蜂鸣器发出“哗”的一声提示音)。由于在调用提示音子程序时,实际上已实现了一次时间的延时,因此再加入按键消抖程序的延时后,致使延时时间过长而出现按键反映不灵敏问题。通过调试发现提示音子程序本身所产生的延时已能够满足按键消抖程序后,按键控制灵敏度恢复正常。计时显示异常问题:计时程序里面秒值显示每次达到60后直接跳变到下一分钟的01秒,最终会出现24:60:60的时间显示。正确
29、的显示应该是秒值达到59后变成00,时间值在显示到23:59:59之后的下一秒显示为0:00:00。出现这种异常显示的主要问题在于每次计时相应的时钟计时器在向高一位的时候没有将显示单元清零。因此在计时程序里面出现进位情况时,增加相应显存清零的语句后,计时显示恢复正常。 经过不断的调试以后,总体功能达到了预期效果。时间误差很小,运行一天以后时通过按键可以修改当前时间。当定时时间到了24小时,数码显示自动的显示0,然后又从0开始计时。参考文献1家健、柏荣、汪志峰 编著.单片机原理与应用技术.高等教育2严天峰 单片机应用系统设计与仿真调试.航空航天大学3廖芳.电子产品生产工艺与管理M.清华大学200
30、3.4建民.模拟电子技术基础M.清华大学2006.5嘉奎.电子线路(线性部)M.第四版.:高等教育,19996自美.电子电路设计 实验测试M. 武昌华中理工大学,19947童诗白.模拟电子技术基础M.第二版.:人民邮电,19998康华光主编,电子技术基础M (数学部分、模拟部分),高等教育,19889胡宴如. 模拟电子技术M. :高等教育,2004,210志忠.数字电子技术M. : 高等教育,2003,12致 回首x年,取得了些许成绩,生活中有快乐也有艰辛。感老师三年来对我孜孜不倦的教诲,对我成长的关心和爱护。学友情深,情同兄妹。四年的风风雨雨,我们一同走过,充满着关爱,给我留下了值得珍藏的最
31、美好的记忆。在我的十几年求学历程里,离不开父母的鼓励和支持,是他们辛勤的劳作,无私的付出,为我创造良好的学习条件,我才能顺利完成完成学业,感激他们一直以来对我的抚养与培育最后,我要特别感x老师。是他在我毕业的最后关头给了我们巨大的帮助与鼓励,使我能够顺利完成毕业设计,在此表示衷心的感激.x老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。她无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感她耐心的辅导。在毕业设计过程中x老师也给予我很大的帮助,帮助解决了不少的难点,使得系统能够与时开发完成,这里一并表示真诚的感。数
32、字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 数字钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。 因此,我们此次设计与制做数字钟就是为了了解数字钟的原理,从而学会制作数字钟.而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用与实用方法.且由于数字钟包括组合逻辑电路和时叙电路.通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。我们这一次的课程设计虽然只有二个星期的时间,但对我们的受益是很大的。从一开始的不知所措,到经过不断的探索
33、和努力之后,从无到有的把数字电子钟设计出来了,这对我们学生来说是难得的经历和经验。虽然数字钟的功能不是很完善,但是透过过这一次的学习和实践,确确实实的把数字电子钟的运作的基本原理、数字电路设计规划以与元件之间的关联性了解透彻,使我们在以后可以凭借着这些宝贵的经验,设计出更为复杂的电路。整个过程和我们所获得的经验是我们本次课程设计的最大收获。附件附录一 系统硬件电路图附录二:程序清单Void main(void); sys_init(); /*系统初始化*/ t0_init(); /*定时器初始化*/ t1_init(); uart_init(); /*串口初始化*/ buf0=OX0a; bu
34、f1=OX0b; buf2=OX0b; buf3=OX0b; display(); /*显示待机符P.*/ settime(); /*等待设置当前时间*/ display(); /*带闪烁后要加显示,否则出现尾位不显的现象*/ TR0=1; /*设置完后开始走时,启动定时器T0*/ET0=1; /*允许T0溢出中断*/while(1) If(fresh) /*判断是否要刷新显示(分或时变化)*/ buf0=hourh; /*是,则新的时间送到显示缓冲区*/buf1=hourl;buf2=miunh;buf3=miunl; display(); /*显示刷新*/ if(sec) /*判断秒指针要
35、刷新否*/ sec =0 /*是,则刷新(闪烁)*/ L1=!L1; L2=!L2;Dela20ms(); /*点亮时间不能太长,否则影响秒指针,短则太暗*/ else(sec) if(sec) sec=0; L1=!L1; L2=!L2; delay20ms(); void display(void) uchar out; DISPCON=1; /*关闭显示,防止传送数据期间闪烁*/ out=segbuf0; /*取出高位字段码*/ SBUF=out; /*送入74LS164*/ while(!T1); /*等待发送完成*/ T1=0; out=segbuf1; /*取出低位时段码*/ ou
36、t&=OXfe; /*显示时分分隔符*/ SBUF=out; while(!T1); T1=0; out=segbuf2; /*分*/ SBUF=out; while(!T1); T1=0; out=segbuf3; SBUF=out; while(!T1); T1=0; DISPCON=0; /*所有数据已送入后开显示*/ buf0=hourh; /*将目前设定的参数送显示缓冲区*/buf1=hourl;buf2=miunh;buf3=miunl; if(ss) swich(setflag) /*判当前设定位*/ case OX01; buf0=OX0b; /*全暗代码*/ break; c
37、ase OX02; buf1=OX0b; break; case OX04; buf2=OX0b; break; case OX08; buf3=OX0b; break; display(); void timerl (void) interrupt 3 using 1 TH1=OX3c; /*100ms定时常数*/ TL1=OXb0; count+; /*中断次数加1*/ if(count!=5) /*判到10次(1s)否,不到直接返回*/ return; ss=!ss; /*ss闪烁标志求反*/ count=0; void settime(void) uchar i ; while(S1)
38、; /*等待s1键开始设置*/ for(i=0;i4;i+) delay20ms(); /*延时去抖动*/ while(S1); setflag=0; ss=0; hh=1; /*设置当前位标志*/ TR1=1; /*启动定时器T1*/ ET1=1; /*允许T1溢出中断*/ void settime(void) uchar i ; while(S1); /*等待s1键开始设置*/ for(i=0;i4;i+) delay20ms(); /*延时去抖动*/ while(S1); setflag=0; ss=0; hh=1; /*设置当前位标志*/ TR1=1; /*启动定时器T1*/ ET1=
39、1; /*允许T1溢出中断*/ break; case OX04; buf2=OX0b; break; case OX08; buf3=OX0b; break; /*/ display(); if(S1) goto sett_1; if(ml) TR1=0; /*关闭定时器T1*/ ET1=0; /*禁止T1溢出中断*/ buf0=hourh; buf1=hourl; buf2=minuh; buf3=minul; return; /*如果当前编辑的份低位,则按S1键结束设定*/ setflag=1; /*当前位右移(标志左移1位)*/ continue; sett_1: if(S2) con
40、tinue; for(i=0;i4;i+) delay20ms(); /*延时去抖动*/ if(S2) continue; if(!hh) goto sett-2; hourl+; /*时高位加1处理*/ if(hourh!=2) continue; hourh=0; /*时高位只能是0,1*/continue; sett_2: if(!h1) goto sett-3; hourl+;/*时低位加一处理,高位为0,可以是09,否则,只能02*/ if(hour) goto sett-20; if(hourl=10) goto sett-21; continue; sett-21: hourl=
41、10; continue; sett-20: if(hourl=3) goto sett-22; continue; sett-22: hourl=0; continue; sett_3: if(!mh) goto sett-4; miunh+; /*分高位加1处理,只能是05*/ if(miunh=6) goto sett-30; continue; sett-30: miunh=0; continue; sett_4: minul+; /*分低位加1处理,只能是09*/ if(minul=10) goto sett-40; continue; sett-40: minul=0; conti
42、nue; #include “REG51.H”#define uchar unsigned char#define PSEG OX30 /*P.的段码*/*09和P,暗的的端码(共阳数码管) */uchar codeseg=OX03,OX9F,OX25,OX0D,OX99,OX49,OX41,OX1F,OX01,OX09,OX30,OXff;/*/;74LS164的3 4 5 6 10 11 12 13对应数码管的A,B,C,D,E,F,G,DP,DB OCoh,OF9H,OA4H,OB0H,99H; DB 92H,82H,OF8H,80H,90H /*/ /*输入输出定义*/ sbit DI
43、SPCON=P32; /* 显示控制*/ sbit S1 = P13; /* 设置键*/ sbit S1= P12; /* 数字+1键*/ sbit L1= P17; /* L1,L2构成秒指针*/ sbit L2= P16; /* 全局变量定义 */ uchar buf4; /* 显示缓冲区*/ uchar hourh; /* BCD时钟各位*/ uchar hourl; uchar minuh; uchar minul; uchar second; /* 秒变量*/ uchar count; /* 溢出中断计数器*/ uchar bdata setflag; /* 设置用标志字节*/ uc
44、har bdata uflag; /* 通用标志字节*/ /* 位变量定义*/ /* 以下4个位变量在setflag中,便于移位处理*/sbit hh=setflag0; /* 当前设置位标志*/sbit h1=setflag1;bit mh=setflag2;bit m1=setflag3;/* 以下变量在uflag*/sbit fresh=uflag0; /* 显示刷新标志*/sbit ss=uflag1; /* 位闪烁标志*/sbit sec=uflag2; /* 秒指针标志*/sbit warning=uflag3; /* 定时标志*/*/ sbit tfix=uflag4; /* 开
45、始修正标志*/ #define N 60 /* 误差值,单位:1/10秒,默认为0,即不修正*/*/*函数说明*/void sys-init(void);void t0-init(void);void uart-init(void);void display(void);void delay20ms(void);void settime(void);void t1-init(void);/*/;时钟主函数:main();定时器T0工作与中断方式;一旦走时开始,无法进行设置。如果重新设置,则必须复位;24小时制;如果某74LS164的1,2脚与其他74LS164的1,2脚错连了,则会出现同现实的
46、状态;带编辑设定位闪烁功能和走时误差自动纠正功能,于于此相关的函数是;settime(),位闪烁标志ss;timerl (),在settime()中启动,每一秒将标志ss求反,达到闪烁目的;*;*/Void main (void)sys-init(); t0-init(); t1-init(); uart-init();buf0=OX0a;buf1=OX0b;buf2=OX0b;buf3=OX0b;display();settime();display();TR0=1;ET0=1;while(1) if(fresh); buf0=hourh; buf1=hourl; buf2=miunh; b
47、uf3=miunl; display(); if(sec) sec=0; L1=!L1; L2=!L2; delay20ms(); else if(sec) sec=0; L1=!L1; L2=!L2; delay20ms(); /*;*/void display(void) uchar out; DISPCON=1; out=segbuf0; SBUF=out; while(!TI); TI=0; out=segbuf1; out&=0 xfe; SBUF=out; while(!TI); TI=0; out=segbuf2; SBUF=out; while(!TI); TI=0; out=
48、segbuf3; SBUF=out; while(!TI); TI=0; DISPCON=0;/*;*/void timer0(void) interrupt 1 using 1 uchar x; fresh=0; sec=0; TH0=0 x3c; TL0=0 xb0;count+;/*/ if(tfix) x=N; else x=10;/*/ if(count!=x) return; else /*/ tfix=0; /*修正完后清修正标志*/*/ sec=1; count=0; scond+; if(second!=60) return; else fresh=1; second=0 m
49、inul+; if(miunl!=10) return; else miunl=0; miunh+; if(miunh!=6) return; else miunh=0; hourl+; if(hourh=0) if(hourl!=10) return; else hourl=0; hourh+; if(hourh!=2) return; else hourh=1; return; else if(hourl!=3) return; else hourl=0; hourh+; if(hourh!=2) return; else hourl=1; hourh=0; tfix=1; return; /*;*/ void t0_init(void) TMOD=0 x11;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年生物样本库建设与运营合同
- 小班语言教案
- 半导体照明光源项目可行性研究报告申请报告
- 美术组教学工作计划
- 写给妈妈的感谢信模板集合5篇
- 护理学生自我鉴定大专(9篇)
- 关于坚持高二记叙文作文
- 小学三年级安全教育工作计划
- 网络实习报告范文合集六篇
- 云南省昭通市昭阳区2024-2025学年八年级上学期1月期末考试历史试卷(无答案)
- 2023-2024学年广东省深圳市光明区高二(上)期末地理试卷
- 【8地RJ期末】安徽省芜湖市弋江区2023-2024学年八年级上学期期末考试地理试卷(含解析)
- 2025年春季幼儿园后勤工作计划
- SCI论文写作课件
- 湿法脱硫用水水质要求
- 城管局个人工作总结
- 铂铑合金漏板.
- (完整版)建筑力学(习题答案)
- 少年宫篮球活动教案
- 国有建设企业《大宗材料及设备采购招标管理办法》
- 民间秘术绝招大全
评论
0/150
提交评论