带自定制语音功能定时系统的设计_第1页
带自定制语音功能定时系统的设计_第2页
带自定制语音功能定时系统的设计_第3页
带自定制语音功能定时系统的设计_第4页
带自定制语音功能定时系统的设计_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、毕业设计(论文)中文摘要单片微型机算计俗称单片机,是一种运用十分广泛的微处理器。在各种称为计算机控制的仪器和设备中的计算机控制都是用单片机来实现的。本系统以M16为核心器件,ISD1820、DS1302、DS1602显示器为外围,通过1602液晶显示年月日、星期、时分秒,时间格式可以12或24进制,实现了计时与时间校正、整点报时、时钟掉电保持、日历、电子音乐闹钟、自定义录取音乐闹铃、任意按键语音报时和闹钟。关键字: 闹铃;单片机;定时器毕业设计(论文)英文摘要Title Custom functions with the sound of the timing systemAbstactSin

2、gle piece of a single-chip microcontroller, calculate commonly known as is the application of a wide range of microprocessors. In all kinds of computer control called instruments and equipment of the computer control is realized by using single chip processor. This system for the core device, with t

3、he M16 ISD2560, DS1302, DS1602 displays for peripheral, through the 1602 LCD display date, week, meticulous, when time format can 12 or into the system, realize the 24 time and time correction, time, the clock on the hour power lost to keep, calendar, electronic music alarm clock, custom admitted mu

4、sic alarm, any time and key voice alarm clock.Keywords: Alarm; SCM; timer目 录摘要1 概述12 设计思路42.1 数字钟的简单功能说明42.2 思路说明43 硬件设计53.1 mega16芯片的简单介绍53.2 LCD芯片103.3 按键控制143.4 ISD1820语音芯片154 软件设计174.1 中断系统174.2 定时器/计数器184.3 程序设计22结 论29致 谢30参 考 文 献31附 录321 概述今天,传统的电子系统已经全面转变成以嵌入式系统为核心的现代电子系统,在嵌入式系统底端应用中,存在着大量的小型

5、嵌入式应用系统;这些系统用于资源和控制要求的限制,采用计算机语言设计程序会成为系统程序设计的一种主要方法。在C语言为基础的系统程序设计中,规范化设计至关重要。遵循C语言编写格式,规范和计算机软件的工程方法。在系统程序设计中,也要从单纯的功能性设计变到可能性、可靠性和产品应用优化等综合性设计充分发挥软件在提高系统综合品质上的效益,近几十年来,单片机在生产过程控制、自动检测、数据采集与处理、科学计算、商业管理和办公自动化等方面获得了广泛应用。单片机具有体积小、重量轻、耗能省、价格低、可靠性高和通用灵活等优点。而本次设计的带自定制语音功能的定时系统也随着单片机的发展被人们所认识与应用并逐渐成为必不可

6、少的必需品,被广泛应用于个人家庭以车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来了极大的方便。虽然现在市场上已经有这类产品的出现,价格合理,使用方便,但是这里介绍的带自定制语音功能的数字钟可以满足使用者的特殊要求,输出方式灵活,如可以随意设置时、分、秒的输出等等。由于单片机技术的发展,特别是mega16芯片技术的发展,使LCD时钟具有体积小,耗电省,计时准确,性能稳定,维护方便等优点。数字电子钟的设计方法有多种,例如,利用FPGA+液晶显示器+语音芯片;利用ARM+语音芯片;利用mega16+语音芯片+DS1602;利用凌阳单片机与时钟芯片;利用中小规模集成电路组成电子

7、钟。其中利用mega16+语音芯片+DS1602的设计方案实现简单,用到的计算机语言是我们学过的C语言,因而在程序设计上相对简单些,其所需成本也在我的承受范围之内,mega16单片机的功能相对更加完善,可以满足此次设计的所有要求,而且容易上手。为了做好这次毕业设计我从图书馆和互联网上网查阅了大量的相关资料,深刻理解了毕业设计任务,明确了毕业论文要求,安排了设计方案步骤,最后完成了毕业设计作品。本次毕业设计所要求的是带自定制语音功能的数字钟,可以学习利用单片机的定时器设计时间计时处理,这在许多电子设备上是常用的功能。它的功能要求如下所述:1)使用文字型LCD显示器来显示现在的时间2)显示格式为“

