您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页单片机歌曲演奏的设计

单片机歌曲演奏的设计

来源:抵帆知识网
摘 要

本文是应用STCC52单片机来设计硬件电路,以此控制音乐的产生播放。并利用C语言进行程序设计。通过控制单片机内部的定时器来产生不同频率的方波,驱动蜂鸣器发出不同音调,再利用延迟来控制发音时间的长短,以此来表示不同音阶的变化。蜂鸣器借助这种变化来产生音乐。

本设计是8051芯片的电路为基础,外部加上功率放大器、放音设备,以此来实现音乐演奏控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出设定的音乐。利用琴键控制定时器的开中断和闭中断,即实现发音和闭音。在此期间再通过对定时器的定时时间进行控制来产生不同频率的方波,驱动蜂鸣器发出不同音阶的声音。

该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大单片机和音乐爱好者提供了很好的借鉴。

关键词:单片机;音乐;C语言;蜂鸣器

I

Abstract

This paper is the application of STCC52 microcontroller to design the hardware circuit to control the generation of music playing by using C language program design. Through the control of the single chip microcomputer timer to produce different inside the frequency of square wave, drive speaker tones, and then delay to control the pronunciation of the length of time, so as to indicate different scales of change. This change through the buzzer to generate program of music

This design is 8051 chips based circuit, external plus power amplifier and let the sound equipment, so as to realize the music playing hardware circuit, through the software program to control of the single chip microcomputer timer internal play a set of music. Using the keys of the timer control open interrupt and closed interrupt, pronunciation and closed sound is implemented. In this period again through the timing of timer control time to produce different frequency of square wave, drive out the sound of different scales buzzer.

The software and hardware system has a good generality and high practical value for the single-chip microcomputer and music lovers to provide a good reference.

Keywords: ATS51 SCM; music;C language program; buzzer

目录

II

摘 要 ................................................................................................................................................ I Abstract .......................................................................................................................................... II 绪论.................................................................................................................................................1 1概述...........................................................................................................................................1

1.1单片机的产生和发展.........................................................................................................2

1.1.1什么是单片机 ............................................................................................................. 2 1.2单片机的发展史及发展趋势 ............................................................................................ 2 1.3单片机的特点及应用 ........................................................................................................ 3 1.3.2单片机的特点 ............................................................................................................. 3 1.3.3单片机的应用 ............................................................................................................. 3 2 STCC52单片机的结构与原理 ............................................................................................ 4

2.1 STCC52内部组成结构 ................................................................................................. 4 2.2 STCC52引脚组成 ......................................................................................................... 5 2.3 STCC52硬件组成 ......................................................................................................... 5 2.3.1 引脚功能部件和特性 ............................................................................................ 5 2.3.2 芯片简介 ................................................................................................................ 6 2.3.3 引脚功能 ................................................................................................................ 6 2.3.4 单片机工作的最小化配置 .................................................................................... 8 2.4 STCC52中断系统 ....................................................................................................... 10 2.4.1 中断的概念 .......................................................................................................... 10 2.4.2 STCC52中断系统 ........................................................................................... 11 2.4.3 中断响应过程 ..................................................................................................... 16 3 系统设计总体方案 ................................................................................................................... 16 3.1 设计应用系统时应考虑的问题 ...................................................................................... 17 3.2 设计使用芯片STCC52介绍 ...................................................................................... 17 4 单片机音乐演奏控制器的软硬件设计 ................................................................................... 19 4.1 单片机产生音调的基础知识 .......................................................................................... 19 4.2 硬件电路 .......................................................................................................................... 19 4.3 程序设计与调试 .............................................................................................................. 20 4.3.1 程序设计框图 ....................................................................................................... 20 4.3.2. 程序设计的程序清单 .......................................................................................... 20 5 论文总结 ................................................................................................................................... 27 参 考 文 献 ................................................................................................................................. 28 附录1 ............................................................................................................................................ 29 硬件电路.................................................................................................................................28 附录2.............................................................................................................................................29 硬件电路原理图.......................................................................................................,,............29 致 谢 ........................................................................................................................................... 30

1

绪论

近年来,科学技术得到了前所未有的提高,可以说,在过去的100年里的发明创造大于之前人类已经取得的发明总和。其中最重要的是电子行业,尤其是计算机。计算机的出现和使用,使人们进入了一个崭新的时代。而单片机,作为一种微型计算机,它的发展与进步,使电子产品能更微小,更精密,更节约和高效。而在单片机上,我们可以让它实现各种各样的功能,以下就介绍用单片机进行音乐演奏的功能设计。 1 概述

随着信息技术的深入和计算机技术的飞速发展,单片机的应用越来越广泛,并逐渐发展成为一门关键的技术学科。单片机具有一些突出优点:体积小、重量轻、耗电少、电源单一、功能强、价格低、运行速度快、抗干扰能力强、可靠性高,所以在通信、家电、工业控制、仪器仪表、汽车等产品中都可以看到单片机的身影。目前国内单片机的应用仍以8051 系列为主。 1.1单片机的产生和发展 (1)什么是单片机

计算机的发展经历了从电子管到大规模集成电路等几个发展阶段,随着大规模集成电路技术的发展,使计算机向性能稳定可靠、微型化、廉价方向发展,从而出现了单片微型计算机。

