关于单片机数字钟的论文
可以参考一下
其中一些可能有用。
摘要
本课题给出了一种基于单片机的数字化设计。该设计以单片机为核心控制器,通过频率计数实现计时功能,通过单片机将实时时间输出到显示设备——数码管,通过键盘实现启动、停止、复位、调整时间等功能。
关键词:单片机,数字钟,AT89S52,LED
1简介
在单片机技术日趋成熟的今天,其灵活的硬件电路设计和软件设计使得单片机得到了广泛的应用,几乎从小的电子产品到大的工业控制,单片机都起到了决定性的作用。单片机的小系统结构几乎是所有可编程硬件的一个缩影,可谓“麻雀虽小,五脏俱全”。
现在是一个知识爆炸的新时代。新产品、新技术层出不穷,电子技术发展日新月异。毫不夸张的说,电子技术的应用无处不在,电子技术也在不断的改变着我们的生活,改变着我们的世界。在这个高速发展的时代,时间对人们来说越来越宝贵。在快节奏的生活中,一旦人们遇到重要的事情而忘记了时间,就会带来很大的损失,所以我们需要一个计时系统来提醒这些忙碌的人。然而,随着科技的发展和社会的进步,人们对钟表的要求越来越高,传统的钟表已经不能满足人们的需求。多功能数字钟在性能和款式上都发生了质的变化,如电子闹钟、数字闹钟等。单片机在多功能数字钟中的应用非常普遍,基于单片机的数字钟给人们带来了极大的方便。
现在的高精度计时工具大多采用石英晶体振荡器。因为电子钟、石英表、石英钟都是采用应时技术,所以精度高,稳定性好,使用方便,不需要经常调整。数字电子钟用集成电路计时解码代替机械传动,用LED显示器代替指针显示时间,减少了计时误差。这款手表具有以小时、分钟、秒显示时间的功能,还可以进行时间和分钟的显示。本文介绍的数字钟计时功能的主要内容是由单片机实现的,其中AT89S52是一种利用数码管动态显示“时”、“分”、“秒”的现代计时器件。与传统机械表相比,它具有走时准确、显示直观的特点。其计时周期为24小时,满刻度为“23: 59: 59”。此外,它还具有时间校正、断电后记忆功能、恢复供电时定时同步等特点。
2方案论证
2.1方案一
该数字钟采用FPGA作为主控制器。由于FPGA拥有强大的资源,使用起来方便灵活,易于功能扩展,特别是与EDA相结合,可以达到很高的效率。这种方案虽然逻辑简单一点,但是一个FPGA的价格很高,对于制作一个电子钟来说有点浪费,而且FPGA很难掌握,所以在本次设计中没有过多研究这种方案,也没有采用。
2.2方案二
数字钟是由几个具有不同逻辑功能的CMOS数字集成电路组成的。* * 10数字集成电路,其原理图如图2.1所示。它由三部分组成:第二信号发生器(时基电路)、时分计数器和解码及驱动显示电路。它的基本工作过程是时基电路产生一个周期精确的脉冲信号,1HZ的秒信号通过分频器传输到后面的计数器。最后,计数器和驱动显示单元驱动数码管逐位显示时间。然而,用这种方法设计的电路复杂、不灵活且昂贵,因此不采用这种方案。
图2.1方案二示意图
2.3方案三
AT89S52是一款低功耗、高性能的CMOS 8位微控制器。采用Atmel的高密度非易失性存储器技术制造,完全兼容工业80C51产品的指令和管脚。片内Flash允许程序存储器在系统中可编程,也适用于传统的程序员。AT89S52在单个芯片上集成了智能8位CPU和系统内可编程Flash,为许多嵌入式控制应用系统提供了高度灵活有效的解决方案。它具有串行端口、片上晶体振荡器和时钟电路。另外,AT89S52可降为0Hz静态逻辑运行,支持两种软件选择省电模式。在空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口和中断继续工作。在掉电保护模式下,RAM内容被保存,振荡器被冻结,单片机的所有工作停止,直到下一次中断或硬件复位。
基于AT89S52单片机,实现了系统的控制。外围电路相对简单,成本相对较低。该系统的灵活控制可以很好地满足本课题的基本要求和扩展要求,因此选择了该方案。硬件框图如图2.2所示,原理图见附录图6.1。
图2.2数字钟硬件框图
2.4电路组成和工作原理
本文中数字钟的设计原理主要采用AT89S52单片机。单片机的P0口控制数码管的位显示,P2口控制数码管的段显示,P1口与时间校正键连接。设计中引入220V交流电,经整流滤波后产生+5V电压,用于为单片机和显示电路提供工作电压。
整个系统工作时,秒信号发生器是整个系统的时基信号,直接决定了计时系统的精度。标准秒信号被送到“秒计数器”,秒计数器使用十六进制计数器,每60秒发出一个“分钟脉冲”信号,将作为“分钟计数器”的时钟脉冲。“分钟计数器”也采用十六进制计数器,每隔60分钟发出一次“时间脉冲”信号,该信号将被发送到“时间计数器”。“小时计数器”采用24位十进制计时器,可实现一天24小时的累计。显示电路通过六个七段LED显示器显示“时”、“分”、“秒”计数器的输出。时间校准电路直接增加一个脉冲信号到达计数器、分计数器或秒计数器来校准和调整“时”、“分”、“秒”的显示数字。在本设计中,24小时时钟显示、秒表设计和显示都依赖于单片机中的定时器。定时器T0用来产生1的中断,在中断程序中数字每秒都在变化,字符在主程序中动态显示。其功能框图如图2.3所示。
图2.3非秒表中断的功能示意图
数字钟的电路设计主要功能是提供单片机与外部LED显示、273数据锁存和片选、外部存储器2764的接口电路。此外,还需要设计相关的LED驱动电路。
(1)电路原理和器件选择
与本例相关的关键部件的器件名称及其在数字钟电路中的主要功能:
89S52:单片机,控制LED的数据显示。
Led 1-LED 6:用于显示单片机的数据,其中三个用7段显示时、分、秒的十位数字,另外三个用8段显示时、分、秒的数字。
74LS273: Latch,LED显示扩展电路中的段码和位码使用两片74LS273,上升沿锁存。
74LS02:与非门,与单片机读写信号配合使用,选择外部74LS273,决定LED字段和字的显示内容。
7407:驱动门电路,提供数码管显示的驱动电流。
74LS04:非门,对单片机的片选信号求反,与读写信号一起决定74LS273的片选。
L1-L4: LED,由单片机P1.4-P1.7控制,用于显示秒表和时钟的时间变化。
蜂鸣器:扬声器在程序指定的情况下发出声音,表示时间结束。
74LS373:地址锁存器,将P0口的地址和数据分开,分别输入2764的数据和地址口。
2764:EPROM,为单片机提供外部程序存储区。
开关K0、K1和K2分别调节秒、分和小时。
按键复位:在复位电路中,起到程序复位的作用。
关键脉冲:提供一个单脉冲,从而实现单片机对外部脉冲的计数功能,通过单脉冲实现1的相应位相加。
(2)地址分配和连接
P2.7:与写信号一起构成字位端口的片选信号,字位端口对应的地址位为8000H。
P2.6:与写信号一起构成现场端口的片选信号,现场端口对应的地址位为4000H。
D0-D7:单片机的数据总线,LED显示的内容通过D0-D7数据线从单片机传输到LED。
P2.0 - P2.5:单片机P2端口,连接2764高端地址线,决定2764中存储单元的地址。
P1.4-P1.7:单片机的P1端口接反射二极管L1-L4,由单片机的P1.4-P1.7控制,显示秒表和时钟的时间变化。
(3)功能介绍
在LED显示模块与单片机的连接中,通过单片机的P2.6和P2.7端口完成LED显示模块的读写和字位、场通道的选择。其中,P2.6和P2.7端口的片选信号需要与读写信号进行逻辑运算,以保证字位和字段选择的正确性。
外部存储器2764通过74LS373与单片机连接,通过P2端口的相关信号线分配地址。地址范围是0000h-1ffh。
3每个电路的设计和演示
3.1电源电路设计
在各种电子设备中,DC稳压电源是不可缺少的一部分,它不仅为系统提供多种电压源,而且直接影响系统的技术指标和抗干扰性能。如果要得到+5V的输出电压,需要对220V的交流电压进行二极管全波整流,电容滤波,由7805输出稳定的5V DC电压,为整个电路提供电源。
图3.1电源电路图
四个IN4004组成桥式整流电路,电容(104uf)用于滤波,LM7805将整流滤波后的电压稳定在5V输出。
3.2晶体振荡器
51系列单片机有时钟电路(其核心是反相放大器),但不形成时钟的振荡信号,必须连接谐振器才能形成振荡。如何使用这个内置放大器,可以根据不同的场合做出不同的选择。这对应了单片机时钟产生的不同方式:如果用这个放大器,振荡是内部方式;如果采用外部振荡输入,则为外部模式。
方案一,内部模式
如果在51单片机的XTAL1和XTAL2引脚之间外接一个晶体谐振器,就会产生自激振荡,内部会产生一个与外接晶体频率相同的振荡时钟。
最常见的内部模式振荡图如图3.2所示。
图3.2晶体振荡电路
不同的单片机最高工作频率是不一样的。比如AT89C51的最高工作频率是24MHZ,而at89c 51的最高工作频率可以达到33MHZ。由于制造工艺的提高,现在单片机的工作频率范围向两端延伸,可以达到40MHZ以上。振荡频率越高,单片机运行速度越快,但同时对存储器和印刷电路板的速度要求也越高。过高的频率有时会导致编程困难(如延迟编程)。一般来说,不建议使用频率很高的晶振。51系列单片机应用系统一般选用频率为6 ~ 12 MHz的晶振。
此电路对C1和C2的值没有严格的要求,但电容的大小会影响振荡器的稳定性、振荡器的频率和起振的快速性。一般来说,当晶体外接时,C1和C2的值通常选择为20 ~ 100 pf。
晶体振荡器是数字钟的核心。振荡器的稳定性和频率的准确性决定了数字钟计时的准确性。通常,应时晶体用于形成振荡器电路。一般来说,振荡器的频率越高,定时精度越高。本设计中,信号源提供1HZ秒脉冲,由晶体分频获得。AT89S52单片机有一个反相放大器,用来构成内部振荡器。XTAL1和XTAL2分别是放大器的输入和输出端。应时晶体和陶瓷谐振器都可以用来构成自激振荡器。从外部时钟源驱动器件,XTAL2可以从XTAL1连接而不是被连接。由于外部时钟信号被二分频触发后作为外部时钟电路输入,所以对外部时钟信号的占空比没有其他要求,最长的低电平持续时间和最少的高电平持续时间都要满足要求。反相放大器的输入端为XTAL1,输出端为XTAL2。两端连接一个应时晶体和两个电容,形成稳定的自激振荡器。电容通常约为30PF。振荡频率范围为1.2 ~ 12 MHz。
晶体振荡器的振荡信号从XTAL2引脚输出到片内时钟发生器。时钟发生器是一个二分频器。向CPU提供两相时钟信号P1和P2。每个时钟周期有两个节拍(相位)P1和P2,CPU以两相时钟P1和P2为基本节拍,指挥AT89S52单片机各部分的协调工作。在本设计中,应时晶体的振荡频率为11.0592MHz
另外,在设计电路板时,晶振和电容要尽量靠近单片机芯片,以减少分布电容,进一步保证振荡器的稳定性。
选项2,外部模式
在大型应用系统中,可能会使用多个单片机。为了保证单片机之间时钟信号的同步,需要引入一个唯一的公共外部脉冲信号作为每个单片机的振荡脉冲,即采用外部模式,将外部振荡信号直接引入XTAL1和XTAL2引脚。
由于HMOS和CHMOS的内部时钟输入引脚不同,外部振荡信号的接入方式也不同。所以不要选择这个方案。
3.3定时电路
当数字钟出错时,它需要校正时间。定时控制电路实现了“秒”、“分”、“时”的校准。电路图如图3.3所示:
图3.3定时电路
3.4解码显示电路
解码电路的作用是将“秒”、“分”、“时”各计数器的输出状态(8421码)翻译成七段(或八段)数码管显示十进制数所需的电信号,然后通过数码管显示相应的数字。解码器采用74LS248解码器/驱动器。显示器采用七段* * *阴极数码管。显示部分是整个电子钟最重要的部分,* * *需要6位LED显示屏。采用动态显示方式。所谓动态显示模式,就是时间数字一个一个的显示在led上。它通过位选择终端控制哪个LED显示数字。由于这些LED数码管显示的时间间隔很短,让人看到它们是一起显示时间数字的,动态显示模式使用的接口更少,节省了CPU的管脚。由于端口的问题和动态显示方式的优越性,本设计采用了* * *负连接方式。显示LED有两个端口:段选择和位置选择。首先,段选择由八个LED端口组成。通过向这八个端口输入不同的二进制数据,它的时间显示是不同的,这样我们就可以得到想要的时间显示和温度。但是对于二十引脚的AT89S52来说,八段LED的引脚太多,所以我选择2764芯片来扩展主芯片的引脚,74LS164是数据移位寄存器,74LS373也选作数据缓存。
在选择器件时,要注意解码器和显示器的匹配,包括两个方面:一是功率匹配,即驱动功率要足够大。由于数码管的工作电流较大,应选择驱动电流大的解码器或OC输出解码器。二是逻辑电平匹配。例如,* * *阴极LED数码管采用高级有效解码器。推荐的显示解码器为74LS48、74LS49、CC4511。
3.5显示电路结构和原理
(1)单片机通常有7个LED段组成“8”字结构。另外还有小数点LED显示小数位!有* * *阴* * *阳这种显示!LED的阳极(公* * *端子)称为* * *阳极显示,阴极称为* * *阴极显示。
一位显示器由8个发光二极管组成,其中7个发光二极管构成字体“8”的每个笔画,另一个发光二极管的小数点为。当给LED的某一段施加一定的直流电压时,该段的笔画会变亮;没有电压就是黑暗。为了保护每个LED不被损坏,应该增加一个限流电阻。
在这种设计中,时、分、秒十位数字分七段显示,位数分八段显示,更容易区分时、分、秒。
(2)LED显示界面和显示方式
LED显示器有两种:静态显示模式和动态显示模式。静态显示是指当显示器上显示一个字符时,相应的段不断地打开或关闭,直到显示另一个字符。当LED显示器工作在静态显示模式时,每个位置的阴极接地;如果是* * *阳极,则接+5V电源。每一位的段线选择连接到一个8位锁存器的输出端口,显示中的每一位都是相互独立的,并且每一位的显示字符一旦确定,对应的锁存输出将保持不变。
正因为如此,静态显示的亮度更高。这种显示模式易于编程和管理,但占用I/O线资源较多。因此,在显示位数较多的情况下,一般采用动态显示方式。
由于所有6位段都由一个I/O端口控制,6位led将在任何时候显示相同的字符。如果要为每一位显示不同的字符,必须使用扫描方式点亮每一个LED,即一次只有一位显示字符。此时段选控制I/O口输出对应字符的段选码(字模码),而位选控制I/O口在显示位发送on电平(由于LED为* * *负,应发送低电平)保证该位显示对应字符。这样轮流进行,让每个人分时显示这个位应该显示的字符。
在显示多位LED时,为了简化电路和降低成本,所有段线并联,由一个8位I/O口控制。* * *阴(* * *阳)极和* * *端分别由相应的I/O口线控制,实现分时选通。
段选择码,位选择码每次传输后延时2MS。由于人类视觉暂留效应,似乎每个数码管都是开着的。
图3.4六位LED动态显示电路
3.6键盘部分
它是整个系统中最简单的部分。根据功能要求,本系统需要三个按钮:分别控制时间、分钟和秒钟。并采用独立的键。
钥匙根据结构原理可以分为两种。一类是接触式开关按键,如机械开关、导电橡胶开关等。另一种是无触点开关按钮,如电按钮、磁感应按钮等。前者成本低,后者寿命长。目前,在微机系统中最常见的是接触式开关按钮。
按键按接口原理可分为编码键盘和非编码键盘。这两种键盘的主要区别在于识别键符号和给出相应键码的方法。编码键盘主要用硬件来识别按键,非编码键盘主要用软件来定义和识别键盘。
全编码键盘可以通过硬件逻辑自动提供与按键对应的代码。此外,它一般有一个去抖动和多键和跨键保护电路。这种键盘比较好用,但是需要的硬件比较多,价格也比较贵,所以一般单片机应用系统很少使用。非编码键盘只是提供行和列的矩阵,其他所有工作都由软件完成。因为经济实用,所以广泛应用于单片机系统中。因为这个设计只需要几个功能键,此时可以采用独立键结构。
独立键是由I/O口线直接组成的单键电路。其特点是每个按键独立占用一条I/O口线,每个按键的工作不会影响其他I/O口线的状态。独立键的典型应用如图3.5所示。
单机按键电路配置灵活,软件结构简单,但每个按键必须占用一条I/O端口线。所以键多的时候,I/O口线就浪费了,不应该用。
图3.5独立键结构图
3.7复位电路
复位时,系统中的CPU和其他功能部件处于某种初始状态,复位后计算机将从这种状态开始工作。在复位期间,CPU并没有开始执行程序,而是在做准备工作。
无论电脑刚开机的时候,断电之后,还是系统出现故障的时候,都需要复位。
51单片机的复位条件由外部电路实现。时钟电路工作时,只要微控制器的RESET引脚上有两个以上的TP高电平,微控制器就可以复位。但是太短的时间通常会使复位部分变得不可靠。为了确保复位,RESET引脚上的高电平一般应保持在10 ms以上。
常见的复位电路包括上电复位和按键复位电路。这里我们选择按键复位电路。
(1)上电复位电路
上电复位电路通过电容充电实现。在接通电源的瞬间,复位端的电位与VCC相同,都是+5V。随着RC电路的充电,RESET的电位逐渐下降,只要保证RESET为高的时间大于10 ms就可以正常复位,如图3.6(1)所示。
图3.6(1)上电复位电路
(2)钥匙复位电路
单片机上电时,只需按图3.6(2)中的K键即可复位。此时,VCC由电阻rs和Rk分压,在复位端产生复位高电平。
在图3.6(2)的电路中,干扰很容易进入复位端。虽然在大多数情况下不会造成单片机的错误复位,但可能会造成部分内部寄存器的错误复位。此时,去耦电容器可以连接到复位端。
此外,单片机应用系统中的一些外围芯片也需要复位。如果这些复位端子的复位电平要求与MCU的一致,可以直接连接到它们。RC电路常接施密特电路,再接单片机的复位端。这样,系统可以有多个复位端,从而保证外部芯片和单片机的可靠同步复位。
图3.6(2)钥匙复位电路
4软件设计
4.1程序流程
程序总体设计:计时模块、显示模块、时间调整模块和状态调整模块。
(1)概述:这部分主要介绍计时模块和显示模块。计时部分采用经典定时器计时。它实现了数字钟的主体部分和秒表的主体部分,以及定时设置。显示模块是数字钟的另一个重要组成部分,其独立性直接影响数字钟的可视化。在这部分设计中,设置了专门的显示数据缓冲区,不同于分钟、时间等数据缓冲区中的数据。显示段代码存储在其中,而时间数据存储在其他缓冲区中。显示时,先将时间十进制数据转换成显示段码,然后送到数码管显示。显示段码采用动态扫描方式。当需要改变显示数据的类别时,只需要改变指针指向数据缓冲区的十进制数据缓冲区。
(2)时间调整:调整时间的方法有很多。第一,可以直接进入相关状态进行相关操作。二、调整分两步,先进入状态再进行操作,分别由两个按键控制。第一种方式比较直接,设计思路也比较简单,但是这种方式存在运算时间和控制键数量的矛盾。如果用的键比较少,进入状态后可能会处于数据调整的等待状态,影响显示器的扫描速度(显示部分可以用8279芯片控制,可以解决这个问题)。当然,通过这种方式,你也可以使用多个状态键,每个状态键可以完成一个相应的数据调整。如果采用第二种方法,就不会出现这种情况。由于状态的调整和状态的操作可以分别由两个按键控制,所以状态调整的次数可以多达256次(理论上)。操作的完成是这样的:一键控制状态的调整,一键控制数据的调整。以上两种方式可以通过查询和中断来实现。两种方法必须注意的问题是,它们之间相关操作的过程不能太长,否则会影响显示扫描。询问方式比较传统,就不多讨论了。以下是对中断实现数字钟的一些讨论,以及对相关问题的一些处理。基于以上讨论,可以这样设计:调整分为状态调整和数据调整两部分,每次进入中断只进行一次操作,然后返回,这样就不需要让中断保持等待调整的状态,可以使中断耗时非常小。如果定时器中断的优先级设置为最高级别,中断模式将不会影响时钟计数以及查询模式。
(3)中断模式下应注意的问题:
在中断方式中,最好将定时器中断的优先级设置为最高级别。关于程序数据的稳定性,要注意两个问题:一是在响应低优先级中断时,将数据放入堆栈保护时,要禁止高优先级中断响应。2.将相关数据放入堆栈后,对中断程序的执行有影响的状态位和寄存器必须恢复到复位状态的值。例如,使用十进制调整时,当中断进入时,PSW中的AC和CY位需要清零,否则十进制调整是错误的。
(4)关于计时准确度的讨论:
程序中的定时器是一直在运行的,也就是说定时器是在理想状态下运行的,它的中断程序每隔0.1秒执行一次。在理想状态下,定时器定时没有系统误差。然而,定时器中断溢出后,定时器从0开始计数,直到复位,因此定时器定时误差是由从中断溢出到定时器复位的中断响应所消耗的时间引起的。如果在中断程序开始时定时器没有关闭的情况下设置定时器,误差最小,大约是每0.1秒7-12个机器周期。当然,这是计时器计时刚好为0.1秒的情况。从上面的分析来看,如果数字钟设计为查询或者在中断模式下定时器中断设置为最高级别,我们在设置定时值时可以适当扣除9个机器周期的时间值。但如果在中断的情况下定时器中断没有设置到最高级别,就需要根据中断程序的大小在设置定时值时扣除相应的时间值。
(5)软件消振:
抖动可以通过硬件(施密特触发器)实现,如图4.4所示,也可以通过软件实现。这里只讨论软件模式。软件抖动消除包括定时器定时和使用延时子程序。一、定时器定时抖动消除不能影响显示模块的扫描速度,其实现方法是:设置标志位,在定时器中断中设置,然后在程序中查询。将其中断优先级设置为低于时钟定时中断,则它根本不会影响时钟定时。第二,使用延时子程序时,如果显示模块的扫描速度不是很快,可能会影响此时的显示效果。正常情况下,每秒扫描次数不应少于50次,否则数字显示会闪烁。因此,延迟子程序的延迟时间应小于20毫秒。如果使用计时器,延迟时间不会影响时钟。
如果设计采用中断的方式来完成相关操作,也可以采用软件的方式来消除抖动。处理思路是中断不能连续执行,两次之间有一定的时间间隔。
4.1.1系统主程序流程图
图4.1主程序流程图
4.1.2各子程序流程图
图4.2时钟调整子程序流程图希望对你有帮助。