您的当前位置:首页正文

基于单片机的数字钟设计

2023-02-12 来源:客趣旅游网
泰山职业技术学院

毕业设计(论文)

题 目:基于单片机的数字时钟

系 部: 汽车电子工程系 专 业: 应用电子技术 学 号: 201103010103 学生姓名: 于 学 成 指导教师: 宋 丽 玲 职 称: 讲 师

二O一四 年 六月 二十五 日

第 1 页 共 30 页

泰山职业技术学院

毕业论文(设计)任务书

课题名称:基于单片机的数字时钟 系 部:汽 车 电 子 工 程 系 专 业:应 用 电 子 技 术 姓 名:于 学 成 学 号:201103010103

指导老师:宋 丽 玲

二〇一四 年 六 月二十五日

第 2 页 共 30 页

一、 毕业论文(设计)的目的与要求: 要求:采用单片机实现数字钟的基本功能,要求采用4位数码管,高两位显示小时,低两位显示秒;采用开关控制数字钟的启动、停止、复位和调整时间;时间显示采用24小时制 第 3 页 共 30 页

二、毕业论文(设计)的内容: 内容: 1.方案总体设计 2.控制系统硬件电路设计(显示采用四位数码管) 3.软件流程图设计,汇编程序编写 4.电气原理图的绘制 三、毕业论文(设计)进程的安排 序 号 论文(设计)各阶段名称 日 期 备 注 1 2 3 4 5 6 第一章 论文背景及设计任务 第二章 系统方案设计 第三章 硬件电路设计 第四章 软件系统设计 第五章 电路调试 第六章 总结 11.08 12.23 02.13 03.22 04.01 06.10 第 4 页 共 30 页

四、任务执行日期: 自13年11月08日起,至14年6月10日止。 学 生(签字)__________ 指导教师(签字)__________ 系主任(签字)__________

第 5 页 共 30 页

目录

摘 要 ............................................................................................. 错误!未定义书签。 第一章 论文背景及设计任务 ....................................................................................... 8

1.1论文背景 ......................................................................................................... 8 1.2课程设计题目描述和任务 ............................................................................ 8 第二章 系统方案设计 .................................................................................... 9 2.1整体设计 ..................................................................................................... 9 2.2方案设计与论证 ......................................................................................... 9 第三章 硬件电路设计 ................................................................................................ 10

3.1 AT89C51的单片机简介 ......................................................................... 10 3.2 LED显示电路 ........................................................................................... 12 3.3 键盘控制电路 .......................................................................................... 12 第四章 软件系统设计 .............................................................................................. 13

4.1程序编写设计流程图 ................................................................................. 13 4.2绘制数字时钟电路Protues仿真原理图 ............................................... 14 4.2.1启动ISIS 7 Professional软件 ........................................................ 14 4.2.2仿真电路绘制 ...................................................................................... 14 4.2.3电路检测 ............................................................................................ 14 4.3软件设计 ................................................................................................... 14 4.3.1运行keil软件编写程序并编译、连接 ............ 错误!未定义书签。 4.3.2将程序烧入单片机并运行 ............................... 错误!未定义书签。 4.3.3运行程序 ............................................................ 错误!未定义书签。 第五章 电路调试 ........................................................................................ 15 5.1软件与硬件调试 ....................................................................................... 15 5.2仿真结果分析 ........................................................................................... 15 第六章 总结 ............................................................................................................... 17 附录: ............................................................................................................................. 18

数字时钟原理图 .............................................................................................. 18 数字时钟源程序 .............................................................................................. 19 参考文献: ......................................................................................................... 29

第 6 页 共 30 页

摘 要

近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善

本次做的数字钟是以单片机(AT89C51)为核心,结合相关的元器件(3个2位共阳数码管,一个发光二极管和一个蜂鸣器)和应用程序(proteus软件和KEIL编译软件),构成相应的应用系统。

关键词:单片机 AT89C51 共阳数码管 发光二极管 蜂鸣器 proteus

软件 KEIL编译软件

摘要翻译:

In recent years along with the computer in the social field of permeability and large scale integrated circuit