所谓单片微型计算机,是指将组成微型计算机的基本功能部件,如处理器CPU、存储器ROM和RAM、输入/输出(I/O)接口电路等集成在一块集成电路芯片上的微型计算机,简称单片机。总体来讲,单片机可以用以下”表达式”来表示单片机=CPU ROM RAM I/O 功能部件。

1.2单片机的发展史及发展趋势 单片机的发展历史可划分为3个阶段:

第一阶段(1974-1976)为单片机初级阶段。因受工艺和集成度的,单片机采用双片形式。

第二阶段(1976-1978)为低性能单片机阶段。单片机由一块芯片构成,但性能低、品种少。

第三阶段(1978以后)为高性能单片机阶段。在这一阶段出现了很多新型单片机,这

2

些新型单片机不仅有功能很强的CPU,较多I/O口种类和数量,而且具有容量较大的ROM和RAM及种类繁多的功能部件。

随着继承工艺的不断发展,单片机一方面向集成度高、体积更高、功能更强、功耗更低的方向发展;另一方面向32位以上及双CPU方向发展。 1.3 单片机的特点及应用 (1) 单片机的特点

随着现代科技的发展,单片机的集成度越来越高,CPU的位数也越来越高,已能将所有主要部件都集成在一块芯片上,使其应用模式多、范围广,并具有以下特点:

a. 体积小,功耗低,价格便宜,重量轻,易于产品化。

b. 控制功能强,运行速度快,能针对性地解决从简单到复杂的各类控制问题,满足工业控制要求,并有很强的位处理和接口逻辑操作等多种功能。

c. 抗干扰能力强,适用温度范围宽。由于许多功能部件集成在芯片内部,受外界影响小,故可靠性高。 (2)单片机的应用

单片机的应用具有面广量大的特点,目前它广泛的应用于国民经济各个领域,对技术改造和产品的更新起着重要作用。主要表现在以下几个方面:

a. 单片机在智能化仪器、仪表中的应用:由于单片机有机算计的功能,它 不仅能完成测量,还既有数据处理、温度控制等功能,易于实现仪器、仪表的数 字化和智能化。

b. 单片机在实时控制中的应用:单片机可以用于各种不太复杂的实时控制系统中,如一般性的温度控制、液面控制、电镀顺序控制等。将测量技术、自动控制技术和单片机技术相结合,充分发挥单片机的数据处理和实时控制功能,使系统工作于最佳状态。

c. 单片机在机电一体化中的应用:单片机有利于机电一体化技术的发展,已广泛应用于数控机床、医疗设备、汽车设备等。

d. 单片机在多机系统中的应用:单片机在多机系统中的应用是将来单片机发展的主要模式,它可以提高单片机的可靠性,使系统运行速度更快。单片机在计算机外围设备中的应用:单片机广泛应用于打印机、绘图机等多种计算机的外围设备,特别是用于智能终端,可大大减轻主机负担,提高系统的运行速度。

3

2 STCC52单片机的结构与原理

2.1 STCC52内部组成结构

STCC52是低功耗化、高性能化CMOS8位的微控制器,拥有片内集成了8KB的Flash 存储器。使用宏晶公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在线可编程,也适于常规编程器。在单芯片上,具有灵活的8 位微处理器(CPU) 和在线可编程Flash,使得STCC52在众多嵌入式控制应用系统中得到广泛应用。

STCC52的简单组成结构如图1所示:

STCC52的内部结构图1

由上图可知,STCC52单片机由一个时钟OSC、一个程序存储器ROM、一个数据存储器RAM和一个定时器/计数器组成。时钟电路由外接谐振器的时钟振荡器、时钟发生器及关断控制信号等组成。时钟振荡器是单片机的时钟源,时钟发生器对振荡器的输出信号

4

进行二分频,关断控制信号/PD和/IDL用于单片机的功耗管理。程序和数据存储器分为不同的逻辑空间,使可用8位地址来访问数据存储器(ROM),这样可提高8位微处理器(CPU)的存储和处理速度。 2.2 STCC52引脚组成 其引脚组成如下图2所示;

图2 : STCC52的引脚图 2.3 STCC52硬件组成 2.3.1 引脚功能部件和特性 (1)8位微处理器(CPU); (2)数据存储器(128B RAM); (3)程序存储器(4KB Flash ROM);

(4)4个8位可编程并行I/O口(P0口、P1口、P2口、P3口); (5)1个全双工的异步串行口; (6)2个可编程的16位定时器/计数器; (7)1个看门狗定时器;

(8)中断系统具有5个中断源、5个中断向量; (9)特殊功能寄存器(SFR)26个;

(10)低功耗模式有空闲模式和掉电模式,且具有掉电模式下的中断恢复模式;

(11)3个程序加密锁定位。

5

2.3.2 芯片简介

STCC52芯片片上Flash允许程序存储器(ROM)在线可编程,也适用于常规编程。在单芯片上,拥有灵活的8 位微处理器(CPU)和在系统可编程Flash,使得STCC52芯片成为了为众多嵌入式控制系统提供更灵活、高效的解决方案。STCC52芯片具有以下突出优点:①增加了在线可编程功能,灵活的在线编程方式(字节和页编程)使现场程序调试和修改更加灵活方便; ②数据指针增加到两个,方便了对片外RAM的访问过程;③新增了看门狗定时器,提高了系统的抗干扰能力;④增加了掉电标志;⑤增加了掉电状态下的中断恢复模式。 2.3.3 引脚功能

(1) 并行I/O口引脚

P0 口:8位,漏极开路的双向I/O口

