资源描述
智能数字钟论文
智能数字钟论文
1 引言
近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
计算机尤其是以微细加工技术支持的微型计算机技术飞速发展,其应用渗透到了各行各业。以单片机、嵌入式处理器、数字信号处理器(DSP)为核心的计算机系统,以其软硬件可裁剪、高度的实时性、高度的可靠性、功能齐全、低功耗、适应面广等诸多优点而得到极为广泛的应用。目前计算机硬件技术向巨型化、微型化和单片机化三个方向告诉发展。自1975年美国德州仪器公司(Texas Instruments)第一块微型计算机芯片TMS-1000问世以来,在短短的20年间,单片机技术已发展成为计算机领域一个非常有前途的分之,它有自己的技术特征、规范和应用领域。单片机是自动控制系统的核心部件,主要用于工业控制、智能化仪器仪表、家用电器中。它具有体积小、性能突出可靠性高(某些方面的性能指标大大优于通用微机中央处理器)、价格低廉等一系列优点,应用领域不断扩大,除了工业控制、智能化仪表、通信、家用电器外,在智能化高档电子玩具产品中也大量采用单片机芯片作为核心控制部件,已经渗入到人们工作和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,前景广阔。数字钟具备单片机最小系统的基本组成,对于我们了解单片机有很大的帮助。
2 设计的目的及设计要求
2.1 设计目的
数字钟是采用数字电路实现对时、分、秒进行数字显示的计时装置, 它是以不同的计数器为基本单元构成的,用途十分广泛,只要有计时、计数的存在,便要用到数字钟的原理及结构;同时在日常生活中,它以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费者的喜爱。广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度运用超过老式钟表。钟表的数字化给人们生产生活带来了极大的方便而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。
2.2 设计内容
课题将从硬件设计完成单片机控制的基础上编写软件,来实现单片机控制数码管动态显示时钟,年月日,闹钟定时等。
3-8译码器
单片机AT89C52
按键控制
数码管位选
数码管显示
图2.1 系统的构架图
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。标准的频率时间信号必须做到准确稳定,通常使用石英晶体振荡电路构成数字钟。本次课程设计的内容是设计一个多功能的数字钟,要综合实现计数,定时闹钟,时钟和年月日显示等功能,在硬件设计上本数字钟主要由键盘电路、译码位选电路、显示电路等组成,如图2.1所示主要元器件有AT89C52、数码管、晶体振荡器、蜂鸣器、按键、74HC138、24C02C等。
2.3 系统功能
数字电子钟由振荡器、分频器 计数器、译码显示、报时等电路组成。其中振荡器和分频器组成标准秒信号发生器,由不同进制的计数器、译码器和显示器组成计时系统。秒信号送入计数器进行计数,把累加的结果以‘时,、‘分,、‘秒’的数字显示出来。‘时’显示由24进制计数器、译码器、显示器构成,‘分’、‘秒’显示分别由60进制计数器、译码器、显示器构成。可进行整点报时,计时出现误差时,可以用校时电路校时、校分;年月日的显示,闹钟设置等。
3 系统的硬件设计
为使多功能数字钟具有较好的实用性,并且具有较高的性能/价格比,尽可能简化系统。按实现的功能来分,可分为以下几个部分。其中,AT89C52单片机是整个电路的核心,它控制其他模块来完成各种复杂的操作。系统构成主要包括按键与单片机接口、译码电路部分、数码管动态显示部分等。译码芯片采用的是74HC138译码芯片,用来对数码管位选。单片机多功能数字钟的硬件总电路图3.1所示。
图3.1 系统的硬件总电路图
单片机查询是否有按键,并对其进行译码,译码后控制数码管位选再由中央处理单元采集处理并显示;为了方便用户使用,系统设计了语音正点报时,闹钟报时。为了符合智能化要求,系统采用AT89C52作为中央处理器。
3.1 中央控制器——AT89C52
52是51的强型,C52比C51,定时器多一个T2(功能很强大),RAM多128B,ROM多4K,中断多2个,多一个看门狗,在掉电、数据指针等方面还有一些改进。C52的最高外接晶振可以达到33MHz,C51大概只有24MHz。
AT89C52是美国Atmel公司生产的低电压、高性能CMOS 8位单片机,片内含8KB的可反复檫写的程序存储器和12B的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内配置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C52单片机可灵活应用于各种控制领域。AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的80C52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。其主要工作特性是:
片内程序存储器内含8KB的Flash程序存储器,可擦写寿命为1000次;
片内数据存储器内含256字节的RAM;
具有32根可编程I/O口线;
具有3个可编程定时器;
中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;
串行口是具有一个全双工的可编程串行通信口;
具有一个数据指针DPTR;
低功耗工作模式有空闲模式和掉电模式;
具有可编程的3级程序锁定位;
AT89C52工作电源电压为5(1+0.2)V,且典型值为5V;
AT89C52最高工作频率为24MHz。
单片机正常工作时,都需要有一个时钟电路和一个复位电路。本设计中选择了内部时钟方式和上电复位电路,来构成单片机的最小电路。如图3-1所示。
3.1.1 功能特性描述
AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89C52具有以下标准功能:
8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89C52可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器8K 字节在系统可编程。AT89C52各引脚功能及管脚电压。
图3.2 AT89C52管脚图
AT89C52为40 脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端,如图3.2所示。
P0~P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(38~39 脚)被定义为24C02C存储器功能控制端口,P1端口用于连接按键控制,P2端口用于连接控制数码管段选,P3端口用于连接3-8译码器,控制数码管的位选。
P0 口:P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口。
P1 口:P1 是一个带内部上拉电阻的8 位双向I/O 口, 对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
与AT89C51不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),如表3.1所示。Flash 编程和程序校验期间,P1 接收低8 位地址。
表3.1 P1.0和P1.1的第二功能
引脚号
功能特性
P1.0
T2(定时/计数器2外部计数脉冲输入)时钟输出
P1.1
T2EX(定时/计数2捕获/重装载触发和方向控制)
P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX @DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX @RI 指令)时,P2 口输出P2 锁存器的内容。Flash 编程或校验时,P2亦接收高位地址和一些控制信号。
P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能,如表3.2所示。P3 口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。
表3.2 P3口第二功能
RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG: 当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8 位字节。一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。
对Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条
MOVX 和MOVC指令才能将ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。
PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP:外部访问允许。欲使CPU 仅访问外部程序存储器(0000H—FFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU 则执行内部程序存储器中的指令。
Flash 存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V 编程电压Vpp。
XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:振荡器反相放大器的输出端。
3.1.2 数据存储器
AT89C52有256个字节的内部RAM,80H-FFH 高182 个字节与特殊功能寄存器(SFR)地址是重叠的,也就是高128字节的RAM 和特殊功能寄存器的地址是相同的,但物理上它们是分开的。当一条指令访问7FH 以上的内部地址单元时,指令中使用的寻址方式是不同的,也即寻址方式决定是访问高128 字节RAM 还是访问特殊功能寄存器。如果指令是直接寻址方式则为访问特殊功能寄存器。
例如,下面的直接寻址指令访问特殊功能寄存器0A0H(即P2 口)地址单元。
MOV 0A0H,#data
间接寻址指令访问高128 字节RAM,例如,下面的间接寻址指令中,R0 的内容为0A0H,则访问数据字节地址为0A0H,而不是P2 口(0A0H)。
MOV @R0,#data
堆栈操作也是间接寻址方式,所以,高128 位数据RAM 亦可作为堆栈区使用。
定时器0和定时器1:AT89C52的定时器0和定时器1 的工作方式AT89C51相同。
定时器2:定时器2 是一个16 位定时/计数器。它既可当定时器使用,也可作为外部事件计数器使用,其工作方式由特殊功能寄存器T2CON的C/T2 位选择。定时器2 有三种工作方式:捕获方式,自动重装载(向上或向下计数)方式和波特率发生器方式,工作方式由T2CON 的控制位来选择。
定时器2 由两个8 位寄存器TH2 和TL2 组成,在定时器工作方式中,每个机器周期TL2 寄存器的值加1,由于一个机器周期由12 个振荡时钟构成,因此,计数速率为振荡频率的1/12。
在计数工作方式时,当T2 引脚上外部输入信号产生由1 至0 的下降沿时,寄存器的值加1,在这种工作方式下,每个机器周期的5SP2 期间,对外部输入进行采样。若在第一个机器周期中采到的值为1,而在下一个机器周期中采到的值为0,则在紧跟着的下一个周期的S3P1 期间寄存器加1。由于识别1 至0 的跳变需要2 个机器周期(24 个振荡周期),因此,最高计数速率为振荡频率的1/24。为确保采样的正确性,要求输入的电平在变化前至少保持一个完整周期的时间,以保证输入信号至少被采样一次。
可编程时钟输出:
定时器2 可通过编程从P1.0 输出一个占空比为50%的时钟信号,P1.0 引脚除了是一个标准的I/O 口外,还可以通过编程使其作为定时/计数器2 的外部时钟输入和输出占空比50%的时钟脉冲。当时钟振荡频率为16MHz 时,输出时钟频率范围为61Hz—4MHz。
当设置定时/计数器2 为时钟发生器时,C/T2(T2CON .1)=0,T2OE (T2MOD.1) =1,必须由TR2(T2CON.2)启动或停止定时器。
中断:
AT89C52 共有6 个中断向量:两个外中断(INT0 和INT1),3 个定时器中断(定时器0、1、2)和串行口中断。这些中断源可通过分别设置专用寄存器IE 的置位或清0来控制每一个中断的允许或禁止。IE也有一个总禁止位EA,它能控制所有中断的允许或禁止。定时器2的中断是由T2CON中的TF2和EXF2逻辑或产生的,当转向中断服务程序时,这些标志位不能被硬件清除,事实上,服务程序需确定是TF2或EXF2产生中断,而由软件清除中断标志位。定时器0和定时器1的标志位TF0和TF1在定时器溢出那个机器周期的S5P2 状态置位,而会在下一个机器周期才查询到该中断标志。然而,定时器2的标志位TF2在定时器溢出的那个机器周期的S2P2状态置位,并在同一个机器周期内查询到该标志。
3.2 动态数码管显示
数码用来指示电器的工作状态,其实数码管显示的数码均是由七个发光二极管构成的。每段上加上合适的电压,该段就点亮。为方便连接,数码管分为共阳型和共阴型,共阴极型就是七个发光管的负极都连在一起。本设计选用6位共阴数码管显示,如图3.3所示。
3.2.1 数码管显示
发光二极管LED是一种通电后能发光的半导体器件,其导电性质与普通二极管类似。LED数码显示器就是由发光二极管组合而成的1种新型显示器件。在单片机系统中应用非常普遍。LED数码显示器是1种由LED发光二极管组合显示字符的显示器件。它使用了8个LED发光二极管,其中7个用于显示字符,1个用于显示小数点。LED数码显示器有两种连接方法:
(1) 共阳极接法。把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。当阴极端输入低电平时,段发光二极管就导通点亮,而输入高电平时则不点亮。
(2)共阴极接法。把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地。每个发光二极管的阳极通过电阻与输入端相连。当阳极端输入高电平时,段发光二极管就导通点亮,而输入低电平时则不点亮。
图3.3 6位共阴极数码管
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89C52单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。电路如图3.4所示。
图3.4 显示模块电路
3.2.2 数码管片选74HC138
如图3.5所示,第1~3脚A、B、C,二进制输入脚。第4~6脚片选信号控制,只有在4、5脚为“0”6脚为“1”时,才会被选通,输出受A、B、C信号控制。其它任何组合方式将不被选通,且Y0~Y7输出全为“1”。第8脚GND,电源地。第16脚VCC,电源正极通过控制选通脚来级联,使之扩展到十六位。数码管位选如表3.3所示。
图3.5 74HC138管脚图
表3.3 数码管位选
C B A
数码管位
0 0 0
1
0 0 1
2
0 1 0
3
0 1 1
4
1 0 0
5
1 0 1
6
3.3 蜂鸣器
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器的电路图形符号:蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。
3.3.1 蜂鸣器的结构原理
(1)压电式蜂鸣器 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。
多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
压电蜂鸣片由锆钛酸铅或铌镁酸。在陶瓷片铅压电陶瓷材料制成的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。
(2)电磁式蜂鸣器 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
3.3.2 有源蜂鸣器和无源蜂鸣器
现在市场上出售的一种小型蜂鸣器因其体积小(直径只有llmm)、重量轻、价格低、结构牢靠,而广泛地应用在各种需要发声的电器设备、电子制作和单片机等电路中。
蜂鸣器可分为有源和无源两种:
有源蜂鸣器,高度为9mm,而无源蜂鸣器b的高度为8mm。如将两种蜂鸣器的引脚郡朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。
迸一步判断有源蜂鸣器和无源蜂鸣器,还可以用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器 "+"引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器。
有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。
3.4 电路24C02C
电擦写式只读存储器24C02C,如图3.6所示。
E1、E2、E3芯片地址输入引脚,大部分应用中,片选地址输入引脚E0、 E1 和 E2 直接连到逻辑‘0’或逻辑‘1’。对于这些引脚由微控制器或其他的可编程器件控制的应用,片选地址输入引脚必须在器件能够继续正常工作之前驱动为逻辑‘0’或逻辑‘1’。
图3.6 24C02C管脚图
串行数据(SDA)引脚,串行数据引脚为双向引脚,用于把地址和数据输入/ 输出器件。该引脚为漏极开路。因此,SDA总线要求在该引脚与VCC 之间接入上拉电阻(通常频率为100 kHz时该电阻阻值为10 kΩ,频率为400 kHz 和1 MHz时,阻值为2 kΩ )。对于正常的数据传输,只允许在SCL为低电平期间改变SDA 电平。而SDA 电平在SCL 高电平期间若发生变化,表明起始和停止条件产生。
串行时钟(SCL),该输入引脚用于数据传输同步。
3.5 键盘连接
图3.7 键盘接口电路
4 系统软件设计
4.1 系统流程设计
本系统的软件设计主要分为系统初始化、时钟计数、以及译码位选、动态数码管显示的过程。每个功能模块对于整体设计都是非常重要的,单片机AT89C52通过软件编程才能使系统真正的运行起来。系统流程图如图4.1所示。
总体介绍:此部分主要介绍定时模块,和显示模块。定时部分采用经典的定时器定时。它实现了数字钟的主要部分,和秒表的主要部分,以及产生报时信号,定时设置。显示模块是实现数字钟的又一重要部分,其模块的的独立程度直接影响到数字钟的可视化程度。在此部分的设计中,设置专用显示数据缓冲区40h--46h,与分,时及其他数据缓冲区数据区别,在其中存放的是显示段码,而其他缓冲区存放的是时间数据。在显示时,首先将时间十进制数据转化为显示段码,然后送往数码管显示。显示段码采用动态扫描的方式。在要求改变显示数据的类别时,只须改变@R0(指向数据缓冲区的指针)指向的十进制数据缓冲区即可。
N
Y
上电
初始化
是否S1?
N
S5
设置模式下,数码管组闪烁切换
时间、年月日、闹钟星期显示模式切换
设置S2(+),S6(-)
是否有键按下?
Y
图4.1 主程序流程图
4.2 定时模块控制
程序中定时器,一直处于运行状态,也就是说定时器是理想运作的,其中断程序每隔0.1秒执行一次,在理想状态下,定时器定时是没有系统误差的,但由于定时器中断溢出后,定时器从0开始计数,直到被重新置数,才开始正确定时,这样中断溢出到中断响应到定时器被重新置数,其间消耗的时间就造成了定时器定时的误差。如果在前述定时器不关的情况下,在中断程序的一开始就给定时器置数,此时误差最小,误差大约为:每0.1秒,误差7—12个机器周期。当然这是在定时器定时刚好为0.1秒时的情况,由以上分析,如果数字钟设计为查询的方式或是在中断的方式下将定时器中断设置为最高级,我们在定时值设置时,可以适当的扣除9个机器周期的时间值。但如果在中断的情况下,没有将定时器中断设置为最高级,那就要视中断程序的大小,在定时值设置时,扣除相应的时间值。时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器及时个位和
N
N
中断入口
定时器置初值
时间计数单元加一
计数值等于10?
计数值单元清零
秒值加一
秒值等于60?
秒值清零
分值加一
分值等于60?
分值清零
时值加一
时值等于24?
时值清零
N
Y
N
Y
Y
Y
Y
Y
图4.2 定时模块流程图
时十位计数器电路构成,其中秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为24进制计数器,如图4.2所示。
开 始
各缓冲区初始化
对定时器,中断的设置
开始计时
显示缓冲单元首置送R0,扫描初值送R2.
取显示单元值,转为端显码送段数据口
扫描值送位数据口P3
让调整位DP点亮
延时一小段时间
显示单元地址加一,扫描值右移一位
显示状态是否切换查询
6位显示完?
取断码送到显示缓冲区单元
N
Y
图4.3 显示模块流程图
4.3 显示模块控制
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留
现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,采用动态显示驱动。由P3口通过74HC138译码器实现6位数码管的位选,流程图如图4.3所示。
5 调试
在调试过程中,我遇到了一个问题,上电过后,没有反应,测得各个地方的电压都正常,本以为是数码管的问题,进过反复检查,原来是单片机的复位电路没有接好,本设计采用上电复位电路,终于调试成功。
结 论
本文介绍了用单片机AT89C52实现数字钟,显示时间、年月日、闹钟设置、星期。本文采用分块的模式,对整个系统的硬件和软件设计进行分析,分别给出了系统总体框图、显示电路、按键接口电路、系统操作流程图、软件的计时模块和显示模块流程图,并给出了系统的软件实现过程,以实现其可靠稳定工作。该系统的运用,钟表的数字化给人们生产生活带来了极大的方便而且大大地扩展了钟表原先的报时功能。但由于本文是采用模块化来叙述的,各模块表述比较简明、方便,而在表示整个复杂的软件系统时,很难有条有理的表达清楚。因此,在完善性,连续性方面还有待进一步研究。
经过这次毕业设计,我觉得自己学到了不少东西。学会了怎样查阅资料和利用工具书。当在设计过程中需要用一些不曾学过的东西时,就要去有针对性地查找资料,然后加以吸收利用,以提高自己的应用能力,而且还能增长自己见识,补充最新的专业知识。
致 谢
本文是在徐教授的悉心指导下完成的,在这里,我要感谢我的导师徐老师,她给了我许多的帮助。此外,我还要感谢电信学院各位老师四年来对我的培养,感谢毕业设计过程中所有给我真诚帮助的老师和同学。
参 考 文 献
[1] 王 伟 Verilog HDL程序设计与应用 人民邮电出版社 2004
[2] 任艳颖 王彬 IC设计基础 西安电子科技大学出版 2005
[3] 常晓明 李媛媛 Verilog HDL 工程实践入门 北京航空航天大学出版社 2006
[4] 康华光 电子技术基础 高等教育出版社 2003
[5] 陆坤主 电子设计技术电子科技大学出版社 2005
[6] 孙涵芳 MCS51/96系列单片机原理及应用 北京航空航天大学出版社 2006
[7] 赵 晶 电路设计与制版Protel99高级应用 人民邮电出版社 2001
[8] 康华光 何立民 单片机应用系统设计 北京航空航天大学出版社 2002
[9] 谢自美 电子线路设计 华中理工大学出版社 2006
[10] 丁元杰 单片微机原理及应用 机械工业出版社 2001
[11] 李华主 MCS51系列单片机实用接口技术 北京航空航天大学出版社 2002
[12] 王建校 51系列单片机及C51程序设计 科学出版社 2006
[13] 胡辉等 跟我学单片机 北京航空航天大学出版社 2003
[14] 彭介华 电子技术课程设计指导 高等教育出版社 2004
[15] 薛钧义 张彦斌 MCS-51/96系列单片微型计算机及其应用 西安交通大学出
版社 1997年第2版
[16] 王福瑞 单片微机测控系统设计大全 北京航空航天大学出版社 1998
附 录A
汇编程序代码
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;多功能数字闹钟
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;功能要求
;1、计时
;2、3种显示模式
; 时间显示模式
; 日期显示模式
; 闹钟星期显示模式
;3、9种设置状态
;4、其他功能
; 正点报时
; 闹钟报时
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;硬件连接
;P2口--数码管的数据线
;P3.0--138A P3.1--138B P3.2--138C
;P1口--键盘行列线
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;字节内存单元定义
cNian equ 30h ;年存储单元
cYue equ 31h ;月存储单元
cRi equ 32h ;日存储单元
cXiaoShi equ 33h ;时存储单元
cFen equ 34h ;分存储单元
cMiao equ 35h ;秒存储单元
cShiNao equ 36h ;闹钟时存储单元
cFenNao equ 37h ;闹钟分存储单元
cXingQi equ 38h ;星期存储单元
cTimeCount equ 39h ;定时器中断计数器
cBMCount equ 3ah ;秒计数器
cKeyMiao5 equ 3bh ;200毫秒计数器
cDispMode equ 40h ;显示模式存储单元
cSetMode equ 41h ;设置模式存储单元
cBufTh0 equ 42h ;定时器TH0基数存储单元
cBufTl0 equ 43h ;定时器TL0基数存储单元
cDisp1Buf equ 44h ;显示缓冲区1
cDisp2Buf equ 45h ;显示缓冲区2
cDisp3Buf equ 46h ;显示缓冲区3
cDispCon equ 47h ;显示闪烁控制字
cKey equ 48h ;键盘按键键值
cKeyDownCount equ 49h ;键盘按下时间计数器
cBufKey equ 4ah ;键盘上次按键寄存器
cNaoTime equ 4bh ;闹铃维持时间
;位内存单元定义
bResponse bit 00h ;按键已经响应标志位
bContinue bit 01h ;连续按键标志位
bHalfMiao bit 02h ;半秒标志位
bT0 bit 03h ;定时器0中断标志位
bDownKey bit 04h ;键盘有键按下标志位,为1有键按下,0没有键按下
bShanShuo bit 05h ;闪烁控制,1亮,0灭
bRunNian bit 06h ;润年标志
bZDNao bit 07h ;正点闹铃标志
bNaoR bit 08h ;定时已报标志
bDSNao bit 09h ;定时闹标志
;常量定义
MODE_KEY equ 0eeh
SET_KEY equ 0edh
UP_KEY equ 0deh
DOWN_KEY equ 0ddh
BEEP equ P0.
展开阅读全文