of development, the application of single chip microcomputer, is continuously to further, because it has a strong function, small volume, low power consumption, the price is cheap, reliable work, use convenient wait for a characteristic, therefore particularly suitable for related control and system, more and more widely used in automatic control, intelligent instrument, instrument, data collection, military products and household electrical appliances, and other fields, microcontroller is often as a core component to use, in according to the specific hardware structure, and the view of the specific application of the characteristics of the object software combines to make perfect

This do digital clock is a single chip microcomputer (AT89C51) as the core, combined with related components (3 two common Yang digital tube, a light emitting diode and a buzzer) and applications (proteus software and KEIL compiler software), constitutes corresponding application system.

Keyword: A single-chip microcomputer, AT89C51, total Yang digital tube, light emitting

diode, buzzer, proteus software, KEIL compiler software

第 7 页 共 30 页

基于单片机的数字时钟

第一章 论文背景及设计任务

1.1论文背景

数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机STC89C51在Proteus软件中实现数字时钟的定时、时间调整、闹正设置等功能。具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。

本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机AT89C51芯片和3个两位一体的共阳极的数码管为核心,辅以必要的电路,构成了一个单片机数字时钟。单片机AT89S51可调数字钟系统设计的核心是目前应用极为广泛的51系列单片机,可调数字钟配置了外围设备,构成了一个可编程的计时定时系统,具有体积小,可靠性高,功能强等特点。不仅能满足所需要求而且还有很多功能可供开发,有着广泛的应用领域。

1.2课程设计题目描述和任务

单片机控制的数字钟的硬件结构与软件设计,给出了汇编语言源程序。此数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。显示器件选用LED七段数码管。在译码显示电路输出的驱动下,显示出清晰、直观的数字符号。针对数字钟会产生走时误差的现象,在电路中就设计有有校准时间功能的电路。使用动态数码显示的方法,运用独立式按键识别过程,按“时”,“分”,“秒”数据送出显示处理方法。

(1)具有时、分、秒计数显示功能,以24小时循环 (2)LED数码管显示时、分、秒的个位和十位 (3)可以在任意时刻校准时间

(4)能够完成时间的显示、定时闹钟、复位等功能

第 8 页 共 30 页

第二章 系统方案设计

2.1整体设计

此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:显示电路用8个共阴数码管分别显示,星期(年份),小时、分钟(月份)和秒(日),通过动态扫描进行显示,从而避免了译码器的使用,同时节约了I/0端口,使电路更加简单。单片机采用AT89S51系列,这种单片机应用简单,适合电子钟设计

整体设计框图如图2-1所示:

图2-1 数字时钟整体电路

2.2方案设计与论证

方案一:

采用各种纯数字芯片实现数字时钟的设计。优点:各个模块功能清晰,电路易于理解实现。缺点:各个模块功能已定不能进行智能化调整,整体电路太庞大。 方案二:

采用 FPGA模块用硬件语言实现功能。优点:运算速度快,走时精度高,算法简单。缺点:成本高,大材小用。 方案三:

采用单片机最小系统实现功能。优点:电路简单,能通过程序进行随机调整并扩展功能,成本低,易于实现。缺点:走时有一定的误差。

第 9 页 共 30 页

经过综合考虑成本问题以及电路实现问题,选择第三种方案实现设计要求。

第三章 硬件电路设计

3.1 AT89C51的单片机简介

(一)AT89C51的介绍

AT89C51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O接口电路等一台计算机所需要的基本功能部件,AT89C51单片机内包含下列几个部件:

(1) 一个8位CPU;

(2)一个片内振荡器及时钟电路; (3)4K字节ROM程序存储器; (4)128字节RAM数据存储器; (5)两个16位定时器/计数器;

(6)可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路; (7)32条可编程的I/O线(四个8位并行I/O端口); (8)一个可编程全双工串行口;

(9)具有五个中断源、两个优先级嵌套中断结构。

(二) AT89C51单片机的部分管脚说明:

AT89C51单片机采用40条引脚双列直插式器件,引脚除5V( 40脚)和电源地( 20脚)外,其功能分为时钟电路、控制信号、输入/输出三大部分,引脚图如下图:

