毕业论文模板(机电专业)

发布时间:2011-09-27 10:41:32   来源:文档文库   
字号:

基于单片机的电子时钟设计

200865


指导教师评阅书


评阅教师评阅书

教研室(或答辩小组)及教学系意见



摘要

随时代的发展,生活节奏的加快,人们的时间观念愈来愈强;随自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。

由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。本设计利用Atmel公司的AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编语言进行软件编程,并用实验板进行演示、验证。

在介绍本单片机的发展情况基础上,说明了本设计实现的功能,以及实验板硬件情况,并对各功能电路进行了分析。主要工作放在软件编程上,用实验板实现时间、日期、定时及它们的设定功能,详细对软件编程流程以及调试进行了说明,并对计时误差进行了分析及校正,提出了定时音与显示相冲突问题及解决方案。实验证明效果良好,可以投入使用。

关键词:单片机 AT89S52 电子时钟 汇编语言


目录

摘要

1 绪论 1

1.1 课题背景 1

1.2 课题意义 1

1.3 本章小节 2

2 系统功能及操作 3

2.1 系统功能的确定 3

2.1.1 基本功能 3

2.1.2 扩展功能 3

2.2 系统操作说明 4

2.3 本章小节 4

3 系统硬件设计实验板介绍 5

3.1 芯片的选择 5

3.2 实验板电路原理图 6

3.3 功能电路分析 6

3.3.1 时钟电路 6

3.3.2 复位电路 6

3.3.3 键盘电路 7

3.3.4 数码显示电路 7

3.3.5 蜂鸣器电路 8

3.4 本章小节 8

4 系统软件设计 9

4.1 数据单元分配 9

4.1.1 数据存储单元分配 9

4.1.2 标志位单元分配 9

4.2 计时时钟实现的基本方法 9

4.3 实现时钟程序设计步骤 10

4.3.1 主程序模块设计 10

4.3.2 计时子程序模块的实现 11

4.3.3 显示子程序模块的实现 12

4.3.4 时钟设定子程序模块的实现 12

4.3.5 日期、定时设定子程序模块的实现 12

4.4 程序说明 12

4.4.1 定时器初值计算 12

4.4.2 程序初始化 12

4.4.3 误差分析及校正 13

4.4.4 实现闪动设定 13

4.4.5 实现连续加1 13

4.4.6 定时音与显示相冲突问题及解决方案 13

4.5 本章小节 13

5 系统调试 14

结束语 15

致谢 16

附录A:实验板原理图 17

附录B:程序清单 18

参考文献 45


第一章 设计任务分析

1.1 课题背景

单片机自1976年由Intel公司推出MCS-48开始,迄今已有二十多年了。由于单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。

单片机有两种基本结构:一种是在通用微型计算机中广泛采用的,程序存储器和数据存储器共用一个存储器空间的结构,称为“冯·诺依曼”(Von Neumann)结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,称为“哈佛”(Harvard)结构,目前的单片机采用此种结构为多。

本文讨论的单片机多功能时钟系统的核心是目前应用极为广泛的51系列单片机,配置了外围设备,构成了一个可编程的计时定时系统,具有体积小,可靠性高,功能多等特点。不仅能满足所需要求而且还有很多功能可供扩展,有着广泛的应用领域。

1.2 设计任务

1.3 课题意义

在日常生活和工作中,我们常常用到定时控制,如扩印过程中的曝光定时等。早期常用的一些时间控制单元都使用模拟电路设计制作的,其定时准确性和重复精度都不是很理想,现在基本上都是基于数字技术的新一代产品,随着单片机性价比的不断提高,新一代产品的应用也越来越广泛。大则可以构成复杂的工业过程控制系统,完成复杂的控制功能;小则可以用于家电控制,甚至可以用于儿童电子玩具。它功能强大、体积小、质量轻、灵活好用,配以适当的接口芯片,可以构成各种各样、功能各异的微电子产品。

随着电子技术的飞速发展,家用电器和办公电子设备逐渐增多,不同的设备都有自己的控制器,使用起来很不方便。这些具有人们所需要的智能化特性的产品减轻了人的劳动,扩大了数字化的范围,为家庭数字化提供了可能。

根据这种实际情况,设计了一个单片机多功能时钟系统,它有基本的时间功能,还有定时功能,既可作为闹铃,也可扩展为定时对家电等电气产品的自动控制,可以避免多种控制器的混淆,利用一个控制器对多路电器进行控制;可增加温度传感器,进行实时温度显示,进一步扩展为利用不同的温度某些电气产品进行自动控制;也可增加湿度传感器,进行实时湿度显示,以便对湿度进行控制,方便人们的生活。

1.4 本章小节

本章主要介绍了课题背景、设计任务和课题意义,对单片机的优点及结构作了简要叙述,也对本系统的应用及概况进行了说明。


第二章 系统功能及操作

2.1 系统功能的确定

2.1.1 基本功能

系统具有时间、日期、三路定时功能,并可以对时间、日期、定时进行设定,有定时提示音。要求计时精度尽量提高。显示格式为:

时间:“时”(第12位)、“分”(第34位)、“秒”(第56位);

日期:“年”(第12位,如2007年显示为07)、“月”(第34位)、“日” (第56位);

定时:“时”(第12位)、“分”(第34位)、“状态标志”(第56位)。

键盘及数码管排列如图2-1所示。

2.1.2 扩展功能