8、时时:分分:秒秒”3)具有四个按键操作来设置现在的时间4)自定义录取音乐闹铃程序执行后,工作指示灯LED闪动,表示程序开始执行,LCD显示器显示“00:00:00”,然后开始计时,操作键K1K4动作如下:· 操作键K1:进入设置现在的时间。 · 操作键K2: 设置小时。· 操作键K3:设置分钟。 · 操作键K4:完成设置。 为了实现上述功能,本次设计主要采用了单片机技术来实现对时钟电路的控制,采用mega16芯片和LCD液晶显示芯片来控制整个电路,外加ISD1820语音芯片。本次设计的带自定制语音功能定时系统,主要有mega16单片机部分、LCD液晶显示

9、器部分、ISD1820语音部分和按键控制部分组成,文中详细介绍了LCD时钟的控制电路、程序以及其所用到的芯片,主要是mega16芯片、ISD1820语音芯片和1602LCD芯片,其中mega16芯片包括中断系统及定时/计数器,ISD1820芯片主要功能是录音报时,LCD芯片主要用于显示时间而按键控制则用于调整时间。2 设计思路2.1 数字钟的简单功能说明数字钟的基本功能说明如下:1)使用文字型LCD显示器来显示现在的时间2)显示格式为“时时:分分:秒秒”3)具有四个按键操作来设置现在的时间LCD显示器显示“00:00:00”,然后开始计时,操作键K1K4动作如下: · 操作键K1:进

10、入设置现在的时间。 · 操作键K2: 设置小时。 · 操作键K3:设置分钟。 · 操作键K4:完成设置。2.2 思路说明要实现上面所要求得功能单靠一个显示器是不行的,所以就需要一些元器件或者芯片来共同实现,这也就用到了单片机中最新功能丰富的mega16芯片,而芯片中所用到的无非是中断系统及定时/计数器,它们是时钟时间实现变化必不可少的东西。LCD显示器从其名字上就能看出它主要是用来显示时间数字的,由于它的成本较高所以不像LED显示器那么普遍的应用,但是我觉得本次设计中用LCD比LED更加直观易懂一些,所以选用了LCD显示器。最后要实现数字的设置就要有按键的控制,要

11、不此时钟也就没有用武之地了。为了实现语音功能就需要语音芯片了,这里我选择了ISD1820语音芯片。当然,在实现过程中,电源是不可缺少的。3 硬件设计3.1 mega16芯片的简单介绍单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统、数据采集系统、智能化仪器仪表、通信设备、商业营销设备、医疗电子设备、日常消费类产品、玩具及汽车电子产品等。并且已经深入到工业生产以及人们生活的各个层次中。AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC精简指令集高速8位单片机。ATmega16是基于增强的AVR RISC结

12、构的低功耗8位CMOS微控制器,其引脚排列如图3-1: 图3-1 引脚排列图1) VCC:数字电路电源2) GND:地3) 端口A(PA7··PA0):端口A 为8 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口A 处于高阻状态。4) RESET:复位输出引脚。超出最小门限时间的低电平将引起系统复位。低于此时间的脉冲不能保证可靠复位。5) XTAL1:反向振荡器放大器及片内时钟操作电路的输出。6) XTAL2:反向振

13、荡器放大器的输出。7) AVCC:AVCC为端口F以及ADC模数转换的电源,需要与VCC相连接,即使没有使用ADC也应该如此。使用ADC时应该通过一个低通滤波器与VCC连接。8) AREF:AREF为ADC的模拟基准输出引脚。9) 端口B、端口C、端口D作为普通I/O口与端口A的功能基本相同,同时每个端口都有各自独特的其他功能。 ATmega16的结构框图如图3-2。AVR内核具有丰富的指令集和32个通用工作寄存器,所有的寄存器直接算数逻辑单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC微控制器最高至10倍的数

