数字时钟参考资料.docx

上传人:b****2 文档编号:630704 上传时间:2022-10-11 格式:DOCX 页数:34 大小:823.44KB
下载 相关 举报
数字时钟参考资料.docx_第1页
第1页 / 共34页
数字时钟参考资料.docx_第2页
第2页 / 共34页
数字时钟参考资料.docx_第3页
第3页 / 共34页
数字时钟参考资料.docx_第4页
第4页 / 共34页
数字时钟参考资料.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

数字时钟参考资料.docx

《数字时钟参考资料.docx》由会员分享,可在线阅读,更多相关《数字时钟参考资料.docx(34页珍藏版)》请在冰豆网上搜索。

数字时钟参考资料.docx

数字时钟参考资料

单片机引脚图和结果框图如下图1和图2所示:

图1AT89C51引脚图

图2内部结构图

3、硬件模块设计

3.1系统硬件框图

蜂鸣器

8位数码管

振荡器

复位电路

80C51CPU

闹钟设置

及开关控制

外部中断对

时/设置闹钟

电源

其核心部件是89C51单片机,由89C51单片机内部定时器及循环延时确定时间,并且通过扫描驱动8位数码管来显示计数器时间,还可以通过外部中断校对时间和设置闹钟,并且检测闹钟开关,如果闹钟时间到,则驱动蜂鸣器。

3.2数据流图

4、硬件电路设计

4.1晶体振荡器电路

晶体振荡器电路给数字钟提供一个频率稳定准确的12MHz的方波信号,可保证数字钟的走时准确及稳定.不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。

给单片机提供时钟的电路图有如下两种:

由于我本次设计主要是针对数字钟的设计,并且外部时钟源不好加到电路中,精度又不是特别高,所以我选用内部时钟方式。

4.2蜂鸣器驱动电路

为了能在设置的闹钟时间很方便的提示我们,需要通过蜂鸣器的报警来提醒,由于单片机输出的方波驱动能力太弱,要使蜂鸣器发出的声音更亮些,需要加上驱动电路。

驱动电路我采用PNP管9012,具体电路图如下所示:

4.3复位电路设计

复位电路分两种方式,分别是上电自动复位和按键手动复位。

上电自动复位电路是在加电瞬间电容通过充电来实现的,其电路图如下所示。

在通电瞬间,电容C通过电阻R充电,RST端出现正脉冲,用以复位。

只要电源VCC的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就完成了系统的复位初始化。

手动复位是指通过一按钮开关,使单片机进入复位状态。

系统上电运行后,若需要复位,一般是通过手动复位来实现的。

通常采用手动复位和上电自动复位组合,其电路如下图所示。

a.上电复位b.按键电平复位

由于设计的数字钟无需上电复位,所以采用按键电平复位,如上b图所示。

4.4位选及数码管驱动电路

为了让数码管的显示更清晰,我选用74HC573锁存器来驱动数码管。

由于8位数码管的显示是经过一位一位显示的,当它的扫描频率在50Hz~100Hz之间时,我们就不会看出它的位显示,并且显示的亮度正好合适,数码管的位选我通过3-8译码器74HC138,具体连接关系如下图所示:

锁存驱动

位选

4.5单片机最小系统

单片机的最小系统由4部分构成,分别是:

单片机、振荡电路、复位电路、RAM和ROM。

具体组成如下所示:

单片机最小系统图

4.6电源电路

单片机正常工作是+5V电压,本次设计不做电源部分,采用USB供电,由于USB供电较为稳定,所以不需要稳压部分,直接给单片机供电,这样就减少了7805稳压模快。

具体电路如下所示:

USB供电

5、PCB板的制作

本次设计的数字钟系统中由于频率不是特别高,所以在设计PCB板时不存在考虑走线之间频率干扰问题,但由于设计规定了PCB板的大小为7*9cM,并且是单面板,所以对我们的设计带来了一定的难度,在设计中不得不通过走飞线的方式完成PCB板的制作。

5.1PCB板的制作规则

我在数字钟设计中采用Orcad软件平台,完成了PCB的制作,在PCB的设计中需注意以下的一些规则:

(1)在Orcad中制作PCB时一定要注意板层的设置,我们本次设计的是单面板,所以需将Bottom层设为走线层,TOP层设为丝印层(DOC层),别的板层全部设为不走线层。

(2)由于本次设计的单面板大小规定为7*9Cm,所以在开始制定板框大小时,在Global层画边框时,将其设置为规定的大小,然后根据一定的规则放置元件,放置元件时应让元件间的走线距离最小。

