单片机按键控制定时器选播多段音乐.docx

上传人:b****8 文档编号:9645401 上传时间:2023-05-20 格式:DOCX 页数:15 大小:51.16KB
下载 相关 举报
单片机按键控制定时器选播多段音乐.docx_第1页
第1页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第2页
第2页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第3页
第3页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第4页
第4页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第5页
第5页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第6页
第6页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第7页
第7页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第8页
第8页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第9页
第9页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第10页
第10页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第11页
第11页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第12页
第12页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第13页
第13页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第14页
第14页 / 共15页
单片机按键控制定时器选播多段音乐.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机按键控制定时器选播多段音乐.docx

《单片机按键控制定时器选播多段音乐.docx》由会员分享,可在线阅读,更多相关《单片机按键控制定时器选播多段音乐.docx(15页珍藏版)》请在冰点文库上搜索。

单片机按键控制定时器选播多段音乐.docx

单片机按键控制定时器选播多段音乐

郑州科技学院

单片机课程设计

题目按键控制定时器选播多段音乐

学生姓名张三

专业班级15级物联网一班

学号6

院(系)信息工程学院

指导教师王

完成时间2017年6月8日

1、背景介绍

如今,电子技术获得了飞速的发展,现代电子产品几乎渗透了社会的各个领域。

目前,单片机正朝着高性能和多品种方向发展趋势将是进一步想着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路装化等几个方面发展。

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。

概括的讲:

一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

同时,学习使用单片机是了解计算机原理与结构的最佳选择。

单片机内部也用和电脑功能类似的模块,比如CPU、内存、并行总线。

还有和硬件作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是很低的。

利用单片机实现音乐播放有很多要点,例如外部电路简单,控制方便等,因而备受广大单片机爱好者的喜爱。

通过音乐播放器的设计方案,掌握C语言的编写方法。

并熟练的运用80C51单片机定时器产生固定频率的方波信号,推动喇叭发出旋律,按下单键可以演奏预先设置的歌曲旋律,最重要的是自己还可以通过程序设计输入自己喜欢的歌曲来演奏,本设计采用简易音阶编码直觉式输入法方便设计音乐旋律。

本文将围绕基于单片机按键控制定时器选播多段音乐,介绍一些关于单片机的基础知识、音乐播放器的制作原理及方法(其中包括了音乐编程原理)、定时器的设定,以及仿真软件(Keil、Proteus)的使用方法。

二、设计方案

1、方案设计

对于C51单片机,它抗干扰性较强,且集成度高、功能强、指令丰富等,可以应用的地方较数字电路更多一些,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表及通讯设备。

而且单片机已经深入到工业生产的各个环节以及人民生活的各个层次。

采用的是基于C51单片机的音乐播放器的设计,该系统控制性能良好,硬件电路简单、经济实惠,能得到更好的效果。

本设计以at89C51单片机为核心,通过对其定时器的设定来实现音乐的播放,借助键盘可以向计算机系统输入程序,置数、送操作命令、控制程序的执行走向等,并最终通过数码管显示出播放曲目的标号。

按键电路

晶振电路

发声电路

电源电路

图1-1结构总图

2、方案要求

音乐播放器按照从头到尾的顺序自动播放预先设定的1-3共3首乐曲,全部乐曲播放完毕则停止。

按键分别是播放键。

按下播放键时,音乐播放器会在当前播放的音乐切换播放和暂停;

、音乐播放器的组成

据系统按键控制定时器选播多段音乐的功能要求,一个完整的音乐播放器电路相当于一个简单的单片机系统,该系统由按键开关、单片机、LED显示电路、扬声器控制电路4个方面构成。

单片机:

at89c51单片机为整个系统的核心部分,是带动整个系统工作的重要部分。

2.扬声器:

扬声器用一蜂鸣器,作为输出部分按照键盘给单片机的指令发出乐曲。

数码管显示电路:

LED数码管也作为输出部分按照键盘给单片机的指令,显示正在演奏的乐曲的序号。

设计图

音乐播放电路:

单片机介绍:

(1)中央处理器(CPU)

中央处理器是单片机的核心,完成运算和控制功能。

8051的CPU能处理8位二进制数或代码。

(2)内部数据存储器(内部RAM)

8951芯片中共有256个RAM单元,但其中后128单元被专用寄存器占用,能作为寄存器供用户使用的只是前128单元,用于存放可读写的数据。

因此通常所说的内部数据存储器就是指前128单元,简称内部RAM。

(3)内部程序存储器(内部ROM)