①当外扩存储器及I/O接口芯片时,P0口作为低8位地址总线及数据总线的 分时复用端口。

②P0口也可用作通用的I/O口,需加上拉电阻,这时为准双向口。作为通用I/O输入,应先向端口写入1,可驱动8个LS型TTL负载。 P1 口:8位,准双向I/O口,具有内部上拉电阻。

①准双向I/O口,作为通用I/O输入时,应先向端口锁存器写1。P1口可驱动4个LS型TTL负载。

②P1.5/MOSI、P1.6/MISO和P1.7/SCK可用于对片内Flash存储器串行编程和校验,它们分别是串行数据输入、输出和移位脉冲引脚。 P2 口:8位,准双向I/O口,具有内部上拉电阻。

①当ATS51扩展外部存储器及I/O口时,P2口作为高8位地址总线用,输出高8位地址。

②P2口也可作为普通的I/O口使用。当作为通用I/O输入时,应先向端口输出锁存器写1。P2口可驱动4个LS型TTL负载。

P3 口:8位,准双向I/O口,具有内部上拉电阻。

①可作为通用的I/O口使用。作为通用I/O输入,应先向端口输出锁存器写入1。可驱动4个LS型TTL负载。

②P3口还可提供第二功能,功能表如表1所示:

表1: P3口第二功能定义

引脚

第二功能

说明

6

P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

RXD TXD INT0 INT1 T0 T1 WR RD

串行数据输入口 串行数据输出口 外部中断0输入 外部中断1输入 定时器0外部计数输入 定时器1外部计数输入 外部数据存储器写选通输出 外部数据存储器读选通输出

综上所述,P0口可作为总线口,为双向口。作为通用的I/O口使用时,为准双向口,这时需加上拉电阻。P1口、P2口、P3口均为准双向口。 (2)控制引脚

RST:(RESET,9脚)复位信号输入,在引脚加上持续时间大于2个机器周期的高电平,可使单片机复位。正常工作,此脚电平应 ≤ 0.5V。当看门狗定时器溢出输出时,该脚将输出长达96个时钟振荡周期的高电平。

ALE/PROG:(Address Latch Enable/PROGramming,30脚)

ALE:为CPU访问外部程序存储器或外部数据存储器提供地址锁存信号,将低8位地址锁存在片外的地址锁存器中。此外,单片机正常运行时,ALE端一直有正脉冲信号输出,此频率为时钟振荡器频率fosc的1/6。可用作外部定时或触发信号。注意,每当ATS51访问外部RAM时(执行MOVX类指令),要丢失一个ALE脉冲。如需要,可将特殊功能寄存器AUXR(地址为8EH)的第0位(ALE禁止位)置1,来禁止ALE操作,但执行访问外部程序存储器或外部数据存储器指令“MOVC”或“MOVX”时,ALE仍然有效。即ALE禁止位不影响对外部存储器的访问。

PROG:引脚第二功能,对片内 Flash编程,为编程脉冲输入脚。

PSEN:程序储存允许输出是外部Flash ROM的读选通信号,当STCC52由外部程序存 储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器时,输出脉冲负跳沿作为读外部Flash ROM的选通信号。该端可驱动8个LS型TTL负载。

EA/VPP:

7

EA是引脚第一功能,外部Flash ROM访问允许控制端。

① EA =1,在PC值不超出0FFFH(即不超出片内4KB Flash存储器的地址范围)时,单

片机读片内程序存储器(4KB)中的程序,但PC值超出0FFFH (即超出片内4KB Flash地址范围)时,将自动转向读取片外60KB(1000H-FFFFH)程序存储器空间中的程序。 ② EA =0,只读取外部的程序存储器中的内容,读取的地址范围为0000H~FFFFH,片内的4KB Flash 程序存储器不起作用。

VPP是引脚第二功能,对片内Flash编程,接编程电压。 (3)时钟引脚

①XTAL1:片内振荡器反相放大器和时钟发生器电路输入端。用片内振荡器时,该脚接外部石英晶体和微调电容;外接时钟源时,该脚接外部时钟振荡器的信号。

②XTAL2:片内振荡器反相放大器的输出端。当使用片内振荡器,该脚连接外部石英晶体和微调电容;当使用外部时钟源时,本脚悬空。 2.3.4 单片机工作的最小化配置

单片机的最小化系统包含最基本的复位电路、晶振电路及微机本身,此最小系统主要是负责程序的存储与运行,如图2-4所示。本设计采用的是STCC52芯片,它内部自带8K的Flash程序存储器,这8K的存储空间足够使用,所以将STCC52芯片的第31脚(EA)固定接高电平,只用芯片内部的8K程序存储器,单片机的晶振电路由一个12M的晶振和两个30PF的瓷片电容组成,使单片机的工作时间精度为1微秒。

下图3 给出了STCC52的最小化系统

8

图3: STCC52的最小化系统

2.3.5 复位电路

复位主要是在单片机进入系统的正常初始化之后,由于程序运行错误或操作错误使系统处于死锁状态,为摆脱死锁状态,通过按键复位使RST引脚低电平重新启动单片机工作,属于电平复位。复位电路是单片机最小系统的一部分,通常复位电路有两种:上电复位和外部按键复位,本设计系统用的是外部按键复位。该复位电路由一个轻触开关、一个10微法电解电容和一个10K电阻组成。其电路图如下图4。

图4:复位电路图

