为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

语音播报记事器概要1

2018-02-10 50页 doc 232KB 34阅读

用户头像

is_594886

暂无简介

举报
语音播报记事器概要1语音播报记事器概要1 摘要 本设计以单片机为基础,能够完成对语音信息的录制、播放以达到对人们的提醒。其中包括整机硬件电路的设计和全部软件部分的设计。该语音播报系统由LCD1602显示电路模块、按键电路模块、蜂鸣电路模块、语音录放模块和串行时钟模块组成。主机是以Intel公司的AT89C51单片机为核心芯片,外接主要芯片包括语音芯片ISD1420、串行时钟芯片DS1302和显示芯片LCD1602。能够实现显示当前时间、录制和播放语音信息、调整当前时间、设置闹钟时间并且在到闹钟时间后,能够以语音的形式进行提醒并以蜂鸣提示。该设...
语音播报记事器概要1
语音播报记事器概要1 摘要 本以单片机为基础,能够完成对语音信息的录制、播放以达到对人们的提醒。其中包括整机硬件电路的设计和全部软件部分的设计。该语音播报系统由LCD1602显示电路模块、按键电路模块、蜂鸣电路模块、语音录放模块和串行时钟模块组成。主机是以Intel公司的AT89C51单片机为核心芯片,外接主要芯片包括语音芯片ISD1420、串行时钟芯片DS1302和显示芯片LCD1602。能够实现显示当前时间、录制和播放语音信息、调整当前时间、设置闹钟时间并且在到闹钟时间后,能够以语音的形式进行提醒并以蜂鸣提示。该设计的主要特点是,设计以语音的形式进行提醒,改变了人们以单纯无声的书本记录,并且设计能够显示和修改当前的年份、月份、星期,完全可以作为一般的钟表来使用。此外,文章力求语言流畅、条理清晰、深入浅出,能为一般的读者所读懂。 关键字 单片机,时钟,闹钟,语音信息 1 Abstract This design take the monolithic integrated circuit as a foundation, can complete to pronunciation information transcribing,the broadcast by achieves to people's reminder. Including entire machine hardware electric circuit design and complete software partial designs.This pronunciation disseminates news the system by the LCD1602 display circuit module, the pressed key electric circuit module, the buzzing electric circuit module, the pronunciation recording and sending out module and the serial clock module is composed. The main engine is take the Intel Corporation's AT89C51 monolithic integrated circuits as the core chip, outside meets the main chip including pronunciation chip ISD1420 、 serial clock chip DS1302 and display chip LCD1602. It can realize the demonstration current time, transcribing and the broadcast pronunciation information, the adjustment current time, the establishment alarm clock time and in after the alarm clock time, can carry on the reminder by the pronunciation form and prompt by the buzzing.This design main characteristic is: The design carries on the reminder by the pronunciation form, changed by the people by the pure silent books record, and designs can demonstrate and revise the current year, month, the week, definitely may take the common clock and watch uses. In addition, this article makes every effort the language smoothly, orderliness is clear, explains the profound in simple language, can read for the common reader. Key word 2 Single-chip Microcomputer;clock;information of pronunciation,alarm clock 引言 计算机的发展经历了从电子管、晶体管、集成电路、到大规模集成电路共4个发展阶段。微型计算机是大规模集成技术发展的直接产物,属于第四代计算机。随着微型机的研制成功,不久就出现了单片微型计算机,又称单片机或微控制器。它在一块芯片上集成了中央处理器、只读存储器、随机存储器、定时/记数器以及I/O接口电路等主要计算机部件。换言之,它就是把微型计算机所有的功能部件都集成在一块芯片上了,故国内常称其为单片机。由于单片机体积小、质量轻、功耗低、价格便宜、控制能力强、运行稳定可靠,自问世以来,在各领域得到了广泛的应用。尤其是在近几年的工业控制、自动检测、智能仪器仪表、家用电器等领域发挥着不可替代的作用,使它不断拓宽应用范围,增添了新的活力。 随着电子技术的迅速发展,人类生活亦得到了根本性的改变。如果说微型计算机的出现使现代科学研究得到了质的飞跃,那么可以毫不夸张地说,单片机技术的出现则是给现代工业控领域带来了一次新的技术革命。 在这种瞬息万变的新形势下,全球的信息化使人们足不出户便可以获取全方位的知识和信息,与此同时人们的生活节奏也随之加快,竞争变得日趋激烈。因此,能够合理的安排和利用时间在日常的学习和工作中就显得尤为重要了。但是在充满压力的生活中,往往很容易因一时的疏忽就耽误已安排好的事情造成迟到或其他事件,甚至产生了严重的后果和经济损失。此时,若有一台智能语音记事器,将各种约定时间记录下来,按时进行语音提醒,就可以避免迟到、缺席事件的发生,从而给我们的工作和学习带来很大的方便。 单片机技术的发展为这一设想提供了技术基础。在以MCS,51系列单片机为核心器件组成的一个语音提示系统中,其所具有的日历、能够随时对当前时间进行调 3 整、随时输入定时播报(闹钟)时间等功能满足了人们的要求,使人们不再担心会忘记重要的约会。 1. 系统的性能指标及总体框图 为了使人们在日常生活中不会忘记已安排好的日程,本设计语音播报记事器采用了主意提示的方法去提醒人们,满足了人们的要求。 1.1 系统的功能及主要组成 在通常情况下,人们总是通过如下的方式提醒自己:将将要发生的事情记录下来,这种发法虽然有效,但到时又难免忘记;再者就是将将要发生的事情的时间刻录在电子表类的仪器上,等时间到时,仪器便以蜂鸣的形式进行提醒,但如果时间太久了,虽然知道了事情的时间,却又容易想不起是什么事情。所以本设计语音播报记时器将采用语音播报的形式对人们进行主动提醒,不管时间有多久,它也能准确、及时地进行时间和语音播报的提醒。 本系统以8051单片机为核心器件,以语音芯片ISD1420和串行时钟DS1302芯片为辅助芯片,并通过一定的硬件电路连线,能够完成对语音的录制与播放,能够对当前时间进行调整各对提醒时间的设定,并且同时能以四位时钟LED显示出来。 有了这样的设计,相信人们在百忙的生活中就不会因一时的疏忽而耽误一些重大事宜。 本设计具备了语音的录入和提示功能,改变了以往的无声书本的记录方法,当你有什么重要的事情而又担心忘记时,你就可以对其进行录音,并设置好提醒时间,到时,它就会将录音内容播报出来,并在最后进行蜂鸣提醒。 除了具备电子记事本的功能外,本系统也可以当作钟表来使用,因为它具有四位LED数码管,可对当前时间进行显示,当时间发生差错时,还可以按照一定的方法进行调整,不会因时间无法调整而进行错误提醒。 有了语音播报记事器,你也不用担心会出现在录制了一次事情后而没有办法再 4 次录制的情况,因为本设计能够进行五组录音,当某件事情已过去时,可以将以前的语音信息覆盖,再次进行录音。 此外,本系统对时间的设置是随意的,因为该设计具有标准的日历/时钟,即年、月、日、星期、时、分和秒,遇到闰年还可以自动修正。 有了这样的设计,相信人们在百忙的生活中就不会因一时的疏忽而耽误一些重大事宜。 1.2系统主要设计框图 根据设计要求与设计思路,本系统采用单片机作为核心控制部件,采用可擦除、可分段语音处理芯片ISD1420记录语言以及其他外围电路组成语音提示系统。系统由实时时钟、语音录放控制、当前时间调整、提醒时间设置、LED译码/驱动、时间显示和语音处理等模块组成。系统设计框图如图1,1所示: 实时时钟RTC LED译码/ 4位时钟型 驱动模块 LED显示 单 提醒时间设置 片 扬声器 语音处理 机 模块 当前时间调整 送话器 语音录放控制 蜂鸣器控制 图1,1 系统设计框图 仅有这些硬件模块还达不到我们预期设计的目的,因此,我们要加入编程以实现电路设计的简洁优化,这其中包括系统对各组语音录放不同存放地址的设置及实现,对具体时间的规定和调整(如每星期的天数设定、每天的小时固定数字显示设定等),对记事器的定时中断等,从而达到预期的数据采集及传送的效果。 5 2.系统硬件构成与实现 在本章的硬件设计电路中,主要阐述了LED显示电路模块、按键电路模块、蜂鸣电路模块、语音录放模块和串行时钟模块六个模块。其中介绍了模块中所用到的主要芯片、硬件连线电路原理和各模块所实现的功能。 2.1串行时钟模块设计 该模块主要是利用芯片DS1302来实现时钟的显示功能及中断控制。 2.1.1 DS1302芯片的详细介绍 DS1302是美国DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟、日历和31个字节静态RAM,通过简单的串行接口与单片机进行通信,实时时钟、日历电路提供秒、分、时、日、星期、月、年的信息,每天的天数和闰年的天数可自动调整,时钟操作可通过AM,PM指示决定采用24小时或12小时格式,DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需要用到RES复位、I,O数据线、SCLK串行时钟3个口线。对时钟、RAM的读写,可以采用单字节方式或多达31个字节的字符组方式。DS1302工作时功耗低,保持数据和时钟信息时功率小于1mW。DS1302广泛应用于电话传真、便携式仪器以及电池供电的仪器仪表等产品领域中。 DS1302的主要性能指标: , DS1302实时时钟具有能计算2100年之前的秒、分、时、日、星期、月、年 的能力,还有闰年调整的能力。 , 内部含有31个字节静态RAM,可提供用户访问。 , 采用串行数据传送方式,使得管脚数量最少,简单3线接口。 , 工作电压范围宽:2.0,5.5V。 , 工作电流:2.0V时,小于300nA。 6 , 时钟或RAM数据的读写有两种传送方式:单字节传送方式和多字节传送方式。 , 采用8脚DIP封装或SOIC封装。 , 与TTL兼容,=5V。 , 可选工业级温度范围:—40,+85。 , 具有涓流充电能力。 , 采用主电源和备份电源双电源供应。 , 备份电源可由电池或大容量电容实现。 引脚功能: V1V2 X1SCLK X2I/O GNDRST 图 2-1-1 DS1302的外部引脚图 , X1、X2:32.768kHz 晶振接入引脚。 , GND:地。 , RST:复位引脚,低电 平有效。 , I,O:数据输入输出 引脚,具有三态功能。 , SCLK:串行时钟输入 引脚。 , :工作电源引脚。 , :备用电源引脚。 DS1302有一个控制寄存器、12个日历、时钟寄存器和31个RAM。 控制寄存器:控制寄存器用于存放DS1302的控制命令字,DS1302的RST引脚回 7 到高电平后写入的第一个字就为控制命令。它用于对DS1302读写过程进行控制,它 的格式以及各项功能说明如下: D7 D6 D5 D4 D3 D2 D1 D0 1 RAM,CKA4 A3 A2 A1 A0 RD, W , D7:固定为1。 , D6:RAM,CK位,片内RAM或日历、时钟寄存器选择位,当RAM,CK=1时, 对片内RAM进行读写,当RAM,CK=0时,对日历、时钟寄存器进行读写。 , D5,D1:地址位,用于选择进行读写的片内RAM或日历、时钟寄存器。对片 内RAM或日历、时钟寄存器的选择如表( 1 ) , D0:读写位,当RD, W =1时,对片内RAM或日历、时钟寄存器进行读操作, 当RD, W =0时,对片内RAM或日历、时钟寄存器进行写操作。 日历、时钟寄存器:DS1302共有12个寄存器,其中有7个与日历、时钟相关, 2 ),对其说明如下: 存放的数据为BCD码形式。日历、时钟寄存器的格式如表( , 数据都以BCD码形式表示。 , 小时寄存器的D7位为12小时制与24小时制的选择位,当其为1时选12小 时制,此时D5位为1时是上午,D5位为0时是下午,D4位为小时的十位; 当为0时选24小时制,D5、D4位为小时的十位。 , 秒寄存器中的CH位为时钟暂停位,当为1时,时钟暂停,为0时,时钟开始 启动。 , 写保护寄存器中的WP为写保护位,当WP=1时,写保护,当WP=0时,未写保 护,当对日历、时钟寄存器或片内RAM进行写时,WP应该清零,当对日历、 时钟寄存器或片内RAM进行读时,WP一般置1。 , 慢充电寄存器的TCS位为控制慢充电的选择,当它为1010时才能使慢充电工 作。DS为二极管选择位。DS为01选择一个二极管,DS为10选择两个二极 管,DS为00或11充电器被禁止,与TCS无关。RS用于选择连接在与 之间的电阻,RS为00,充电器被禁止,与TCS无关,电阻的选择情况如表( 3 ) 所示。 8 片内RAM:DS1302片内有31个RAM单元,对片内RAM的操作有单字节方式和多字节方式两种。当控制命令字为0C0H,0FDH时,为单字节读写方式,命令字中的D5,D1用于选择对应的RAM单元,其中奇数为读操作,偶数为写操作。当控制命令字为0FEH、0FFH时为多字节操作(表( 1 )中的RAM突发模式),多字节操作可一次把所有的RAM单元内容进行读写。0FEH为写操作,0FFH为读操作。 DS1302的输入、输出过程:DS1302通过RST引脚驱动输入、输出过程,当RST置高电平启动输入、输出过程,在SCLK时钟的控制下,首先把控制命令字写入DS1302的控制寄存器,其次根据写入的控制命令字,依次读写内部寄存器或片内RAM单元的数据,对于日历、时钟寄存器,根据控制命令字,一次可以读写一个日历、时钟寄存器,也可以一次读写8个字节,对所有的日历、时钟寄存器(表( 1 )中的时钟突发模式),写的控制命令字为0BEH,读的控制命令字为0BFH;对于片内RAM单元,根据控制命令字,一次可以读写一个字节,一次也可以读写31个字节。当数据读写完后,RST变为低电平结束输入、输出过程。无论是命令字还是数据,一个字节传送时都是低位在前,高位在后,每一位的读写发生在时钟的上升沿。 对片内RAM或日历、时钟寄存器的选择如下表( 2-1-1 ): D7 D6 D5 D4 D3 D2 D1 D0 寄存器名称 1 RAM,CK A4 A3 A2 A1 A0 RD, W 秒寄存器 1 0 0 0 0 0 0 0或1 分寄存器 1 0 0 0 0 0 1 0或1 小时寄存器 1 0 0 0 0 1 0 0或1 日寄存器 1 0 0 0 0 1 1 0或1 月寄存器 1 0 0 0 1 0 0 0或1 星期寄存器 1 0 0 0 1 0 1 0或1 年寄存器 1 0 0 0 1 1 0 0或1 写保护寄存器 1 0 0 0 1 1 1 0或1 慢充电寄存器 1 0 0 1 0 0 0 0或1 时钟突发模式 1 1 1 1 1 1 1 0或1 RAM0 1 1 0 0 0 0 0 0或1 1 1 0或1 RAM30 1 1 1 1 1 1 0 0或1 RAM突发模式 1 1 1 1 1 1 1 0或1 9 日历、时钟寄存器的格式如下表( 2-1-2 ) 寄存器名称 取值范围 D7 D6 D5 D4 D3 D2 D1 D0 秒寄存器 00,59 CH 秒的十位 秒的个位 分寄存器 00,59 0 分的十位 分的个位 小时寄存器 01,12或12,0 A,P HR 小时的个位 00,23 24 日寄存器 01,31 0 0 日的十位 日的个位 月寄存器 01,12 0 0 0 0或1 月的个位 星期寄存器 01,07 0 0 0 0 星期几 年寄存器 01,99 年的十位 年的个位 写保护寄存器 WP 0 0 0 0 0 0 0 慢充电寄存器 TCS TCS TCS TCS DS DS RS RS 时钟突发寄存器 电阻的选择情况如表下( 2-1-3 )所示。 RS位 电阻器 阻值 00 无 无 01 R1 2KΩ 10 R2 4KΩ 11 R3 8KΩ 2.1.2 DS1302与单片机的硬件连接 DS1302与单片机的通信仅需要三根线:时钟线SCLK、数据线I,O及复位线RST,DS1302与CPU连接的电路原理如图2,11所示,时钟线SCLK与P2.0相连,数据线I,O与P2.1相连,复位线RST与P2.2相连。 在单电源与电池供电的系统中,提供低电源并提供低电功率的备用电源。双电源系统中,提供主电源,提供备用电源,以便在没有主电源的时能保存时间信息以及数据。DS1302由和两者中较大的供电。 U12916PSENWR 3017ALE/PRD11TXD109RXDREST 18X219X1VCC28P272731P26EA/VP26P2510 C1122514X1P24T05.6pFB232415VccX2P23T11523RSTP22C1286221232.768KHzVbatI/OP21INT05.6pF72113SCLP20INT1BT1328P07P17GND3V337P06P164DS1302346P05P15355P04P14364P03P13GND373P02P12382P01P11391P00P108051 图2-1-2 时钟芯片DS1302与单片机的硬件连接原理图 当单片机中的T1定时器发生中断时,单片机便将P2.2置高电平,使得DS1302的RST处于高电平,由此DS1302便将当前时间传送到单片机中的显示缓冲区,因T1每分钟中断一次,所以每隔一分钟,4,LED显示器便刷新一次重新显示当前时间。 11 2.2 LED显示模块设计 为实现单片机应用系统中的人机对话,即人对应用系统的状态干预、数据输入或应用系统向人们显示运行状态结果等,需加入显示器、键盘等外围设备,这就是用来完成人机对话活动的人机通道。 在本系统的设计中,由系统硬件设计框图可知,这样的人机对话通道的显示电路由LED显示器、段驱动电路和位驱动电路组成。 2.2.1 LED显示器的介绍 LED数码管显示器是由发光二级管按一定的结构组合起来的显示器件。在单片机应用系统中通常使用的是8段式LED数码管显示器,它共阴极和共阳极两种结构,如下图: 11 12 a D1 7 b 4 9 c D2 2 d dp 1 8 e D3 10 f 5 6 g D4 3 dp (d)4-LED 其中图(a)为引脚图,从a,g引脚输入不同的的8位二进制编码,可显示不同 12 的的数字或字符;图(b)为共阴极结构,8段发光二极管的阴极连接在一起,阳极端分开控制,使用时公共端接地,要使那根发光二极管发亮,则对应的阳极端接高电平;图(c)为共阳极结构,8段发光二极管的阳极连接在一起,阴极端分开设置,使用时公共端接电源,要使哪根发光二极管亮,对应的阴极端接地。通常把控制发光二极管的7位二进制编码称为字段码。不同的数字或字符其字码段不一样,对于同一个数字和字符,共阴极连接和共阳极连接的字码段也不一样,共阴极和共阳极的字码段互为反码。 常见的数字和字符的共阴极和共阳极的字码段如下表所示( 2-2-1 ): 显示字符 共阴极字码段 共阳极字码显示字符 共阴极字码共阳极字码 段 段 段 0 3FH C0H C 39H C6H 1 06H F9H D 5EH A1H 2 5BH A4H E 79H 86H 3 4FH B0H F 71H 8EH 4 66H 99H P 73H 8CH 5 6DH 92H U 3EH C1H 6 7DH 82H T 31H CEH 7 07H F8H Y 6EH 91H 8 7FH 80H L 38H C7H 9 6FH 90H 8. FFH 00H A 77H 88H “灭” 00 FFH B 7CH 83H „„ „„ „„ 如图(d)所示,本设计中采用4位一体的时钟型LED显示器,简称“4,LED”,“:”的前2位显示“小时”的十位和个位 ,“:”的后2位显示“分”的十位和个位。 LED数码管的显示方式有两种:静态显示方式和动态显示方式。静态显示结构简单,显示方便,要显示某个字符时,直接在I,O线上发送相应的字段码,但是一个数码管需要8根I,O线,当数码管个数较少时,用起来方便,但是当数码管个数较多时,会占用很多的I,O线,所以此时往往采用动态显示方式,本系统用一个共阴极接法的4位时钟型LED显示器,它是由4个单独的LED和一个“:” LED组成,采用的是动态显示方式,即每个LED的段输出引脚在内部并联后,引出到器件的外部, 13 用一个I,O接口控制,而公共端即位码输入端不是直接接地,而是通过相应的I,O接口控制。它的工作过程为:第一步使位码输入端右边的第一个数码管的公共端D4为0,其余数码管的公共端为1,同时在段码输入端上发送右边第一个数码管的字段码,这时,只有右边第一个数码管显示,其余不显示;第二步使右边第二个数码管的公共管D3为0,其余的数码管的公共端为1,同时在段码输入端上发送第二个数码管的字段码,这时,只有右边第二个数码管显示,其余不显示,依次类推,直到最右端那个数码管,这样4个数码管轮流显示相应的信息,一次循环完毕后,下一次循环又这样轮流显示,从计算机的角度看是一个一个的显示,但是由于人的视觉暂留效应,只要循环的周期足够快,则看起来所有的的数码管就是一起显示了,它的优势在于动态显示所用的I,O接口信号线少,线路简单。只是软件开销大,需要CPU周期性地对它刷新,故要占用其大量时间。 段码输入端 abcdefgdpabcdefgdpabcdefgdpabcdefgdp dpdpdpdp D1D2D3D4位码输入端 图2-2-1 4-LED显示器内部结构原理图 LED的段驱动芯片的介绍: LED数码管的译码方式通常有两种,硬件译码方式和软件译码方式。硬件译码方式是指利用专门的硬件电路来实现显示字符到字码段的转换,而软件译码方式就是编写软件译码程序,通过译码程序来得到要显示的字符的字段码。在本设计中采用的是硬件译码方式,选择74LS48作为段驱动电路。该芯片具有锁存、译码、驱动的功能。即在输入端输入要显示字型的BCD码,在输出端就可以得到具有一定驱动能力的7段显示字型码。 图(a)给出了内部结构逻辑图,图(b)给出了74LS48的引脚图。引脚图中大写 14 字母A、B、C、D为BCD码的输入端,小写字母a、b、c、d、e、f、g为字型码输出端。表2,1给出了74LS48BCD段锁存/译码/驱动器的输入与输出信号的对应关系, 74LS48的作用是接收来自单片机的BCD码型的输入信号,经过锁存、译码和放大后,输出7段字型码到LED显示器,完成对BCD码到7段字型码的锁存、译码和驱动的功 能。 116Bvdd215Cf314LTg413BI/RBOa512RBIb611Dc710Ad89VSSe (a)74LS48内部结构逻辑 图 (b)74LS48芯片引脚图 74LS48BCD,7段码器输入/输出端信号对照如下表( 2-1-2 ) 输入端电平 输出端电平 对应16显示D C B A g f e d c b a 进制 字型 0 0 0 0 0 1 1 1 1 1 1 3FH 0 0 0 0 1 0 0 0 0 1 1 0 06H 1 0 0 1 0 1 0 1 1 0 1 1 5BH 2 0 0 1 1 1 0 0 1 1 1 1 4FH 3 0 1 0 0 1 1 0 0 1 1 0 66H 4 0 1 0 1 1 1 0 1 0 1 1 6DH 5 0 1 1 0 1 1 1 1 0 1 1 7DH 6 0 1 1 1 0 0 0 0 1 1 1 07H 7 1 0 0 0 1 1 1 1 1 1 1 7FH 8 1 0 0 1 1 1 0 1 1 1 1 6FH 9 2.2.2 LED的位驱动芯片的介绍 15 本设计中采用的LED位驱动芯片是ULN2003,ULN2003A电路是美国Texas Instruments公司和Sprague公司开发的高压大电流达林顿晶体管阵列电路,由七个硅NPN达林顿管组成。该电路具有的如下特点: , ULN2003的每对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下他它能 与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的 数据。 , NLN2003工作电压高,工作电流大,灌电流可达500mA,并且能够关态时承受50V 的电压,输出还可以在高负载电流并行运行。 , NLN2003采用DIP-16或SOP-16塑料封装。 其引脚图如图(a)所示,内部结构图如图(b)所示,ULN2003的IN1,IN7引脚是输入端,OUT1,OUT7引脚是输出端。该芯片的输入端引脚IN1、IN2、IN3、IN4与单片机的P1口连接,输出端引脚OUT1、OUT2、OUT3、OUT4与LED显示器的4个位码引脚D1,D4相连接。ULN2003接收来自单片机的位码输入信号,经过反相放大后输出,送到LED显示器位码引脚,完成对位码信号的反向和驱动。 116IN1OUT1215IN2OUT2314IN3OUT3413IN4OUT4512IN5OUT5611IN6OUT6710IN7OUT789COMM (a)ULN2003芯片的引脚图 (b)ULN2003内部结构逻辑图 2.2.3LED驱动电路与单片机的连接 单片机的P1口作为输出控制信号接口,其低四位与74LS48芯片连接,74LS48再与段码输入端相连,高四位与ULN2003的IN1—IN4相连,再由ULN2003的OUT1-OUT4与位码输入端相连。因为74LS48完成的是对BCD码到7段字型码的锁存、译码和驱动的功能,而对小数点位没有驱动作用,所以必须给4,LED显示器中的“:”符号设计一个驱动电路。dp(“:”)的驱动电路由VT2、R11、R12器件组成,在电路中的具体连接如图,VT2的基极与单片机的P1.5相连,当其为低电平时,VT2导通,dp段 16 被点亮。分析可知“:”与LED数码管的第二位一起被点亮;当VT2的基极为高电平时,VT2截止,dp(“:”)段熄灭,驱动中的上拉电阻保证了LED的可靠导通与截止。 硬件电路连接如图2-2-3所示 VCC VCCR11U1P1520R152916PSENWRR123017ALE/PRD1K11TXD100109R4RXDRESTVT25RBI18414X2BI/RBOg19315X1LTf9012289P27e2731P13610P26EA/VPDd26P12211P25Cc2514P11112P24T0Bb2415P10713P23T1Aa23P22221274LS48P21INT012112113D1P20INT1DISP1a7328P17bD2P07P1794337P16cP06P162346P15dP05P15110355P14U7eD3P04P148364P13P14115fP03P13IN1OUT15373P12P15214gD4P02P12IN2OUT263382P11P16313pP01P11IN3OUT3391P10P17412P00P10IN4OUT4511IN5OUT58051610IN6OUT679IN7OUT7ULN2003 图2-2-3 LED驱动电路与单片机的连接 驱动电路的工作原理为:当P1口的低四位输出段码控制信号的BCD码后,通过74LS48芯片的锁存、译码和驱动,在其输出端输出具有一定驱动能力的七段字型码,并通过ULN2003的反向后驱动达到明确有序的动态显示的目的。 ,LED的显示状态如表( 2-2-3 )所示: P1口的控制信号及4 点亮P1口输出控制字 74LS48输出段码 ULN2003输出位码 顺序 位码 段码 十六进制 gfedcba 十六进制 D1D2D3D4 1 1000 0000 80H 0111111 3FH 0111 2 0100 0001 41H 0000110 06H 1011 3 0010 0010 22H 1011011 5BH 1101 4 0001 0011 13H 1001111 4FH 1110 2.2 按键电路模块设计 该模块主要包括复位电路、晶体振荡器、独立式键盘和中断系统,其实现的功能主要包括两个方面:一方面是产生复位和控制IDS1024的录放功能,二是随时输入定时(闹钟)时间和对当前时间进行调整。为了实现这两项功能,接入了键盘输入电路。 17 2.3.1独立式键盘的介绍 键盘实际是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。键盘有独立式键盘和矩阵式键盘两种,在本设计中由于按键数目相对较少,故选择独立式键盘,独立式键盘就是各按键相互独立,每个按键各接一根I,O接口线,每根I,O接口线上的按键都不会影响到其他的I,O接口线。故通过检测I,O接口线的电平就可以很容地判断出哪个按键被按下了。 单片机对独立式键盘的控制方式有3种:程序控制扫面方式、定时扫描方式和中断扫描方式。 , 程序控制扫描方式:该方式只有当CPU空闲时才调用键盘扫描子程序,影响键盘 输入请求。 , 定时扫描方式:这种扫描方式中,通常利用单片机内的定时器产生定时中断,CPU 响应定时发出的中断请求,对键盘进行扫描,响应键盘的输入请求。 , 中断扫描方式:这种扫描方式中,当键盘上有键闭合时产生中断请求,CPU响应 中断,执行中断服务程序,判别键盘上闭合键的键号,并做响应的处理,这种方 式可以大大提高CPU效率。 EC”、“SET”、“ALM”、“NIC”、“RET”本键盘总共六个按键,分别命名为“PLAY”、“R 键,采用中断扫描方式进行扫描。 2.3.2中断系统的介绍 当CPU正在处理某项事物时,如果外界或内部发生了紧急事件,要求CPU暂停正在处理的工作转而去处理这个紧急事件,则正在执行的程序被打断,CPU响应该请求并转入相应的处理程序,待处理完以后再回到原来被打断的位置,继续执行原来的工作,这一过程称为中断。实现中断功能的部件称为中断系统,处理事件的过程称为事件响应过程。对事件的整个处理过程,称为中断服务,向CPU提出中断请求的源称为中断源,中断源向CPU提出的处理请求称为中断请求或中断申请。微型计算机一般允许有多个中断源,中断源有优先等级之分,当CPU正在处理一个优先级低的中断请求时,如果发生另一个比它高的中断请求,CPU能暂停正在处理的中断源程序,转去处理优先级高的中断请求,待处理完高优先级的中断请求以后,再回到原来正在处理的低优先级中断处理程序,这种高级中断源能中断低级中断源的中断处理称为中断嵌套。 18 单片机在引入中断以后,其功能大大增强。主要包括以下几点: , 同步工作:单片机有了中断功能以后,使CPU与外设由串行工作变成分时并行工 作。在CPU启动外设之后,继续执行主程序,而当外部设备数据准备好或要求CPU 对其进行相应处理之后,就向CPU发出中断请求,请求CPU中断主程序的执行, 转去执行输入输出工作,中断服务程序处理完毕后,CPU恢复执行原来的主程序, 外设得到新的数据之后继续工作,就这样实现了CPU和外设的同步工作,大大提 高了单片机的效率。 , 实时处理:在实时控制中,现场采集到的各种数据可在任何时刻发出中断请求, 要求占用CPU资源,若此时中断是开放的,并且没有比其更高级或同级的中断服 务在进行,则CPU可以对数据进行处理。 , 故障处理:如果计算机在运行过程中出现了事先预料不到的情况或故障(如掉电、 存储出错、溢出等),可以设计相关的中断服务程序,利用中断系统进行相应的 处理,而不必停机。 此外,多机系统、多任务分时操作和人机接口等,也都是建立在中断基础之上。 MCS-51单片机提供5个硬件中断源:两个外部中断源INT0和INT1;两个定时计数器T0和T1的溢出中断TF0和TF1;一个串行口发送TI和接受RI中断。 外部中断INT0和INT1:外部中断源INT0和INT1的中断请求从外部引脚P3.2和P3.3输入,主要用于自动控制、实时处理、单片机掉电和设备故障的处理,他们有两种触发方式,即电平触发和跳变触发,通过对特殊功能寄存器TCON编程来选择。其高四位用于定时计数器控制,低四位用于外部中断控制,其具体形式如下图: TCON D7 D6 D5 D4 D3 D2 D1 D0 (88HTF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 ) 每位的具体功能介绍如下: , TF1(TF0):定时计数器T1(T0)的溢出标志位。当定时计数器T1(T0)计满时, 由硬件使它置位,如中断允许则触发T1(T0)中断。进入中断处理后由内部硬件 电路自动清除。 , TR1(TF0):定时计数器T1(T0)的启动位,可由软件置位或清零,当TR1(T0) 19 =1时启动;TR1(T0)=0时停止。 , IT1(IT0):外部中断1(或0)触发方式控制位。IT1(或IT0)=0,则选择外部 中断为电平触发方式;IT1(或IT0)=1,则选择外部中断为边沿触发方式。 , IE1(IE0):外部中断1(或0)的中断请求标志位。在电平触发方式时,CPU在 每个机械周期的S5P2采样P3.3(或P3.2),若P3.3(或P3.2)引脚为高电平, 则IE1(IE0)清零,若P3.3(或P3.2)引脚为低电平,则IE1(IE0)置1,向 CPU请求中断;在边沿触发方式时,若第一个机械周期采样到P3.3(或P3.2)引 脚为高电平,第二个机械周期采样到P3.3(或P3.2)引脚为低电平时,由IE1 (或IE0)置1,向CPU请求中断。 定时计数器T0和T1中断:当定时计数器T0(或T1)溢出时,由硬件置TF0(或TF1)为1,向CPU发送中断请求,当CPU响应中断后,将由硬件自动清除TF0(或TF1)。定时计数器的工作方式寄存器TMOD只能通过字节传送指令进行赋值,前四位是T1方式字段,后四位是T0方式字段, 其基本格式如下: TMOD D7 D6 D5 D4 D3 D2 D1 D0 GAET C,T M1 M0 GATE C,T M1 M0 (89H) , C,T位:定时器计数器的选择位,1是计数器,0是定时器。 , GATE位:门控位,GATE=1时,由控制位TRx和引脚INTx共同控制启动;GATE=0 时,仅由控制位TRx启动。 M1、M0位:工作方式选择位,具体工作方式如下表: M1 M0 工作方式 功能 0 0 方式0 初值寄存器TL的低5位与TH的8位构成13位计数器 0 1 方式1 寄存器TL与TH构成16位计数器,记满溢出,16计数器回0 1 0 方式2 自动装载8位计数器,TL溢出,TH内容送TL 1 1 方式3 定时器T0分成两个8位定时器,T1停止工作 以下为四种方式的具体解释: , 方式0:当M1M0两位为00时,定时计数器工作于方式0,如表所示,16位的加 20 法计数器只用了13位,计数时,TL低5位记满时向TH进位,当TH也记满时则 溢出,使TFx置位。如果中断允许,则提出中断请求。另外也可通过查询TFx来 判断是否溢出。由于采用13位的定时计数方式,因而最大计数值为2的13次幂, 为8192,如果计数值为N,则置入的初值,为:,,8192-N。 当C,T=0时,控制开关接通内部振荡器,T0对机械周期进行计数,其定时时间为: t=(-X)机械周期 当C,T=1时,控制开关接通外部输入信号,当外部输入信号电平从1跳变到0时,加1计数器加1,处于计数工作方式。 当GATE=0时,只要TCON中的TRx为1,TL和TH组成的13位计数器就开始计数。 当GATE=1时,此时仅TRx=1仍不能使计数器计数,仍需要INTx引脚为1才能使计数器计数。 在方式0计数的过程中,当计数器计满时,计数器的计数过程并不会结束,计数脉冲来同样会进行加1计数。只是这时计数器是从0开始计数的,是满值的计数。如果要重新实现N个单位的计数,则这时应重新置入初值。 , 方式1:当M1M0两位为01时,定时计数器工作于方式1,如表所示,16位的加 法计数器全部用上,计数时,TL记满时向TH进位,当TH也记满时则溢出,使 TFx置位。同样可通过中断或查询来处理溢出信TFx。由于采用16位的定时计数 方式,因而最大计数值为2的16次幂,为65536,如果计数值为N,则置入的初 值,为:,,65536-N。其定时时间为:t=(-X)机械周期 串行中断:MCS-51的串行口中断源对应两个中标志断位,串行口发送中断标志位TI和串行口接收中断标志位RI。无论哪个标志位置1,都请求串行中断。到底是发送中断TI还是接受中断RI,只有在中断服务程序中通过指令查询来判断。串行口中断响应后,不能由硬件自动清零,必须有软件对TI或RI清零。 21 , 中断允许控制:MCS-51单片机中没有专门的开中断和关中断指令,对各个中断源 的允许和屏蔽是由内部的中断允许寄存器IE的各位来控制的。中断允许寄存器 IE的字节地址为A8H,可以进行位寻址,其各位的定义如下: IE D7 D6 D5 D4 D3 D2 D1 D0 (A8H) EA ET2 ES ET1 EX1 ET0 EX0 中断允许寄存器IE 对其中每位的具体说明如下: , EA:中断允许控制位。EA=0,屏蔽所有的中断请求;EA=1,开放中断。EA作用是 使中断允许形成两级控制。即各中断源首先受EA控制;其次还要受各中断源自 己的中断允许位控制。 , ET2:定时器计数器T2的溢出中断允许位,只用于52子系列,51子系列无此位。 ET2=0,进制进制T2中断;ET2=1,允许T2中断。 , ES:串行口中断允许位。ES=0,禁止串行口中断;ES=1,允许T1中断。 , ET1:定时器计数器T1的溢出中断允许位。ET1=0,禁止T1中断;ET1=1,允许 T1中断。 , EX1:外部中断INT1的中断允许位。EX1=0,禁止外部中断INT1中断;EX1=1, 允许外部中断INT1中断。 , ET0:定时器计数器T0的溢出中断允许位。ET0=0,禁止T0中断;ET0=1,允许 T0中断。 , EX0:外部中断INT0的中断允许位。EX0=0,禁止外部中断INT0中断;EX0=1, 允许外部中断INT0中断。 系统复位时,中断允许寄存器IE的内容为00H,如果要开放某个中断源则必须使IE中的总控制位置位和对应的中断允许位置位。 优先级控制: MCS-51单片机有5个中断源,每个中断源有两级控制:高优先级和低优先级。每个中断源都可以被编成为高优先级或低优先级,这样可以实现两级的中断嵌套,中断优先级寄存器IP的字节地址为B8H,可以进行位寻址,其每一位的定义如下: IP D7 D6 D5 D4 D3 D2 D1 D0 22 (B8H) PS PT1 PX1 PT0 PX0 , PS:串行口中断优先级控制位。PS=1,串行口定义为高优先级中断源;PS=0,串 行口定义为低优先级中断源。 , PT1(PT0):T1(T0)中断级优先级控制位。PT1(PT0)=1,定时器计数器1(0)定 义为高优先级中断源;PT1(PT0)=0.定时器计数器1(0)定义为低优先级中断源。 , PX1(PX0):外部中断1(0)中断优先级控制位。PX1(PX0)=1,外部中断1(0)定 义为高优先级中断源;PX1(PX0)=0,外部中断1(0)定义为低优先级中断源。 中断响应遵循以下原则: , 一个正在执行的低优先级中断服务程序可以被高优先级的中断服务程序所中断。 , 同级的或低级的中断源不能中断正在执行的同级或高级的中断服务程序。 , CPU同时接受到几个中断请求时,首先响应优先级最高的中断请求。 同一优先级中的各中断源同时请求中断时,由内部的查询逻辑来确定响应的次序。当系统复位时,单片机的5个中断源都在同一优先级,此时如果其中的几个中断源同时产生中断请求,中断源的到响应的顺序取决于中断系统内部的查询顺序,也就是说,除了IP设定的优先级外,若几个中断源处于同一级,则按照下表同级中断源的优先级顺序响应中断请求( 2-3-1 )。 中断源 优先级顺序 外部中断0(IE0) 1(最高) 定时器0溢出(IF0) 2 外部中断1(IE1) 3 定时器1溢出(IF1) 4 串行口中断(RI、TI) 5 中断的响应过程和中断矢量地址:中断响应是在满足CPU的中断条件之后,CPU对中断源中断请求的回答,在这一阶段,CPU要完成中断服务以前的所有准备工作,包括保护断点和把程序转向中断服务程序的入口地址。 一个中断源的中断请求被响应,需满足一下条件: , 又中断源发出中断请求。 , CPU开中断,即中断允许位EA=1。 23 , 申请中断的中断源的中断允许位=1,即该中断没有屏蔽。 , 无同级或更高级中断正在被服务。 中断响应的过程为一下四步: , 根据中断请求源的优先级高低,对相应的优先级状态触发器置1. , 保护断点,即把程序计数器PC的内容压入堆栈保存。 , 清除内部硬件可清除的中断请求标志位(IE0、IE1、TF0、TF1)。 , 把响应的中断服务程序入口地址送入PC中,从而转入相应的中断服务执行。 中断源 入口地址 外部中断0 0003H 定时计数器0 000BH 外部中断1 0013H 定时计数器1 001BH 串行口 0023H 中断响应的主要内容是由硬件自动生成一条长调用指令“LCALL addr16”。这里的addr16就是程序存储区中相应中断源的中断入口地址。如对于外部中断1的响应,产生的长调用指令为“LCALL 0013H”。生成LCALL指令后,紧接着就由CPU执行该指令。首先是将程序计数器PC的内容压入堆栈以保护断点,再将中断入口地址装入PC,使程序转向相应的中断入口地址,CPU从相应的入口地址开始执行中断服务程序,直到遇到一条RETI指令为止。若用户在中断服务程序开始安排了保护现场指令,则在RETI指令前应有恢复现场指令。 2.3.3键盘与单片机的接口电路设计 如图2,6所示,将“INC”键、“RET”键直接与单片机的P3.0与P3.1口连接;“SET”与“ALM”通过74LS08相与后连接到INT1口,“REC”与T0口通过74LS08相与后连接到INT0口,其中T0、T1口作为基本输入输出口使用。 24 PLAYS1 R71KRSTS2 R8200VCCC10U12916PSENWR,22uF3017ALE/PRD11TXD109RXDRESTC9R13B122PF18X21K19X1C828VCC12KHzP2722PF2731P20P26EA/VP26P21P2525142P22P24T024153RECS3P20P23T174LS08231P21P2222125SETS4P22P21INT021136P20INT174LS084ALMS5328P07P17337+1S6P06P16346P05P15355RETS7P04P14364P03P13373P02P12382P01P11391P00P10 8051 图2-3-2 按键与单片机的硬件连接 “PLAY”键所实现的功能是进行语音信息的播放, “REC”键是进行语音信息的录制。如果在单片机的INT0口产生一个中断,单片机先判断T0口是否是低电平,如果是,表明 “PLAY”键被按下了,就执行放音操作,如果不是,则表明按下的是“REC”键,程序转到录音操作。这两键可与“,1”、“RET”键的配合使用对进行不同地址段的录放、音选择。 “,1”键用来选择录音的段数,“RET”用来确认录、放音段已完成。 “ALM”键所实现的功能是进行闹钟时间的设置,“SET”键则是对当前时间进行调整。如果在单片机的INT1口产生一个中断,单片机先判断T1口是否是低电平,如果是,表明“ALM”键被按下了,单片机就去执行设置闹钟时间的操作,如果不是,表明按下的是“SET”键,则单片机就是执行对当前时间调整的操作。这两键可与“,1”、“RET”键同时完成各自的功能,“,1”键用来对调整位进行加1操作,“RET”用来确认调整位已修改完。 键盘的硬件电路设计只能保证六个按键信号的可靠进入,要想完成键盘的输入功能,还要靠软件编程来具体实现。设置当前时间和闹钟时间的中断服务程序,请参考软件设计一节INTA、INTB子程序设计。 25 2.4 蜂鸣电路模块设计 U12916PSENWR本设计中选择了蜂鸣器来实现定时(闹钟)时间的声音提醒,其电路如图2,73017ALE/PRD11TXDVCC109所示,在单片机P2.7口通过限流电阻R9接入蜂鸣器(HA)作为三极管VT1的发射极RXDREST 189012X2负载,当P2.7,0时,VT1导通时,蜂鸣器中有电流通过,发出蜂鸣音。反之蜂鸣器19X1R928P272731不发声。 100P26EA/VPVT126P252514P24T02415P23T123P222212P21INT0HA22113P20INT1GND328P07P17337P06P16346P05P15355P04P14364P03P13373P02P12382P01P11391P00P10 8051 图2-4-1 蜂鸣电路原理图 2.5语音录放模块设计 在本设计中选用了ISD1420作为系统的语音芯片,在确保语音质量好的情况下使其元器件达到最少。 2.5.1 ISD1420芯片的介绍 ISD1420是美国ISD公司出品的新型单片优质语音录放电路,较之以往所有的语音电路,具有专利技术的模拟处理方式,使录放音质极佳,没有常见的背景噪音,且电路断点后语音内容仍不丢失。电路内部由振荡器、语音存储单元、前置放大器、自动增益控制电路、抗干扰滤波器、输出放大器组成。一个最小的录放系统仅由一个麦克风、一个喇叭、两个按钮、一个电源、少数电阻电容组成。 ISD1420的基本特点: , 重现优质原声。 , 基本上不耗电信息存储。 , 信息可保存100年,可反复录放10万次。 , 选址处理多达160段信息。 , 具有自动节电模式。 , 能维持状态,仅需0.5电流 ISD1420的电特性: , 工作电压:5V。 , 静态电流:0.5,2 , 工作电流:15,30mA ISD1420芯片型号的最后2位数字表示语音录放时间的长度。这种芯片录放音时 26 间最长为20s;外围元件简单,仅需少量阻容元件、麦克风即可组成一完整录放系统;模拟信息存储重放音质极好,并有一定混响效果;待机时低功耗(仅0.5μA),典型放音电流15mA,可扩充级联;可持续放音,也可分段放音,最小分段20s/160段=0.125s/段,可分段数160段;录放次数达10万次;断电信息存储,无需备用电池,信息可保100年;操作简单,无需专用编程器及语音开发器;高优先级录音,低电平或负边沿触发放音,单电源供电,典型电压+5V。下面简要介绍ISD1420语音芯片引脚及功能、内部逻辑结构以及软件设计。 电路外形图以及引出端功能说明: 112828A0A0V+V+222727A1A1RECREC332626A2A2XCLKXCLK442525A3A3RECLEDRECLED552424A4A4PLAYEPLAYE662323A5A5PLAYLPLAYL772222NCNCNCNC882121NCNCANA OUTANA OUT992020A6A6ANA INANA IN10101919A7A7AGCAGC11111818NCNCMIC REFMIC REF12121717DGNDDGNDMICMIC13131616AGNDAGNDV+V+14141515 SP-SP-SP+SP+ 图2-5-1ISD1420的外部引脚图 A0-A7:地址输入端或控制命令输入端。当A7、A6同时为高电平时,A4-A0为控制, 命令;否则,A0-A7为地址。 DGND:数字信号地线。 , AGND:模拟信号地线。 , SP-,SP+:音频信号输出端,连接8,16Ω扬声器。 , V+:模拟信号电源,,5V. , MIC:话筒参考输入端,通过电容耦合,连接驻极体话筒。 , MICREF:话筒参考输入端。 , AGC:自动增益控制端,调整芯片内部前置放大器增益,使录入信号不失真。 , ANA IN:模拟信号输入端。 ANA OUT:模拟信号输出端。 , PLAYL:放音控制电平触发端。该端为低电平时,芯片进入放音周期;当该端为高, 电平时,停止放音。 PLAYE:放音控制脉冲触发端。该端输入由高电平向低电平跳变的下降沿时,芯片, 进入放音周期。 RECLED:录音显示端。该端接发光二极管,在录音时作录音指示灯。 , XCLK:时钟控制端 , REC:录音控制端。该端为低电平时,芯片进入录音状态,录音期间该端必须保持, 低电平,REC信号的优先级高于PLAYL和PLAYE两种放音信号。 ISD1420的内部逻辑结构图: 27 ISD1420系列语音集成电路由内部时钟电路、自动增益控制电路、前置放大电路滤波器、差动功率放大器、电源电路、存储器EEPROM、地址译码电路、存储控制电路等组成,其内部电路逻辑结构框图如图3所示。 图2-5-2 ISD1420内部结构框图 ISD1420的地址模式: A0,A7地址输入有双重功能,根据地址中的A6和A7的电平状态决定功能。如果A6和A7有一个是低电平,A0,A7输入全解释为地址,作为起始地址用。根据PLAYL、PLAYE或REC的下降沿信号,地址输入被锁定。A0,A7由低位向高位排列,每位地址代表125毫秒的寻址,160个地址覆盖20秒的语音范围(1600.125s=20s)。录音及放音功能均从设定的起始地址开始,录音结束由停止键操作决定,芯片内部自动在该段的结束位置插入结束标志EOM,而放音时芯片遇到EOM标志即自动停止放音。 操作模式:如果A6和A7同为高电平时,他们即为模式位。地址位仅作为输入端,在操作过程中不能输出内部地址信息。使用操作模式注意以下两点: , 所有初始操作都是从0地址开始,0地址是ISD1420存储空间的起始端,以后的 操作可根据模式的不同,而从不同的地址开始工作。当电路中录放音转换或进入 省电电路状态时,地址计数器复位为0。 , 当PLAYL、PLAYE或REC变为低电平,同时A6和A7为高电平时,执行对应操作 模式。这种操作模式一直执行到下一个低电平控制输入信号出现为止,这一刻现 行的地址,模式信号被取样并执行。操作模式可以与微控制器一起使用,也可用 硬件连线得到所需系统操作。 A0:信息检索(仅PLAYE和PLAYL)不知道每个信息的实际地址,A0可使操作者快速检索每条信息,A0每输入一个低脉冲,可使内部地址计数器跳到下一个信息。这种模式仅用于放音,通常与A4操作同时应用。 A1:删除EO吗标志(仅REC)可使录入的分段信息称为连续的信息,用A1可删除掉每段中间信息后的EOM标志,仅在所有信息后留一个EOM标志。当这个操作模式完成时,录入的所有信息就作为一个连续的信息放出。 A3:循环重放信息(仅PLAYE或PLAYL)可使存于存储空间始端的信息自动地连续重放。一条信息可以完全占满存储空间,那么循环就可以从头至尾进行工作,并由始至终反复重放。 28 A4:连续寻址:在正常操作中,当一个信息放出,遇到一个EOM标志时,地址计数器会复位,A4可防止地址计数器复位,使得信息连续不断的放出。 A2和A5未用。 ISD1420P地址表功能: 地址状态 功能说明 DIP1 2 3 4 5 6 7 8 (ON=0,OFF=1) 开 关 地A0 A1 A2 A3 A4 A5 A6 A7 (1为高电平,0为低电平,*址为高电平或低电平) 位 0 0 0 0 0 0 0 0 一段式最长20秒录放音,从 首地址开始。 1 0 0 0 0 0 0 0 以八位二进制表示地址,每个 地址代表125毫秒。 地0 0 0 0 0 0 1 0 一段从A6地址开始的12秒录址放音。 模 式 * * * * * * * 0 只要A6和A7有一位是0,就 处于地址模式。 * * * * * * 0 * 0 0 0 1 0 0 1 1 循环放音操作,按一下PE键 可循环放音,按PL键停止; 或按住PL键放音,松开即停 止。 操0 0 0 0 1 0 1 1 按顺序连续分段录放音,每段作语音长度不限。 模 式 0 0 0 0 0 0 1 1 地址指针复位,开始录放第一 段。 1 0 0 0 1 0 1 1 按PE键可快速选段放音。 在芯片的引脚中,模拟语音信号从MIC和MICREF两个端口输入,经放大器放大后又从ANAOUT端输出,然后通过外接耦合电容输入到ANAIN端,该信号再经适当放大后就可被时钟信号采样存储到EEPROM中。 2.5.2 ISD1420芯片与单片机的连接 为实现语音播报的录入和播放功能,我们在此接入了ISD1420语音芯片,并采用锁存器74LS377对其控制锁存达到良好的语音信息的录制与播报。其硬件电路图如图2-5-3所示。 29 VD1GREEC7U20.001uF128A0VCCD216VCCA1VCCAQ0GND312A2VSSDQ1413A3VSSAQ2514A4SP+R10Q3615A5SP-Q4920R1A6ANA IN4.7KQ510,1KA7C2Q62321PLAYLOUTR14Q7240.1uFPLAYE2718RECMIC REFYS1VCC17GND1MIC VD2R625192RECLEDAGCR3261KXCLKHA1RED,10K1KC1GNDISD1420C3R25.1K220uF0.1uFPLAYS1C40.1uF,C6R4R54.7uFMIC1470K10KU12916C5PSENWR3017ALE/PRDGND11TXD1090.1uFRXDREST18X219X128P272731P26EA/VP26P252514P24T02415P23T1U323P22P0032Q02212D0Q0P21INT0P0145Q12113D1Q1P20INT1P0276Q2D2Q2P0389Q3P07328D3Q3P07P17P041312Q4P06337D4Q4P06P16P051415Q5P05346D5Q5P05P15P061716Q6P04355D6Q6P04P14P071819Q7P03364D7Q7P03P13P02373P02P12P2611P01382CLKP01P111P00391EP00P1074LS3778051 图2,5-3 语音芯片与单片机的连接 3. 系统软件的总体构成与实现 因为对语音播报记事器进行软件设计,要涉及到很多的子程序,如录音、放音、定时等,所以我针对上面的问题考虑用模块化设计方法进行软件的设计,其优点是: (1)每个模块的程序结构简单,任务明确,易于编写、调试和修改。 (2)程序可读性好,对程序修改可局部进行,其他部分可以保持不变,便于功能扩充和版本升级。 (3)对于使用频繁的子程序可以建立子程序库,便于多个模块调用。 (4)便于分工合作,多个程序员同时进行程序的编写和调试工作,加快软件研制进度。 3.1 语音播报定时器系统软件设计及框图 根据设计要求,首选要确定软件设计方案,思考软件设计中应包括哪些功能,其次是规划为了完成这些功能需要分成多少个功能模块,以及每一个程序模块的具体任务是什么。由于对每个模块进行划分时有很大的灵活性,但也不能随意划分。划分模块时应遵循下述原则: (1)每个模块应具有独立的功能,能产生一个明确的结果。 (2)模块之间的控制参数应尽量简单,数据参数应尽量少。控制参数是模块进入和退出的条件及方式,数据参数是指模块间的信息交换方式、交换量的多少及交换的频繁程度。 (3)长度适中。模块语句的长度通常在20,100条较合适。模块太长时,分析 30 和调试比较困难;模块太短则信息交换太频繁,也不合适。 (4)根据模块的划分原则,将该程序划分成五个模块,如图3-1所示。 主 程 序 L 当前定 E 时间时 键 D录 定时一盘 放 时间显分控 制 音 设置 示 钟 中 断 图3-1 主程序及其子程序模块 3.2 电子播报记事器的主程序设计 主程序的内容一般包括:主程序的起始地址,中断服务程序的起始地址,有关内存单元及相关部件的初始化和一些子程序调用等等。 )程序的起始地址 (1 MCS,51系列单片机复位后,(PC),0000H,而0003H,002BH分别为各中断源的入口地址,所以,编程时应在0000H处写一跳转指令。 当CPU接收到中断请求信号予以响应后,CPU把当前的PC内容压入栈中进行保护,然后转入相应的中断服务程序入口处执行。一般应在相应的中断服务程序入口处写一条跳转指令,并以跳转指令的目标地址作为中断服务程序的起始地址进行编程。以/INT0为例,中断矢量地址为0003H,中断服务程序从INTA标号地址开始。 (2)主程序的初始化内容 对主程序初始化,其实是对将要用到的MCS,51系列单片机内部部件或扩展芯片进行初始化,使其工作状态得到一个初始设定。如应对特殊功能寄存器IE、IP进行初始化,因为8051复位后,IE、IP中的内容均为00H,所以应对其进行初始化编程, [1]以开放CPU中断,允许某些其他中断源中断和设置中断优先级等。 对于本设计,用T0、T1、INT0、INT1四个中断,其中: T0中断: T0定时中断,达到LED动态扫描的目的。 T1中断: T1定时中断,达到每分钟从DS1302中读取当前时间的目的。 INT0中断:接受外部中断信息,达到语音信息的录制与播报的目的。 31 INT1中断:接受外部中断信息,达到对当前时间的调整和闹钟时间的设置的目的。 (3)代码转换程序 由于日常我们都是识别十进制数(BCD码),而计算机它只识别二进制数,因此,在程序设计中经常要涉及代码的转换。即将当前时间的二进制数转换成BCD码,并送到显示缓冲区最终显示出来。 (4)在主程序中进行各项初始化设置后,首先CPU会先查询当前有没有对闹钟设初值,如果有,就把此闹钟时间与当前时间相比较,看看是否到了闹钟所定的时间,如果到了,就进行语音提示,如果没有到,CPU就对P3.0口进行扫描,判断“,1”键有没有按下,如果按下, 4,LED就会显示当前的年份、月份、日期、星期、小时、分钟,满足人们的查询要求。 (5)程序设计框图参照图3-2所示。 32 开始 设置各级中断服 务程序入口地址 N 设置堆栈指针 “+1”键按下否, Y 设置起始日期 显示当前年份 设置显示缓冲区 Y “RET”键按下否, DS1302初始化 N N 定时器T0、T1初始化“+1”键按下否, Y 设置中断优先级 显示当前月、日 显示当前小时、分钟 Y “RET”键按下否, N 有定时时间否, N N Y “+1”键按下否, N 定时时间到否, Y Y 显示当前星期 语音提示 N “RET”键按下否, 蜂鸣提醒 Y 图3-2 主程序流程图 33 4.系统软件各模块的设计与实现 本设计中大部分具体的操作都以子程序的形式出现在程序中,从功能上来讲主要包括“录放音”、“当前时间调整及时钟设置”、“LED动态显示”、“定时一分钟中断”及“键盘接受”五个模块。 4.1录音与放音模块设计 4.1.1 录音与放音选择模块设计 对INTO外部中断,不能直接接入是因为INT0的外部中断有两个,所以直接接入是不可以的,我们采用对T0口进行扫描,从而解决了这一问题。 由硬件电路图可以看出来,有两种方法可以使INT0口产生中断,一是当“PLAY”键按下时,另一种是“REC”键按下时。当CPU接收到INT0口产生的中断时,先对T0口进行扫描,如果T0口为低电平,表明“PLAY”键被按下了,CPU则进行放音操作;如果T0口为高电平,表明按下的是“REC”键,CPU则去执行录音操作。 其程序流程图如图3,3所示。 INTA服务程序 关中断 保护现场 跳转到放 N “REC”键按下否, 音子程序 Y 跳转到录音子程序 恢复现场 开中断 RETI返回 图3-3 录音与放音选择模块设计的程序流程图 4.1.2 录音模块设计 在录音控制中,录音顺序号位显示后通常应先调整,并通过“RET”键来判断是否需要进行调整,如果“RET”键按下了,表明不进行调整,如果没有按下,则表明 34 需要进行调整。调整时,用“,1”键来完成调整 ,每按下一次,被调整值就做加1调整,调整结束后,按下“RET”键进行确认。之后,便根据顺序号,在相应的起始地址开始录音,在录音完成后,按下“RET”键来表明录音操作已完成。 其程序流程图如图3,4所示。 录音子程序 调整录音顺序号 显示录音顺序号 Y 调用录放音子程序录 顺序号,1, 入从40H的语音信息 N Y 调用录放音子程序录 顺序号,2, 入从48H的语音信息 N Y 调用录放音子程序录 顺序号,3, 入从50H的语音信息 Y 调用录放音子程序录 顺序号,4, 入从58H的语音信息 调用录放音子程序录 入从60H的语音信息 RET返回 图3,4 录音程序流程图 4.1.3 放音模块设计 放音子程序的实现方法与录音控制子程序的实现方法大体相同,就不作介绍了,其程序流程图如图3-5所示。 35 放音子程序 调整放音顺序号 显示放音顺序号 调用录放音子程序播Y 顺序号,1, 放80H的语音信息 N Y 调用录放音子程序播 顺序号,2, 放88H的语音信息 N 调用录放音子程序播Y 顺序号,3, 放90H的语音信息 N Y 调用录放音子程序播 顺序号,4, 放98H的语音信息 调用录放音子程序播 放A0H的语音信息 RET返回 图3,5 放音程序流程图 4.1.4 录放音控制模块设计 本模块的设计所实现的功能是使74LS377在P2.6口产生一个上升沿脉冲,使得 74LS377在这个上升沿脉冲时将单片机送到D端的地址锁存到Q端,并等待ISD1420 取走该地址,完成单片机对语音芯片ISD1420传送地址的不同时序的控制。 其程序流程图如图3,6所示。 36 录放音控制子程序 将P2.6口置低电平 将单片机A中的内容送到P0口 将P2.6口置高电平 产生一上升沿脉冲 将P0口的地址锁存 到74LS377的Q端 RET返回 图3-6 录放音控制程序流程图 4.2当前时间的调整与闹钟的时间设置模块设计 语音播报的主要特点之一就是可以对其播报事件的时间随时设定,并做好相应的 时间调整,下面将主要论述到如何来实现这一功能以达到预期的目的。 4.2.1 当前时间的调整与闹钟的时间设置选择模块设计 同INT0口一样,INT1口也要接入两个外部中断,其实现方法与INT0中断选择相 同,其流程图如图3,7所示。 INTB服务程序 关中断 保护现场 Y 跳转到设置 “ALM”键按下否, 闹钟子程序 N 跳转到当前时 间调整子程序 恢复现场 开中断 RETI返回 图3,7 时间的调整与闹钟的时间设置选择程序流程图 37 4.2.2 调整当前时间程序设计 该子程序主要实现的功能是对当前时间进行调整。在实现其功能时,将调整年、星期、调整月、日和调整小时、分的值又分为了三个子程序。 程序先显示29H单元存放的数,同时可以通过“,1”键进行调整,并且以“RET”键来进行确认。程序还对29H单元中存放的数进行判断,看是否在1,3之间,如果不是就将其置1,并使其在1,3之间循环。 取29H中的数分别进行比较,如果29H单元中存放的数字是1,程序便转入到对年、星期值的调整;如果29H单元中存放的数字是2,程序便转入到对月、日值的调整;如果29H单元中存放的数字是3,程序便转入到对时、分值的调整。如果不是以上值,程序便转入到对小时、分钟值的调整。其流程图如图3,8所示。 当前时间调整子程序 显示29H中调整序号 按“,1”键调整序号 N (29H),4, Y (29H)=1 N “RET”按下否, Y N (29H),1, Y 调整年、星期的值 N (29H),2, Y 调整月、日的值 调整小时、分钟的值 RET返回 图3,8 调整当前时间程序设计流程图 38 (1)调整年、星期的子程序先显示年份的后两位,并通过“RET”键来判断是否需要进行调整,如果“RET”键按下了,表明不进行调整,如果没有按下,则表明需要进行调整。调整时,用“,1”键来完成调整 ,每按下一次,被调整值就做加一调整,调整结束后,按下“RET”键进行确认。这时,就进入到对星期的调整,其调整方法与年份的调整相同。 其流程图如图3,9所示。 调整年份、星期的子程序 显示年份的后两位 Y “RET”键按下否, N 按“,1”键进行调整 显示星期几 Y “RET”键按下否, N 按“,1”键进行调整 N (37H),8, Y (37H),1 RET返回 图3-9 调整年、星期的子程序流程图 (2)调整月份、日期的子程序先显示月份,并通过“RET”键来判断是否需要进行调整,如果“RET”键按下了,表明不进行调整,如果没有按下,则表明需要进行调整。调整时,用“,1”键来完成调整 ,每按下一次,被调整值就做加一调整。因为每年只有12个月,所以不能出现12个月以上的数字,所以将月份的值设置有0,12之间。当月份调整完后,按下“RET”键进行确认。程序就转入到对日期进行调整的部分。因为2月份只有28天,所以不能出现28以上的数字。所以当月份是二时,必须将日期控制在1,28之间,其他月份限制在1,31之间,在调整结束后,按“RET” 39 键进行确认。 其程序流程图如图3,10所示。 Y “RET”键按下否, N 调整月、日的子程序 按“,1”键进行调整 显示月份 N (36H),2, Y Y “RET”键按下否, N (35H),29, N Y 按“,1”键进行调整 (35H),1 N (36H),13, Y (36H),1N (35H),32, Y (35H),1 显示日期 RET返回 图3-10 调整月份、日期的子程序流程图 (3)调整小时、分的子程序先显示当前小时,并通过“RET”键来判断是否需要进行调整,如果“RET”键按下了,表明不进行调整,如果没有按下,则表明需要进行调整。调整时,用“,1”键来完成调整,每按下一次,被调整值就做加一调整。因为每天只有24个小时,所以其值只能在0,23之间,调整完毕后,按下“RET”键进行确认。程序就转入到对分钟的调整部分,因为一个小时只有60分钟,所以不能出现60,因此必须将分钟的值控制在0,59之间。 其流程图如图3,11所示。 40 调整小时、分的子程序 显示小时 Y “RET”键按下否, N 按“,1”键进行调整 N (34H),24, Y (34H),0 显示分钟 Y “RET”键按下否, N 按“,1”键进行调整 N (33H),60, Y (33H),0 RET返回 图3-11 调整小时、分的子程序流程图 4.2.3 闹钟设置子程序 闹钟设置子程序实现的功能是对闹钟时间进行设定。先显示闹钟的顺序号,如果 需要调整,则配合使用“,1”键和“RET”键对其进行调整。然后对当前小时,和分 钟进行调整,因为其调整方法与前面大体相同,这里就不再说明。 其程序流图如图3,12所示。 41 闹钟时间设置子程序 显示闹钟顺序号 调整闹钟顺序号 显示小时 按“,1”键调整 N (3BH),24, Y (3BH),0 N “RET”键按下否, Y 显示分钟 按“,1”键调整 N (3AH),60, Y (3AH),0 N “RET”键按下否, Y RET返回 图3-12 闹钟设置程序流程图 4.3 LED动态显示模块设计 在采用动态扫描方式时,要使得LED显示的比较均匀,以有足够的亮度,需要设 置适当的扫描频率。当扫描频率在70Hz左右时,能够产生足够的图形和较好的显示 效果。一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为 1ms。 在单片机中,定时功能既可以由硬件(定时/计数器)实现,也可以通过软件定 时程序实现。软件延时程序占用CPU的时间,因此,它降低了CPU的利用率;硬件定 42 时是利用单片机内定时器定时,启动以后定时器可与CPU并行工作,不占用CPU的时间,使CPU有较高的工作效率。 本设计中,采用硬件定时和软件定时并用的方式,即用定时器0溢出中断功能10ms实现定时,通过软件延时程序1ms的定时。 1.T0定时器中断服务程序的功能 (1)从显示缓冲区分别取出4位LED显示器显示数据的位码和段码,送到P1口,依次显示每一位,每一位的显示时间为1ms,显示4位需要4ms的时间。 (2)在设置当前时间或输入闹钟时间时,当前调整位应具有闪烁功能,用来显示当前调整位是哪一位。因此,在每一位显示之前都要判断,该位是否闪烁位,然后决定进行正常显示还是闪烁显示。 (3)LED显示器的每一位的显示时间是1ms,延时1ms子程序是典型的软件定时程序。 2. 定时器T0的计数初值 设时钟频率为6MHz,1个机器周期时间为2μs.T0定时器产生10ms的定时,可以计算出计数值和计数初值: 计数值,定时时间/机器周期时间,10ms/2μs,5000 计数初值,65536,5000,60536,EC78H 初值寄存器的初值为:TH0,0ECH,TL0,78H 工作方式寄存器TMOD,×1H。 T0定时器中断服务程序流程图如图3,13所示。 43 T0中断服务程序 保护现场 关T0中断服、开其他中断 设置段、位码缓冲区指针 设置显示位数 Y 是闪烁位否, N 将位码和段码值送P1端口 显示某位、延时 显示位数,1 1ms 修改显示缓冲区指针显示位数减1 N 显示完否, Y T0计数器置初值 恢复现场、开中断 中断返回(RETI) 图3-13 LED动态显示程序流程图 4.4 产生一分钟时间模块设计 本设计采用了T1定时器与软件定时相结合的方法,产生了一分钟,它所实现的 功能是每分钟从DS1302中读出当前时间。 (1)一分钟的产生 选择定时器T1,工作方式1,定时100ms,T1定时100 ms中断1次利用的是第0 组工作寄存器,其中利用R2寄存器加1,R2等于10时,时间正好是1s,再利用R3 寄存器计数60次,即一分钟,便得到了一分钟的时间值。同时,还需要给R2、R3 寄存器进行设置。 R2:累计1S时间寄存器。T1每中断一次R2,R2,1,计数十次向R3进位,并将 44 R2清0。 R3:累计一分钟时间寄存器。当R2向R3进位达到60次时,便是一分钟了,这 里便可以从DS1302中读取当前时间了。 (2)计算定时器T1的计数初值 当时钟频率,6MHz时 计数值,定时时间/机器周期时间,100ms/2μs,50000 计数初值,65536,50000,15536,3CB0H 初值寄存器的初值(TH),3CH,(TL),B0H 工作方式计数器TMOD,1×H 程序设计流程图如图3,14所示。 T1中断服务程序 置T1计数器初值 关中断 保护现场 选择0区工作寄存器 R2,R2,1 N R2,10, Y R2,0 R3,R3,1 N R3,60, Y 跳转到RD1302子 程序读出当前时间 恢复现场 开中断 RETI中断返回 图3-14 一分钟程序设计流程图 45 4.5键盘接收模块的设计 程序设计思路:键盘接收子程序是由INTA和INTB两个子程序组成,两个子程序的功能是实现录音、调整当前时间和设置闹钟时间。 1.INTA子程序功能是实现录、放音功能模块的选择。根据按键电路设计可知:当“REC”键或“PLAY”键任一键被按下时,产生一个INT0中断请求,CPU先对T0口进行扫描,看“PLAY”键是否按下,如果T0口为高电平,表明“PLAY”键没有按下,CPU就响应录音中断请求;当T0口为低电平时,表明“PLAY”键被按下了,CPU就去响应放音中断请求。 2.在程序中,将录音段数分为5段,由数码管显示,利用“,1”键和“RET”键进行配合使用,“,1”键用来对录音的段数进行加1调整,“RET”键用来进行确认。 3.INTB子程序功能是实现对当前时间进行调整和对闹钟时间进行设置。这两项功能分别由“SET”键和“ALM”键进行控制,它们通过74LS08相与后作用于INT1口,当在INT1口产生一个外部中断时,CPU先扫描T1口,看“ALM”键是否被按下,如果T1口为高电平,则表明“ALM”键没有被按下,CPU则去执行调整当前时间的子程序,如T1口为低电平,则表明“ALM”键被按下了,CPU则去执行设置闹钟时间的子程序。 4.利用“,1”键和“RET”进行配合使用,每次对“,1”键的按下次数进行累加,当“RET”键按下时,调整值被确认,转去处理下一位。 5.每次进入该程序后,对4位当前时间值或闹钟时间值调整一次,从左到右排列顺序为1,4,不循环。 6.键盘接收的时间值为BCD码方式,将它们转化成二进制数后,存储在相应的空间,同时对计时单元进行修改,使当前时间得到调整。 7.按键去抖动处理,由于机械触点的弹性作用,在闭合及断开的瞬间均伴随有一连串的抖动,抖动时间的长短由按键的机械特性决定,一般为5,10ms,而按键稳定闭合时间的长短则是由操作人员的按键动作快慢决定的,一般为零点几秒到数秒,键抖动会引起一次按键被误读多次,为了确保CPU对键的一次闭合公作一次处理,键抖动可用硬件或软件两种方法消除,本设计采用软件方法,其程序流程图如图3,15所示。 46 开始 N 有键闭合, Y 调延时12ms子程序 N 有键闭合, Y 确定有键闭合 图3-15 按键去抖动程序设计流程图 47 结论 在本中,本人按照“提出问题、分析问题、解决问题、问题”的写作思路,详细的阐述了语音播报系统的硬件、软件设计的全过程,并且从这些过程中分析提炼出了相关的技术难点以及相对应的解决思路,在完成这一切的同时,我从两个角度方面完成了所做的设计:其一,如何实现语音播报;其二,在完成既定功能的同时,如何开发出其它补充功能。在这过程中,我提炼出了具有普遍意义的类似开发过程的若干条准则。 本论文的创新点就是将以前的无声记录提醒或蜂鸣提醒换成了形象的语音提醒,使提醒更加有效、及时、准确。 本论文完成了软硬件主要功能模块的设计,为进一步设计开发及功能扩展打下了良好的基础。由于时间关系和水平有限,设计中存在着一些缺陷和不足,还有待于在今后的进一步设计过程中不断完善。 该系统现在已经设计完成,我相信该系统的设计完成必将对人们的生活起到积极的作用,使人们不必因再忘记什么重要约会而尴尬不已。 我在整个系统的设计、调试工作中积累了大量的实践经验,必将为以后参加科研和工作起到积极的推动作用~ 48 49 致 谢 本文的工作能得以顺利的完成完全离不开大家对我的关心和帮助,在此,谨向他们表示我最诚挚的感谢。 首先由衷感谢我的指导老师龚伟老师,本文是在他的指导下完成的,导师严谨的治学作风和精益求精的治学态度给我留下了深刻的印象。在此谨向我的指导老师致以深深的敬意和感谢~ 本人在四年的本科生学习期间,始终得到了物电学院所有老师无微不至的关怀,是他们给了我许多帮助和指导使我能够在四年的时间里能够学有所成,同时本人的一些同学也在本人的学习过程中提出一些有益的建议和无私的帮助,在此也一并感谢~感谢支持过和关心过我的人们~ 50 参考文献 [1] Rengang Chen;Strydom,J.T;Van Wyk,J.D. Design of plonar integrated passive module for zero-voltage-switched asymmetrical half-bridge PWM converter[J]. IEEE Transactions on Industry Applications the Industry of Electrical and Electronic Engineers.2002,(6):1112-1116. [2] 丁元杰.单片微机原理及应用.第2版.机械工业出版社,2004:4—289 [3] 周荷琴 吴秀青.微型计算机原理与接口技术.第3版.中国科技大学出版社, 2004:126—155、263--300 [4] 阎石.数字电子技术基础.第4版.高等教育出版社,1998:150--159 [5] 孙和平.单片微机原理与接口技术.冶金工业出版社,2002 [6] 沈红卫.单片机应用系统设计实例与分析.北京航空大学出版社,2003 [7] 吴金戎.8051单片机实践与应用.清华大学出版社,2002 [8] 李华.MCS,51系列单片机实用接口技术.北京航空航天大学出,1999 [9] 李朝表.单片机原理及接口技术.北京航空航天大学出版社,2002 单片机原理及系统设计.清华大学出版社,2002 [10] 胡汉才. [11] 公茂法.单片机人机接口实例集.北京航空航天大学出版社,2002 [12] 余锡存.单片机接口及接口技术.西安电子科技大学出版社,2000 [13] 马中梅.单片机的C语言程序设计.北京航空航天大学出版社,1999 [14] 肖红兵.跟我学用单片机.北京航空航天大学出版社,2002 51 附录1 系统源程序: SCL EQU P2.0 DATA EQU P2.1 RST EQU P2.2 ORG 0000H LJMP MAIN ORG 0003H LJMP INTA ORG 000BH LJMP T0-SEV ORG 0013H LJMP INTB ORG 001BH LJMP T1-SEV ORG 0030H MAIN: MOV SP, #60H MOV R7, #10H MOV R0, #30H ;设置显示缓冲区 MOV A, #0 MOV @R0, A INC R0 DJNZ R7, LOP MOV 35H, #01H MOV 36H, #01H MOV 37H, #01H MOV 38H, #01H MOV 3CH, 33H MOV 3DH, 34H MOV 3EH, #01H MOV 44H, #10H MOV 45H, #20H MOV 46H, #40H MOV 67H, #80H 52 CLR RS1 CLR RS0 MOV R5, #00H MOV R6, #00H MOV R7, #06H LCALL SET1302 SETB RS1 CLR RS0 ;选择工作寄存器2组 MOV R0, #4AH MOV TMOD, #10H MOV TH1, #3CH MOV TL1, #0B0H ;设置定时/计数器1初值 MOV TH0, #40H MOV TL0, #098H ;设置定时/计数器0初值 MOV IP, #08H ;定时/计数器1为优先级中断 MOV TCON, #40H MOV IE, #8DH ;定时/计数器1允许中断 LOP: LCALL CHANGE LCALL DISPLAY SETB RS1 CLR RS0 MOV 3AH, @R0 INC R0 MOV 3BH, @R0 MOV A, 3AH CJNE A, #0, NT MOV A, 3BH CJNE A, #0, NT NTM: INC R0 INC R0 CJNE R0, #59H, LOP MOV R0, #4AH SJMP BBX NT: MOV A, 3BH CJNE A, 34H, NTM 53 DEC R0 DEC R0 MOV 39H, @R0 INC R0 INC R0 INC R0 INC R0 CJNE R0, #59H, NT1 MOV R0, #4AH NT1: MOV A, 39H CJNE A, #05H, BBXX LCALL YUYIN CLR P2.7 SJMP LP-0 BBX: SETB P2.7 SJMP LP-0 BBXX: LCALL YUYIN SJMP LP-0 LP-0: JB P3.0, LP-6 LCALL DISPLAY JB P3.0, LP-0 LP-1: JNB P3.0, LP-1 SETB P2.7 MOV 5EH, #06H LP-1A: MOV 3CH, 35H MOV 3DH, 36H LCALL CHANGE LCALL DISPLAY LP-1B: JB P3.0, LP-1B LCALL DISPLAY JB P3.0, LP-1B LP-1D: JNB P3.0, LP-D SJMP LP-2 LP-1C: MOV A, 5EH CJNE A, #00H, LP-1A 54 LJMP FUZHI LP-2: MOV 5EH, #06H LP-3A: MOV 3CH, 38H MOV 3DH, #20H LCALL CHANGE LCALL DISPLAY LP-3B: JB P3.0, LP-3C LCALL DISPLAY JB P3.0, LP-3C LP-3D: JNB P3.0, LP-3D SJMP LP-4 LP-3C: MOV A, 5EH CJNE A, #00H, LP-3A LJMP FUZHI LP-4: MOV 5EH, #06H LP-5A: MOV 3CH, 37H MOV 3DH, #0BBH LCALL CHANGE LCALL DISPLAY LP-5B: JB P3.0, LP-5C LCALL DISPLAY JB P3.0, LP-5B LP-5D: JNB P3.0, LP-5D LJMP FUZHI LP-5C: MOV A, 5EH CJNE A, #00H, LP-5A LJMP FUZHI LP-6: JB P3.1, LP-6A SJMP LP-6B LP-6A: LJMP LOP LP-6B: LCALL DISPLAY JB P3.0, LP-6 LP-7: LCALL DISPLAY JNB P3.0, LP-7 SETB P2.7 55 MOV 3CH, 32H MOV 3DH, #0FFH LCALL CHANGE LCALL DISPLAY JB P3.1, LP-7 LCALL DISPLAY JB P3.1, LP-7 LP-8: LCALL DISPLAY JNB P3.1, LP-8 FUZHI: MOV 3CH, 33H MOV 3DH, 34H LJMP LOP CHANGE: MOV A, 3DH PUSH A ANL A, #0FH ;保留3DH单元中的低字节 MOV 42H, A POP A SWAP A ANL A, #0FH ;保留3DH单元中的高字节 MOV 43H, A MOV A ,3CH PUSH A ANL A, #0FH ;保留3CH单元中的低字节 MOV 40H, A POP A SWAP A ANL A, #0FH ;保留3CH单元中的高字节 MOV 41H, A RET YUYIN: MOV A, 3FH CJNE A, #0, CC1 CLR P3.4 MOV 3FH, #01H CC1: RET ;4位LED动态扫描显示子程序 56 DISPLAY: SETB RS1 SETB RS0 ;选择工作寄存器3组 MOV R2, #04H ;显示指针 MOV R0, #40H MOV R1, #44H GO-ON: MOV A, @R1 ADD A, @R0 MOV P1, A LCALL DELAY1 INC R0 INC R1 DJNZ R2, GO-ON RET DELAY1:MOV R3, #14H AGAIN: MOV R4, #19H DELAY: DJNZ R4, DELAY DJNZ R3, AGAIN RET ;T1定时中断程序,定时1min 中断一次,读出当前时间 T1-SEV:MOV TH1, #3CH MOV TL1, #0B0H CLR EA PUSH A ;恢复现场 PUSH B PUSH PSW CLR RS1 CLR RS0 INC R5 CJNE R5, #14H, EN MOV R5, #0 DEC 5EH MOV 30H, 33H LCALL RD1302 MOV A, 33H CJNE A, 30H, CLR3FH 57 SJMP EN1 CLR3FH:MOV 3FH, #0 EN1: MOV 3CH, 33H MOV 3DH, 34H EN: POP PSW POP B POP A SETB EA RETI ;当前时间、定时时间设置程序 INTB: SETB P3.0 SETB P3.1 CLR TR1 CLR ET1 CLR EX0 CLR EX1 SETB EA SETB ET0 SETB PT0 PUSH A ;保护现场 PUSH B PUSH PSW JB P3.5, TIME LJMP ALARM ;跳转到设置闹钟子程序 TIME: MOV 31H, #02H MOV 29H, 34H MOV 48H, #03H MOV 3CH, 33H MOV 3DH, 34H LCALL CHANGE LP0: JB P3.0,NEXT0 LCALL DISPLAY JB P3.0, LP0 LP1: LCALL DISPLAY JNB P3.0, LP1 MOV A, 29H 58 ADD A, #01H DA A MOV 29H, A MOV A, 48H CJNE A, #03H, XX1 ;29H单元中的数是否为3 MOV 3DH, 34H MOV 3CH, 33H LCALL CHANGE LCALL DISPLAY LJMP LO1 XX1: CJNE A, #02H, XX2 ;对时,分值调整 MOV 3DH, 36H MOV 3CH, 35H LCALL CHANGE LCALL DISPLAY LJMP LO3 XX2: MOV 3DH, 38H ;对月,日值调整 MOV 3CH, 37H LCALL CHANGE LCALL DISPLAY LJMP LO5 NEXT0: JNB P3.1, LF1 LJMP L1 LF1: LCALL DISPLAY JB P3.1, NEXT0 LD1: LCALL DISPLAY JNB P3.1, LD1 MOV A, 48H CJNE A, #03H, X1 MOV 3CH, 33H MOV 3DH, 34H LCALL CHANGE MOV 29H, 33H DJNZ 31H, LB1 DEC 48H 59 MOV 31H, #02H MOV 29H, 36H MOV 3DH, 36H MOV 3CH, 35H LCALL CHANGE LJMP L1 LB1: LJMP L1 X1: MOV A, 48H CJNE A, #02H, X2 MOV 3CH, 35H MOV 3DH, 36H LCALL CHANGE MOV 29H, 35H DJNZ 31H, LC1 DEC 48H MOV 31H, #02H MOV 29H, 38H MOV 3DH, 38H MOV 3CH, 37H LCALL CHANGE LJMP L1 LC1: LJMP L1 X2: MOV A, 48H CJNE A, #01H, X3 MOV 3CH, 37H MOV 3DH, 38H LCALL CHANGE MOV 29H, 37H DEC 31H DEC 48H LJMP L1 X3: LJMP LL LO1: MOV A, 31H ;对年,星期值调整 CJNE A, #02H, LO2 MOV 3CH, 33H 60 MOV A, 29H CJNE A, #24H, LA1 MOV 29H, #00H LA1: MOV 34H, 29H MOV 3DH, 34H LCALL CHANGE LJMP L1 LO2: MOV 3DH, 34H MOV A, 29H CJNE A, #60, LA2 MOV 29H, #0 LA2: MOV 33H, 29H ;小时修改子程 MOV 3CH, 33H LCALL CHANGE LJMP L1 LO3: MOV A, 31H CJNE A, #02H, LO4 MOV 3CH, 35H MOV A, 29H CJNE A, #13, LA3 MOV 29H, #00H LA3: MOV 36H, 29H ;年修改子程 MOV 3DH, 36H LCALL CHANGE LJMP L1 LO4: MOV A, 36H ;日期修改 MOV 3DH, 36H MOV A, 29H CJNE A, #30H, LA4 MOV 29H,#00H SJMP LA4 A1: MOV A, 29H CJNE A, ,32H, LA4 MOV 29H, #00H LA4: MOV 35H, 29H 61 MOV 3CH, 35H LCALL CHANGE LJMP L1 LO5: MOV A, 31H ;月,日值调整子程 CJNE A, #02H, LO6 MOV 3CH, 37H MOV 38H, 29H MOV 3DH, 38H LCALL CHANGE LJMP L1 LO6: MOV A, 29H ;星期修改子程 CJNE A, #08H, LA6 MOV 29H, #00H LA6: MOV 3DH, 38H MOV 37H, 29H MOV 3CH, 37H LCALL CHANGE L1: LCALL DISPLAY LJMP LP0 LL: MOV 32H, #00H LCALL SET1302 LJMP ET ;定时时间设置子程序 ALARM: SETB P3.5 MOV 39H, #01H LCALL SEARCH PP0: MOV 3CH, #0ABH LCALL CHANGE NEXTA: LCALL DISPLAY JB P3.1, NEXTA LCALL DISPLAY JB P3.1, NEXTA LD11B: LCALL DISPLAY JNB P3.1, LD11B LCALL SEARCH 62 MOV 3DH, 3BH MOV 3CH, 3AH LCALL CHANGE MOV 31H, #02H MOV 29H, 3BH LP0B: JB P3.0, NEXTB LCALL DISPLAY JB P3.0, LP0B LP1B: LCALL DISPLAY JNB P3.0, LP1B MOV A, 29H ADD A, #01H DA A MOV 29H, A SJMP LO1B NEXTB: LCALL DISPLAY JB P3.1, LQB LCALL DISPLAY JB P3.1, NEXTB LD1B: LCALL DISPLAY JNB P3.1, LD1B MOV 29H, 3AH DJNZ 31H, LO1B SJMP LLB LO1B: MOV A, 31H DJNE A, #02H, LO2B MOV A, 29H CJNE A, #24H, LA1B ;闹钟小时时间是否为24 MOV 29H, #00H LA1B: MOV 3BH, 29H ;改变小时 MOV 3DH, 3BH LCALL CHANGE SJMP LQB LO2B: MOV A, 29H ;改变分钟 CJNE A, #60H, LA2B 63 MOV 29H, #00H LA2B: MOV 3AH, 29H MOV 3CH, 3AH LCALL CHANGE L1B: MOV A, 31H CJNE A, #00H, LP0B LLB: LCALL WRIT INC 39H MOV A, 39H CJNE A, #6, PA0 SJMP ET PA0: LJMP PP0 ET: POP PSW POP B POP A MOV TH1, #3CH MOV TL1, #0B0H SETB TR1 SETB ET1 SETB PT1 SETB EX0 SETB EX1 CLR TR0 CLR ET0 RETI WRIT: CLR RS1 SETB RS0 MOV A, 39H MOV B, #3 MUL AB ADD A, #46H MOV R1, A MOV R0, #39H MOV R2, #3 MORE: MOV A, @R0 64 MOV @R1, A INC R0 INC R1 DJNZ R2, MORE RET SEARCH:CLR RS1 SETB RS0 MOV A, 39H MOV B, #3 MUL AB ADD A, #46H MOV R1, 0 MOV R0, #39H MOV R2, #2 INC R0 INC R1 MORE1: MOV A, @R1 MOV @R0, A INC R0 INC R1 DJNZ R2, MORE1 RET INTA: SETB P3.0 SETB P3.1 CLR TR1 CLR ET1 CLR EX0 CLR EX1 PUSH A PUSH B PUSH PSW JB P3.4, RECORD LJMP PLAY ;录音子程序 RECORD: MOV 3EH, #01H 65 RECORD1:MOV 3CH, 3EH MOV 3DH, #0AFH LCALL CHANGE ;调整录音顺序号 NEXA: LCALL DISPLAY ;显示录音顺序号 JB P3.1, NEXA LCALL DISPLAY JB P3.1, NEXA MOV A, 3EH CJNE A, #01H, TRY1 ;录音顺序号不等时转至TRY1子程 LJMP REC1 TRY1: CJNE A, #02H, TRY2 LJMP REC2 TRY2: CJNE A, #03H, TRY3 LJMP REC3 TRY3: CJNE A, #04H, TRY4 LJMP REC4 TRY4: CJME A, #05H, TR4 LJMP REC5 TRY5: LJMP ETB REC1: MOV 58H, #40H ;录入从40H的语音信息 LCALL CLRP0 REC11: LCALL RECM CJNE A, #48H, REC11 ;寄存器中从40H的信息是否录入完 LCALL LCRP0 INC 3EH SJMP NE1 REC2: MOV 58H, #48H ;录入从48H的语音信息 LCALL CLRP0 REC22: LCALL RECM CJNE A, #50H, REC22 ;寄存器中从48H的信息是否录入完 LCALL CLRP0 INC 3EH 66 SJMP NE1 REC3: MOV 58H, #50H ;录入从50H的语音信息 LCALL CLRP0 REC33: LCALL RECM CJNE A, #58H, REC33 LCALL CLRP0 INC 3EH SJMP NE1 REC4: MOV 58H, #58H ;录入从58H的语音信息 LCALL CLRP0 REC44: LCALL RECM CJNE A, #60H, REC44 LCALL CLRP0 INC 3EH SJMP NE1 REC5: MOV 58H, #60H ;录入从60H的语音信息 LCALL CLRP0 REC55: LCALL A, #68H, REC55 LCALL CLRP0 INC 3EH SJMP NE2 NE1: NB P3.1, RECORD2 LCALL DISPLAY JNB P3.1, NE1 SJMP NE1 NE2: JB P3.1, ETB1 LJMP ETB ETB1: LCALL DISPLAY JNB P3.1, NE2 SJMP NE2 RECORD2:JNB P3.1, RECORDX LJMP RECORD1 RECORDX:LCALL DISPLAY SJMP RECORD2 ;放音控制子程序 67 PLAY: SETB P3.4 MOV A, 39H ;设置39H控制顺序号 CJNE A, #01H, TPL1 SJMP PLAY1 TPL1: CJNE A, #02H, TPL2 SJMP PLAY2 TPL2: CJNE A, #03H, TPL3 SJMP PLAY3 TPL3: CJNE A, #04H, TPL4 SJMP PLAY4 TPL4: CJNE A, #05H, TPL5 SJMP PLAY5 TPL5: LJMP ETB PLAY1: MOV 58H, #80H ;播放从80H的语音信息 LCALL CLRP0 PLAY11:LCALL PLAYM CJNE A, #88H, PLAY11 LCALL CLRP0 LJMP ETB PLAY2: MOV 58H, #88H ;播放从88H的语音信息 LCALL CLRP0 PLAY22: CALL PLAYM CJNE A, #90H, PLAY22 LCALL CLRP0 LJMP ETB PLAY3: MOV 58H, #90H ;播放从90H的语音信息 LCALL CLRP0 PLAY33:LCALL PLAYM CJNE A,#98H, PLAY33 LCALL CLRP0 LJMP ETB PLAY4: MOV 58H, #98H ;播放从98H的语音信息 LCALL CLRP0 PLAY44:LCALL PLAYM CJNE A, #0A0H, PLAY44 68 LCALL CLRP0 LJMP ETB PLAY5: MOV 58H, #0A0H ;播放从OAOH的语音信息 LCALL CLRP0 PLAY55:LCALL PLAYM CJNE A, #0A8H, PLAY55 LCALL CLRP0 ETB: MOV 3CH, 33H MOV 3DH, 34H POP PSW POP B POP A MOV TH1, #3CH MOV TL1, #0B0H SETB TR1 SETB ET1 SETB PT1 SETB EX0 SETB EX1 SETB EA RETI RECM: MOV 3CH, #0FCH MOV 3DH, 3DH, #0FFH LCALL CHANGE LCALL DISPLAY CLR P2.6 MOV A, 58H ORL A, #0C0H MOV P0, A SETB P2.6 NOP NOP CLR P2.6 MOV A, 58H MOV P0, A 69 SETB P2.6 LCALL DEL500 INC 58H MOV A, 58H RET ;录放音控制程序 PLAYM: MOV 3CH, 39H MOV 3DH, #0AAH LCALL CHANGE CLR P2.6 MOV A, 58H ;开始将A中的内容送到P0口 ORL A, 0C0H MOV P0, A SETB P2.6 NOP NOP CLR P2.6 MOV A, 58H MOV P0, A SETB P2.6 LCALL DEL500 INC 58H MOV A, 58H RET CLRP0: CLR P2.6 ;P2.6置低电平 MOV P0, #0C0H SETB P2.6 LCALL DISPLAY RET DEL500:SETB RS1 SETB RS0 MOV R5, #74H LLOP: LCALL DISPLAY DJNZ R5, LLOP RET 70
/
本文档为【语音播报记事器概要1】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索