单片机按键控制定时器选播多段音乐文档格式.docx
《单片机按键控制定时器选播多段音乐文档格式.docx》由会员分享,可在线阅读,更多相关《单片机按键控制定时器选播多段音乐文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
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
TI
RI
99H
98H
(3)中断允许控制寄存器IE
8951对中断源的开放或关闭由中断允许控制寄存器IE控制。
IE的结构、位名称和位地址如下:
表3-4IE的状态
IE
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可以“中断”正在执行的低优先级中断,转而响应更高一级的中断,这就是中断嵌套。
中断嵌套只能高优先级“中断”低优先级,低优先级不能“中断”高优先级,同一优先级也不能相互“中断”。
三、系统程序
#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;
//停止播放
//若提前停止播放,按键未释放时等待
}
四、软件流程
五、仿真器设置
曲目序号显示程序仿真
音乐播放程序调试过程
关于音乐播放程序的调试,我首先采用Preteus软件来仿真,并在单片机的处用三极管连接一个简单的音频放大器,再外接一个蜂鸣器。
,想通过这样来仿真并调试单片机按键控制定时器选播多段音乐,程序运行的时候,能看见显示器有数字变化。
未加入程序时仿真器设置
调试时,将keil生成的hex文件加入仿真图中,点击播放开关,可以看到显示器的灯会亮起,点击切换按键,可以播放其他的歌曲,从而达到按键控制定时器选播多段音乐的目的。
如果成功,就可以看到我们提前设置的音乐相对应的编码亮起。
运行中的仿真器截图
(1)
运行中的仿真器截图
(2)
此外,由于本次试验是通过C语言来试验,需要借助keil来运行程序,我就将其程序通过keil运行后生成的hex文件放到仿真器中已经连接完毕的电路图中,才得到仿真器的运行结果。
Keil运行截图
六、结论
经过近一个星期的忙忙碌碌,这次的单片机课程设计已经接近尾声了。
在这次的单片机课程设计过程中,无论是在理论学习阶段,还是在设计的选题、资料查询和撰写的每一个环节,我都得到到了许多人的悉心的指导和帮助。
感谢各位同学和老师的帮助和勉励。
同窗之谊和手足之情,我将终生难忘!
我愿在未来的学习和研究过程中,以更加丰厚的成果来答谢曾经关心、帮助和支持过我的老师、同学和朋友。
归纳起来,主要有以下几点:
(1)通过这次作业,我能将以前所学到的专业知识与实践相联系,将所学到的知识充分运用到本次设计中。
同时,我也认识到自己知识上不足的地方,体会到了所学理论知识的重要性,知识掌握得越多,设计得就更全面、更顺利、更好。
(2)进一步熟悉了单片机的知识。
通过本次设计,我对单片机的基本原理、内部结构、各引脚功能、定时器和中断的应用都有了更深刻的理解。
并且,能够以单片机为基础元件设计一个简单的系统。
(3)提高了自己查找资料的能力。
在设计过程中,我碰到了一些暂时无法解决的问题,于是我通过上网查阅和图书馆借阅资料,或是通过与老师同学交流一步步地解决了。
从中我懂得了我们这个专业的知识面相当广泛,我们需要不断通过各种途径更新自己的知识,不断充实自己,同时要懂得与他人交流意见,积极听取别人的建议,懂得不断学习的重要性。