14、据吐率。图3-2 结构框图3.1.1 ATmega16的时钟电路单片机内部的各种功能电路几乎全是由数字电路组成的,而数字电路的工作离不开时钟信号,每一个工作指令的运行都是在时钟信号的协调下完成的。单片机的时钟电路为整个单片机的工作提供系统时钟信号,也为单片机与其他外接设备之间的通信提供同步信号。1、外接晶体/陶瓷振荡器XTAL1与XTAL2分别为用作片内振荡器的反向放大器的输入和输出,如图3-3所示,这个振荡器可以使用石英晶体,也可以使用陶瓷谐振器。熔丝位CKOPT用来选择这两种放大器模式的其中之一。当CKOPT被编程时振荡器在输出引脚产生满幅度的振荡。这种模式适合于噪声环境,以及需要通过XT

15、AL2驱动第二个时钟缓冲器的情况。而且这种模式的频率范围比较宽。当保持CKOPT为未编程状态时,振荡器的输出信号幅度比较小。其优点是大大降低了功耗,但是频率范围比较窄,而且不能驱动其他时钟缓冲器。对于谐振器,CKOPT未编程时的最大频率为8 MHz,CKOPT编程时为16MHz。 图3-3 晶体振荡器连接图2、外接RC振荡器对于时间不敏感的系统可以使用3-4所示的外部RC振荡器。频率可以通过方程f=1/(3RC)进行粗略的估计。 图3-4 外部RC配置3、使用内部振荡器标定的片内RC振荡器提供了固定的1.0、2.0、4.0或8.0MHz的时钟。这些频率都是5V、25下的标称数值。选择这个时钟(

16、此时不能对CKOPT进行编程)之后就无需外部器件了。复位时硬件将标定字节加载到OSCCAL寄存器,自动完成对RC振荡器的标定。4、使用外部时钟AVR单片机允许外部时钟电路为其提供系统时钟信号,为了从外部时钟源驱动芯片,XTAL1必须按如图3-5所示进行连接。同时,熔丝位CKSEL必须编程为“0000”。 图3-5 外部时钟配置图3.1.2 复位电路复位电路向单片机的RESET引脚输入一个低电平,当低电平持续时间大于最小脉冲宽度时即触发复位过程,此时没有时钟信号在运行。当外加信号达到复位门限电压时,复位延时开始,延时结束后单片机开始工作。常用的复位电路如图3-6所示。 图3-6 ATmega16

17、的复位电路3.2 LCD芯片3.2.1 1602LCD引脚功能 LCD1602图3-7 引脚功能编号符号引脚说明编号符号引脚说明1GND电源地9D2Data I/O2VCC电源正极10D3Data I/O3VL液晶显示偏压信号11D4Data I/O4RS数据/命令选择端(H/L)12D5Data I/O5R/W读/写选择端(H/L)13D6Data I/O6E使能信号14D7Data I/O7D0Data I/O15BLA背光源正极8D1Data I/O16BLK背光源负极表3-1 引脚功能说明 3.2.2 控制方式通过CPU来控制LCD模块,方式十分简单,LCD模块其内部可以看成有两组寄存

18、器,一个为指令寄存器,一个为数据寄存器,由RS引脚控制。所有对指令寄存器或数据寄存器的存取均需检查LCD内部的忙碌标志(Busy Flag),此标志用来告知LCD内部正在工作,并不允许接收任何的控制命令。而此位的检查可以令RS=0,读取位7来加以判断,当此位为0时才可以写入指令寄存器或数据寄存器。3.2.3 LCD控制指令 (1)清除显示器指令码为0X02,将LCD DD RAM 数据全部填入空白码20H,执行此指令将清除显示器内容,同时光标移到左上角。(2)光标归位设置指令码为0X02,地址计数器被除为0,DD RAM数据不变,光标移到左上脚。(3)设置字符进入模式此指令格式为:B7B6B5