8951共有4KB掩膜ROM,用于存放程序、原始数据或表格,因此,称之为程序存储器,简称内部ROM。

(4)定时/计数器

8951共有两个16位的定时/计数器,以实现定时或计数功能,并以其定时或计数结果对计算机进行控制。

(5)并行I/O口

MCS-51共有4个8位的I/O口(P0、P1、P2、P3),以实现数据的并行输入/输出。

(6)串行口

8951单片机有一个全双工的串行口,以实现单片机和其它设备之间的串行数据传送。

该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为同步移位器使用。

(7)中断控制系统

8951单片机的中断功能较强,以满足控制应用的需要。

8051共有5个中断源,即外中断两个,定时/计数中断两个,串行中断一个。

全部中断分为高级和低级共两个优先级别。

(8)时钟电路

8951芯片的内部有时钟电路,但石英晶体和微调电容需外接。

时钟电路为单片机产生时钟脉冲序列。

系统允许的晶振频率一般为6MHz和12MHz。

从上述内容可以看出,MCS-51虽然是一个单片机芯片,但作为计算机应该具有的基本部件它都包括,因此,实际上它已是一个简单的微型计算机系统了。

8951是标准的40引脚双列直插式集成电路芯片。

信号引脚介绍:

(1)主电源引脚

VCC:

+5V电源

VSS:

地线。

(2)时钟电路引脚

XTAL1和XTAL2:

外接晶体引线端。

当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。

(3)控制信号引脚

RST/VPD:

复位信号。

当输入的复位信号延续两个机器周期以上的高电平时即为有效,用以完成单片机的复位初始化操作;当单片机掉电时,此引脚上可接备用电源,由VPD向片内RAM提供备用电源,一保持片内RAM中的数据不丢失。

ALE/PROG:

地址锁存控制信号。

在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。

此外,由于ALE是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。

对于EPROM型单片机,在EPRAM编程期间,此引脚接收编程脉冲。

PSEN:

片外程序存储器读选通信号输出端。

EA/VPP:

访问程序存储控制信号。

当EA信号为低电平时,对ROM的读操作限定在外部程序存储器;当EA信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。

对于EPROM型单片机,在EPRAM编程期间,此引脚接上加21VEPROM编程电源VPP。

(4)I/O引脚

~:

P0口8位双向口线。

~:

P1口8位双向口线。

~:

P2口8位双向口线。

~:

P3口8位双向口线。

P3口线的第二功能。

P3的8条口线都定义有第二功能。

引脚

第二功能

信号名称

RXD

串行数据接收

TXD

串行数据发送

INT0

外部中断0申请

INT1

外部中断1申请

T0

定时/计数器0的外部输入

T1

定时/计数器1的外部输入

WR

外部RAM写选通

RD

外部RAM读选通

以上把8951单片机的全部信号引脚分别以第一功能和第二功能的形式列出。

对于各种型号的芯片,其引脚的第一功能信号是相同的,所不同的只在引脚的第二功能信号。

对于9、30和31三个引脚,由于第一功能信号与第二功能信号是单片机在不同工作方式下的信号,因此不会发生使用上的矛盾。

但是P3口的情况却有所不同,它的第二功能信号都是单片机的重要控制信号。

因此,在实际使用时,都是先按需要选用第二功能信号,剩下的才以第一功能的身份作数据位的输入/输出使用。

B并行输入/输出口电路结构

单片机芯片内还有一项主要内容就是并行I/O口。

8051共有4个8位的并行I/O口,分别记作P0、P1、P2、P3。

每个口都包含一个锁存器、一个输出驱动器和输入缓冲器。

实际上,它们已被归入专用寄存器之列,并且具有字节寻址和位寻址功能。

在访问片外扩展存储器时,低8位地址和数据由P0口分时传送,高8位地址由P2口传送。

在无片外扩展存储器的系统中,这4个口的每一位均可作为双向的I/O端口使用。

8951单片机的4个I/O口都是8位双向口,这些口在结构和特性上是基本相同的,但又各具特点。

中断源

中断源:

引起中断的事件或设备称为中断源。

采用中断的优点:

良好的中断系统使处理机具有随机应变的能力,从而扩大应用范围,提高CPU效率

51中断系统的特点:

内容丰富,结构合理,逻辑性强,高效实用

中断源是指能发出中断请求,引起中断的装置或事件。

8051单片机的中断源共有5个,其中2个为外部中断源,3个为内部中断源:

⑴INT0:

外部中断0,中断请求信号由输入。

⑵INT1:

外部中断1,中断请求信号由输入。

⑶T0:

