应用案例 1 新颖 60 秒旋转电子钟 课程设计

56
单单单单单单单单单单单单单单单 《》 应应应应 1 应应 60 应应应应应应单单单单 单单单单单单单单单 2006 单 12 单

Upload: cade-ashley

Post on 01-Jan-2016

105 views

Category:

Documents


5 download

DESCRIPTION

余 水 宝 数理与信息工程学院 2006 年 12 月. 应用案例 1 新颖 60 秒旋转电子钟 课程设计. 任 务 书 设计一款基于 AT89C2051 单片机的电子钟。 设计基本要求 ⑴ 用 4 只 LED 数码管输出显示时和分。 ⑵ 可通过按键设置闹钟功能,且停闹无须手工操作。 ⑶ 可通过按键设置分校时。 ⑷ 月计时误差小于 45 秒。 ⑸ 写出详细的设计报告。 ⑹ 给出全部电路和源程序。. 发挥部分要求 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例

应用案例 1

新颖 60 秒旋转电子钟课程设计

余 水 宝

数理与信息工程学院

2006 年 12 月

Page 2: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

任 务 书 设计一款基于 AT89C2051 单片机的电子钟。 设计基本要求 ⑴ 用 4 只 LED 数码管输出显示时和分。 ⑵ 可通过按键设置闹钟功能,且停闹无须手工操作。 ⑶ 可通过按键设置分校时。 ⑷ 月计时误差小于 45 秒。 ⑸ 写出详细的设计报告。 ⑹ 给出全部电路和源程序。

Page 3: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

发挥部分要求⑴ 用 60 只 LED 发光管旋转显示,模拟“秒针”的行走。⑵ 模拟“秒针”行走的“嘀哒”声。⑶ 增加室温检测和显示功能(可与时间交替显示)。⑷ 增加停(掉)电保护功能。⑸ 提高计时精度,使年计时误差小于 30 秒。⑹ 可通过按键设置一天两闹(比如早晨、中午各一次)。

Page 4: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

选题背景

目前市场上提供的无论是机械钟还是石英钟在晚上无照明的情况下都是不可见的。要知道当前的时间,必须先开灯,故较为不便。现在市场上也出现了一些电子钟,它以六只 LED 数码管来显示时分秒,违背了人们指针式的传统习惯与理念,而且这类电子钟一般是采用大型显示器件,适用于银行、车站等公共场所,且外观设计欠美观,很少进入百姓家庭。此外,无论是机械钟、石英钟还是电子钟,都存在着共同的问题:时间误差。针对以上存在的问题,我们设计了一款采用 LED 显示器件显示的电子时钟,解决了时钟存在的误差问题,并能在夜间不必其它照明就能看到时间,且以 60 只发光管实现秒显示,接近于传统的秒针来显示秒的形式,用户容易接受,而且美观大方。另加七只装饰用的 LED 灯,使整个时钟显的相当美观新颖,故还可作为室内装饰用。

Page 5: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

1 系统主要功能

电子钟的外观如图 1 所示。周边 60 只发光管顺时旋转来显示秒,中间四只 LED 数码管用于显示时间,中下方的七只 LED 灯顺时旋转,供装饰用。其主要功能有:

① 整点报时;

② 四只 LED 数码管显示当前时分;

③ 每隔一秒钟周边的 60 只 LED 发光管旋转一格;

④ 当发生停电事件时,由后备电池供电,系统进入低功耗状态,所

有显示部件停止显示,这样即延长了电池的寿命,同时又保证了

CPU继续计数,不至于因停电而时钟停止运行。

⑤当恢复供电后,系统自动恢复工作状态,不影响计时。

Page 6: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

Page 7: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

2 系统的硬件构成及功能 电子钟的原理框图如图 2 所示。它由以下几个部件组成:单片机 89C2051 、电源、时分显示部件、 60 秒旋转译码驱动电路。