19、B4B3B2B1B0000001I/DS表3-2 字符进入模式指令格式其中的有关符号说明如下:1)I/D :地址计数器递增或递减控制,I/D=1时为递增,I/D0时为递减。每次读写显示RAM中的字符码一次则地址计数器会加1或减1。光标所显示的位置也会同时向右移到一个位置(I/D1)或向左移到一个位置(I/D=0)。2)S :显示屏移动或不移动控制,当S=1时,写入一个字府到DD RAM时,显示屏向左(I/D=1)或向右(I/D=0)移动一格,而光标的位置不变。当S=0时,则显示屏不移动。(4) 显示器开关此指令格式为:B7B6B5B4B3B2B1B000001DCB表3-3 显示器开关指令格式

20、其中有关符号说明如下:1) D :显示屏开启或开关控制位,D=1时,显示屏开启,D0时,显示屏关闭。2) C :光标出现控制位,C=1则光标会出现地址计数器所指的位置,C0则光标会不出现。3) B :光标闪烁控制位,B=1光标出现后会闪烁,B0,光标不会闪烁。(5) 显示光标移位此指令格式为:D7D6D5D4D3D2D1D00001S/CR/LXX表3-4 光标移动指令格式其中有关符号说明如下:1) X表示0或1皆可。2) S/C、R/L的设置及说明下表所示。S/CR/L动作00光标向左移动01光标向右移动10字符和光标向左移动11字符和光标向右移动表3-5 S/C、R/L设置及说明(6) 功

21、能设置此指令格式为:B7B6B5B4B3B2B1B0001DLNFXX表3-6 功能设置指令格式其中有关符号说明如下:1) DL :数据长度选择。DL=1时为8位数据转移,DL0时则为4位数据转移,使用D7D4 4个位,分2次送入一个完整的字符数据。2)N :显示屏为单列或双列选择。N=0为单列显示,N1为双列显示。3)F :大小字符显示选择。F=1时为5×10点阵字会大些,F=0则为5×7点阵字型。 3.3 按键控制微机所用到的键盘可分为编码键盘非编码键盘两种。在本设计中用到的是非编码键盘所以只介绍它与mega16单片机的接口连接。键盘与CPU的连接方式可以分为独立式按键

22、和矩阵式键盘。3.3.1 独立式按键独立式按键是各按键相互独立,每个按键占用一根I/O端线,每根I/O端线上的按键工作状态不会影响其他I/O端线上按键的工作状态。如图3-8所示:图3-8 独立式按键3.3.2 矩阵式键盘矩阵式键盘又称为行列式键盘,I/O端线分为行线和列线,按键跨接在行线和列线上。按键按下时,行线与列线连通。无论是独立式按键还是矩阵式键盘,与mega16 I/O口的连接方式可分为与I/O口直接连接和与扩展I/O口连接,与扩展I/O口连接又可分为与并行扩展I/O口连接和与串行扩展I/O口连接,由于本设计中没有用到此方式在此就不做具体的介绍。3.4 ISD1820语音芯片美国ISD

23、公司于2001年最新推出一种单片820秒单段语音录放电路ISD1810,采用CMOS技术,内含振荡器,话筒前置放大,自动增益控制,防混淆滤波器,扬声器驱动及FLASH阵列。一、主要特征:使用方便的单片8至20秒语音录放外接电阻调整录音时间高质量、自然的语音还原技术内置喇叭驱动放大电路边沿/电平触发放音10,000次录音周期(典型)自动节电、维持电流0.5uA35V单电源工作不耗电信息保存100年(典型值)借助专用设备可以批量拷贝表3-7 ISD1820语音芯片主要特性二、管脚排列图:图3-9 管脚排列图三、应用原理图:图3-10 应用原理图Rosc录放时间采样频率典型带宽80K8秒8.0KHz