图3-1 AT89C51引脚图

第 10 页 共 30 页

① Vcc 40 电源端;GND 20 接地端。工作电压为5V 。 ② 外接晶振引脚

图3-2 外接晶振引脚图

XTAL1 19 、XTAL2 18 :XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。

③复位 RST 9

图3-3 常用复位电路图

在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。

④/EA=1 31脚

当/EA=1时,访问内部程序存储器,当PC值超过内ROM范围时,自动转执行外部程序存储器的程序;当/EA=0时,只访问外部程序存储器。

第 11 页 共 30 页

(三)另外介绍一下输入输出引脚(本系统只用到P0、P1、P2口):

(1) P0端口[P0.0-P0.7] 是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。

对内部Flash程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。

(2) P1端口[P1.0-P1.7]是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

对内部Flash程序存储器编程时,接收低8位地址信息。

(3) P2端口[P2.0-P2.7]是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。

在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。

3.2 LED显示电路

本课程设计用到共阳极数码管通过其引脚图,便可顺利完成其连接。

图3-4 共阳数码管内部结构图

3.3 键盘控制电路

通过S1、S2、S3和S4四个按键,对时间进行修改和闹钟的设置,S0控制闹钟的启动和停止。

按下S1键显示闹钟,松开后显示时间;按下S4键进入时间修改模式,再按S4键时间的时加1,按S2分加1,调整结束后按下S1恢复正常显示;按下S3键进入闹钟修改模式,再按S3键闹钟的时加1,按S2分加1,调整结束后按下S1恢复正常显示。

当用手按下一个键时,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也会出现类似的情况,这就是抖动。抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。很容易想到,抖动问题不解决就会引起对闭合键的识别。用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,再读入键盘码。

第 12 页 共 30 页

第四章 软件系统设计

4.1程序编写设计流程图

图4-1 程序编写流程图

第 13 页 共 30 页

初始化 开始 主程序 S0闭合 N N Y 响铃判断 Y 响铃 时间调整 显示时间 S4按下 N Y S3按下 N N S1按下 Y 显示闹钟 Y 闹钟调整 4.2绘制数字时钟电路Protues仿真原理图 4.2.1启动ISIS 7 Professional软件

元件的加载:找到原件后双击原件即可完成加载原件。 如图4-2所示:

图 4-2 Protues加载原件图

4.2.2仿真电路绘制

放置元件→调整原布局→连线

最后得到的原理图如下:

图4-3 Protues仿真图

通过S1、S2、S3和S4四个按键,对时间进行修改和闹钟的设置,S0控制闹钟的启动和停止。

按下S1键显示闹钟,松开后显示时间;按下S4键进入时间修改模式,再按S4键时间的时加1,按S2分加1,调整结束后按下S1恢复正常显示;按下S3键进入闹钟修改模式,再按S3键闹钟的时加1,按S2分加1,调整结束后按下S1恢复正常显示。

4.2.3电路检测

电路连接完毕后,单击运行按钮(如下图)检测电路是否有误,

如果电路如果无误进行软件检测。

4.3软件设计

第 14 页 共 30 页

图4-6 仿真结果图

第五章 电路调试

5.1软件与硬件调试

单片机应用系统的调试包括硬件和软件两部分,但是它们并不能完全分开。一般的方法是排除明显的硬件故障,再进行综合调试,排除可能的软/硬件故障。

软件调试是指用仿真软件进行仿真调试,验证系统的各项功能;硬件调试即软件调试成功后,将程序下载至AT89C51芯片中,用焊接好的电路来进行各项功能的验证与检测。

需要特别注意的是软件调试与硬件调试的差异,软件调试只是初步的估测,硬件的调试才是最真实的

5.2仿真结果分析

⑴按键问题

我的设计中,很多功能选择是通过按键开关实现的。在仿真中发现,调整数值时,有时按键反应太快,按一次,跳了几下,使设置时间,日期很不方便。但是仿真多了之后,找到了按键(实际上是按鼠标)的节奏,对按键的掌控力提高了不少,不怎么会出现跳变的情况了。有些开关我采用了长按键的方式来防抖,效果不错,但是每次都要长按键,调整效率太低,我没有普及。本来想把所有的按键都加延时防抖电路,但仿真中感觉对键盘的控制力没提高多少,有时还是会出问题。