(3)放置元件时须注意一些规则,例如将单片机的晶振和电容靠近单片机放置,将电源供电的USB接口靠近板框放置等。

(4)在放置完元件之后,进行布线时需注意一些走线时的设置,最重要的是元件过孔的孔径设置,为了制作方便,本次制作设为0.6mm、0.8mm、1.2mm,当然,设置了孔径,还需注意焊盘的大小,软件默认的焊盘大小一般太小,焊接时不太方便;其次是走线的安全间距设置,走线间距一般默认为软件的设置,即0.3mm;下来就是走线的一些规则设置,如果是自动布线,则可设置布线时的一些规则,如果是手工布线,则可根据需要进行布线。

(5)在走线时一定要注意电源走线的设置,电源的走线一定要宽,这样承载的电流会更大,电流的大小与走线的宽度之间有一定的计算公式,可以作参考。

为了使单面板的布线方便,飞线更少,我们将地线设为敷铜种子,在敷铜时与大面积的铜相接。

5.2飞线的处理

由于制作的是单面板,难免有很多的飞线,在制作完PCB板之后,需处理飞线。

经常选取的办法是打过孔,这样在加工之后可以采用飞线将其连接。

当然,飞线的多少取决于布线的水平高低。

有时为了减少飞线而走很远的路,这样带来高频的影响,我觉得这种方法应该避免。

5.3PCB制作中的注意事项

(1)要注意焊盘的大小、过孔的大小、走线的安全间距及走线的宽带,在适当的时候应该用游标卡尺进行测量,保证元器件能够合适的插进去。

(2)对于一些自己制作的原件封装,一定要测量使之合理。

(3)电源走线一定要宽,实际上是越宽越好,但过宽会影响布线的效率。

适当的时候我们可以大概的计算一下,使之更加合理。

(4)在布线时我们一定要弄清楚板层,有时一个放错了板层的字符,会带来制作时的困难,要想合理的完成制作,必须清楚板层。

(5)首次在PCB板上放置USB接口,一定要注意正负极不能接反。

(6)如果有必要,可以在每个芯片的VCC极和GND极之间跨接一个0.01~0.1uF之间的瓷片电容。

为了使电源电压稳定,可以在电源电压与地之间接一个滤波电容,如果电源电压波动较大,则可以使用稳压芯片来稳压。

(7)在敷完铜之后,需要观察敷铜区域,避免有些接地的敷铜区域形成孤岛。

如果存在孤岛,则需要与最近敷铜区连接起来,经常采用打过孔走飞线的方式使其连接起来。

(8)在放置元件时,由于设置了安全间距,元件放置较近时会出现报错提示,但这对PCB板的制作是没影响的。

6、软件模块的设计

本次设计单片机数字钟,供可选择的语言有汇编语言和C语言两种选择,从总体角度考虑,两种语言各有其优缺点。

汇编语言在编写过程中可以较容易的计算出机器周期,这样可以计算出相应的延时与误差,并且在编译过程中精度较高,执行效率也较高,是各种语言中执行效率最高的一种。

相反,汇编语言又是一种较为低级的语言,编写起来难度较大,程序量也较大,不易编写大规模的系统。

C语言它的灵活性较强,语法功能也比较强大,对于同一个设计,与汇编语言相比,工作量较小,完全可以实现汇编无法实现的一些功能。

虽然C语言具有强大的功能,但也有不足之处,比如在循环延时时不易计算出相应的机器周期,还有,采用不同的编译器,可能以不同的方式编译出不同的机器码。

由于本次设计的单片机数字钟编程量较大,又考虑到后面的工作过程中将大量使用C语言编程,所以本次编写过程采用C语言,基于KielC3软件来完成软件模块的设计工作。

6.1数字钟总体设计框图

编程设计数字钟大家可能最常用的就是采用单片机中的定时器定时的方法,由于定时器不能一次定时1s,所以需采用定时一定的时间,循环叠加的方法,加到一秒后,将其显示的秒加一,然后判断分和时是否加一,这样就完成了数字钟的最基本制作。

我在此次设计中采用的方法完全不同于上面的常规方法,主要是受到了EDA中并行的影响,当然,单片机中是不可能实现并行的,但我们可以用串行的方式模拟并行,实现数码管的扫描及采用延时粗略计算出1s的延时,这样很多人可能认为不准确,但我们可以分好多的延时,这样在校时时不会出现改一个数字出现大的变化的情况。