2.2.6 晶振电路

9

晶振电路主要用于产生单片机工作时所必需的时钟控制信号。单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器(简称晶振)和微调电容,就构成一个稳定的自激振荡器。电路中的电容C1和C2典型值通常选择为30PF,对外接电容的值虽然没有严格的要求,但电容的大小会影响振荡器频率的高低、振荡器的稳定性和起振的快速性,此晶振为12MHz,晶振的频率越高,则系统的时钟频率也越高,单片机的运行速度也越快,但反过来运行速度快对存储器的速度要求就高:晶振和电容应该是尽可能安装得与单片机芯片靠近些,以减小寄生电容,更好地保证振荡器稳定、可靠地工作。

晶振电路如图5所示:

图5: 晶振电路 2.4 STCC52中断系统 2.4.1 中断的概念

当CPU 正在处理某项事务的时候,如果外界或内部发生了更紧急的事件,要求CPU暂停正在处理的工作转而去处理这个紧急事件,待处理完以后再回到原来被中断的地方,继续执行原来被中断了的程序,这样的过程称为中断。能够实现中断处理功能的部件称为中断系统。向CPU 提出中断请求的源称为中断源,STCC52单片机共有5个中断源。中断源向CPU 提出的处理请求,称为中断请求或中断申请。CPU 同意处理该请求称为中断响应,处理中断请求的程序称为中断服务子程序。当CPU暂时终止正在执行的程序,转去执行中断服务子程序时,除了硬件自动把断点地址(16位程序计数器PC 的值)压入堆栈之外,用户应注意保护有关的工作寄存器、累加器、标志位等信息,这称为保护现场;在完成中断服务子程序后,恢复有关的工作寄存器、累加器、标志位的内容,称为恢复现场;最后执行中断返回指令RETI,从堆栈中自动弹出断点地址PC,继续执行被中断的程序,称为中断返回。其中断响应过程如图6所示

10

图6:中断响应图

2.4.2 STCC52中断系统 A. 中断请求源

STCC52单片机的中断系统有5 个中断源,其入口地址是固定的,见表2-1,同时具有2个中断优先级,分别为高优先级和低优先级,可实现2 级中断服务程序嵌套。中断系统结构示意表如下表2所示

中 断 源 外部中断0(INT0 ) 定时/计并器T0 外部中断1( INT1) 定时/计并器T1 串行口S 并 口 数 址 0003H 000BH 0013H 001BH 0023H 表2:中断系统结构表

(1) INT0-外部中断请求0,由INT0(P3.2)引脚输入,中断请求标志为IE0(定时器/计数器控制寄存器TCON的D1位)。

(2) INT1-外部中断请求1,由INT1(P3.3)引脚输入,中断请求标志为IE1(定时器/计数器控制寄存器TCON的D3位)。

(3) 定时器/计数器T0 溢出中断请求,中断请求标志为TF0(定时/计数器控制寄存器TCON 的D5 位)。

(4) 定时器/计数器T1 溢出中断请求,中断请求标志为TF1(定时/计数器控制寄存器TCON 的D7 位)。

11

(5) 串行口中断请求,中断请求标志为TI 或RI(分别为串行口控制寄存器SCON 的D1 和D0 位)。

b. 中断请求标志所在特殊功能寄存器

CPU在每个机器周期的S5P2 时刻采样5个中断源的中断标志IE0、IE1、TF0、TF1、TI 和RI,这些中断请求源的中断请求标志位分别由特殊功能寄存器TCON和SCON的相应位锁定。

(1) 定时器控制寄存器TCON

定时器控制寄存器TCON 如下表3所示,其中TF1 和TF0 为定时器中断标志位,TR1 和TR0 为定时器的启动控制位,在几节中已经介绍过,现介绍与中断有关的低4位的功能。

表3 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 IT0-选择外部中断请求INT0(P3.2)为边沿触发方式或电平触发方式的控制位。IT0 可由软件置“1”或清“0”。当IT0 为0时,为电平触发方式,INT0低电平有效。外部中断申请触发器的状态随着CPU 在每个机器周期采样到的外部中断输入线的电平变化而变化,这能提高CPU 对外部中断请求的响应速度。当外部中断源被设定为电平触发方式时,在中断服务子程序返回之前,外部中断请求输入必须无效(即变为高电平),否则CPU 返回主程序后会再次响应中断。所以电平触发方式适合于外部中断以低电平输入,而且中断服务子程序能清除外部中断请求源的情况。当IT0 为l时,INT0为边沿触发方式,INT0 输入脚上的电平从高到低的负跳变有效。外部中断申请触发器能锁存外部中断输入线上的负跳变。即便是CPU 暂时不能响应,中断申请标志也不会丢失。在这种方式时,如果相继连续两次采样,一个周期采样到外部中断输入为高,下个周期采样为低,则置“1”中断申请触发器,直到CPU 响应此中断时才清0。这样不会丢失中断,但输入的负脉冲宽度至少保持12 个振荡周期,才能被CPU 采样到。外部中断的边沿触发方式适合于以负脉冲形式输入的外部中断请求。如ADC0809 的A/D转换结束标志信号EOC 为正脉冲,再反相连到8031 的INT0引脚,就可以中断方式读取A/D的转换结果。

IE0:外部中断0 的中断申请标志位。当(IT0)=0 即电平触发方式时,每个机器周期的S5P2 采样INT0,若INT0为低电平,则(IE0)置“1”,否则(IE0)清“0”;当(IT0)=l,即INT0程控为边沿触发方式时,当第一个机器周期采样到该引脚为低电平时,则置