⑵ P0口开关问题

P0口比较特殊,它存在高阻态,要使其输入不是高电平就是低电平,就要接上拉电阻,给其高电平输入。

第 15 页 共 30 页

⑶中断冲突问题

为了实现秒表,我在T0中断嵌套了秒表相关进位程序,由于秒表要求精度0.01秒,故我的T0中断定时为就刚好0.01秒,中断100次,刚好1秒。秒表确实实现了,但是我的闹铃音质变差了。一开始以为是闹铃程序存太多冗余环节,影响了T1的音乐输出中断,但是检查程序后,发现没什么多余的,裁剪无从下手。

在仿真中,添加T0中断服务程序,但是将中断进入的间隔变大,即0.05秒进入一次中断,发现音质有所下降,有滋滋声,但比原来的好。最后认定应该是T0中断过于频繁,T1音乐频率发生中断被打破,当单位时间内被打破的次数达到一定程度时,音符和节拍的对应发生紊乱,最终音质变差。

⑷定时功能的实现过程

定时功能运用了一个内存地址3CH为标志位,只有3CH中所存值非0时,在主程序中才判断定时是否已到。3CH值初始化为0,程序开始运行时并不判断定时是否已到。当通过按键进入定时初值设置,并开始倒计时,3CH的值被赋为1,当倒计时显示到0时,进入闪烁提示,提示结束后3CH又被赋值为0,程序回到主程序后,不必判断定时是否已到。

但当倒计时未完,按返回键回到主程序时,3CH的值为1,故在主程序判断未完成的定时任务,倒计时到0时调用同一个提示程序,最后仍可保证在主程序不再定时开启时去判断定时,从而节约资源。

⑸软件消抖

消抖可以采用硬件(施密特触发器)的方式,也可以采用软件的方式。在此只讨论软件方式。软件消抖有定时器定时,和利用延时子程序两种方式。一,定时器定时消抖可以不影响显示模块扫描速度,其实现方法是:设置标志位,在定时器中断中将其置位,然后在程序中查询。将其中断优先级设置为低于时钟定时中断,那么它就可以完全不影响时钟定时。二,在采用延时子程序时,如果显示模块的扫描速度本来就不是很快,此时可能会影响到显示的效果,一般情况下,每秒的扫描次数不应小于50次,否则,数码的显示会出现闪烁的情况。因此,延时子程序的延时时间应该小于20毫秒,如果采用定时器定时的方式,延时时间不影响时钟。

如果,设计时采用的是中断的方式来完成有关操作,同样可以采用软件的方式来消抖,其处理思想是:中断不能连续执行,两次之间有一定的时间间隔。

第 16 页 共 30 页

第六章 总结

首先,我要感谢宋丽玲老师在此次设计中给于我的帮助。我深刻地感受单片机不单是

一门文化课程,更是一门科学技术。单片机课程设计则是人生课程,我们学到了很多课堂上无法学到的东西。从新奇好玩到失败后的痛苦无助,从失败中爬起,哪怕再失败,也永不放弃。这就是单片机课程设计教会我们的最宝贵的知识。

一分耕耘,一分收获。经过这次课程设计,让我获得了很多知识,进一步加深了我对AT89C51单片机的掌握,另外也巩固了我的编程思想和焊接技术。

本次的数字时钟设计,让我对自己在大学三年的知识的到了回顾,例如模电和数电以及做PCB的软件。它也让我充分发挥了对所学知识的理解和设计的书面表达能力。这为今后自己进一步深化学习,积累了一定的宝贵经验。撰写报告的过程是对专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。

本次的课程设计,让我发现理论必须用于实践,否则只是一张白纸。此外只有理论水平提高了,才能更好的运用于实践。另外,本次课程设计也考验了我的认真的态度。只有做事拥有认真的态度与科学的方法,才能成功。

我认为课程设计非常有必要,它能让我们主动去寻找遇到问题的解决方法,同时也是对我们严谨认真工作态度的考验与锻炼,为以后我们进入社会参加工作是一个很好的培训与历练。

