预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于单片机的数字钟设计与实现 摘要:本文介绍了基于单片机的数字钟的设计,详细讨论了它从软件上实现的过程,重点 在时钟调整的方式:查询和中断的比较,然后,对数字钟的稳定性和精确性作了相关的讨论。 在文章的最后,给出了采用中断方式实现的数字钟的源程序。 关键字:单片机,数字钟,数据缓冲区,中断,定时,消抖 一、引言 在单片机技术日趋成熟的今天,其灵活的硬件电路的设计和软件的设计,让单片机得到 了广泛的应用,几乎是从小的电子产品,到大的工业控制,单片机都起到了举足轻重的作用。 单片机小的系统结构几乎是所有具有可编程硬件的一个缩影,可谓是“麻雀虽小,肝胆俱全”, 单片机的学习和研究是对微机系统学习和研究的简捷途径。 二、数字钟硬件框图: speaker 驱 段码 动六位数码管显示电路 8051 位 选 消抖电路按键k1,k2,k3 图1 三、程序整体设计:定时模块,显示模块,数据调整模块,状态调整模块。 (1)总体介绍:此部分主要介绍定时模块,和显示模块。定时部分采用经典的定时器 1 定时。它实现了数字钟的主要部分,和秒表的主要部分,以及产生报时信号,定时设置。显 示模块是实现数字钟的又一重要部分,其模块的的独立程度直接影响到数字钟的可视化程 度。在此部分的设计中,设置专用显示数据缓冲区40h--45h,与分,时及其他数据缓冲区 数据区别,在其中存放的是显示段码,而其他缓冲区存放的是时间数据。在显示时,首先将 时间十进制数据转化为显示段码,然后送往数码管显示。显示段码采用动态扫描的方式。在 要求改变显示数据的类别时,只须改变@R0(指向数据缓冲区的指针)指向的十进制数据缓 冲区即可。 (2)数据调整:数据调整有多种方式。一,可以直接进入相关状态进行有关操作,二, 将调整分两步,先进入状态,然后执行操作,这两步分别由两个键控制。方式一,比较直接, 设计思想也比较简单,但是,这种方式存在操作时间和控制键数目的矛盾。如果用比较少的 键,那么可能会在进入状态后处于数据调整等待状态,这样会影响到显示的扫描速度(显示 部分可以采用8279芯片来控制,可以解决此问题)。当然在这种方式下,还可以使用多个 状态键,每个状态键,完成一个对应数据的调整。如果采用二的方式,就不会出现这种情况。 因为状态的调整,与状态的操作可以分别由两个键控制,其状态的调整数可以多达256个(理 论上),操作的完成是这样的,一键控制状态的调整,一键控制数据的调整(具体操作如图 2)。以上两种方式的实现都可以采用查询和中断的方式。两种方式必须注意的问题是两者进 行相关操作的过程不能太长否则会影响显示的扫描。利用查询的方式,方法传统,对此就不 作过多的讨论,以下是采用中断的方式实现的数字钟的一些讨论和有关问题作的一些处理。 基于以上的讨论可以设计如下:将调整分为状态调整和数据调整两部分,每次进入中断只执 行一次操作,然后返回,这样,就不必让中断处于调整等待状态,这样,可以使中断的耗时 很小。将定时器中断的优先级设置为最高级,那么中断的方式和查询的方式一样不会影响到 时钟的记数。基于以上的讨论,数据修改的具体操作如下。 @R1---MBF状态1 @R1---HOUR状态2 在状态进入后,调整指针的指向如右图所 示:在右图中@R1表示指向数据缓冲区的指 @R1--FS状态3 针,它主要是为数据的调整而设立的,在图 中:MBF,HOUR,FS,SS,分别表示时钟的@R1--SS状态4 状态5 2 @R1--NULL 状态6 分,时,定时设置分,时,的数据缓冲区。状态5是秒表进入状态,状态6是时钟正常显示 状态。在程序中@R1为专用指针,它的值只在状态调整时改变,每次运行图示模块,只改 变一次状态,就跳出程序。调整数据只须改变@R1中的数据即可。 图2 (3)中断方式应注意的问题: 采用中断的方式,最好将定时器中断的优先级设置为最高级,关于程序数据的稳定性 应注意两个问题:一,在低优先级中断响应时,应在入栈保护数据时禁止高优先级的中断响 应。二,在入栈保护有关数据后,对中断程序执行有影响的状态位,寄存器,必须恢复为复 位状态的值。例如,在以下程序中,由于用到了十进制调整,所以在中断进入时,将PSW 中的AC,CY位清零,否则,十进制调整出错。 (4)定时准确性的讨论: 程序中定时器,一直处于运行状态,也就是说定时器是理想运作的,其中断程序每隔0.1 秒执行一次,在理想状态下,定时器定时是没有系统误差的,但由于定时器中断溢出后,定 时器从0开始计数,直到被重新置数,才开始正确定时,这样中断溢出到中断响应到定时器 被重新置数