(IE0)“1”( INT1 ),(IE0)为1表示外部中断0 正在向CPU 申请中断。当CPU 响应中断,转向中断服务子程序时,由硬件自动清“0”IE0。

ITl:选择外部中断请求INT1(P3.3)为边沿触发方式或电平触发方式的控制位,其意

12

义和IT0类似。

lEl:外部中断1的中断申请标志位,其意义和IE0 类似。当MCS-51单片机复位后,TCON 被清0,关闭中断,所有中断请求被禁止。 c.串行口控制寄存器SCON

SCON 为串行口控制寄存器,字节地址为98H,可位寻址。其低2 位锁定串行口的发送中断和接收中断的中断请求标志TI和RI,格式如表4所示。

表4

TI RI TI:STCC52单片机串行口的发送中断标志位,在串行口以方式0 发送时,每当发送完8 位数据,由硬件置“1”TI;若以方式1、方式2或方式3发送时,在发送停止位的开始时置“1”TI,(TI)=l 表示串行口发送正在向CPU 申请中断,要发送的数据一旦写入串行口的数据缓冲器SBUF,单片机内部的硬件就立即启动发送器继续发送。值得注意的是CPU 响应发送器中断请求,转向执行中断服务程序时并不清“0”TI,TI 必须由用户的中断服务子程序清0,即中断服务子程序中必须用CLR TI 或ANL SCON,#0FDH等清“0”TI 的指令。

RI:串行口接收中断标志位,若串行口接收器允许接收,并以方式0 工作,每当接收到第8 位数据时置“1”RI;若以方式1、2、3 工作,且(SM2)=0 时,每当接收器接收到停止位的中间时置“1”RI,当串行口以方式2 或方式3 进行工作,且(SM2)=1 时仅当接收到的第9 位数据RB8 为1后,同时还要在接收到停止位的中间位置“l”RI,RI 为1,表示串行口接收器正在向CPU 申请中断,同样RI 必须由用户的中断服务子程序清0。MCS-5I 单片机复位后,SCON被清零。 B. 中断控制寄存器 (1)中断允许寄存器IE

STCC52 单片机的CPU 对中断源的开放或屏蔽,是由片内的中断允许寄存器IE控制的(如图3-9 所示),IE的字节地址为A8H,可以位寻址。格式如表5所示。

表5

EA - - ES ET1 EX1 ET0 EX0 中断允许寄存器IE各位的功能如下: EA 中断允许总控制位

(EA)=0,CPU屏蔽所有的中断请求(关中断); (EA)=1,CPU开放所有中断(开中断)。 ES串行口中断允许位

13

(ES)=0,禁止串行口中断; (ES)=1,允许串行口中断。

ET1 定时/计数器T1的溢出中断允许位 (ET1)=0,禁止T1 溢出中断; (ET1)=1,允许T1 溢出中断。 (EX1)外部中断1中断允许位 (EX1)=0,禁止外部中断1 中断; (EX1)=1,允许外部中断1 中断。 (ET0)定时/计数器T0 的溢出中断允许位。 (ET0)=0,禁止T0 溢出中断; (ET0)=1,允许T0 溢出中断。 (EX0)中断0中断允许位。 (EX0)=0,禁止外部中断0 中断; (EX0)=1,允许外部中断0 中断。

MCS-51 单片机复位以后,IE 被清0,由用户程序置“1”或清“0”IE 相应的位,实现允许或禁止各中断源的中断申请。若允许某一个中断源中断,除了开放中断总的允许位EA 外,必须同时使CPU 开放该中断源的中断允许位。因为中断允许寄存器IE 的地址是A8H,可以进行位寻址,所以可以通过位操作指令和字节操作指令实现。 C.中断优先级寄存器IP

MCS-51 单片机有两个中断优先级,对于每一个中断请求源可编程为高优先级中断或低优先级中断。MCS-51 单片机的片内有一个中断优先级寄存器IP,其字节地址为B8H,可以位寻址,可进行字节操作和位操作来设置各中断源中断级别。形式如表6所示。

表6

-

中断优先级寄存器IP 各位的功能如下: PS 串行口中断优先级控制位

(PS)=1,串行口中断定义为高优先级; (PS)=0,串行口中断定义为低优先级。 PT1 定时/计数器T1中断优先级控制位

(PT1)=1,定时/计数器T1中断定义为高优先级;

- - PS PT1 PX1 PT0 PX0 14

(PT1)=0,定时器T1中断定义为低优先级。 PX1 外部中断1中断优先级控制位 (PX1)=1,外部中断1 定义为高优先级; (PX1)=0,外部中断1 定义为低优先级。 PT0 定时器T0中断优先级控制位

(PT0)=1,定时/计数器T0中断定义为高优先级; (PT0)=0,定时/计数器T0中断定义为低优先级。 PX0 外部中断0 中断优先级控制位 (PX0)=1,外部中断0 定义为高优先级; (PX0)=0,外部中断0 定义为低优先级。

中断优先级控制寄存器IP 的各位都由用户程序置“1”和清“0”,可用位操作指令或字节操作指令更新IP 的内容,以改变各中断源的中断优先级。MCS—51 单片机复位以后IP为0,各个中断源均为低优先级中断

D. 中断优先级结构