第 17 页 共 30 页

附录:

图7-1 数字时钟原理图

第 18 页 共 30 页

数字时钟源程序

使用keil软件编写源程序

ORG 0000H LJMP START ORG 000BH LJMP TIME

;********初始化********* START: MOV SP, #50H MOV 20H,#00H ;

MOV 21H,#00H ; MOV 22H,#00H ; MOV 23H,#01H ; MOV 24H,#01H MOV 25H,#00H

MOV 26H,#01H

MOV 30H,#00H ;BCD SECOND MOV 31H,#00H

MOV 32H,#00H ;BCD MINUTE MOV 33H,#00H

MOV 34H,#00H ;BCD HOUR MOV 35H,#00H MOV 36H,#01H MOV 37H,#00H MOV 38H,#01H MOV 39H,#00H

MOV 50H,#00H ; MOV TMOD,#01H ;16 MOV TH0, #03CH ; MOV TL0, #0B0H

MOV IE, #87H ; SETB TR0 ; MOV R2,#14H MOV P2,#0FFH ;*********主程序**********

定义秒 定义分

定义时 定义闹钟分钟 ;定义闹钟小时

按键次数 位计数器 赋初值 中断允许 启动T0 第 19 页 共 30 页

MAIN: JB P1.4,GB LCALL TIMEPRO GB:

;调用闹钟判断

;调用时间显示

LCALL DISPLAY1

JB P1.3,M1 ;P1.3=1时转移 S4没有按下 LCALL SETTIME ;调用SETTIME调时子程序 LJMP MAIN

M1: JB P1.2,M2 ;P1 g.2=1时转移 S3 LCALL SETATIME ;调用SETATIME子程序 LJMP MAIN

M2: JB P1.0,M4 ;P1.0=1时转移 S1

LCALL LOOKATIME ;调用LOOKATIME显示闹钟子程序 M4: LJMP MAIN

;*********延时子程序******** DELAY: MOV R4,#030H DL00: MOV R5,#0FFH DL11: MOV R6,#9H DL12: DJNZ R6,DL12 DJNZ R5,DL11 DJNZ R4,DL00 RET

;***********时间调整******* SETTIME:

;设置时间

L0: LCALL DISPLAY1

MM1: JB P1.3,L1 ;P1.3=1时转移 MOV C,P1.3 JC MM1

LCALL DELAY1 ;延时 JC MM1

MSTOP1: MOV C,P1.3 LCALL DELAY1

MOV A,50H

INC 50H CJNE A,#00H,HJ1

;P1.3为0时转移 ;延时

JNC MSTOP1

LJMP L0 HJ1: MOV C,P1.3

第 20 页 共 30 页

JNC MSTOP1

INC 22H ;小时自加一 MOV A,22H

CJNE A,#18H,GO12 ;小时计数循环 MOV 22H,#00H ;复位 MOV 34H,#00H MOV 35H,#00H LJMP L0

L1: JB P1.1,L2 ;P1.1=1 MOV C,P1.1 JC L1

LCALL DELAY1 ; JC L1 MSTOP2: MOV C,P1.1 JNC MSTOP2 LCALL DELAY1 ; MOV C,P1.1 JNC MSTOP2

INC 21H ; MOV A,21H

CJNE A,#3CH,GO11 ; MOV 21H,#00H ; MOV 32H,#00H MOV 33H,#00H LJMP L0 GO11: MOV B,#0AH DIV AB

MOV 32H,B ; MOV 33H,A ; LJMP L0 GO12: MOV B,#0AH DIV AB

MOV 34H,B ; MOV 35H,A ; LJMP L0

L2: JB P1.0,L0 ; P1.0时转移 延时

;P1.1=0时转移

延时 分钟加一 分钟计数循环 复位 将A的低4位存入32单元 将A的高4位存入33单元 将A的低4位存入34单元 将A的高4位存入35单元=1时转移

第 21 页 共 30 页

MOV C,P1.0 JC L2

LCALL DELAY1 ;延时 MOV C,P1.0 JC L2