24、3.4KHz100K10秒6.4KHz2.6KHz120K12秒5.3KHz2.3KHz160K16秒4.0KHz1.7KHz200K20秒3.2KHz1.3KHz表3-8 振荡电阻和取样率表通过震荡电阻和取样率表可以看出,将ROSC端所接的振荡电阻改为电位器可以无级调节语音的快慢,录入的时间越短音质越好,录入的时间越长音质越差。4 软件设计4.1 中断系统当计算机系统正在执行程序时出现了某种特殊情况,如定时时间到了、A/D转换结束或有外部信号输入等。此时CPU需要暂停当前执行的程序,转去处理相应的处理程序,当这段程序执行完毕之后,再回来执行先前被中止的程序,这个过程就是中断。引起中断的原因称

25、为中断源。中断源向CPU发出处理的请求称为中断请求。发生中断时被中止的程序的暂停点称为断点。产生中断之后CPU执行的程序称为中断服务程序。返回断点的过程称为终端返回。中断装置和中断服务程序称为中断系统。中断是计算机技术中一个很重要的功能,是为了使计算机能够对系统内外随机发生的事件进行及时处理而设置的,计算机进行实时控制、故障自动处理以及计算机外围设备间的数据传送往往采用中断系统。ATmega16单片机共有21个中断源,其中有1个复位中断,8个定时器中断源,3个外部中断源,1个A/D转换中断源,1个SPI串行传输中断源,1个EEP-ROM中断源,1个模拟比较器中断源,1个两线串行口中断源,1个保

26、存程序存储器内容就绪中断源。每一个中断源和复位在程序空间都有独立的中断向量,每个中断向量,与所有中断都相关的的寄存器有两个:状态寄存器和通用中断控制寄存器。状态寄存器用于控制所有中断是否使能,通用中断控制寄存器用于控制中断向量位置。AVR中断响应时间最少为4个时钟周期。4个时钟周期后,程序跳转到实际的中断处理例程。在这4个时钟期期间PC自动入栈。在通常情况下,中断向量为一个跳转指令,此跳转需要3个时钟周期。如果中断在一个多时钟周期指令执行期间发生,则在此多周期指令执行完毕后MCU才会执行中断程序。若中断发生时MCU处于休眠模式,中断响应时间还需增加4个时钟周期。此外还要考虑到不同的休眠模式所需

27、要的启动时间。这个时间不包括在前面提到的时钟周期里。4.2 定时器/计数器4.2.1 定时器/计数器1的内部结构16位T/C的简化框图示于4-1。I/O引脚的实际位置请参见图3-1。CPU可访问的I/O寄存器,包括I/O位和I/O引脚以粗体表示。图4-1 T/C框图4.2.2 输出比较单元16位比较器持续比较TCNT1与OCR1x的内容,一旦发现它们相等,比较器立即产生一个匹配信号。然后OCF1x在下一个定时器时钟置位。如果此时OCIE1x = 1,OCF1x置位将引发输出比较中断。图4-2 输出比较单元方框图中断执行时OCF1x标志自动清零,或者通过软件在其相应的I/O位置写入逻辑“1”也可

28、以清零。根据WGM13:0与COM1x1:0的不同设置,波形发生器用匹配信号生成不同的波形。波形发生器利用TOP和BOTTOM信号处理在某些模式下对极值的操作。输出比较单元A的一个特质是定义T/C的TOP值(即计数器的分辨率)。此外,TOP值还用来定义通过波形发生器产生的波形的周期。图4-2给出输出比较单元的方框图。寄存器与位上的小写“n”表示器件编号(n = 1表示T/C1),“x”表示输出比较单元(A/B)。框图中非输出比较单元部分用阴影表示。4.2.3 寄存器定时器/ 计数器TCNT1、输出比较寄存器OCR1A/B与输入捕捉寄存器ICR1均为16位寄存器。T/C控制寄存器TCCR1A/B