STCC52 单片机有两个中断优先级,对于每一个中断请求源可编程为高优先级中断或低优先级中断。一个正在执行的低优先级中断程序能被高优先级的中断源所中断,但不能被另一个低优先级的中断源所中断。若CPU 正在执行高优先级的中断,则不能被任何中断源所中断,一直执行到结束,遇到返回指令RETI,返回主程序后再执行一条指令后才能响应新的中断请求。以上所述可以归纳为下面两条基本规则:

(1) 低优先级可被高优先级中断,而高优先级中断源不能被任何中断源所中断。 (2) 任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断。为了实现上述两条规则,中断系统内部包含两个不可寻址的优先级状态触发器。其中一个指示某高优先级的中断正在执行,所有后来的中断均被阻止。另一个触发器指示某低优先级的中断正在执行,所有同级的中断都被阻止,但不阻断高优先级的中断。当几个同优先级的中断同时申请中断,响应哪一个中断源将取决于内部查询顺序,或称为辅助优先级结构,其优先级排列见表7:

表7

中断源 辅助优先级结构 高 低 外部中断0(INT0 ) 定时/计数器T0 溢出中断 15

外部中1( INT1 ) 定时/计数器T1溢出中断 串行口中断S

2.4.3 中断响应过程

高 低 低 CPU 在每个机器周期的S5P2 时刻采样中断标志,在下一个机器周期对采样到的中断进行查询。如果前一个机器周期的S5P2 有中断标志,则在查询周期内便会查询到,并按优先级高低进行中断处理,如果响应中断,中断系统将控制程序转入相应的中断服务子程序。但中断响应是有条件的,并不是查询到的所有中断请求都能被立即响应,当遇到下列三种情况之一时,中断响应:

(1) CPU 正在处理相同的或更高优先级的中断;

(2) 现行的机器周期不是所执行指令的最后—个机器周期;

(3) 正在执行的指令是RETI 或是访问IE或IP的指令。CPU 在执行RETI 或访问IE、IP 的指令后,至少需要再执行一条指令才会响应新的中断请求。

16

3 系统设计总体方案

3.1 设计应用系统时应考虑的问题

在设计一个应用系统时,首先要进行系统的总体设计,对系统的总体设计决定了我们今后的设计方向,因此我们得事先考虑在设计中的各个方面的问题。大体来说可包括以下几个方面:

(1).大体设计步骤。

在软件和硬件的设计中都应遵循从整体到局部的设计原则。因为它可以把一些较复杂的问题分解成一块一块的较简单的问题来解决,最总达到解决复杂问题的目的。 (2).可实现性。

这是设计的根本问题,它直接决定了设计的成功与否。针对本设计采用STCC52单片机实现对硬件电路的控制。 (3).经济性。

毕业设计的要求使用固定的有限的资源来完成个人的方案,随意必须考虑经济方面的问题。但并不是说就要尽量少花钱、少买元件,而是说在保证方案可行的前提下电路要简单。

(4).可靠性。

可靠性是指产品在规定的条件下和规定的时间内完成规定功能的能力。可靠性的指标除了可用完成功能的概率来表示外,还可用平均无故障时间、故障率、实效率或平均寿命来表示。

对于一个应用系统来说,不管在原理上如何先进、功能上如何全面、精度上如何精密,如果可靠性差、故障频繁,不能正常工作的话,那么这个系统也没有什么价值了。因此在设计系统的过程中,对于可靠性的要求应该贯穿于每一个环节,采取各种措施来提高可靠性,以保证系统能够长时间的稳定工作。

就硬件方面来说,系统所用元件的优劣和制造工艺的精细是影响可靠性的重要原因,因此应该合理购买元器件。另外,在制造电路板时也要遭到工艺精细。软件方面,应该尽可能的不要使用模块化的设计方案,以利于程序的编写和调试,并减少故障率,提高软件的可靠性。

3.2 设计使用芯片STCC52介绍 本设计所用单片机如图7所示:

17

图7: STCC52

该单片机功能如下:

1. 增强型6时钟/机器周期,12时钟/机器周期 8051 CPU。 2.工作电压:5.5V-3.4V(5V单片机)/3.8V-2.0V(3V单片机)。

3.工作频率范围:0-40MHZ,相当于普通8051的0~80MHZ。实际工作频率可达48MHZ。 4.用户应用程序空间4K/8K/13K/16K/20K/K字节。 5.片上集成1280字节/512字节RAM。

6.通用I/O(32/36),复位后为:P1/P2/P3/P4是准双向口/弱上拉(普通8051传统I/O口),P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O用时,需加上拉电阻。 7.ISP(系统可编程)/(在应用可编程),无需专用编程/仿真器可通过串口(P3.0/P3.1)直接下载用户程序,8K程序3秒即可完成一片。 8.EEPROM功能。 9.看门狗。

10.内部集成MAX810专成复位电路(D版本才有),外部晶体20M以下时,可省外部复位电路。

11.共3个16位定时器/计时器,其中定时器0还可以当成2个8位定时器使用。 12.外部中断4路,下降沿中断或低电平触发中断,Power Down模式可由外部中断低电平触发中断方式唤醒。

18

4 单片机音乐演奏控制器的软硬件设计

4.1 单片机产生音调的基础知识

我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的高电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。例如,要产生200HZ的音频信号,200HZ音频的变化周期为1/200秒,即5ms。这样,当P2.5的高电平或低电平的持续时间为2.5ms时就能发出200HZ的音调。