该系统可以增加温度传感器,实现温度测量,以实时显示温度,用12位数码管显示;还可以增加湿度传感器,实现湿度测量,以实时显示湿度,用56位数码管显示。

多路定时器功能也可扩展为对多种家电等电气产品的自动控制,比如电饭煲等;也可利用温度对某些电气产品进行自动控制,比如空调等;还可利用湿度传感器对湿度进行调节。如图2-1所示。

2-1 系统功能图

2.2 系统操作说明

1)按K1键显示日期,3秒后自动返回时间显示,3秒内按K2键进入日期设置,此时年位闪烁,按K1键进行年位加1或连续加1调整。按K2键依次切换到月位、日位,分别按K1键进行月位、日位调整,日位设置好后,再按K2键保存日期设定值,并返回显示时间。

2)按K2键大于1秒进入时间设置,此时小时位闪烁,秒位自动清零,按K1键进行小时调整,按K2键切换到分钟位,按K1键进行分钟调整,分位设置好后,再按K2键保存时间设定值,并返回显示时间,按所设定的时间值进行计时。

3)连续按K3键显示3路定时及其开关状态当显示某一路定时时,3秒后自动返回时间显示,3秒内按K2键进入定时设置,设置同日期(56位显示00为当路定时关,显示01为当路定时开)。当路定时设置完后按K2键保存定时设定值并返回时间显示。

4)按K4键显示实时温度和湿度,5秒后自动返回时间显示。

2.3 本章小节

本章主要对本系统的基本功能和扩展功能进行了说明,也对本系统的系统的显示情况及操作作了详细说明。

3 系统硬件设计实验板介绍

3.1 芯片的选择

本设计选用AT89S52芯片,它是一种低功耗、高性能CMOS 8位微控制器,具有8K0000H1FFFH)在线系统可编程Flash存储器。片上Flash允许程序存储器在线编程,也适于常规编程器。在单芯片上,拥有灵巧的8CPU和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供灵活、高效的解决方案。

AT89S52具有以下标准功能:8K0000H1FFFHFlash256字节(00HFFH)数据存储器(RAM),64K0000HFFFFH)程序存储器(ROM),32I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口内晶振及时钟电路。

其中,数据存储器(RAM)用于存放各种运算的中间结果,作缓存和数据暂存,以及设置特征标志等。AT89S52的片内数据存储器用位寻址方式,最大寻址范围为256字节(00HFFH)。按使用情况不同可分成低128字节(00H7FH)和高128字节(80HFFH)。其中低128字节为真正的RAM存储器,高128字节为特殊功能寄存器(SFR)区,如累加器ACC、程序状态字PSW、数据指针DPTR、程序计数器PC等。整个片内RAM区分布如图3-1所示。

3-1 片内RAM

3.2 实验板电路原理图

实验板电路结构框图如图3-2所示,原理电路图(只有本设计所需部分)见附录A

3-2 实验板结构框图

3.3 功能电路分析

3.3.1 时钟电路

实验板的时钟振荡源电路如图3-3所示。其中JT 11.0592MHz 的晶振,改变两电容CB的值即可对此晶振频率进行调节。该电路提供单片机工作所需的振荡频率,计算定时器初值即需此晶振频率,在通信时也需知道晶振频率,以对波特率进行计算。

3-3 时钟电路

3.3.2 复位电路

如图3-4所示为实验板的复位电路,当RESET 信号为低电平时,实验板为工作状态,当RESET信号为高电平时,实验板为复位或下载程序状态。由于AT89S52具有ISP 的功能,即可以通过并口线直接将程序下载到单片机内,因此, AT89S52 具有两种状态,下载程序状态和运行状态。该复位电路能实现上电自动复位,也能手动复位,一般复位时RESET应保持20毫秒以上高电平,此复位时间由接地电容控制。

3-4 复位电路

3.3.3 键盘电路

如图3-5所示为阵列按键电路,各设置及转换信号由此电路输入,实验板提供了16个按键,由P1口经SN74F244(驱动芯片)输出扩展成4×4的阵列按键,P1.0P1.3为行线,P1.4P1.7为列线。SN74F244有一片选信号线,当此口线为低电平时,A1A4Y1Y4接通,反之,A1A4Y1Y4断开。

此键盘用扫描工作方式,若有键按下,则相应位端口被拉低为低电平,由于本系统只用了4个按键,所以只需对4个按键进行扫描。扫描时,先置P3.3口为高电平,向P1口送0EFHMOV P1#0EFH),再置P3.3口为低电平,读P1口(MOV AP1),最后判断P1口低4位哪位是低电平,若某位为低电平,则相应按键被按下,如P1.0为低电平(ACC.0=0),则K1键被按下。

3-5 阵列按键

3.3.4 数码显示电路

如图3-6所示为数码显示电路,实验板使用了6个共阳数码管,P0口为段码信号线,B1B6为位控线,是P1口经SN74F573(反向驱动芯片,即输入为高电平,则输出为低电平,反之则输出为高电平,该芯片也有一片选信号C,当此信号为高电平时有效)反向得到,再由B1B6控制晶体管Q1Q6,以达到控制每位数码管的目的。

系统采用动态显示,先向P0口送第一位数码管需要显示的段码值,再给P1口送0FEH,延时1毫秒使第一位数码管显示,又向P0口送第二位数码管需要显示的段码值,P1口送0FDH,延时1毫秒,使第二位数码管显示。依次递推,直到最后一位数码管,然后再循环。改变延时时长可以调节数码管显示的亮度,由于单片机执行速度很快(微秒级),所以看上去数码管一直亮着。