定时/计数器0溢出中断,对外部脉冲计数由输入。

⑷T1:

定时/计数器1溢出中断,对外部脉冲计数由输入。

⑸串行中断:

包括串行接收中断RI和串行发送中断TI。

中断寄存器

8951单片机中涉及中断控制的有3个方面4个特殊功能寄存器:

1中断请求:

定时和外中断控制寄存器TCON;串行控制寄存器SCON;

2中断允许控制寄存器IE;

3中断优先级控制寄存器IP。

④中断请求控制寄存器TCON

INT0、INT1、T0、T1中断请求标志放在TCON中串行中断请求标志放在SCON中。

TCON的结构、位名称、位地址如下:

表3-2TCON的状态

TCON

D7

D6

D5

D4

D3

D2

D1

D0

位名称

TF1

-

TF0

-

IE1

IT1

IE0

IT0

位地址

8FH

8EH

8DH

8CH

8BH

8AH

89H

88H

TCON位功能:

①TF1——T1溢出中断请求标志,T1计数溢出后,TF1=1

②TF0——T0溢出中断请求标志

T0计数溢出后,TF0=1

③IE1——外中断中断请求标志

当引脚信号有效时,IE1=1

④IE0——外中断中断请求标志

当引脚信号有效时,IE0=1

⑤IT1——外中断触发方式控制位

IT1=1,边沿触发方式;

IT1=0,电平触发方式。

⑥IT0——外中断触发方式控制位

其意义和功能与IT1相似。

(2)中断请求控制寄存器SCON

SCON的结构、位名称、位地址如下:

①TI——串行口发送中断请求标志

②RI——串行口接收中断请求标志

SCON

D7

D6

D5

D4

D3

D2

D1

D0

位名称

-

-

-

-

-

-

TI

RI

位地址

-

-

-

-

-

-

99H

98H

(3)中断允许控制寄存器IE

8951对中断源的开放或关闭由中断允许控制寄存器IE控制。

IE的结构、位名称和位地址如下:

表3-4IE的状态

IE

D7

D6

D5

D4

D3

D2

D1

D0

位名称

EA

-

-

ES

ET1

EX1

ET0

EX0

位地址

AFH

-

-

ACH

ABH

AAH

A9H

A8H

①EA——CPU中断允许控制位

EA=1,CPU开中;

EA=0,CPU关中,且屏蔽所有5个中断源。

②EX0——外中断INT0中断允许控制位

EX0=1,INT0开中;EX0=0,INT0关中。

③EX1——外中断INT1中断允许控制位

EX1=1,INT1开中;EX1=0,INT1关中。

④ET0——定时/计数器T0中断允许控制位

ET0=1,T0开中;ET0=0,T0关中。

⑤ET1——定时/计数器T1中断允许控制位

ET1=1,T1开中;ET1=0,T1关中。

⑥ES——串行口中断(包括串发、串收)允许控制位

ES=1,串行口开中;ES=0,串行口关中。

复位电路

单片机复位电路是用来让程序回到初始状态并重新执行的。

单片机系统在运行中受到各种因素影响不能正常执行时,按下复位按钮内部的程序就会自动从头开始执行。

当单片机的复位引脚RET出现5ms以上的高电平时,单片机就完成了复位操作。

如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。

为了使单片机复位后能脱离复位状态,通常选择C=10~30uF,R=10~1k?

在单片机启动后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。

当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。

随着时间的推移,电容的电压从5V释放到变为了,甚至更小。

根据串联电路电压为各处之和,这个时候10K电阻两端的电压为,甚至更大,所以RST引脚又接收到高电平。

单片机系统自动复位。

中断入口地址

8051的五个中断入口地址:

INT0:

0003H;

T0:

000BH;

INT1:

0013H

T1:

001BH;

串行口:

0023H

中断优先控制和中断嵌套

(1)中断优先控制

8951中断优先控制首先根据中断优先级,此外还规定了同一中断优先级之间的中断优先权。

其从高到低的顺序为:

INT0、INT1、T0、T1、串行口。

(2)中断嵌套

当CPU正在执行某个中断服务程序时,如果发生更高一级的中断源请求中断,CPU可以“中断”正在执行的低优先级中断,转而响应更高一级的中断,这就是中断嵌套。

中断嵌套只能高优先级“中断”低优先级,低优先级不能“中断”高优先级,同一优先级也不能相互“中断”。

3、系统程序

#include<>

#include<>

#defineucharunsignedchar

#defineuintunsignedint

sbitK1=P1^0;//播放和停止键

sbitSPK=P3^7;//蜂鸣器