29、为8位寄存器,没有CPU访问的限制。中断请求(图中简写为Int.Req.)信号在中断标志寄存器TIFR1都有反映。所有中断都可以由中断屏蔽寄存器TIMSK1单独控制。图中未给出TIFR1与TIMSK1。T/C可由内部时钟通过预分频器或通过由T1引脚输入的外部时钟驱动。引发T/C数值增加(或减少)的时钟源及其有效沿由时钟选择逻辑模块控制。没有选择时钟源时T/C处于停止状态。时钟选择逻辑模块的输出称为clkT1。双缓冲输出比较寄存器OCR1A/B一直与T/C的值做比较。波形发生器用比较结果产生PWM或在输出比较引脚OC1A/B输出可变频率的信号。比较匹配结果还可置位比较匹配标志OCF1A/B,用来

30、产生输出比较中断请求。当输入捕捉引脚ICP1 或模拟比较器输入引脚有输入捕捉事件产生(边沿触发)时,当时的T/C值被传输到输入捕捉寄存器保存起来。输入捕捉单元包括一个数字滤波单元(噪声消除器)以降低噪声干扰。在某些操作模式下,TOP值或T/C的最大值可由OCR1A寄存器、ICR1寄存器,或一些固定数据来定义。在PWM模式下用OCR1A作为TOP值时,OCR1A寄存器不能用作PWM输出。但此时OCR1A是双向缓冲的,TOP值可在运行过程中得到改变。当需要一个固定的TOP值时可以使用ICR1寄存器,从而释放OCR1A来用作PWM的输出。1.T/C寄存器TCNT1H/TCNT1LT/C寄存器各位定义

31、如表4-1所示。位76543210TCNT115:8TCNT17:0读/写R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000表4-1 T/C寄存器各位定义TCNT1H与TCNT1L组成了T/C1的数据寄存器TCNT1。通过它们可以直接对定时器/计数器的16位计数器进行读写访问。在计数器运行期间修改TCNT1的内容有可能丢失一次TCNT1与OCR1x的比较匹配操作。写TCNT1寄存器将在下一个定时周期阻塞比较匹配。2. 输出比较寄存器OCR1BH/OCR1BLOCR1BH/OCR1BL各位定义如表4-2所示。位76543210OCR1BHOCR1B15:8OCR1BLOCR1

32、B7:0读/写R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000表4-2 OCR1BH/OCR1BL各位定义该寄存器中的16位数据与TCNT1寄存器中的计数值进行连续的比较,一旦数据匹配,将产生一个输出比较中断,或改变OC1x的输出逻辑电平。4.3 程序设计本次设计,除了单片机外还有其它的外围设备,其中主要有电源、键盘、DS1302时钟芯片、1602液晶显示器、蜂鸣器、ISD1802语音芯片,它们的关系如图4-3。通过这些设备和原件,已经可以实现所要求的功能,下面来介绍一下其中的几个模块。图4-3 系统框图4.3.1 独立键盘模块独立键盘是为了调整时间设置而设计的,它所完成

33、的工作是调整时钟的时间、改变闹钟设置,是数字钟更好的工作,为使用者提供准确的时间。工作方式是按下K1键数值加一,按下K3键数值减一,按下K2键是调整显示模式。其流程图如图4-4。具体程序代码见附录一。图4-4 按键模块流程图4.3.2 显示模块图4-5 显示模块流程图显示模块是为系统提供显示功能,是使用者能直观的看到时间,它是数字钟不可缺少的一部分。可以显示年、月、日、星期、时间等所需要的数据。其程序流程图如图4-5所示。具体程序代码见附录二。4.3.3 实时时钟模块图4-6 实时时钟模块实时时钟模块使系统时间初始化,设置初始时间,获取当前时间。其工作流程如图4-6,具体程序代码见附录三。4.