3-6 数码显示电路

3.3.5 蜂鸣器电路

其硬件原理图如图3-7所示。此电路用于定时时发出提示音。SPEAKERP3.2口相连,当SPEAKER输出高电平时蜂鸣器不响,而SPEAKER输出低电平时蜂鸣器发出响声。只需控制SPEAKER输出高低电平的时间和变化频率,就可以让蜂鸣器发出不同的声音。此电路用于产生定时器提示音。

3-7 蜂鸣器电路

3.4 本章小节

本章主要对芯片作了介绍,对其内存单元作了详细说明,并对系统硬件(实验板)的结构框图和各功能电路作了说明,以及这些电路在本设计中的用途。


4 系统软件设计

4.1 数据单元分配

4.1.1 数据存储单元分配

数据存储单元分配如下表所示:

4.1.2 标志位单元分配

标志位单元(20H)分配如下表所示:

4.2 计时时钟实现的基本方法

时钟的最小计时单位是秒,使用定时器的方式1,最大的定时时间也只能达到131毫秒。可把定时器的定时时间定为50毫秒,这样,计数溢出20次即可得到时钟的最小计时单位秒。计数20次可以用软件实现,对定时器溢出次数进行计数,计满20次即为1秒。从秒到分,从分到时,以及日、月、年都是通过软件累加并进行比较的方法实现的。

4.3 实现时钟程序设计步骤

系统采用模块化结构,主程序只需调用各个子程序模块即可实现相应功能。其模块结构图如图4-1所示。

4-1 程序各模块方框图

4.3.1 主程序模块设计

整个程序进行模块化设计,主程序只需调用相应的程序即可。主程序流程如图4-2所示。

4-2 主程序流程图

4.3.2 计时子程序模块的实现

T0中断时,执行本程序,因T0设为50毫秒中断,故中断20次为1秒。中断程序分别有20次计数(1秒),60次计数(1分),60次计数(1小时),24次计数(1天),28293031次计数(1个月),12次计数(1年)。当前位到设定数值时写01,下一位加1。由于本世纪是21世纪,年位前两位是4的倍数,故判断闰年时只需对年的后两位进行计算,能被4整除为闰年,否则为平年,年位只进行加1,大于99时又重新开始。计时中断流程图如图4-3所示。

4-3 计时子程序流程图 4-4 显示子程序流程图

4.3.3 显示子程序模块的实现

显示原理在3.3.4节已给予了说明,流程图如图4-4所示。

4.3.4 时钟设定子程序模块的实现

当设定时间时,断开T0中断,秒单元清0,进入时、分单元设定。设定好后重装T0初值,开T0中断。流程图如图4-6所示。

4-6 时钟设定子程流程图

4.3.5 日期、定时设定子程序模块的实现

日期、定时的设定同时钟设定。定时设定时,把时钟的秒位换成定时标志位,“00”为当路定时关,“01”为当路定时开,流程图与时钟设定程序相似。

4.4 程序说明

4.4.1 定时器初值计算

因定时器工作于方式1,需要50ms的中断,所以计数初值:

χ=216 - t×fosc12=65536 - 50×10-3×11.0592×10612=19456