程序设计框图如下:

6.2源程序

源程序见附件Ⅰ。

7、设计中的问题分析与解决

由于这是我第一次系统地进行设计,难免会遇到很多的问题。

当然,作为我们初学者来说,遇到问题越多收获也就也多,这就要看我们解决问题能力及方案了。

下面是我在这次设计中所遇到的一些问题总结。

(1)由于此次设计数字钟,主要是由软件来完成的,所以硬件中的问题相对来说较少。

当我们将PCB板设计完之后,焊接上元件之后,如果出现不正常工作的情况,我们可以确定是硬件问题。

解决方案:

①检查单片机是否正常工作,我们可以使用示波器进行观察单片机ALE(第30引脚)的输出波形,如果输出波形的频率是晶振频率的6分频,则证明单片机是正常工作的。

②如果单片机第31引脚没有输出波形,首先应检查晶振的好坏,我们可以更换晶振看其是否能正常工作。

③如果还不正常工作,说明是硬件电路的设计有问题,首先我们应该检查的是所有芯片的电源是否正常。

(2)我们采用C语言,利用单片机中的优点中断和定时器,完成数字钟其实很容易实现,但要完成精度相当高的数字钟设计,加上实现校时和闹钟功能之后,我们会遇到很多的问题。

首先是怎么避免由按键造成的延时误差,我们总结的方案有4种,分别是:

①计算出按键延时的具体时间,按键一次则给定时器加上相应的按键延时时间,这样虽然可以大大的减小按键延时带来的时间误差,但还是有一定量的机器周期的延时。

例如使用这种方法又需在定时器中添加一些判断语句,当符合条件时,将会增加一定的机器周期。

②通过采用设置优先级的方式可以清除按键防抖延时,在主程序中我们需要将定时器的中断优先级设为最高,别的中断优先级设为低,这样我们在按键中断时,如果定时器还未中断,则响应外部中断,这样对定时器的定时没有影响;如果在响应外部中断的时候,有定时中断,则优先响应定时中断,这样又对定时器的定时没有影响;如果在响应定时中断时,则别的中断不会影响到定时器的正常定时。

(3)在设定闹钟时间时,我们要确保定时器的正常工作,如何既要让数码管显示闹钟设置的相应时间,并且定时器的正常计数不能受到影响,我们应该如何解决这个矛盾呢?

解决方案:

为了使编程更加方便,我们专门设置了一个启动设置闹钟的开关,当开关设为高电平时,则为闹钟设置,首先数码管上全部显示零,即清零。

然后按相应的校时按钮,则数码管显示被设置的相应时间,在设置闹钟的这期间,是如何确保相应时间的准确性呢?

我是这样解决的,当启动设置闹钟开关之后,在程序中同时启动另一个定时器开始定时工作,当定到50ms时,发生中断,相应的变量加一,这样我们就可以计算出在设置闹钟时所花费的时间。

当设置闹钟开关置到相应的低电平时,说明设置闹钟结束,在这同时,我们将变量所记的数与50ms相乘,计算出与之对应的秒数,加到闹钟设置之前保存到静态变量中的数上。

这种方法有一定的缺陷,会造成一定的延时,经过软件处理,延时将在0~0.5s之间随机产生。

(4)在测量数字钟精度时,我们发现了一个问题,在数字钟正常工作时,会出现秒与秒之间不相等的情况,比如在10分钟之内我们与标准时间进行比较会发现,有时发现时间走的快,有时时间走的慢。

解决方案:

后面在程序中发现,原因是由于程序中的if判断语句,在判断过程中当满足条件时,会执行更多的语句,这样会有相应的机器周期的延时,所以会出现时间一会走的快一会走的慢的情况。

这种情况只有通过减少if语句,怎么减少if语句呢?

我们可以充分利用单片机的自身条件,充分利用单片机中的定时器,定时器不够用时我们可以选用89c52系列。

8、设计总结与心得

单片机数字钟可以说是一个较小的系统,开始时我们觉得通过C语言较容易实现,确实,只实现一个能够正常走时并且能够校时的数字钟是比较容易的。

但我们想错了,毕竟是第一次从总体角度来考虑地完成一个小系统,好多的实际性的问题我们没有考虑,所以造成我们最终设计的数字钟精度不高,并且存在好多问题,当然问题多了对我们来说是好事,这样我们在解决更多问题时学会更多

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1