STOP1: MOV C,P1.0 ; P1.0=0时转移 JNC STOP1 LCALL DELAY1 ;延时 MOV C,P1.0 JNC STOP1

MOV 50H,#00H

LJMP MAIN ;*******设置闹钟*******

SETATIME:LCALL DISPLAY2 ; N0: LCALL DISPLAY2

MM2: JB P1.2,N1 ;P1.2=1 MOV C,P1.2 JC MM2

LCALL DELAY1 ; JC MM2 MSTOP3: MOV C,P1.2

JNC MSTOP3 LCALL DELAY1 ; MOV A,50H INC 50H

CJNE A,#00H,HJ2

LJMP N0 HJ2: MOV C,P1.2 JNC MSTOP3

INC 24H ; MOV A,24H

CJNE A,#24,GO22 ; MOV 24H,#00H ; MOV 38H,#00H MOV 39H,#00H LJMP N0

调用DISPLAY2显示闹钟时转移 延时 =0时转移

延时 小时加一 小时计数循环 复位 第 22 页 共 30 页

; P1.2N1: JB P1.1,N2 ;P1.1=1时转移 MOV C,P1.1 JC N1

LCALL DELAY1 ;延时 JC N1 MSTOP4: MOV C,P1.1

;P1.1=0时转移

JNC MSTOP4 LCALL DELAY1 ;延时 MOV C,P1.1 JNC MSTOP4

INC 23H ; MOV A,23H

CJNE A,#60,GO21 ; MOV 23H,#00H ; MOV 36H,#00H MOV 37H,#00H LJMP N0 GO21: MOV B,#0AH DIV AB

MOV 36H,B ; MOV 37H,A ; LJMP N0 GO22: MOV B,#0AH DIV AB

MOV 38H,B ; MOV 39H,A ; LJMP N0

N2: JB P1.0 ,N0 ;P1.0 MOV C,P1.0 JC N2

LCALL DELAY1 ; MOV C,P1.0 JC N2 STOP2: MOV C,P1.0 JNC STOP2 LCALL DELAY1

分钟加一 分钟计数循环 复位 将A的低4位存入36单元将A的高4位存入37单元将A的低4位存入38单元 将A的高4位存入39单元 =1时转移 延时 第 23 页 共 30 页

MOV C,P1.0 JNC STOP2

MOV 50H,#00H

LJMP MAIN

;*******闹钟判断***************** TIMEPRO: MOV A,21H MOV B,23H

CJNE A,B,BK ;判断定时闹钟的分钟 MOV A,22H MOV B,24H

CJNE A,B,BK ;判断定时闹钟的小时 SETB 25H.0 MOV C,25H.0

LCALL TIMEOUT ;调用TIMEOUT BK:RET

;**************喇叭报警***************** TIMEOUT:

X1: LCALL BZ ;调用喇叭响应程序 CLR 25H.0 ;调用喇叭响应程序结束 LCALL DELAY CLR 25H.0

LJMP DISPLAY1 BZ:MOV C,25H.1 MOV P1.6,C CLR P1.7

MOV R7,#0FFH ;喇叭响应时间 T2: MOV R6,#0FFH T3: DJNZ R6,T3 DJNZ R7,T2 SETB P1.7 RET

;*************显示闹钟时间************ LOOKATIME:LCALL DISPLAY2 MM: JNB P1.0,LOOKATIME LCALL DELAY1 LJMP MAIN

第 24 页 共 30 页

;延时

DELAY1: MOV R4,#14H ;时间延时 DL001: MOV R5,#0FFH DL111: DJNZ R5,DL111 DJNZ R4,DL001 RET

;***********定时**************

TIME: PUSH ACC ;保护现场 PUSH PSW MOV TH0,#03CH ; MOV TL0,#0B0H

DJNZ R2,RET0 MOV

R2,#14H

MOV A,20H CPL 25H.1

CLR C

INC A ; CJNE A,#3CH,GO1 ; MOV 20H,#0 ; MOV 30H,#0 MOV 31H,#0 MOV

A,21H

INC A ; CJNE A,#3CH,GO2 ; MOV 21H,#0H ; MOV 32H,#0 MOV 33H,#0 MOV A,22H