本设计用定时器T0方式1来产生琴键对应音符的频率的方波,由P3.0输出驱动嗡鸣器。单片机所用的晶振的频率为12MHz。 4.2 硬件电路

在本次程序设计中,我们用的是STCC52 单片机,工作性能正常,然后将程序输入,运行,当然也需要有一个蜂鸣器,通过插头,插头的前端接在P3.0上,后面部分找根线接单片机的地,这时候通过编译,连接之后就应该有声了,还可以通过基本的单片机原理来改进硬件连接,以达到更加完美的效果。硬件电路如图8所示:

图8:硬件电路

19

4.3 程序设计与调试

4.3.1 程序设计框图如下图9所示:

图9 :程序框图

4.3.2.程序设计的程序清单 WORKPLACE

……………………………………说明……………………………………………… 曲谱存贮格式 unsigned char code Music Name{音高,音长,音高,音长...., 0,0}; 末尾:0,0 表示结束(Important)

20

音高由三位数字组成:

音长最多由三位数字组成:

个位表示音符的时值,其对应关系是:

|数值(n): |0 |1 |2 |3 | 4 | 5 | 6 |几分音符: |1 |2 |4 |8 |16 |32 |

音符=2^n

个位是表示 1~7 这七个音符

十位是表示音符所在的音区:1-低音,2-中音,3-高音; 百位表示这个音符是否要升半音: 0-不升,1-升半音。

十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音 百位是符点位: 0-无符点,1-有符点

调用演奏子程序的格式

***************************************************************************/ #ifndef __SOUNDPLAY_H_REVISION_FIRST__ #define __SOUNDPLAY_H_REVISION_FIRST__

//************************************************************************** //unsigned char BeepIO #define SYSTEM_OSC

12000000

//定义晶振频率11.0592M

//定义普通音符演奏的长度分率,//每4分音符间隔

Play(乐曲名,调号,升降八度,演奏速度);

|乐曲名 : 要播放的乐曲指针,结尾以(0,0)结束; |调号(0-11) : 是指乐曲升多少个半音演奏; |升降八度(1-3) : 1:降八度, 2:不升不降, 3:升八度; |演奏速度(1-12000): 值越大速度越快;

#define SO0UND_SPACE 4/5 SbitBeepI0=P2^0;

//定义输出管脚

unsigned int code FreTab[12] = { 131,139,147,156,165,175,185,196,208,220,233,247 }; //原始频率表

unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 };

//

21

7在频率表中的位置 unsigned

char code LengthTab[7]= { 1,2,4,8,16,32, };

unsigned char Sound_Temp_TH0,Sound_Temp_TL0; //音符定时器初值暂存 unsigned char Sound_Temp_TH1,Sound_Temp_TL1; //音长定时器初值暂存

//**************************************************************************

void InitialSound(void) {

BeepIO=0;

Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;

// 计算TL1应装入的初

//初始化中断和定时器

值 (10ms的初装值) 值 }

void BeepTimer0(void) interrupt 1 //音符发生中断 {

BeepIO = !BeepIO;

TH0 = Sound_Temp_TH0; TL0 = Sound_Temp_TL0; TH1 = Sound_Temp_TH1; TL1 = Sound_Temp_TL1; TMOD |= 0x11; ET0 = 1; ET1 = 0; TR0

= 0;

Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256; // 计算TH1应装入的初

TR1 = 0; EA = 1;

22

}

//************************************************************************** void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed) {

}

SoundLength = 0;

while(Sound[SoundLength] != 0x00) //计算歌曲长度 {

if(Octachord == 1)

NewFreTab[i]>>=2;

unsigned int NewFreTab[12]; unsigned char i,j;

unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength; unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD; for(i=0;i<12;i++) {

j = i + Signature; if(j > 11) { } else

NewFreTab[i] = FreTab[j]; j = j-12;

NewFreTab[i] = FreTab[j]*2;

// 根据调号及升降八度来生成新的频率表 //新的频率表

else if(Octachord == 3)

NewFreTab[i]<<=2;

23

}

SoundLength+=2;

Point = 0;

Tone = Sound[Point]; Length = Sound[Point+1];

LDiv0 = 12000/Speed; LDiv4 = LDiv0/4;

// 算出1分音符的长度(几个10ms) // 算出4分音符的长度

// 普通音最长间隔标准

// 读出第一个音符和它时时值

LDiv4 = LDiv4-LDiv4*SOUND_SPACE; TR0

= 0;

TR1 = 1;