ucharSong_Index=0,Tone_Index=0;//当前音乐段索引,音符索引

//数码管段码表

ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//标准音符频率对应的延时表

ucharcodeHI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248};

ucharcodeLO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};

//三段音乐的音符

ucharcodeSong[][50]=

{

{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1},

{3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,53,3,2,1,1,-1},

{3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1}

};

//三段音乐的节拍

ucharcodeLen[][50]=

{

{1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1},

{1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1},

{1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1}

};

//外部中断0

voidEX0_INT()interrupt0

{

TR0=0;//播放结束或者播放中途切换歌曲时停止播放

Song_Index=(Song_Index+1)%3;//跳到下一首的开头

Tone_Index=0;

P2=DSY_CODE[Song_Index];//数码管显示当前音乐段号

}

//定时器0中断函数

voidT0_INT()interrupt1

{

TL0=LO_LIST[Song[Song_Index][Tone_Index]];

TH0=HI_LIST[Song[Song_Index][Tone_Index]];

SPK=~SPK;

}

//延时

voidDelayMS(uintms)

{

uchart;

while(ms--)for(t=0;t<120;t++);

}

//主程序

voidmain()

{

P2=0xc0;

SPK=0;

TMOD=0x00;//T0方式0

IE=0x83;

IT0=1;

IP=0x02;

while

(1)

{

while(K1==1);//未按键等待

while(K1==0);//等待释放

TR0=1;//开始播放

Tone_Index=0;//从第0个音符开始

//播放过程中按下K1可提前停止播放(K1=0)。

//若切换音乐段会触发外部中断,导致TR0=0,播放也会停止

while(Song[Song_Index][Tone_Index]!

=-1&&K1==1&&TR0==1)

{

DelayMS(300*Len[Song_Index][Tone_Index]);//播放延时(节拍)

Tone_Index++;//当前音乐段的下一音符索引

}

TR0=0;//停止播放

while(K1==0);//若提前停止播放,按键未释放时等待

}

}

4、软件流程

五、仿真器设置

曲目序号显示程序仿真

音乐播放程序调试过程

关于音乐播放程序的调试,我首先采用Preteus软件来仿真,并在单片机的处用三极管连接一个简单的音频放大器,再外接一个蜂鸣器。

,想通过这样来仿真并调试单片机按键控制定时器选播多段音乐,程序运行的时候,能看见显示器有数字变化。

未加入程序时仿真器设置

调试时,将keil生成的hex文件加入仿真图中,点击播放开关,可以看到显示器的灯会亮起,点击切换按键,可以播放其他的歌曲,从而达到按键控制定时器选播多段音乐的目的。

如果成功,就可以看到我们提前设置的音乐相对应的编码亮起。

运行中的仿真器截图

(1)

运行中的仿真器截图

(2)

此外,由于本次试验是通过C语言来试验,需要借助keil来运行程序,我就将其程序通过keil运行后生成的hex文件放到仿真器中已经连接完毕的电路图中,才得到仿真器的运行结果。

Keil运行截图

6、结论

经过近一个星期的忙忙碌碌,这次的单片机课程设计已经接近尾声了。

在这次的单片机课程设计过程中,无论是在理论学习阶段,还是在设计的选题、资料查询和撰写的每一个环节,我都得到到了许多人的悉心的指导和帮助。

感谢各位同学和老师的帮助和勉励。

同窗之谊和手足之情,我将终生难忘!

我愿在未来的学习和研究过程中,以更加丰厚的成果来答谢曾经关心、帮助和支持过我的老师、同学和朋友。

归纳起来,主要有以下几点:

(1)通过这次作业,我能将以前所学到的专业知识与实践相联系,将所学到的知识充分运用到本次设计中。

同时,我也认识到自己知识上不足的地方,体会到了所学理论知识的重要性,知识掌握得越多,设计得就更全面、更顺利、更好。

(2)进一步熟悉了单片机的知识。

通过本次设计,我对单片机的基本原理、内部结构、各引脚功能、定时器和中断的应用都有了更深刻的理解。

并且,能够以单片机为基础元件设计一个简单的系统。

(3)提高了自己查找资料的能力。

在设计过程中,我碰到了一些暂时无法解决的问题,于是我通过上网查阅和图书馆借阅资料,或是通过与老师同学交流一步步地解决了。

从中我懂得了我们这个专业的知识面相当广泛,我们需要不断通过各种途径更新自己的知识,不断充实自己,同时要懂得与他人交流意见,积极听取别人的建议,懂得不断学习的重要性。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2