34、3.4 语音模块图4-7 语音模块流程图语音模块,如其名是为系统提供语音功能,要实现自定制语音功能,就必须有语音芯片、麦克以及扬声器,这样才能为使用者提供闹钟和报时服务。其工作流程如图4-7所示。具体程序代码见附录四。4.3.5 主控程序图4-8 主控程序流程图主控程序是整个系统程序的核心,它就像人的大脑一样支配和统领着整个系统,可以调用所有的下属程序,完成计时与时间校正、整点报时、时钟掉电保持、日历、电子音乐闹钟、自定义录取音乐闹铃、任意按键语音报时和闹钟等一系列的功能。工作流程如图4-8。主要程序代码见附录五。结 论经历数月的努力,毕业设计结束了,通过这次毕业设计使我对我的专业有了更深刻的

35、了解,同样使我有了理论与实践相结合的机会。在这段时间里我明显的察觉到自己知识的匮乏,为了给自己的大学生活也为了更深刻的了解自己的所学专业我们多方借阅资料,购买书籍,在互联网上查找资料,以完成这次设计。本次设计的带自定制语音功能的定时系统既能显示时间又能自定义录取音乐闹铃。本系统采用了单片机mega16芯片、LCD芯片及1820语音芯片,具有耗电省,计时准确,性能稳定,维护方便等优点。毕业设计的顺利完成,使我获得很多平时没有学到的知识。毕业设计是大学四年知识的综合运用,也是理论走向实践的的第一步,为以后走向工作岗位奠定了基础,经过这次毕业设计,使我对带自定制语音功能定时系统有了清楚的认识,对单片

36、机的重要性以及其作用有了更深一层的了解,数字钟的设计过程与步骤及应注意的细节问题有了更为深刻的理解,为我以后的学习做了铺垫。通过这次毕业设计增长了我的专业知识技能和实际工作经验,更增强了我向困难挑战的信心。在设计中我对单片机有了更详尽的了解,学会了使用一些工具软件,这次经历是我人生路上的宝贵财富。致 谢设计中得到了xxx教员的指导,她渊博的知识及严格的要求和严谨的作风都给我留下了深刻的印象,将使我终身受益。在此,对xxx教员表示感谢。另外还要感谢我的战友们对我的帮助。鉴于作者水平有限,难免存在一些错误和漏洞,望各位老师不吝赐教,在此向大家表示衷心的感谢。参 考 文 献(1) 马潮·A

37、VR单片机嵌入式系统原理与应用实践·1版·北京:北京航空航天大学出版社,2007(2) 徐益民,范红刚,苏凤武·零基础学AVR单片机·1版·北京:机械工业出版社,2001.1(3) 谭浩强·C程序设计·3版·北京:清华大学出版社,2005.7(4) 张迎新·单片机初级教程·1版·北京:北京航空航天大学出版社,2000附 录附录一 独立键盘模块#include<ioM16v.h>#include <macros.h>void key_int(void)DDRD&a

38、mp;=0x13;/把键盘端置为输入端/PORTD|=0x13;/键盘端初始化为输入1/* 名称:read_key()* 说明: 先置键盘端口全为1* 功能: 读键值*/unsigned char read_key(void)char data;delay_nus(10);data=PIND&0x13;if(data!=0x13)switch (data) /*将按键码转换成键值*/ case 0x12: return 1; /加 case 0x11: return 2; /模式转换 case 0x03: return 3; /减 default : return 0x00; retu

39、rn 0x00;/* 名称:get_key)* 说明: 要消抖,延时10ms* 功能: 读键值* 调用: read_key( );* 输入: 无* 返回值: 键值*/unsigned char get_key(void) unsigned char i; unsigned char j;/*按键记录*/ i = read_key( ); if (i = 0x00) /*无有效按键按下*/ return 0x00;/*程序退出*/ j = i;/*保存本次采样结果*/ delay_nms(10);/*去按键颤抖*/ i = read_key( ); if(i = j) delay_nms(10)