while(Point < SoundLength) {

SL=Tone%10;

//计算出音符

//计算出高低音

SM=Tone/10%10; SH=Tone/100;

//计算出是否升半

//查出对应音符的频率

CurrentFre = NewFreTab[SignTab[SL-1]+SH]; if(SL!=0) {

if (SM==1) CurrentFre = CurrentFre /2 ;//CurrentFre >>= 2; if (SM==3) CurrentFre = CurrentFre *2 ;//CurrentFre <<= 2;

//低音 //高音

Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数

器初值

}

SLen=LengthTab[Length%10]; //算出是几分音符 XG=Length/10%10;

//算出音符类型(0普通1连音2顿音)

Sound_Temp_TH0 = Temp_T/256; Sound_Temp_TL0 = Temp_T%256; TH0 = Sound_Temp_TH0;

TL0 = Sound_Temp_TL0 + 12; //加12是对中断延时的补偿

24

FD=Length/100; LDiv=LDiv0/SLen; if (FD==1)

LDiv=LDiv+LDiv/2;

//算出连音音符演奏的长度(多少个10ms)

if(XG!=1)

if(XG==0)

//算出普通音符的演奏长度

if (SLen<=4)

LDiv1=LDiv-LDiv4;

else

LDiv1=LDiv*SOUND_SPACE;

else

LDiv1=LDiv/2;

//算出顿音的演奏长度

else

LDiv1=LDiv;

if(SL==0) LDiv1=0;

LDiv2=LDiv-LDiv1;

//算出不发音的长度

if (SL!=0)

{ }

if(LDiv2!=0) {

TR0=0; BeepIO=0;

for(i=LDiv2;i>0;i--) //音符间的间隔 TR0=1;

for(i=LDiv1;i>0;i--) //发规定长度的音 { }

while(TF1==0);

TH1 = Sound_Temp_TH1; TL1 = Sound_Temp_TL1; TF1=0;

25

}

}

}

{ }

while(TF1==0);

TH1 = Sound_Temp_TH1; TL1 = Sound_Temp_TL1; TF1=0;

Point+=2; Tone=Sound[Point]; Length=Sound[Point+1];

BeepIO = 1;

//************************************************************************** #endif

26

5 论文总结

2012年4月,我开始了我的毕业论文工作,时至今日,论文基本完成。从最初的茫然,到慢慢的进入状态,再到对思路逐渐的清晰,整个写作过程难以用语言来表达。历经了二十多天的努力,紧张而又充实的毕业设计终于落下了帷幕。回想这段日子的经历和感受,我感慨万千,在这次毕业设计的过程中,我拥有了无数难忘的回忆和收获。

一个月前,刘老师告诉我的论文题目:单片机音乐演奏的设计研究。在搜集资料的过程中,我认真准备了一个笔记本。我在学校图书馆,大工图书馆搜集资料,还在网上查找各类相关资料,将这些宝贵的资料全部记在笔记本上,然后找段时间集中向老师请教遇到的问题。

到了4月中旬,资料已经基本查找完毕了,我开始着手论文的文字叙述。几天后进行相关图形的绘制工作和电路的设计工作。在设计电路初期,由于没有设计经验,觉得无从下手,空有很多设计思想,却不知道应该选哪个,经过导师的指导,我的设计渐渐有了头绪,通过查阅资料,逐渐确立系统方案。方案中蜂蜜器驱动电路的设计是个比较头疼的问题,需要经过反复推敲和对比。

当我终于完成了所有打字、绘图、排版、校对的任务时,我感觉有点累,但是想到自己这段时间的收获,和老师同学们的热心帮助,我心里还是觉得很高兴!

在这段时间里有许多难忘瞬间。在我徜徉书海查找资料的日子里,面对无数书本的罗列,最难忘的是每次找到资料时的激动和兴奋;亲手设计电路图的时间里,记忆最深的是每一步小小思路实现时那幸福的心情;为了论文我曾赶稿到深夜,但看着亲手打出的一字一句,心里满满的只有喜悦毫无疲惫。这段旅程看似荆棘密布,实则蕴藏着无尽的宝藏。我从资料的收集中,掌握了很多单片机的知识,让我对我所学过的知识有所巩固和提高,并且让我对当今单片机最新发展技术有所了解。在整个过程中,我学到了新知识,增长了见识。脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。在今后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。

27

参 考 文 献

[1] 赵建领.51系列单片机开发宝典.电子工业出版社,2007.04.01 [2] 楼然苗,李光飞.单片机课程设计指导.电子工业出版社,2007.01 [3] 李朝青.单片机原理与接口技术.航空航天大学出版社,1999 [4] 张毅刚.MCS-51单片机应用设计.哈尔滨工业大学出版社,1997 [5] 潘新民.微型计算机控制技术.人民邮电出版社,1999 [6] 王福瑞.单片机测控系统设计大全.航空航天大学出版社,1998 [7] 李华.MCS-51 系列单片机实用接口技术.航空航天大学出版社,2000 [8] Intel.MCS-51 Family of Single Chip Microcomputers User’s Manual,1990

28

附录1

实体照片

29

附录2

硬件电路原理图

30

致 谢

本人的学位论文是在我的导师***老师的亲切关怀和悉心指导下完成的。他治学态度严谨,科学,对工作一丝不苟,对人关怀备至,也是他激励着我克服论文中的重重难关。从课题的选择到项目的最终完成,刘老师都始终给予我细心的指导和不懈的支持。在此谨向刘老师致以诚挚的谢意和崇高的敬意。

在此,我还要感谢在一起愉快的度过大学生活的每个可爱的同学们和尊敬的老师们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。

在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!谢谢你们!

除此之外,我还要感谢我的父母,他们永远在我的身后,给我最强有力的依靠和支持。这些年,自己在外求学,是他们的辛辛劳作和无私,不求回报的关爱,让我有无穷的勇气面对我人生遇到的重重挑战,谢谢你们!我一定会努力,勇敢的面对一切!

最后,通过这此论文的思考与创作,我明白,万事开头难,每件看似复杂,艰难的事情,只要你积极投入,脚踏实地,就会发现后面会越来越容易,最后总会成功。其二,皇天不负有心人,当决定要做一件事后,坚持不懈,开拓创新,最终都会取得自己想要的结果!

31

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务