毕业设计
题 目 基于51单片机的语音电子时钟系统
学生姓名 李承鑫
学 号 *********
专 业 自动化
系 别 机 电 系
指导教师 张兴奎
二零一四年三月
摘 要
单片计算机既单片微型计算机。由RAM,ROM,CUP构成,定时,计数和多种接口与一体的微型控制器。他体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51 系列单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习,应用,从而达到学习,设计的能力。
本文以ATC51单片机为核心,将时钟集成芯片DS1302产生的时钟信号送入单片机,由六位数码管动态显示;采用不断查询单片机存储的作息时间的方法,利用语音芯片播放音乐,同时采取定义三个按键及软件控制的方式,实现快速校时和整点报时功能;硬件部分介绍时钟集成芯片DS1302以及时钟信号模块、HY-1系列语音芯片以及自动控制打铃模块、直流电源模块、单片机ATC51及动态显示模块;软件部分主要介绍设计思路及主程序以及各模块程序流程图。
关键词:数字时钟; 单片机; 时钟集成芯片; 语音芯片
绪论 1
绪论
数字时钟是采用数字电路实现时、分、秒显示的计时装置,广泛用于个人家庭、车站、码头等场所,成为人们日常生活不可缺少的必需品。由于电子时钟采用了石英技术,因而走时精度高、稳定性好、使用方便、不需要经常调校。与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命。数字电子时钟用集成电路计时时,译码代替机械式传动,用数码管LED代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行校时。故钟表的数字化给人们的生活带来了极大的方便。然而随着电子技术的飞速发展以及人们的生活水平不断的提高,人们对于时钟的要求不仅仅在于简单的计时,更趋向多功能的数字时钟。比如闹钟功能、日历显示功能、温度测量功能、温度计量功能、自动报时等功能。在自动控制工程中常常用到时钟。比如,上下课钟声是按特定的作息时间鸣响的;某些自动门有定时开闭的要求。在很多实际应用中,只要对数字时钟的程序和硬件电路加以一定的修改,便可以实现对应的功能。因此研究数字时钟及其应用,有着非常现实的意义。
近年来由于大规模集成电路的发展,单片机具有功耗低、体积小、控制功能强、扩展灵活、价格便宜、使用方便等优点,促使单片机被广泛的应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化以及过程控制等领域。
本文的语音电子时钟正是以单片机为核心,时钟集成芯片、语音芯片、数码管等元件组成。通过对数字时钟的硬件电路以及对单片机的软件控制,使得设计的电子时钟实现整点报时、快速校时等功能。因而基于51单片机的数字语音电子时钟具有硬件结构简单,所需元件较少,实用性更强。
1. 系统的总体设计
1.1 系统设计要求
本课题的设计要求和技术指标:
1.系统具有时、分、秒计时,6位数字显示功能;
2.系统具有快速校时功能;
3.系统具有整点报时功能;
4.以时钟电路为基础,设计一个长江学院作息时间自动打铃器。
1.2 系统设计总方案
根据系统的设计要求和技术指标,基于时钟电路、显示电路、自动控制打铃电路等问题,考虑到三个设计方案:
方案一:选用TTL、CMOS电路实现,主要包括晶体振荡器电路、分频器电路、时间计数器电路、七段译码驱动电路、LED数码管显示电路、校准电路。这钟设计方案主要靠硬件电路和准确计算元件参数来达到设计要求,因此,电路使用分立元件较多、灵活性小、电路复杂、调试困难、集成度较低等缺点。
方案二:选大规模时钟集成芯片LM8361搭建时钟电路,用存储器RAM62作译码器,设计作息时间自动打铃器。该设计方案采用的专门时钟集成芯片LM8361是一种动态共阴屏幕具有性能稳定、走时功能、定时功能和睡眠功能。可以使用50或60hz频率作为数字钟的基准频率。但此芯片不易购买。虽然使用元件较少,但是线路复杂,也主要依靠硬件电路实现功能,计算量较大。
方案三:选用51系列单片机为核心元件,由时钟电路、显示电路、直流电源电路等模块组成语音电子时钟系统。通过简单的硬件电路和51单片机软件控制的方法完成系统的设计要求。由于时钟的实现大部分是由软件的编程来实现的,因此没有前两种方案的硬件的束缚。而且只要对数字时钟的硬件电路和程序加以一定的修改,就能实现更多功能的数字时钟的设计。
综合上述三种设计方案的比较,基于成本等元素的考虑,本文采用方案三。
根据系统的设计要求,采用单片机ATC51作为控制器件,本系统的设计主要包括时钟电路模块、校时模块、整点报时模块、数码管显示模块、音乐打铃模块,该系统框图如图1-1所示:
图1-1 系统原理框图
1.校时模块:用于实现快速设置时、分的值。
2.整点报时模块:当分值计满60时,通过蜂鸣器发出响声。
3.时钟电路模块:用于产生时钟信号,且将时钟信号送入单片机处理。
4.数码管显示模块:六位数码管动态的显示时、分、秒。
5.音乐打铃模块:依照作息时间,在特定的时间到达之时播放乐曲。
1.2.1 时钟电路方案
方案一:通过软件方式实现时钟电路。在单片机内部存储时钟的时、分、秒信息。利用定时器与软件结合的方式,实现1秒定时中断,每产生一次中断,存储器相应的秒值加1;若秒值达到60,则将其清零,并将相应的分值加1;若分值到达60,则分值清零,并将时值加1;若时值达到24,则将时值清零。由于每次执行程序时,定时器都要重新赋予初值,所以该时钟精度不高。
方案二:采用专门时钟电路集成芯片DS1302,该芯片内部采用石英晶体振荡器,能够提供更加精确的时间信号。还有一个月小与31天时自动调整,且具有闰年补偿功能。为了保证时钟在突然掉电情况下仍能正常工作,芯片采用了双电源供电,以备随时提供正确的时间,且该芯片价格便宜。
基于上述两种方案的比较,本文采用时钟电路集成芯片DS1302,即方案二。
1.2.2数码管显示方案
方案一:数码管LED工作在静态显示方式时,其公共端接到一个固定的电平,其特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方式的优点是占用CPU时间少,显示便于监测和控制。缺点是在LED的位数比较多时,会占用大量的I/O,硬件电路比较复杂,成本较高。
方案二:数码管LED工作在动态显示方式时,所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。这种方式的优点是即使LED的位数较多时硬件电路也较简单、只需要占用一组I/O。
通过两种方案的比较,本文采用数码管的动态显示方式,即方案二。
2. 系统的硬件设计
2.1 时钟电路模块
2.1.1 时钟电路硬件连接图
时钟芯片DS1302的X1、X2脚构成一个时钟电路,外接32.768kHz晶振,Vcc1接+5V的电源,Vcc2接+3V的电池,作为备用电源。与单片机ATC51的连接仅需要三条线:SCLK串行时钟引脚、I/O串行数据引脚、复位/片选RST,且分别与P3.3、P3.6、P3.5连接。具体连接图如图2-1所示:
图2-1 时钟电路DS302的硬件图
2.1.2 时钟电路模块工作原理
选用串行接口时钟芯片DS1302来设计时钟电路,该时钟电路以单片机ATC51为控制元件,以DS1302为计时芯片,构成时钟电路。而且DS1302与单片机仅需要三个线,节省了接口资源。为了保证芯片安全的工作,分别在SCLK、 I/O、/RST接上上拉电阻来限流。由于Vcc2接有备份电源,所以即使在断电后也不会丢失时间和数据信息,保证继续工作。
2.1.3 时钟芯片DS1302
2.1.3.1 功能特性描述
DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。
控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。DS1302 的控制字如表2-1所示。
表2-1 DS1302控制字
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | RAM | A4 | A3 | A2 | A1 | A0 | RD |
/CK | /WR |
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表2-2。
表2-2 DS1302控制字表
读寄存器 | 写寄存器 | BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 | 范围 | |||
81h | 80h | CH | 10秒 | 秒 | 00~59 | ||||||||
83h | 82h | 10秒 | 分 | 00~59 | |||||||||
85h | 84h | 12/24 | 0 | 10 | 时 | 时 | 1~12/0~23 | ||||||
AM/PM | |||||||||||||
87h | 86h | 0 | 0 | 10日 | 日 | 1~31 | |||||||
h | 88h | 0 | 0 | 0 | 10月 | 月 | 1~12 | h |
读寄存器 | 写寄存器 | BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 | 范围 |
8Bh | 8Ah | 0 | 0 | 0 | 0 | 0 | 周日 | 1~7 | ||
8Dh | 8Ch | 10年 | 年 | 00~99 | ||||||
8Fh | 8Eh | WP | 0 | 0 | 0 | 0 | 0 | 0 | 0 | --- |
2.1.3.2 管脚描述
DS1302的外部引脚分配如图2-2所示、内部结构如图2-3所示。
图2-2 DS1302外部引脚图
图2-3 DS1302内部结构图
管脚说明:
·Vcc1:主电源。
· Vcc2:备份电源,当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2 ·I/O:三线接口时的双向数据线。 ·CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节活多字节数据传输的方法。 ·X1、X2:振荡源,外接32.768KHz晶振。 ·RST:复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。 2.2 校时模块 2.2.1 校时电路硬件连接图 定义三个按键:时设置键、分设置键、加1键,与单片机ATC51的P1.0、P1.1、P1.2相连接。同样为了保证芯片的安全工作,需要在这几个I/O口线接上一定阻值的限流电阻,具体连接图如图2-4所示: 图2-4 校时电路硬件图 2.2.2 校时模块工作原理 本文采用的是式按键,直接用I/O口线构成校时电路。每个按键占用一条I/O口线,每个按键的工作状态都不会产生相互的影响。按键的开关状态转换为高、低电平状态。通过采用单片机ATC51的汇编语言的编程,软件控制实现如下操作:如果没有任何按键被按下,则时钟正常走下去。当S1按键被按下时,执行时设置状态时钟停止走动,按下S3键可以实现时值加1操作,加到24后清零;当S2按键被按下时,执行分设置状态时钟停止走动,按下S3键可以实现分值加1操作,加到60后清零。 2.3 整点报时模块 2.3.1 整点报时电路硬件连接图 采用蜂鸣器的驱动电路,即用三极管的导通状态来驱动蜂鸣器,从而控制蜂鸣器只在整点时发出响声。具体的连接如图2-5所示: 图2-5 整点报时电路硬件图 2.3.2 整点报时模块工作原理 由于蜂鸣器的工作电流一般比较大,所以单片机的I/O 口是无法直接驱动的,故本文设计利用一个PNP三极管来放大电路来驱动蜂鸣器。三极管Q1起开关作用,其基极的低电平使三极管饱和导通,使蜂鸣器发出响声;而基极高电平则使三极管截止,蜂鸣器不能发出响声。 通过软件控制,实现整点报时的功能。当分计时计满60时,把连接蜂鸣器的I/O口线置0延时蜂鸣器需要鸣响的时间后再把该I/O端口置1,关闭蜂鸣器。 本文设计时连接蜂鸣器的I/O口线选用P3.7。 2.4 数码管显示模块 2.2.1 数码管显示电路硬件连接图 将六位数码管的8个笔划段a~h同名端连接在一起,与驱动器CC4511的a~h管脚相连且每个笔划段加上上拉电阻;每一个数码管的公共端com与反相驱动器74LS373的输出端Q0~Q5相连。而CC4511、74LS373分别与单片机ATC51的P0和P2口线连接。具体连接图如图2-6所示: 图2-6 数码管显示电路硬件图 2.4.2 数码管显示模块工作原理 本文设计的显示模块为了节省I/O接口,简化电路,采用了数码管的动态显示方式。其中芯片CC4511用于字段口的控制作用,而74LS373用于位选择的控制作用,且控制每个时刻只能有一个数码管处于有效工作状态。同时驱动器还有增加显示的稳定性和亮度的作用。先通过字位口输出使第1位LED数码管的共阴极为0,其余位的共阴极为1,字段口相应输出第1位要显示的字形码,并延时1ms~5ms,然后字位口使第2位的共阴极为0,其余位的共阴极为1;字段口再输出第2位要显示的字形码,每位轮流循环显示。虽然每一瞬间只会有以为LED在显示时间,但由于人眼的视觉暂留特性,使人感觉每个LED总在亮,即动态扫描显示方式。这主要采取软件的方式来完成。 2.4.3 数码管 2.4.3.1 数码管的分类和原理 数码管一般是由8个发光二极管显示字段的显示器件。其中7个二极管组成一个“8”,另一个为小数点。可显示0~9及一些英文字母A~F或特殊字符。其引脚图如图2-7所示: 图2-7 数码管LED外部引脚图 通常数码管有共阴极与共阳极两种结构,共阴极就是把所有LED的阴极连接到共同接点com。而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点)如图2-8所示。共阳极则是把所有LED的阳极连接到共同接点com。而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点),如图2-9所示。本文设计中所采用的是共阴极LED数码管。 图2-8 共阴数码管内部结构图及实物图 图2-9 共阳数码管内部结构图及实物图 其工作原理分别为: 共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。 共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。 2.4.3.2 数码管的显示 数码管有静态显示和动态显示两种方式。 静态显示方式:LED在显示某一字符时,其显示驱动电路具有锁存功能,由单片机送出的显示驱动码一经送出后,在不改变显示内容的情况下,该驱动器应一直保持到显示下一个字符为止。数码管工作在静态方式时,其公共段应接到一个固定的电平。 动态显示方式:将每一片LED相同的段码线并联,只有一个8位并行口(字段口)控制,而每位LED的共阴端引出也由一个并行口(字位口)控制,组成动态显示电路。 2.4.4 驱动器 2.4.4.1 CC4511描述 CC4511是常用的七段显示译码器。它的内部除了七段译码器电路外,还有锁存电路和输出驱动器部分,既有输出大驱动电流的能力,最大可达25mA,可直接驱动LED数码管或荧光数码管。 CC4511有四个输入端A、B、C、D和七个输出端a~g,它还具有输入BCD码锁存、灯测试和熄灭显示控制功能,它们分别有锁存端LE、灯测试端LT、熄灭控制端/BT来控制。其外部引脚如图2-10所示: 图2-10 CC4511外部引脚图 当锁存允许端LE=“0”时,锁存器直通,译码器输出端a~g随输入A~D端而变化,当LE=“1”时,锁存器锁定,输出端保持不变,熄灭控制端/BI=“0”时,译码器输出全“0”,因此,正常工作时应使/BI为高电平。另外灯测试端/LT=“0”时,译码器输出全“1”,数码管各段均亮,即显示“8”, 用来检测数码管是否正常。当输入的BCD码大于1001时,七段显示输出全“0”,各段均不亮。CC4511驱动器逻辑图如表2-3: 表2-3 CC4511驱动器逻辑图 74LS373为三态输出的八位透明锁存器,373 的输出端 Q0~Q7可直接与总线相连。当三态允许控制端 OE 为低电平时, Q0~Q7为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时, Q0~Q7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。 当锁存允许端 LE 为高电平时,O 随数据 D 而变。当 LE 为低电平时,O 被锁存在已建立的数据电平。当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV。 其外部引脚图如图2-11所示: 图2-11 74LS373外部引脚图 管脚说明: ·Vcc:电源 ·GND:接地 ·D0~D7:数据输入端 ·Q0~Q7:数据输出端 ·/OE:三态允许控制端,低电平有效 ·LE:锁存也许端 2.5 音乐打铃模块 2.5.1 音乐打铃电路硬件连接图 HY-1系列语音芯片管脚2与单片机ATC51的P2.1连接,具体连接如图2-12所示: 图2-12 音乐打铃电路硬件图 2.5.2 音乐打铃模块工作原理 其中与语音芯片2脚连接的P2.1口起着开关的作用,控制HY-1语音芯片的工作,而且HY-1音乐集成电路内存一首乐曲。当触发端受脉冲触发后立即输出音乐信号,乐曲程序结束时工作自行停止。当触发端与触发电平相连时,电路反复呜奏,直到脱离触发电平且正常演奏的乐曲程序结束后才自行停止。电路内设有前置放大器和功放,使用灵活,可直接驱动扬声器,也可以从前置放大器引出端驱动电蜂呜器。 首先将长江学院的作息时间存储到单片机ATC51的几个位地址中,通过不断的提取DS1302的时间,利用软件的方式将其时间与存储的时间进行对比,如果该时间为作息时间则P2.1脚置1,打开语音芯片,蜂鸣器立即输出音乐信号播放乐曲;如果该时间不是作息时间则继续提取时间与之对比,不断重复查询作息时间这一操作,以实现依照作息时间表来控制语音芯片的工作。 2.5.3 HY-1系列语音芯片 2.5.3.1 功能特性描述 HY-1 系列音乐集成电路是一种大规模CMOS 集成电路。该电路将包括前置放大器和功率放大器在内的所有电路用CMOS 技术集成在一块。HY-1 系列音乐集成电路具有驱动能力大和输出端运用灵活的特点。该系列产品外围元件少,耗电省,且应用灵活,适用于门铃、玩具、各种呼叫及报警装置。 3.5.3.2 工作原理 HY-1系列音乐芯片外部引脚如图2-13所示: 图2-13 HY-1系列音乐芯片外部引脚图 在芯片上已焊接一个68K的电阻,其中5脚为功率输出端,能直接驱动扬声器。3、3脚为前置放大器的输出端,可用于推动压电蜂鸣器工作或推动半导体三极管。当用正脉冲触发端2脚触发端时,它便会自动演奏乐曲。 2.6 ATC51的外设电路 2.6.1 ATC51单片机 2.6.1.1 功能特性描述 ATC51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4K的可反复擦写的只读程序存储器和128B的随机存取数据存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位处理器和Flash存储单元,功能强大ATC51单片机可灵活应用于各种控制领域。 ATC51提供以下标准功能:4K字节Flash闪存储器,128字节内部RAM,31个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。(其内部结构如图2-14所示)同时,ATC51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。 图2-14 ATC51内部结构图 主要性能参数: ·与MCS-51产品指令系统完全兼容。 ·4K字节可重擦写Flash闪存储器。 ·1000次擦写周期。 ·全静态操作:0Hz~24Hz。 ·三级加密程序存储器。 ·128×8字节内部RAM。 ·32个可编程I/O口线。 ·2个16位定时/计数器。 ·6个中断源。 ·可编程串行UART通道。 ·低功耗空闲和掉电模式。 2.6.1.2 管脚描述 ATC51单片机采用40只引脚的双列直插封装方式。引脚主要包括电源的引脚、外接晶体的引脚、4跳控制或与其他电源复用的引脚、31条I/O引脚。引脚按其功能可分为3类: ·主电源引脚(Vcc、GND)和时钟引脚(XTAL1、XTAL2)。 ·控制引脚,包括RST、/PSEN、ALE/PROG、/EA/VPP。 ·接口引脚 ATC51单片机的引脚具有以下特点:单片机功能多但引脚较少,I/O接口线不是全部用于用户I/O接口线,许多引脚都具有双重功能。这种双重功能的设置为单片机实现系统扩展奠定了基础。使单片机对外呈现3总线形式,即由P2、P0口构成外部存储器16位地址线,由P0口分时复用为数据总线,由ALE 、/PSEN 、RST 、/EA与P3口中的/INTO、/INT1、T0、T1、/WR 、/RD共10个引脚组成控制总线,如图2-15所示: 图2-15 ATC51单片机的对外总线结构 外部管脚如图2-16所示: 图2-16 ATC51外部引脚图 管脚说明: ·Vcc:接+5V电源正端。 ·GND:接+5V电源地端。 ·XTAL1:接外部石英晶体的一端。在单片机内部,它是一个反相放大器的输入 端, 这个放大器构成了片内振荡器。当采用外部时钟事,对于HMOS单片机,该引脚接地;对于CHMOS单片机,该引脚作为外部振荡信号的输入端。 ·XTAL2:接外部石英晶体的另一端。在单片机内部,接至上述振荡器的反相放大器的输出端。采用外部振荡器时,对CHMOS单片机,该引脚接收振荡器的 信号,即把此信号直接接到内部时钟发生器的输入端;对CHMOS单片机此引脚应悬空。 ·RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ·ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 ·/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 ·/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 ·P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻 输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 ·P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。 ·P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 ·P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为ATC51的一些特殊功能口,如表2-4所示: 表2-4 P3口第2功能 其中XTAL1、XTAL2外接32.768kHz的晶振,提供单片机工作的时钟脉冲。其中两个电容的作用有两个:一是帮组振荡器起振;二是对振荡器的频率起微调作用。具体电路如图2-17所示: 图2-17 ATC51外部时钟电路 2.6.3 复位电路 单片机的复位电路一般有上电自动复位和手动按键复位两种。本文采用手动按键复位电路。具体电路如图2-18所示: 图2-18 ATC51复位电路 +5V上电时,22uF电容充电,在1K电阻上出现电压,使得单片机复位;几个毫秒后,C充满,1K电阻上电流降为0,电压也为0,使得单片机进入工作状态。工作期间,按下S,C放电。S松手,C又充电,在1K电阻上出现电压,使得单片机复位。几个毫秒后,单片机进入工作状态。 2.7 直流电源电路 本文设计的电源电路包括变压、整流、滤波、稳压这几部分。具体电源电路如图2-19所示。 图2-19 系统直流电源电路 220V交流电通过双12V变压器变为12V的交流电,12V交流电通过四个二极管的全桥整流后变为12V直流电,然后经过电解电容(470μF)进行一级滤波,以去除直流电里面的杂波,防止干扰。12V直流电出来后再经过三端稳压器7805稳压成为稳定的5V电源,其中7805的Vin脚是输入脚,接12V直流电源正极,GND是接地脚,接12V直流电源负极,Vout为输出脚,它和接地脚的电压就是+5V了。5V电源出来再经过电解电容的二级滤波,使5V电源更加稳定可靠。 2.8 系统总原理图 综合上述各电路模块的设计,整个数字语音电子时钟的硬件设计总图,如图2-20所示: 图2-20 系统总原理图 3. 系统软件设计 3.1 软件设计思路 本设计中的计时是由DS1302来完成的,主程序主要是读DS1302中的时间并调用显示程序把读到的数据通过数码管显示出来,并且判断是否有键按下。当有与P1.0端连接的按键按下时,便转入调时功能程序;当有与P1.1端连接的按键按下时,进入调分状态。时间的调整是由与P1.0~P1.3相连的三个键共同完成的。当分计时计满60时P3.7置0,开启蜂鸣器。同理,当查询到作息时间时,P2.1置1,语音芯片处于工作状态。(部分程序见附录1)其主程序流程图如图3-1所示: N Y N Y N Y 图3-1 主程序流程图 3.1.1 显示电路设计思路 数码管显示的数据存放在内存单元中,分别存放秒数据,分数据,时数据,每一地址单元内存均为十进制压缩BCD码,故显示前应将对应的压缩BCD码转换成非压缩BCD码,由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码放在ROM表中。显示时,先取出内存单元某一地址中的数据,先转换成非压缩BCD码,然后查得对应的显示段码并从P0口输出。P2口将对应的数码管选中,就能显示该地址单元的数据值。其流程图如图3-2所示: 图3-2 显示程序流程图 3.1.2 整点报时和语音电路设计思路 通过不断的判断是否存放分数据的存储单元中的分值到达60,转换P3.7的高、低电平的状态进而控制蜂鸣器的工作;利用不断提取DS1302的时间与存储的作息时间对比,如果查询时间一致则P2.1置1,开启语音芯片;如果查询时间不一致则P2.1置0,关闭语音芯片。其流程图分别如图3-3、3-4所示: N Y 图3-3 整点报时程序流程图 Y N 图3-4 语音程序流程图 3.1.3 校时电路设计思路 当按下键S1时,便进入调时状态,这时数码管中的时钟数字停止变化,并且时钟数据开始闪亮,此时按下S4便可以分钟数据加1操作; 当按下键S2时,便进入调分状态,这时数码管中的时钟数字停止变化,并且时钟数据开始闪亮,此时按下S4便可以分钟数据加1操作。其流程图如图3-4所示: Y N N Y Y N 图3-4 校时程序流程图 结论 本文设计系统以ATC51单片机为核心控制元件,选用时钟芯片DS1302、HY-1系列语音芯片并采用数码管LED的动态显示电路。本系统实现的功能如下: 1.时、分、秒值计时且6位数字显示; 2.通过软件扫描按键的方式,判断是否处于校时状态,进而完成时、分的校时功能; 3.通过软件控制的方式设定分值到达60时蜂鸣器发出响声,即整点报时功能; 4.以时钟电路为基础,通过软件方式控制在特定作息时间达到之时控制打铃电路(播放乐曲)。 本次设计主要涉及了单片机原理及接口技术的相关知识和汇编语言编程的诸多要领。设计中涉及的许多问题,更是对以前所学的知识的回顾及在过去的四年中学到知识的系统总结,这次设计对我们将来的工作有很大的帮助。 在设计中,我积极查阅资料,细心钻研各个细节,完成了多功能时钟的开发与调试,也让我们明白了在设计中考虑问题应该全面。在设计中既锻炼了我的动手能力,又学会查阅资料,提炼需要的信息。 致 谢 本文是在王仁波老师的精心指导下完成的。从论文的选题到具体的设计及论文的写作过程中无处不渗透着老师的心血和汗水。在毕业设计的半年中,老师渊博的知识,严谨求实的工作作风,使我受益匪浅。在此,向王仁老师表示衷心的感谢和敬意。 在毕业设计和论文写作的过程中,得到了同学的指点和帮助,同学热情的支持,并在论文的写作过程中提供了很多帮助,在此向他们表示感谢。 感谢在百忙之中对我的论文进行评审并提出宝贵意见的老师们。 感谢我的亲朋好友们给我的鼓励、关爱和支持,使我能够顺利完成学业。 参考文献 [1].华成英、童诗白.模拟电子技术基础. 北京:高等教育出版社,2006.5,213~ 561 [2].阎石.数字电路技术基础. 北京:高等教育出版社,1998.11,150~157 [3].老虎工作室.Protel 99入门与提高. 北京:人民邮电出版社, 2008.8 [4].晁阳.单片机MCS-51原理及应用开发教程. 北京: 清华大学出版社, 2007.10 [5].余家春,Protel 99 SE电路设计实用教程.北京:中国铁道出版社,2004.09 [6].康华光等,电子技术基础模拟部分. 武汉:高等教育出版社, 2003.03 [7].杨欣等,51单片机应用实例详解. 北京:清华大学出版社, 2010.05 [8].邬芝权等,基于51系列单片机的LED显示屏开发技术. 北京:北京航空航天大学出版社, 2009.02 [9].宋戈等,51单片机应用开发范例大全. 北京:人民邮电出版社, 2010.02 [10].李朝青,单片机原理及接口技术. 北京:北京航空航天大学, 2005.10 [11].刘秀英等,单片机应用设计200例. 北京:北京航空航天大学出版社, 2006.07 [12].Vizimuller, P.: ‘RF design guide-systems, circuits, and equations’ . ArtechHouse, Boston, MA,1995 [13].R. Dye, “Visual Object-Orientated Programming,” Dr. Dobbs MacintoshJournal, Sept. 1st.1991 [14]. ATC51 DATA SHEEP Philips Semiconductors 1999.dec [15]. Yang. Y., Yi. J., Woo, Y.Y., and Kim. B.: ‘Optimum design for linearityand efficiency of microwave Doherty amplifier using a new loadmatching technique’, Microw. J, 2001, 44 附录1 T_CLK Bit P3.3 ;实时时钟时钟线引脚 T_IO Bit P3.4 ;实时时钟数据线引脚 T_RST Bit P3.5 ;实时时钟复位线引脚 SECOND EQU 30H MINUTE EQU 31H HOUR EQU 32H ORG 0000H LJMP START ORG 0060H START: CLR T_RST CLR T_CLK MOV SP,#60H ;修改堆栈 MOV SECOND,#00H ;初始时间设为12:00:00 MOV MINUTE,#00H MOV HOUR,#12H LCALL SETDS1302 LCALL GET1302 LCALL DISPLAY MAIN: MOV R3,#25 MOV TMOD,#01H MOV TH0,#70H ;置定时器初值(定时40ms) MOV TL0,#00H SETB TR0 ;启动定时器0 LP1: JBC TF0,LP2 ;查询计数溢出 SJMP LP1 ;未到40 ms继续计数 LP2: MOV TH0,#0B8H ;重新置定时器初值 MOV TL0,#00H LCALL DISPLAY ;显示 DJNZ R3,LP1 ;未到1 S继续循环 LCALL GET1302 ;每过1s从DS1302读取一次时间 MOV R3,#25 SJMP LP1 DIG_CODE: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H DISPLAY: MOV DPTR,#DIG_CODE MOV A,SECOND ;显示秒 ANL A,#0FH MOVC A,@A+DPTR MOV P2,A MOV P1,#11011111b LCALL DIS_DELAY MOV A,SECOND SWAP A ANL A,#07H MOVC A,@A+DPTR MOV P2,A MOV P1,#11101111b LCALL DIS_DELAY MOV A,MINUTE ;显示分 ANL A,#0FH MOVC A,@A+DPTR MOV P2,A MOV P1,#11110111b LCALL DIS_DELAY MOV A,MINUTE SWAP A ANL A,#07H MOVC A,@A+DPTR MOV P2,A MOV P1,#11111011b LCALL DIS_DELAY MOV A,HOUR ;显示小时 ANL A,#0FH MOVC A,@A+DPTR MOV P2,A MOV P1,#11111101b LCALL DIS_DELAY MOV A,HOUR SWAP A ANL A,#03H MOVC A,@A+DPTR MOV P2,A MOV P1,#11111110b LCALL DIS_DELAY RET DIS_DELAY: ;显示延时5ms子程序 PUSH PSW MOV R7,#10 D1: MOV R6,#248 D2: DJNZ R6,$ DJNZ R7,D1 POP PSW RET SETDS1302: ;设置DS1302初始时间,并启动计时 CLR T_RST NOP CLR T_CLK NOP SETB T_RST NOP MOV B,#8EH ;写控制命令字 LCALL INPUTBYTE MOV B,#00H ;写保护关闭 LCALL INPUTBYTE SETB T_CLK NOP CLR T_RST MOV R0,#SECOND ;内存中的时间首地址 MOV R1,#80H ;DS1302中的时间首地址 MOV R7,#7 ;字节数 SETLOOP: CLR T_RST NOP CLR T_CLK NOP SETB T_RST NOP MOV B,R1 ;写命令字 LCALL INPUTBYTE MOV A,@R0 ;设置时间 MOV B,A LCALL INPUTBYTE INC R0 INC R1 INC R1 SETB T_CLK NOP CLR T_RST NOP DJNZ R7,SETLOOP CLR T_RST NOP CLR T_CLK NOP SETB T_RST NOP MOV B,#8EH LCALL INPUTBYTE MOV B,#80H ;开写保护 LCALL INPUTBYTE SETB T_CLK NOP CLR T_RST NOP RET GET1302: ;从DS1302读取时间 MOV R0,#SECOND MOV R1,#81H ;DS1302中读时间的首地址 MOV R7,#7 GETLOOP: CLR T_RST NOP CLR T_CLK NOP SETB T_RST NOP MOV B,R1 LCALL INPUTBYTE ;写命令字 LCALL OUTPUTBYTE ;读时间 MOV @R0,A ;将从DS1302中读取的时间从内存中保存 INC R0 ;修改地址指针 INC R1 INC R1 SETB T_CLK NOP CLR T_RST NOP DJNZ R7,GETLOOP RET INPUTBYTE: ;向DS1302写一个字节 MOV R4,#8 INPUTLOOP: MOV A,B RRC A MOV B,A MOV T_IO,C SETB T_CLK NOP NOP NOP CLR T_CLK DJNZ R4,INPUTLOOP RET OUTPUTBYTE: ;从DS1302读一个字节 CLR A CLR C MOV R4,#8 OUTPUTLOOP: NOP NOP MOV C,T_IO RRC A SETB T_CLK NOP NOP NOP CLR T_CLK DJNZ R4,OUTPUTLOOP RET END输 入 输 出 LE /BI /LT D C B A a b c d e f g 显 示 X X 0 X X X X 1 1 1 1 1 1 1 8 X 0 1 X X X X 0 0 0 0 0 0 0 消 隐 0 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 0 0 0 1 0 1 1 0 0 0 0 1 0 1 1 0 0 1 0 1 1 0 1 1 0 1 2 0 1 1 0 0 1 1 1 1 1 1 0 0 1 3 0 1 1 0 1 0 0 0 1 1 0 0 1 1 4 0 1 1 0 1 0 1 1 0 1 1 0 1 1 5 0 1 1 0 1 1 0 0 0 1 1 1 1 1 6 0 1 1 0 1 1 1 1 1 1 0 0 0 0 7 0 1 1 1 0 0 0 1 1 1 1 1 1 1 8 0 1 1 1 0 0 1 1 1 1 0 0 1 1 9 0 1 1 1 0 1 0 0 0 0 0 0 0 0 消 隐 0 1 1 1 0 1 1 0 0 0 0 0 0 0 消 隐 0 1 1 1 1 0 0 0 0 0 0 0 0 0 消 隐 0 1 1 1 1 0 1 0 0 0 0 0 0 0 消 隐 0 1 1 1 1 1 0 0 0 0 0 0 0 0 消 隐 0 1 1 1 1 1 1 0 0 0 0 0 0 0 消 隐
2.4.4.2 74LS373描述1 1 1 X X X X 锁 存 锁 存
2.6.2 时钟电路引脚 第2功能 功能代号 作用 P3.0 RXD 串行接口输入端 P3.1 TXD 串行接口输出端 P3.2 /INT0 外部中断0请求输入端,低电平有效 P3.3 /INT1 外部中断1请求输入端,低电平有效 P3.4 T0 定时器/计数器0计数脉冲输入端 P3.5 T1 定时器/计数器1计数脉冲输入端 P3.6 /WR 外部数据存储器写选通信号输出端,低电平有效 P3.7 /RD 外部数据存储器读选通信号输出端,低电平有效