INC

A ; CJNE A,#18H,GO3 ;

MOV 22H,#00H ; MOV 34H,#0 MOV 35H,#0

AJMP RET0 GO1: MOV 20H,A MOV B,#0AH DIV AB

初值

秒自加一

秒计数循环 复位 分钟自加一

分钟计数循环 复位 小时自加一小时计数循环 复位

第 25 页 共 30 页

MOV 31H,A ;将A的低4位存入31单元 MOV 30H,B ;将A的高4位存入30单元

AJMP RET0 GO2: MOV 21H,A MOV B,#0AH DIV AB

MOV 33H,A ;将A的低4位存入33单元 MOV 32H,B ;将A的高4位存入32单元 AJMP

RET0

GO3: MOV 22H,A MOV B,#0AH DIV AB

MOV 35H,A ; MOV 34H,B ;

AJMP

RET0

RET0: POP PSW ; POP ACC RETI

;********显示子程序********** DISPLAY1: MOV R0,#30H MOV R3,#0FEH MOV A,R3 PLAY1: MOV P2,A

MOV A,@R0 ; MOV DPTR,#DSEG1 ; MOVC A,@A+DPTR CJNE R0,#34H,PA ORL A,#80H PA:CJNE R0,#32H,PB ORL A,#80H

PB:CPL A ; MOV P0,A ; LCALL DL1 MOV P2,#0FFH

MOV A,R3 ; RL A ;将A的低4位存入35单元 将A的高4位存入34单元 恢复现场 取要显示的数据 指向字形段码首地址 查表取字形段码 指向P0口 判断是否显示到最低位 左移一位

第 26 页 共 30 页

JNB ACC.6,LD1

INC R0 ;缓冲器地址加一 MOV R3,A LJMP PLAY1 LD1: RET

DISPLAY2: PUSH ACC ;保护现场 PUSH PSW MOV R0,#36H MOV R3,#0FBH

MOV A,R3

PLAY2: MOV P2,A

MOV A,@R0 ; MOV DPTR,#DSEG1 ; MOVC A,@A+DPTR CJNE R0,#38H,PP ORL A,#80H

PP:CPL A ; MOV P0,A ; LCALL DL1 ; MOV P2,#0FFH

MOV A,R3 ; RL A ; JNB ACC.6,LD2

INC R0 ; MOV R3,A

LJMP PLAY2 ;LD2: POP PSW

POP ACC ; RET ;******DELAY******* DL1: MOV R7,#20H DL: MOV R6,#20H

DL6: DJNZ R6,$

DJNZ R7,DL

RET

取要显示的数据 指向字形段码首地址 查表取字形段码 指向P0口 调用DL1 判断是否显示到最低位左移一位 缓冲器地址加一 调用PLAY2 恢复现场 第 27 页 共 30 页

DSEG1: DB 3FH,06H,5BH,4FH,66H ;七段码表 DB 6DH,7DH,07H,7FH,6FH END

第 28 页 共 30 页

致谢

本论文是在指导教师宋丽玲老师的悉心指导下完成的。宋丽玲老师严谨治学的态度给我树立了榜样,使我受益匪浅。在此特向指导教师的关心和帮助表示诚挚的敬意和衷心的感谢!

在论文工作的过程中,碧陆斯单位(企业)为我的课题研究提供了良好的条件,使我顺向在论文完成过程中给予我支持和帮助的老师、同学们表示谢意。

第 29 页 共 30 页

参考文献:

⑴ 单片机原理及应用 张毅刚 主编 高等教育出版社

⑵ 新编MCS-51单片机应用设计(第3版) 张毅刚 哈尔滨工业大学出版社

⑶ 数字电路与逻辑设计(第3版) 胡锦 主编 高等教育出版社 ⑷ 主编模拟电子技术(第3版) 胡宴如 主编 高等教育出版社

⑸ 基于Proteus的8051单片机实例教程 李学礼 主编 高等教育出版社 ⑹ 单片机微机原理及应用 张毅刚 主编 西安电子科技大学出版社

第 30 页 共 30 页

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