40、; return i; return 0x00; 附录二 显示模块#include<ioM16v.h>#include <macros.h>#include "DS1302.h"#include "1602.h"extern unsigned char table17;extern unsigned char AP;/0为上午,1为下午extern uchar baoshi_flag;/任意按键触摸报时标志,具体到分钟,一分钟只能操作一次/* 名称: displaysecond* 说明: 分个位、十位(显示函数)* 功能: 显示秒

41、钟*/void displaysecond(void)char i; /定义变量i=table10&0x0f; /求秒的个位WriteChar(i+'0',7,1); /显示秒个位 i=table10&0x70; /求秒的十位i=i>>4; /右移4位WriteChar(i+'0',6,1); /显示秒十位 /* 名称: displaymin()* 说明: 分个位、十位(显示函数)* 功能: 显示分钟* 调用: display09(char a,char x,char y);* 输入: 无* 返回值: 无*/void displaym

42、in(void)char i;i=table11&0x0f; /求分的个位WriteChar(i+'0',4,1); /显示分个位 i=table11&0x70; /求分的十位i=i>>4; /右移4位WriteChar(i+'0',3,1); /显示分十位 /* 名称: displayhour()* 说明: 分个位、十位(显示函数)、分12/24进制* 功能: 显示小时* 调用: display09(char a,char x,char y);*/void displayhour(void)char i;i=table12&

43、0x0f; /小时的个位WriteChar(i+'0',1,1); if(table12&0x80)/12进制时i=table12&0x10;/小时的十位i=i>>4; WriteChar(i+'0',0,1); if(table12&0x20)AP=1;WriteString("pm",8,1);elseAP=0;WriteString("am",8,1);else /24进制时i=table12&0x30;/小时的十位i=i>>4; WriteChar(i+

44、9;0',0,1); /* 名称: displaydate()* 说明: 分个位、十位(显示函数)* 功能: 显示日*/void displaydate(void)char i;i=table13&0x0f; /求日的个位WriteChar(i+'0',9,0); /显示日个位 i=table13&0x30; /求日的十位i=i>>4; /右移4位WriteChar(i+'0',8,0); /显示日十位/* 名称: displaymonth()* 说明: 分个位、十位(显示函数)* 功能: 显示月*/void displaym

45、onth(void)uchar i;i=table14&0x0f; /求月的个位WriteChar(i+'0',6,0); /显示月个位 i=table14&0x10; /求月的十位i=i>>4; /右移4位WriteChar(i+'0',5,0); /显示月十位 /* 名称: displayyear()* 说明: 分个位、十位(显示函数)* 功能: 显示年*/void displayyear(void)uchar i;i=table16&0x0f; /求年的个位WriteChar(i+'0',3,0); /显

46、示年时个位 i=table16&0xf0; /求年的十位i=i>>4; /右移4位WriteChar(i+'0',2,0); /显示年十位 /* 名称:displayweek()* 说明: 分个位、十位(显示函数)* 功能: 显示星期*/void displayweek(void)char i;i=table15&0x07; /求星期的个位 switch(i) case 0:WriteString("MON",13,0);break; case 1:WriteString("TUE",13,0);break;

47、case 2:WriteString("WED",13,0);break; case 3:WriteString("THU",13,0);break; case 4:WriteString("FRI",13,0);break; case 5:WriteString("STA",13,0);break; case 6:WriteString("SUN",13,0);break; default:break; /* 名称:display()* 说明: 分个位、十位(显示函数)* 功能: 显示秒、分、

48、小时、日、月、年、星期*/void display(void)displaysecond( ); /显示秒WriteChar(':',5,1); displaymin( ); /显示分WriteChar(':',2,1); displayhour( ); /显示小时 displaydate( ); /显示日WriteChar('/',7,0); displaymonth( ); /显示月WriteChar('/',4,0); displayyear( ); /显示年WriteString("20",0,0); /显示年百千位displayweek( ); /显示星期 /* 名称:Timechange(void)* 说明: 随着时间的变化,把新的时间显示出来* 功能: 显示时间的变化*/void Timechange(void)uchar data;data=read_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论