表示成十六进制为χ=4C00H,故(TH0=4CH,(TL0=00H

4.4.2 程序初始化

程序初始化时,清相应内存单元(20H4FH48个单元),送时间(000000秒)、日期(071001日)初值,送定时器T0T1初值,TH0= TH1=4CHTL0= TL1=00H,特殊寄存器(SP=50HTMOD=11H)值等。

4.4.3 误差分析及校正

T0中断时,需重装定时初值,且要加上从断开T0中断到允许T0中断共有13个周期,以减小误差,故理论重装定时初值为(TH0=4CH,(TL0=13H。但该外接晶振电路的晶振频率可调,可能出现误差,所以实际不是这个值。

经调试,当定时初值为(TH0=4CH,(TL0=06H时,24小时约慢2秒,所以每当计时24小时之后,给秒单元(30H)送02H,使秒累加时从2加起,24小时就少加2秒,即可使时间得到校正。

4.4.4 实现闪动设定

闪动可选用段码送00H实现,也可禁止当前位显示,选通位送0实现。本设计选用后者实现闪动,用定时器T1进行控制。

4.4.5 实现连续加1

先判断键是否松开,若松开,则只执行一次加1程序段,进行单次加1;若未松开则连续执行加1程序段,实现连续加1。每执行一次加1程序段就调用显示子程序进行延时,以对调节速度进行控制。本系统以5Hz的速度连续加1,这样能快速对时间、日期、定时进行设定。

4.4.6 定时音与显示相冲突问题及解决方案

由于蜂鸣器响时P3.2口的电平呈高频变化,频率1K2K,其间隙时间为0.51毫秒,小于6 毫秒,因显示时每个数码管显示1毫秒,至少需要6毫秒,故蜂鸣器响时无法进行显示。为解决此问题,可增加锁存器,采用静态显示;也可增加一语音芯片,既可解决此问题,也可把定时音换成音乐或语音提示,或增加其它功能,使系统功能更强。

4.5 本章小节

本章主要对系统的软件设计进行了详细说明,从数据单元及标志单元的分配,到各子程序模块的实现方法,以及对时钟的误差分析、校正,定时音与显示相冲突问题及解决方案。


5 系统调试

该时钟程序的功能模块先后实现的顺序为:主程序→时间模块→显示模块→键盘模块→时间设定及其显示模块→日期及其显示模块→日期设定及其显示模块→定时及其显示模块→定时设定及其显示模块→定时提示音及与显示相冲突的协调模块。每完成一个模块就与前一个已完成的模块结合起来调试,直至实现相应功能,再编写下一模块程序。在与主程序衔接时,主程序和各子程序也需作相应的改动,以便与子程序更好的衔接,特别是显示子程序需作较大改动,以便对不同内容进行显示。

程序用伟福软件进行汇编语言程序编写,该软件还可进行软件仿真。用汇编语言编好程序后,先编译,把汇编语言编译成二进制代码和十六进制代码。若编译无法进行,说明程序有语法错误,需进行修改。编译成功后则可进行软件仿真,仿真可单步运行,也可连续运行。仿真时应调出数据窗口,看各单元数据是否正确,这是软件仿真的目的。当然,有些错误软件仿真不容易发现,这就得把编译得到二进制代码或十六进制代码下载到实验板上运行(用Easy 51Pro下载软件,与实验板相配的下载软件。下载时先擦再写,若不能能正常写入,则再擦,再写,直到写入芯片),看是否正常,若不正常,再根据出错的地方返回用软件仿真,查看相应的数据单元,再修改程序,这样反复调试,直至程序可用,在实验板上能正常运行。

待程序调试成功后即可烧写到实验板上,让其运行,至此,完成系统调试。

结束语

经过两个多月的工作,基于单片机的电子时钟系统的设计已经完成。经试验验证,满足设计要求。由于加入了计时修正,在精度方面已经相当准确了,不过还可以达到更高精度,需要精确计算定时器T0中断次数的误差,再予以修正;在软件的定时部分可以进行改进,用循环程序实现,每次循环只需更改相应单元即可,这样使程序精简。由于时间原因,没能实现这两部分。该系统的扩展功能由于硬件原因不能实现,以后如硬件允许可以实现这部分功能,还可增加其它功能。

本次设计主要涉及了单片机原理及接口技术的相关知识和汇编语言编程的诸多要领。设计中涉及的许多问题,更是对以前所学的知识的回顾及在过去的三年中学到知识的系统总结,这次设计对我们将来的工作有很大的帮助。

在设计中,我积极查阅资料,细心钻研各个细节,完成了多功能时钟的开发与调试,也让我们明白了在设计中考虑问题应该全面。在设计中既锻炼了我的动手能力,又学会查阅资料,提炼需要的信息。

由于本人水平有限,文中难免出现错误与不足之处,恳请各位老师批评指正。

致谢

首先要感谢我的家人,是他们让我能上大学;在大学里,先要学会学习才能学的更好,是老师教了我怎样学习,到现在能完成毕业设计,都少不了老师的功劳;在整个设计过程中,从硬件电路图到软件编程,应用了相当多的知识,包含了大学三年所学的知识,在此向各位任课老师表示感谢。

在设计过程中,指导老师 xxx老师给予了我很大帮助,老师对设计中出现的问题作了及时讲解和耐心指导,使我的设计得以顺利完成。在此,特向xxx老师、xxx老师、xxx老师等表示感谢;同时,很多同学也给我提供了很多帮助,也向帮助我的同学表示感谢。


附录A:实验板原理图


附录B:程序清单

ORG 0000H

LJMP START

ORG 000BH

LJMP INTT0

ORG 001BH

LJMP INTT1

;;;;;;;;;;;;主程序;;;;;;;;;;;;

ORG 0020H

START: MOV R0,#20H ;20H--4FH48个单元

MOV R7,#30H ;20H,21H标志用

CLEARA: MOV @R0,#00H

INC R0

DJNZ R7,CLEARA

CLR P2.2

CLR P2.1

CLR P2.0

MOV SP,#50H

MOV 33H,#01H

MOV 34H,#0AH

MOV 35H,#07H

MOV TMOD,#11H ;T0T116位定时器

MOV TL0,#00H ;50MS定时初值(T0计时用)

MOV TH0,#4CH

MOV TL1,#00H

MOV TH1,#4CH

SETB EA

SETB ET0

SETB TR0

MOV R4,#14H

START1: LCALL DISPLAY

LCALL KEY

JB ACC.3,$+6

DATE1: LCALL DATE

JB ACC.2,$+6

TIMEA: LCALL TIME

JB ACC.1,$+6

SETTIME1: LCALL SETTIME

JB ACC.0,$+6

JNB 0EH,$+6 ;定时显示判断

LCALL RING1

SJMP START1

;;;;;;;;;;;;;;;;;;;计时程序;;;;;;;;;;;;;;;;;;;

INTT0: PUSH ACC

PUSH PSW

CLR ET0

CLR TR0

MOV A,#06H ;TL=#06H,TH=#4CH

ADD A,TL0 ;8位初值修正

MOV TL0,A ;重装初值(低8位修正值)

MOV A,#4CH

ADDC A,TH0 ;8位初值修正

MOV TH0,A ;重装初值(高8位修正值)

SETB TR0

DJNZ R4, $+5 ;1s未到中断退出

LJMP $+6

LJMP OUTT0

MOV R4,#14H

INC 30H

MOV A,30H

CJNE A,#3CH,$+6

LJMP $+6

LJMP OUTT0

MOV 30H,#00H

INC 31H

LCALL TIME1 ;调定时比较程序

MOV A,31H

CJNE A,#3CH,$+5

SJMP $+5

LJMP OUTT0

MOV 31H,#00H

INC 32H

MOV A,32H

CJNE A,#18H,$+6

LJMP $+6

LJMP OUTT0

MOV 32H,#00H

INC 33H

MOV 30H#02H ;时间修正

MOV A,34H

CJNE A,#02H,$+6

LJMP MON2

CJNE A,#04H,$+6

LJMP DAY30

CJNE A,#06H,$+6

LJMP DAY30

CJNE A,#09H,$+6

LJMP DAY30

CJNE A,#0BH,$+6

LJMP DAY30

MOV A,33H

CJNE A,#20H,$+6

LJMP LOOP1

LJMP OUTT0

DAY30: MOV A,33H

CJNE A,#1FH,$+6

LJMP LOOP1

LJMP OUTT0

MON2: MOV A,35H

MOV B,#04H

DIV AB

MOV A,B

JZ DAY29

MOV A,33H

CJNE A,#1DH,$+6

LJMP LOOP1

LJMP OUTT0

DAY29: MOV A,33H

CJNE A,#1EH,$+6

LJMP LOOP1

LJMP OUTT0

LOOP1: MOV 33H,#01H

INC 34H

MOV A,34H

CJNE A,#0DH,$+6

LJMP $+6

LJMP OUTT0

MOV 34H,#01H

INC 35H

MOV A,35H

CJNE A,#64H,$+6

LJMP $+6

LJMP OUTT0

MOV 35H,#00H

OUTT0: POP PSW

POP ACC

SETB ET0

RETI

;;;;;;;;;;;;;;;;;;;定时比较程序;;;;;;;;;;;;;;;

TIME1: JNB 0BH,TIME2

MOV A,31H

CJNE A,37H,TIME2

MOV A,32H

CJNE A,38H,TIME2

SETB 08H ;闹铃1显示标志位置位

SJMP RING

TIME2: JNB 0CH,TIME3

MOV A,31H

CJNE A,3AH,TIME3

MOV A,32H

CJNE A,3BH,TIME3

SETB 09H ;闹铃2显示标志位置位

SJMP RING

TIME3: JNB 0DH,OUTTIME

MOV A,31H

CJNE A,3DH,OUTTIME

MOV A,32H

CJNE A,3EH,OUTTIME

SETB 0AH ;闹铃3显示标志位置位

SJMP RING

OUTTIME: RET

RING: SETB 0EH

RET

;;;;;;;;;;;;;;;;;;;时钟调整程序;;;;;;;;;;;;;;;;

TIME: LCALL DL1S

LCALL KEY

JB ACC.2,$+5

SJMP $+5

LJMP START1

CLR ET0

CLR TR0

MOV 30H,#00H

SETB 05H

SETB 06H ;56位闪烁标志位置位

SETB ET1

SETB TR1

MOV R2,#06H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

TIMEHOUR: LCALL DISPLAY

LCALL KEY

JNB ACC.2,TIMEMIN ;等待键按下

JB ACC.3,$-9

TIMEHOUR1: LCALL DL02S

LCALL KEY

JNB ACC.3,$+19 ;等待键释放

INC 32H

MOV A,32H

CJNE A,#18H,$+6

MOV 32H,#00H

SETB 05H

SETB 06H

SJMP TIMEHOUR

CLR 05H

CLR 06H

INC 32H

MOV A,32H

CJNE A,#18H,$+6

MOV 32H,#00H

SJMP TIMEHOUR1

TIMEMIN: CLR 05H

CLR 06H

SETB 03H ;34位闪烁标志位置位

SETB 04H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

TIMEMIN1: LCALL DISPLAY

LCALL KEY

JNB ACC.2,TIMEOUT ;等待键按下

JB ACC.3,$-9

TIMEMIN2: LCALL DL02S

LCALL KEY

JNB ACC.3,$+19 ;等待键释放

INC 31H

MOV A,31H

CJNE A,#3CH,$+6

MOV 31H,#00H

SETB 03H

SETB 04H

SJMP TIMEMIN1

CLR 03H

CLR 04H

INC 31H

MOV A,31H

CJNE A,#3CH,$+6

MOV 31H,#00H

SJMP TIMEMIN2

TIMEOUT: CLR 03H

CLR 04H

CLR ET1

CLR TR1

MOV R4,#14H

SETB ET0

SETB TR0

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

RET

;;;;;;;;;;;;;;;;;;;T1中断程序;;;;;;;;;;;;;;

INTT1: PUSH ACC

PUSH PSW

MOV TL1,#00H

MOV TH1,#4CH

DJNZ R2,INTT1OUT

MOV R2,#06H

JNB 01H,$+7

CPL 02H

SJMP INTT1OUT

JNB 03H,$+7

CPL 04H

SJMP INTT1OUT

JNB 05H,$+5

CPL 06H

INTT1OUT: POP PSW

POP ACC

RETI

;;;;;;;;;;;;;;;;;;;定时显示与设定;;;;;;;;;;

SETTIME: SETB 08H

LCALL DISPLAY

LCALL KEY

JNB ACC.1,$-6 ;等待键释放

MOV 40H,#0FH ;显示时长

LCALL DL02S

LCALL KEY

JNB ACC.2,TIME1SET

JNB ACC.1,DISPLAYTIME2

DJNZ 40H,$-12

CLR 08H

RET

DISPLAYTIME2: CLR 08H

SETB 09H

LCALL DISPLAY

LCALL KEY

JNB ACC.1,$-6 ;等待键释放

MOV 40H,#0FH ;显示时长

LCALL DL02S

LCALL KEY

JNB ACC.2,TIME2SET1

JNB ACC.1,DISPLAYTIME3

DJNZ 40H,$-12

CLR 09H

RET

TIME2SET1: LJMP TIME2SET

DISPLAYTIME3: CLR 09H

SETB 0AH

LCALL DISPLAY

LCALL KEY

JNB ACC.1,$-6 ;等待键释放

MOV 40H,#0FH ;显示时长

LCALL DL02S

LCALL KEY

JNB ACC.1,$+9

JNB ACC.2,TIME3SET1

DJNZ 40H,$-12

CLR 0AH

LCALL DISPLAY

LCALL KEY

JNB ACC.1,$-6 ;等待键释放

RET

TIME3SET1: LJMP TIME3SET

TIME1SET: SETB 05H ;56位闪烁标志位置位

SETB 06H

SETB ET1

SETB TR1

MOV R2,#06H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

TIME1HOUR: LCALL DISPLAY

LCALL KEY

JNB ACC.2,TIME1MIN ;等待键按下

JB ACC.3,$-9

TIME1HOUR1: LCALL DL02S

LCALL KEY

JNB ACC.3,$+19 ;等待键释放

INC 38H

MOV A,38H

CJNE A,#18H,$+6

MOV 38H,#00H

SETB 05H

SETB 06H

SJMP TIME1HOUR

CLR 05H

CLR 06H

INC 38H

MOV A,38H

CJNE A,#18H,$+6

MOV 38H,#00H

SJMP TIME1HOUR1

TIME1MIN: CLR 05H

CLR 06H

SETB 03H ;34位闪烁标志位置位

SETB 04H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

TIME1MIN1: LCALL DISPLAY

LCALL KEY

JNB ACC.2,TIME1SIGN ;等待键按下

JB ACC.3,$-9

TIME1MIN2: LCALL DL02S

LCALL KEY

JNB ACC.3,$+19 ;等待键释放

INC 37H

MOV A,37H

CJNE A,#3CH,$+6

MOV 37H,#00H

SETB 03H

SETB 04H

SJMP TIME1MIN1

CLR 03H

CLR 04H

INC 37H

MOV A,37H

CJNE A,#3CH,$+6

MOV 37H,#00H

SJMP TIME1MIN2

TIME1SIGN: CLR 03H

CLR 04H

SETB 01H ;12位闪烁标志位置位

SETB 02H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

TIME1SIGN1: LCALL DISPLAY

LCALL KEY

JNB ACC.2,SETTIME1OUT ;等待键按下

JB ACC.3,$-9

INC 36H

MOV A,36H

CJNE A,#02H,$+6

MOV 36H,#00H

CPL 0BH

LCALL DISPLAY

LCALL KEY

JNB ACC.3,$-6 ;等待键释放

SJMP TIME1SIGN1

SETTIME1OUT: CLR 08H

LJMP SETTIMEOUT

TIME2SET: SETB 05H ;56位闪烁标志位置位

SETB 06H

SETB ET1

SETB TR1

MOV R2,#06H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

TIME2HOUR: LCALL DISPLAY

LCALL KEY

JNB ACC.2,TIME2MIN ;等待键按下

JB ACC.3,$-9

TIME2HOUR1: LCALL DL02S

LCALL KEY

JNB ACC.3,$+19 ;等待键释放

INC 3BH

MOV A,3BH

CJNE A,#18H,$+6

MOV 3BH,#00H

SETB 05H

SETB 06H

SJMP TIME2HOUR

CLR 05H

CLR 06H

INC 3BH

MOV A,3BH

CJNE A,#18H,$+6

MOV 3BH,#00H

SJMP TIME2HOUR1

TIME2MIN: CLR 05H

CLR 06H

SETB 03H ;34位闪烁标志位置位

SETB 04H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

TIME2MIN1: LCALL DISPLAY

LCALL KEY

JNB ACC.2,TIME2SIGN ;等待键按下

JB ACC.3,$-9

TIME2MIN2: LCALL DL02S

LCALL KEY

JNB ACC.3,$+19 ;等待键释放

INC 3AH

MOV A,3AH

CJNE A,#3CH,$+6

MOV 3AH,#00H

SETB 03H

SETB 04H

SJMP TIME2MIN1

CLR 03H

CLR 04H

INC 3AH

MOV A,3AH

CJNE A,#3CH,$+6

MOV 3AH,#00H

SJMP TIME2MIN2

TIME2SIGN: CLR 03H

CLR 04H

SETB 01H ;12位闪烁标志位置位

SETB 02H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

TIME2SIGN1: LCALL DISPLAY

LCALL KEY

JNB ACC.2,SETTIME2OUT ;等待键按下

JB ACC.3,$-9

INC 39H

MOV A,39H

CJNE A,#02H,$+6

MOV 39H,#00H

CPL 0CH

LCALL DISPLAY

LCALL KEY

JNB ACC.3,$-6 ;等待键释放

SJMP TIME2SIGN1

SETTIME2OUT: CLR 09H

LJMP SETTIMEOUT

TIME3SET: SETB 05H

SETB 06H ;56位闪烁标志位置位

SETB ET1

SETB TR1

MOV R2,#06H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

TIME3HOUR: LCALL DISPLAY

LCALL KEY

JNB ACC.2,TIME3MIN ;等待键按下

JB ACC.3,$-9

TIME3HOUR1: LCALL DL02S

LCALL KEY

JNB ACC.3,$+19 ;等待键释放

INC 3EH

MOV A,3EH

CJNE A,#18H,$+6

MOV 3EH,#00H

SETB 05H

SETB 06H

SJMP TIME3HOUR

CLR 05H

CLR 06H

INC 3EH

MOV A,3EH

CJNE A,#18H,$+6

MOV 3EH,#00H

SJMP TIME3HOUR1

TIME3MIN: CLR 05H

CLR 06H

SETB 03H ;34位闪烁标志位置位

SETB 04H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

TIME3MIN1: LCALL DISPLAY

LCALL KEY

JNB ACC.2,TIME3SIGN ;等待键按下

JB ACC.3,$-9

TIME3MIN2: LCALL DL02S

LCALL KEY

JNB ACC.3,$+19 ;等待键释放

INC 3DH

MOV A,3DH

CJNE A,#3CH,$+6

MOV 3DH,#00H

SETB 03H

SETB 04H

SJMP TIME3MIN1

CLR 03H

CLR 04H

INC 3DH

MOV A,3DH

CJNE A,#3CH,$+6

MOV 3DH,#00H

SJMP TIME3MIN2

TIME3SIGN: CLR 03H

CLR 04H

SETB 01H ;12位闪烁标志位置位

SETB 02H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

TIME3SIGN1: LCALL DISPLAY

LCALL KEY

JNB ACC.2,SETTIME3OUT ;等待键按下

JB ACC.3,$-9

INC 3CH

MOV A,3CH

CJNE A,#02H,$+6

MOV 3CH,#00H

CPL 0DH

LCALL DISPLAY

LCALL KEY

JNB ACC.3,$-6 ;等待键释放

SJMP TIME3SIGN1

SETTIME3OUT: CLR 0AH

SETTIMEOUT: CLR 01H

CLR 02H

CLR ET1

CLR TR1

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

LJMP START1

;;;;;;;;;;;;;;;;;;;日期转换、设定;;;;;;;;;;

DATE: SETB 07H

LCALL DISPLAY

LCALL KEY

JNB ACC.3,$-6 ;等待键释放

MOV 40H,#0FH ;显示时长

LCALL DL02S

LCALL KEY

JNB ACC.2,DATESET

JNB ACC.3,$+6

DJNZ 40H,$-12

CLR 07H

LCALL DISPLAY

LCALL KEY

JNB ACC.3,$-6 ;等待键释放

RET

DATESET: SETB 05H

SETB 06H ;56位闪烁标志位置位

SETB ET1

SETB TR1

MOV R2,#06H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

DATEYEAR: LCALL DISPLAY

LCALL KEY

JNB ACC.2,DATEMON ;等待键按下

JB ACC.3,$-9

DATEYEAR1: LCALL DL02S

LCALL KEY

JNB ACC.3,$+19 ;等待键释放

INC 35H

MOV A,35H

CJNE A,#64H,$+6

MOV 35H,#00H

SETB 05H

SETB 06H

SJMP DATEYEAR

CLR 05H

CLR 06H

INC 35H

MOV A,35H

CJNE A,#64H,$+6

MOV 35H,#00H

SJMP DATEYEAR1

DATEMON: CLR 05H

CLR 06H

SETB 03H ;34位闪烁标志位置位

SETB 04H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

DATEMON1: LCALL DISPLAY

LCALL KEY

JNB ACC.2,DATEDAY ;等待键按下

JB ACC.3,$-9

DATEMON2: LCALL DL02S

LCALL KEY

JNB ACC.3,$+19 ;等待键释放

INC 34H

MOV A,34H

CJNE A,#0DH,$+6

MOV 34H,#01H

SETB 03H

SETB 04H

SJMP DATEMON1

CLR 03H

CLR 04H

INC 34H

MOV A,34H

CJNE A,#0DH,$+6

MOV 34H,#01H

SJMP DATEMON2

DATEDAY: CLR 03H

CLR 04H

SETB 01H ;12位闪烁标志位置位

SETB 02H

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

DATEDAY2: LCALL DISPLAY

LCALL KEY

JNB ACC.2,DATEOUT ;等待键按下

JB ACC.3,$-9

DATEDAY3: LCALL DL02S

LCALL KEY

JNB ACC.3,$+13 ;等待键释放

INC 33H

ACALL MON

SETB 01H

SETB 02H

SJMP DATEDAY2

CLR 01H

CLR 02H

INC 33H

ACALL MON

SJMP DATEDAY3

DATEOUT: CLR 07H

CLR 01H

CLR 02H

CLR ET1

CLR TR1

LCALL DISPLAY

LCALL KEY

JNB ACC.2,$-6 ;等待键释放

RET

MON: MOV A,34H

CJNE A,#02H,$+6

LJMP MON2A

CJNE A,#04H,$+6

LJMP DAY30A

CJNE A,#06H,$+6

LJMP DAY30A

CJNE A,#09H,$+6

LJMP DAY30A

CJNE A,#0BH,$+6

LJMP DAY30A

MOV A,33H

CJNE A,#20H,$+6

LJMP LOOP1A

LJMP DATEDAY1

DAY30A: MOV A,33H

CJNE A,#1FH,$+6

LJMP LOOP1A

LJMP DATEDAY1

MON2A: MOV A,35H

MOV B,#04H

DIV AB

MOV A,B

JZ DAY29A

MOV A,33H

CJNE A,#1DH,$+6

LJMP LOOP1A

LJMP DATEDAY1

DAY29A: MOV A,33H

CJNE A,#1EH,$+6

LJMP LOOP1A

LJMP DATEDAY1

LOOP1A: MOV 33H,#01H

DATEDAY1: RET

;;;;;;;;;;;;;;;;;;;定时铃声;;;;;;;;;;;;;;;;

RING1: MOV 45H,#1FH ;响铃次数30

DLV0: MOV 44H,#0D0H

DLV2: CPL P3.2

LCALL D025MS

DJNZ 44H,DLV2

LCALL DL015S

MOV 44H,#0D0H

DLV4: CPL P3.2

LCALL D025MS

DJNZ 44H,DLV4

LCALL DL015S

LCALL DL015S

LCALL DL02S

LCALL DL02S

DJNZ 45H,DLV0

OUT: CLR 08H

CLR 09H

CLR 0AH

CLR 0EH

LCALL DISPLAY

LCALL KEY

JNB ACC.1,$-6 ;等待键释放

LJMP START1

D025MS: MOV 46H,#7AH

DJNZ 46H,$

RET

DL015S: MOV 47H,#19H

LCALL DISPLAY

LCALL KEY

JNB ACC.1,OUT

DJNZ 47H,$-9

RET

;;;;;;;;;;;;;;;;;;;键盘程序;;;;;;;;;;;;;;;;

KEY: MOV P1,#0EFH

CLR P3.3

MOV A,P1

RET

;;;;;;;;;;;;;;;;;;;显示程序;;;;;;;;;;;;;;;;;

DISPLAY: JNB 07H,$+8

MOV 3FH,#33H ;日期显示

SJMP DISPLAY1

JNB 08H,$+8

MOV 3FH,#36H ;定时1显示

SJMP DISPLAY1

JNB 09H,$+8

MOV 3FH,#39H ;定时2显示

SJMP DISPLAY1

JNB 0AH,$+8

MOV 3FH,#3CH ;定时3显示

SJMP DISPLAY1

MOV 3FH,#30H ;时间显示

DISPLAY1: SETB P3.3

MOV R5,#05H

MOV R3,#03H

MOV R0,3FH

PLAY: MOV A,@R0

MOV B,#0AH

DIV AB

PUSH A

MOV A,B

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

LCALL DISPLAY2

LCALL DL1MS

POP A

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

LCALL DISPLAY2

LCALL DL1MS

INC R0

DJNZ R3,PLAY

MOV P0,#0FFH

RET

DISPLAY2: MOV A,R5

JNB 02H,A1

CJNE R5,#05H,$+5

SJMP $+5

CJNE R5,#04H,A1

SJMP A4

A1: JNB 04H,A2

CJNE R5,#03H,$+5

SJMP $+5

CJNE R5,#02H,A2

SJMP A4

A2: JNB 06H,A3

CJNE R5,#01H,$+5

SJMP $+5

CJNE R5,#00H,A3

A4: MOV A,#06H

A3: MOV DPTR,#SMG

MOVC A,@A+DPTR

MOV P1,A

DEC R5

RET

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H

DB 92H,82H,0F8H,80H,90H ;共阳段码表

SMG: DB 0FEH,0FDH,0FBH,0F7H,0DFH,0EFH,0FFH;数码管选位

;;;;;;;;;;;;;;;;;;;延时程序;;;;;;;;;;;;;;;;;

DL1MS: MOV R6,#14H

DL1: MOV R7,#17H

DL2: DJNZ R7,DL2

DJNZ R6,DL1

RET

DL1S: MOV 42H,#05H

DL1S1: ACALL DL02S

DJNZ 42H,DL1S1

RET

DL02S: MOV 43H,#21H ;6.1毫秒*33≈0.2

DL02S1: LCALL DISPLAY

DJNZ 43H,DL02S1

RET

END

参考文献

[1] 胡汉才.单片机原理及接口技术[M].北京:清华大学出版社,1996.

[2] 胡健.单片机原理及接口技术[M].北京:机械工业出版社,2004.

[3] 胡健.单片机实用教程[M].北京:兵器工业出版社,2001.

[4] 周行慈.单片机应用程序设计基础[M].北京:北京航空航天大学出版社,1991.

[5] 李广弟.单片机基础[M].修订本,北京:北京航空航天大学出版社,2001.

[6] 李朝青.单片机原理及接口技术[M],简明修订版.北京:北京航空航天大学出版社,1999.

[7] 李叶紫.MCS-51单片机应用教程[M].北京:清华大学出版社,2004.

[8] 朱定华.单片机原理及接口技术[M].北京:电子工业出版社,2001.

[9] AT89S52芯片资料(译文),Atmel公司.

[10] 实验板资料,www.mcuprog.com.

本文来源:https://www.2haoxitong.net/k/doc/c6485fc45fbfc77da269b1af.html

《毕业论文模板(机电专业).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式