时分显示采用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。时分显示模块、 60 秒旋转译码驱动电路以及显示驱动都通过 89C2051 的 I/O口控制。

电源:电源部分有二部分组成。一部分是由 220V 的市电通过变压、整流稳压来得到 +5V 电压,维持系统的正常工作;另一部分是由 3V 的电池供电,以保证停电时正常计时。正常情况下电池是不提供电能的,以保证电池的寿命。具体电路参见“新颖的 60 秒旋转电子钟参考电路原理图”。

Page 8: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

AT89C2051

( , )时间显示 时 分

显示驱动

60秒旋转译码驱动电路

电源

图 2 电子钟系统原理框图

Page 9: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

2 . 1 AT89C2051 单片机及其引脚说明 AT89C2051单片机是 51系列单片机的一个成员,是

8051单片机的简化版。内部自带 2K字节可编程 FLASH 存储器的低电压、高性能 COMS八位微处理器,与 Intel MCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位 CPU 和闪速存储器结合在单个芯片中,因此, AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的 RAM 、 ROM 和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。

AT89C2051 是一个有 20 个引脚的芯片,引脚配置如图 3 所示。与 8051 相比, AT89C2051减少了两个对外端口(即 P0 、 P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。 AT89C2051芯片的 20 个引脚

功能为:

Page 10: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

图 3 AT89C2051引脚配置

VCC 电源电压;GND 接地;RST 复位输入。当

RST变为高电平并保持2 个机器周期时,所有 I/

O引脚复位至“ 1” ;XTAL1 反向振荡放

大器的输入及内部时钟工作电路的输入;

XTAL2 来自反向振荡放大器的输出。

Page 11: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

P1口 8位双向 I/O口。引脚 P1.2~ P1.7 提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。 P1.0 和 P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入( AIN0 )和反向输入( AIN1 ), P1口输出缓冲器能接收 20mA 的灌电流,并能直接驱动 LED 显示器; P1口引脚写入“ 1” 后,可用作输入。在闪速编程与编程校验期间, P1口也可接收编码数据。P3口引脚 P3.0~ P3.5 与 P3.7 为 7 个带内部上拉的双向I/0引脚。 P3.6 在内部已与片内比较器输出相连,不能作为通用 I/O引脚访问。 P3口的输出缓冲器能接收 20mA的灌电流; P3口写入“ 1”后,内部上拉,可用作输入。P3口也可用作特殊功能口,其功能见表 1 。 P3口同时也可为闪速存储器编程和编程校验接收控制信号。

Page 12: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

P3口引脚 特殊功能

P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 (外部中断 0)P3.3 (外部中断 1)

P3.4T0(定时器 0外部输

入)

P3.5T1(定时器 1外部输

入)

表 1 P3口特殊功能

Page 13: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

2.2 60 秒旋转译码驱动原理 按常规传统设计,需 60 进制译码驱动电路才能实现 60 秒旋转译码驱动,若用六片十进制计数译码器构成六十进制计数译码电路,则电路连线多(需要 120根连线),硬件电路庞大,开销大。为此,我们巧妙地采用了两片 CD4017 进行六十进制计数译码,实现 60 秒旋转译码驱动。既减少了电路的复杂程度又可降低了成本。图 4 为 CD4017 功能引脚图,图 5 为其时序图。

Page 14: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

图 5 CD4017 时序图

图 4 CD4017引脚图

Page 15: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

CD4017集成电路是十进制计数 / 时序译码器,共有 1

0 个译码输出 Q0~ Q9 ;每个译码输出通常处于低电平,且在时钟脉冲由低到高的上升沿输出高电平;每个高电平输出维持 1 个时钟周期;每输入 10 个时钟脉冲,输出一个进位脉冲,因此进位输出信号可作为下一级计数器的时钟信号。在清零输入端( R )加高电平或正脉冲时,只有输出端 Q0 为高电平,其余各输出端均为低电平“ 0” 。

为实现对发光二极管的驱动,将每一个译码输出端口接一只发光二极管,并将二极管串联限流电阻后接地。当译码端口 Q0~ Q9 中任一端口为高电平,则对应的发光二极管点亮,如图 6 所示。

Page 16: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

仔细考查 CD4017 的功能,可发现其 10 个输出的高电平是相互排斥的,即任一时刻只有一只发光二极管点亮,因此可将图 6 电路进一步简化为如图 7 所示,从而简化电路设计。

图 6 CD4017控制 LED原理图 图 7 优化后控制 LED原理图

Page 17: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

在本电子钟设计中,每秒点亮一个发光二极管,循环点亮一周共需 60 个发光二极管,若用上述的 6片 CD40

17 实现驱动,显然电路复杂。为此我们选用两片 CD40

17 和一片 6反相器,采用“纵横双译码”技术,巧妙地实现 60 秒旋转译码驱动,其中一片接成 10 进制,一片接成 6 进制,实现 6×10=60 的功能,具体连接方法如图 8 所示。

Page 18: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

图 8 发光二极管“纵横双译码”循环点亮 LED原理图

Page 19: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

将周期为 1 秒的输入脉冲作为其中一片 CD4017 的时钟脉冲,而此片的级联进位输出端( QC )作为另一片的时钟输入,并将 Q6 与复位端相连。在两片译码输出端交叉点上接入发光二极管,构成 6×10矩阵。根据 CD4017 时序特点,在初始状态,作为高位(纵)的 CD4017译码器输出端口 Q0处于高平,经反相器反相后为低电平。当作为低位(横)的 CD4017译码器输出端口 Q0~ Q9依次输出高电平后,则对应的二极管 LD1~ LD10依次点亮;此后由于 QC端的进位,高位 CD4017译码输出端口 Q1 输出高电平,反相后输出低电平,当低位的 CD4017译码输出端口 Q0~ Q9依次输出高电平后,二极管 LD11~ LD20依次点亮。如此往复,直至高位 Q6向复位端输入高电平, CD4017复位, 60 秒循环点亮重新开始。

Page 20: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

2.3 时分显示部件 由于系统要显示的内容较简单,显示量不多,所以

选用数码管既方便又经济。 LED 有共阴极和共阳极两种。如图 8 所示。

二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入 +5V 的电压。一位显示器由 8 个发光二极管组成,其中 7 个发光二极管构成字型“ 8” 的各个笔划(段) a~ g ,另一个小数点为 dp 发光二极管。当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。为了保护各段 LED 不被损坏,需外加限流电阻。

Page 21: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

图 9 LED 数码管结构原理图

Page 22: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

众所周知, LED 显示数码管通常由硬件 7段译码集成电路,完成从数字到显示码的译码驱动。本系统采用软件译码,以减小体积,降低成本和功耗,软件译码的另一优势还在于比硬件译码有更大的灵活性。所谓软件译码,即由单片机软件完成从数字到显示码的转换。从 LED 数码管结构原理可知,为了显示字符,要为 LED 显示数码管提供显示段码,组成一个“ 8”字形字符的7段,再加上 1 个小数点位,共计 8段,因此提供给 LED 数码管的显示段码为 1 个字节。各段码位与显示段的对应关系如表 2 。

段码位 D7 D6 D5 D4 D3 D2 D1 D0

显示段 dp g f e d c b a

表 2 各段码位的对应关系

Page 23: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

字型 共阳段码 共阴段码 字型 共阳段码 共阴段码

0 C0H 3FH 9 90H 6FH

1 F9H 06H A 88H 77H

2 A4H 5BH B 83H 7CH

3 BOH 4FH C C6H 39H

4 99H 66H D A1H 5EH

5 92H 6DH E 86H 79H

6 82H 7DH F 84H 71H

7 F8H 07H 空白 FFH 00H

8 80H 7FH P 8CH 73H

表 3 LED 显示段码

本表所列各字符的显示段码均为小数点不亮的情况。

Page 24: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

根据 AT89C2051单片机灌电流能力强,拉电流能力弱的特点,我们选用共阳数码管。将 AT89C2051 的 P1.0~ P1.7 分别与共阳数码管的 a~ g及 dp 相连,高电平的位对应的 LED 数码管的段暗,低电平的位对应的 LED 数码管的段亮,这样,当 P0口输出不同的段码,就可以控制数码管显示不同的字符。例如:当 P0口输出的段码为 1100 0000 ,数码管显示的字符为 0 。

数码管显示器有二种工作方式,即静态显示方式和动态扫描显示方式。为节省端口及降低功耗,本系统采用动态扫描显示方式。动态扫描显示方式需解决多位 LED 数码管的“段控”和“位控”问题,本电路的“段控”(即要显示的段码的控制)通过 P0口实现;而每一位的公共端,即 LED 数码管的“位控”,则由 P3口控制。

Page 25: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

这种连接方式由于多位字段线连在一起,因此,要想显示不同的内容,必然要采取轮流显示的方式,即在某一瞬间,只让其中的某一位的字位线处于选通状态,其它各位的字位线处于断开状态,同时字段线上输出这一位相应要显示字符的字段码。在这一瞬时,只有这一位在显示,其他几位则暗。在本系统中 ,字位线的选通与否是通过 PNP三极管的导通与截止来控制 ,即三极管处于“开关”状态。 系统的时分显示部件由 4 只 7段共阳 LED 数码管构成,前两只用于时的显示,后两只用于分的显示。值得一提的是,在设计中需要实现时与分之间的两个闪烁点,为此,将第三只 LED 数码管倒置摆放,这样就很巧妙地形成了两个很自然的闪烁点。与此同时,为了能使两点显示能够形象的表示时钟“秒”的变化,设计时,将两个点由 P1.7单独控制,每隔一秒使 P1.7 发送一个正脉冲,从而实现了两个点的闪烁显示,闪烁周期为一秒。

Page 26: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

3 系统的软件构成及功能 本系统的软件系统主要可分为主程序和定时器中断程序两大模

块。在程序过程中,加入了抗干扰措施。下面对部分模块作介绍。3 . 1 系统主程序设计 主程序的功能是完成系统的初始化,在显示时间之前,对系统

是否停电状态进行检测;若停电,将系统进入低功耗状态,用电池电压维持单片机计时工作,但此时不显示时间,用节省用电;若不停电,则将时分发送显示。程序流程如图 9 所示。

3 . 2 中断程序设计 中断程序 ( 如图 10 所示 )完成时间计数,时间调整,误差消

除等功能。中断采用 AT89C2051 内部 T0 中断实现,定时时间为 125ms ,当时间到达 125ms×8,即 1 分钟时,分计数缓冲器 MINBUFFER 增加 1 ,到达 1 小时,则时计数缓冲器 HOURBUFFER 增加 1,并将分、时的个位、十位放入显示缓冲器。当分计数缓冲器和时计数缓冲器分别到达 60min 、 24h 时,则对它们清零,以便从新计数。在中断设计中,还通过软件实现了累计误差消除功能,使整个系统时间的精确度得到保证。

Page 27: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

系统参数初始化

设定闹钟?

整点时间?

开始

N

调整时间?

时间显示、等待定时中断

时间调整子程序Y

N

定闹设置子程序Y

N

定闹时间到?

发“ 嘀” 一声Y

N

闹铃一分钟Y

图 10 系统主程序流程图

Page 28: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

N

N

Y

Y

中断返回

整点报时否

整点报时

Y

N

定时器中断

1是否到 秒

秒指针步进一次

是否整分

整分旋转复位调整当前时分积累误差消除

图 11 定时中断程序

Page 29: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

4 结束语 上述电子钟,无论在外观上还是功能上都实现了较为完善的设计。特别值得一提的是本系统在精度上的设计,突破传统的方法,对可能产生的积累误差采用“抵消法”,从而有效地降低了时间误差。 由于计数时产生的积累误差所导致的时间误差,是所有的电子计时系统共同存在的问题。但在目前市场上的电子时钟产品,如计算机中的时钟,手机中的时钟等并没有有效的采取消除误差的措施。本系统设计的消除积累误差来减少时间误差的软件方法,并不需要任何的硬件,因此在不增加成本的情况下,可以普遍用于所有的电子时钟产品。

Page 30: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

名称 型号 数量 单片机 AT89C2051 1

数字集成芯片 CD4017 2

数字集成芯片 CD4069 1

超高亮数码管 共阳 尺寸 0.5inch 4

超高亮发光二极管 直径 3 红、透明 13

超高亮发光二极管 直径 3 绿、透明 50

普通二极管 IN4001 4

普通二极管 IN4148 2

稳压二极管 C4V3( 4.3V) 1

三极管 9012 5

三极管 9013 1

新颖 60 秒旋转电子钟器件清单

Page 31: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

新颖 60 秒旋转电子钟器件清单

名称 型号 数量 轻触按键 小(尺寸 6×6mm×5.

5)3

蜂鸣器 5 V 1

晶振 6M(小体积) 1

底座 14脚 1

底座 16脚 2

底座 20脚 1

底座 40脚 1

电阻 220欧姆, 1/8瓦 8

电阻 4.7K, 1/8瓦 5

Page 32: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

名 称 型号 数量 电阻 100欧姆, 1/8瓦 1

电阻 270欧姆, 1/8瓦 2

电容 100微法 /25伏 2

电容 220微法 /25伏 1

电容 30P 瓷片 3

电容 104( 0.1微法) 3

变压器 5 V/100 M A 1

电源线 150cm 1

固定脚 铜 3套 PCB线路板 直径 11. 5 1

热缩管 直径 2 0.2 米

新颖 60 秒旋转电子钟器件清单

Page 33: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

Page 34: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

电子钟电源

Page 35: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

新颖 60 秒旋转

电子钟实物 1

Page 36: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

新颖 60 秒旋转

电子钟实物 2

Page 37: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

60 秒旋转电子钟部分参考程序清单

ALARMHBUFF2 EQU 77H ; 闹铃时间的时十位计时绶冲ALARMHBUFF1 EQU 76H ; 闹铃时间的时个位计时绶冲ALARMMBUFF2 EQU 75H ; 闹铃时间的分十位计时绶冲ALARMMBUFF1 EQU 74H ; 闹铃时间的分个位计时绶冲HBUFF2 EQU 73H ; 时十位计时绶冲HBUFF1 EQU 72H ; 时个位计时绶冲MBUFF2 EQU 71H ; 分十位计时绶冲MBUFF1 EQU 70H ; 分个位计时绶冲DP EQU 6FH ;控制数码管点的亮暗NUM EQU 78H ; 前四秒还是后四秒计数

SBUFF EQU 79H ; 秒十进制计时绶冲 (低四位对应个位, 高四位对应十位 )

Page 38: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝 MBUFF EQU 7AH ; 分十进制计时绶冲HBUFF EQU 7BH ; 时十进制计时绶冲ALARMMBUFF EQU 7CH ; 闹铃时间的分十进制计时绶冲ALARMHBUFF EQU 7DH ; 闹铃时间的时十进制计时绶冲NUMT1 EQU 67H ; 用于控制时间调整时按键 p3.2 一次按 下时,计数器 T1 中断的次数NUMT2 EQU 68H ; 用于控制时间调整时按键 p3.3 一次按下时,计数器 T1 中断的次数KEYNUMT1 EQU 69H ; 用于存储 NUMT1已经计数到第几个半秒 KEYNUMT2 EQU 6AH ; 用于存储 NUMT1已经计数到第几个半秒STOREKEYNUMT2 EQU 6BH ; 用于存储当前 KEYNUMT1 的值,

以 和下次做比较,看是否有变化STOREKEYNUMT1 EQU 6CH ; 用于存储当前 KEYNUMT2 的值,以和下次做比较,看是否有变化

Page 39: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

ORG 0000H AJMP START ORG 000BH MOV TH0 , #0BH ; 设置计数初值 ,R4 用来存储低位的初值 MOV TL0 , R4 AJMP INTERT0 ORG 001BH AJMP INTERT1 ORG 0040HSTART: MOV NUMT1 , #00H MOV NUMT2 , #00H MOV KEYNUMT1 , #00H MOV KEYNUMT2 , #00H MOV STOREKEYNUMT2 , #00H MOV STOREKEYNUMT1 , #00H MOV NUM , #8 MOV DPTR , #TAB

Page 40: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

MOV ALARMHBUFF , #18H ; 置闹铃时间初始值为 18:55 MOV ALARMMBUFF , #55H MOV ALARMHBUFF2, #01H MOV ALARMHBUFF1, #08H MOV ALARMMBUFF2 , #05H MOV ALARMMBUFF1 , #05H MOV HBUFF2, #01H ; 置闹钟时间为 18:53 MOV HBUFF1, #08H MOV MBUFF2 , #05H MOV MBUFF1 , #03H MOV HBUFF , #18H MOV MBUFF , #53H MOV SBUFF , #3CH ; 置初始秒为 60, 计时时减 MOV TCON , #05H ; 下降沿触发 MOV TMOD , #11H ;初始化定时器 ,T0 ,T1 16位计时 MOV TH0 , #0BH ; 设置计数初值, 125ms 计时

Page 41: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

MOV TL0 , #0DBH MOV TH1 , #3CH ;T1 置初值,进行 100ms 计时,用于调整时间 MOV TL1 , #0B0H MOV IE , #82H ; 开 T0 中断 SETB PT0 ;T0 中断优先级最高 SETB TR0 ; 允许 T0 计数 SETB P3.2 SETB P3.3START1: MOV A , HBUFF ; 显示时, 7 点以前及 21 点以后亮度调暗 SUBB A , #7H JC START2 MOV A , HBUFF SUBB A , #21H JNC START2 ACALL DISPLAY ACALL ZDBS AJMP START3

Page 42: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

START2: ACALL NIGHTDISPLAY

START3: MOV A ,ALARMHBUFF ; 检测是否是定闹时间 CJNE A , HBUFF , START4

MOV A , ALARMMBUFF

CJNE A , MBUFF ,START4

MOV C, DP ;若是定闹时间 ,则利用 dp 的值来决定蜂鸣 MOV P3.2, C

MOV A , SBUFF

JNZ START1 ;若还没到 1 分钟,则继续蜂鸣 SETB P3.2

START4: JNB P3.2,ADJUSTTIME1 ;循环等待中断,并检测是否 键按下,若是,则进入相应程序 JNB P3.3,ADJUSTTIME2

AJMP START1

Page 43: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝 INT0 中断子程序ADJUSTTIME1: NOP MOV KEYNUMT1 ,#00H MOV TH1 , #3CH ; T1 置初值,进行 100ms 计时, 用于调整时间 MOV TL1 , #0B0H SETB ET1 ; 开 T1 中断 SETB PT1 ; 设 T1 中断优先级最高 SETB TR1 ; 允许 T1 计时 MOV STOREKEYNUMT1 , KEYNUMT1 ; 存储当前 次 KEYNUMT1 的值 TIME1_1:ACALL DISPLAY MOV A , KEYNUMT1 CJNE A , STOREKEYNUMT1,TIME1_2 ;若当前 KEYNUMT1 的值与上一次的值不等,则时间加 1 分,否则 继续循环,等等至半分钟 AJMP TIME1_3

Page 44: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

TIME1_2: MOV STOREKEYNUMT1 , KEYNUMT1 ; 加 1后存储 当前的 KEYNUMT1 的值 ACALL ADDBUFF0 ; 分加 1

TIME1_3: JNB P3.2,TIME1_1 ;若 p3.2已关,则退出增时, 否则继续循环 CLR ET1

CLR PT1

CLR TR1

AJMP START1

Page 45: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝 时间增 1 分ADDBUFF0: MOV A , MBUFF ; 若按键小于 1s ,则分增 1 ADD A , #1 DA A MOV MBUFF , A ANL A , #0FH MOV MBUFF1 , A MOV A , MBUFF SWAP A ANL A , #0FH MOV MBUFF2 , A MOV A , MBUFF CJNE A , #60H , ADDBUFF1 MOV MBUFF , #00H MOV MBUFF2 , #00H MOV MBUFF1 , #00H MOV A , HBUFF ; 时增 1

Page 46: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝 ADD A , #1 DA A MOV HBUFF , A ANL A , #0FH MOV HBUFF1 , A MOV A , HBUFF SWAP A ANL A , #0FH MOV HBUFF2 , A MOV A , HBUFF CJNE A , #24H , ADDBUFF1 ;若没到 24 小时 , 则不必初值置 0 MOV HBUFF , #00H MOV HBUFF2 , #00H MOV HBUFF1 , #00HADDBUFF1: RET

Page 47: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝 INT1 中断子程序 ADJUSTTIME2: NOP ACALL DL100MS MOV C , P3.3 JC TIME2_6 ; 如果 (P3.3 按键 <100ms 以上 ) 则不做处理 MOV KEYNUMT2 , #00H ;否则进入定闹设置 MOV STOREKEYNUMT2 , KEYNUMT2 ; 记录当前 NUMT2的 数据,以看下次有没改变TIME2_1: NOP MOV TH1 , #3CH ;T1 置初值,进行 100ms 计时, 用于调整时间 MOV TL1 , #0B0H SETB ET1 ; 开 T1 中断 SETB PT1 ; 设 T1 中断优先级最高 SETB TR1 ; 允许 T1 计时 TIME2_2: ACALL ALARMDISPLAY MOV A , KEYNUMT2 CJNE A , STOREKEYNUMT2 ,TIME2_3 AJMP TIME2_4

Page 48: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝 TIME2_3: MOV STOREKEYNUMT2 , KEYNUMT2 MOV A , ALARMMBUFF ; 若按键小于 1s ,则分增1 ADD A , #1 DA A MOV ALARMMBUFF , A ANL A , #0FH MOV ALARMMBUFF1 , A MOV A , ALARMMBUFF SWAP A ANL A , #0FH MOV ALARMMBUFF2 , A MOV A , ALARMMBUFF CJNE A , #60H , TIME2_4 MOV ALARMMBUFF , #00H MOV ALARMMBUFF2 , #00H MOV ALARMMBUFF1 , #00H MOV A , ALARMHBUFF ; 时增 1 ADD A , #1 DA A

Page 49: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

MOV ALARMHBUFF , A ANL A , #0FH MOV ALARMHBUFF1 , A MOV A , ALARMHBUFF SWAP A ANL A , #0FH MOV ALARMHBUFF2 , A MOV A , ALARMHBUFF CJNE A , #24H , TIME2_4 ;若没到 24 小时 ,则初值不必置 0 MOV ALARMHBUFF , #00H MOV ALARMHBUFF2 , #00H MOV ALARMHBUFF1 , #00HTIME2_4: NOP JNB P3.3,TIME2_2 ;若按键已经未按,则退出循环 CLR ET1 CLR TR1 MOV KEYNUMT2 , #00H MOV NUMT2 , #00H

Page 50: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

MOV R2 , #10 ; 直到 p3.3 20s 钟内都是未按, 此时复原数据,即退出设置TIME2_7: MOV R1 , #200

TIME2_5: ACALL ALARMDISPLAY

ACALL DL1MS

JNB P3.3 , TIME2_1

DJNZ R1 , TIME2_5

DJNZ R2 , TIME2_7

TIME2_6: CLR ET1

CLR PT1

CLR TR1

LJMP START1

Page 51: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

T1 中断子程序INTERT1: NOP MOV TH1 , #3CH ;T1 置初值,进行 100ms 计时, 用于调整时间 MOV TL1 , #0B0H PUSH ACC PUSH PSW CLR ET0 CLR ET1 ;关 T1 中断 MOV A , NUMT1 INC A MOV NUMT1 , A ; 中断一次则相应的增加 NUMT1 CJNE A , #5 , INTERT1NEXT ; 每中断五次,即半秒, 都增加 KEYNUMT1 MOV A ,KEYNUMT1 INC A MOV KEYNUMT1 , A MOV NUMT1 , #00H ;NUMT1已经是 5 了,则处理 过 KEYNUMT1后,重置 NUMT1

Page 52: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

INTERT1NEXT: NOP MOV A , NUMT2 ; 中断一次则相应的增加 NUMT1 INC A MOV NUMT2 , A CJNE A, #5,ENDINTERT1 ; 每中断五次,即半秒, 都增加 KEYNUMT1 MOV A , KEYNUMT2 INC A MOV KEYNUMT2 , A MOV NUMT2 , #00H ;NUMT1已经是 5 了,则处 理过 KEYNUMT1后,重置 NUMT1ENDINTERT1: SETB ET1 SETB ET0 POP ACC POP PSW RETI

Page 53: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝 显示子程序DISPLAY: MOV P1 ,#0FFH MOV A , HBUFF2 MOVC A , @A+DPTR SETB ACC.7 MOV P1 , A CLR P3.0 ACALL DL1MS SETB P3.0 MOV A , HBUFF1 MOVC A , @A+DPTR MOV C , DP MOV ACC.7 , C MOV P1 , A CLR P3.1 ACALL DL1MS SETB P3.1

Page 54: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝 MOV A ,MBUFF2 MOVC A , @A+DPTR MOV C , DP MOV ACC.7 , C MOV P1 , A CLR P3.4 ACALL DL1MS SETB P3.4 MOV A , MBUFF1 MOVC A , @A+DPTR SETB ACC.7 MOV P1,A CLR P3.5 ACALL DL1MS SETB P3.5 RETTAB: DB 88H,0BBH,94H,91H,0A3H ; 0 1 2 3 4 DB 0C1H,0C0H,9BH,80H,81H ; 5 6 7 8 9

Page 55: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

T0 中断子程序INTERT0: PUSH ACC

PUSH PSW

CLR ET0 ;关 T0 中断 MOV A , SBUFF

CJNE A ,#028H, SET1

MOV R4 , #0DCH ;后四十秒的初值 SET1: DJNZ NUM , ENDINTT0 ;若还没到 1s ,则退出该次中断 MOV NUM , #8 ; 设置 NUM初值 CPL DP

DJNZ SBUFF , ENDINTT0 ; 若还没到 60s , 则退出该次中断

Page 56: 应用案例 1 新颖 60 秒旋转电子钟 课程设计

《单片机原理及应用》课程设计实例 ---- 余水宝

MOV SBUFF , #03CH

MOV R4 , #0DBH ; 前 20 秒的初值 ACALL ADDBUFF0

ENDINTT0: MOV A , NUM

CJNE A , #04H , ENDT0OUT ;0.5 秒的时候 dp取反 CPL DP

ENDT0OUT: POP PSW

POP ACC

SETB ET0

RETI

END