单片机音乐盒设计Word下载.docx
《单片机音乐盒设计Word下载.docx》由会员分享,可在线阅读,更多相关《单片机音乐盒设计Word下载.docx(31页珍藏版)》请在冰豆网上搜索。
![单片机音乐盒设计Word下载.docx](https://file1.bdocx.com/fileroot1/2022-10/9/49aafef4-d408-4648-b9f1-acbeaa57b7ed/49aafef4-d408-4648-b9f1-acbeaa57b7ed1.gif)
表达情况
(10分)
回答问题
工作态度与纪律
独立工作
能力
得分
课程设计成绩评定
一、设计目的
熟悉并掌握单片机的原理及基本应用,掌握单片机基本外设的使用方法,掌握汇编语言编程方法,熟悉PROTEUS仿真的使用,可以应用电子工艺的基础知识连接硬件实现设计功能。
二、设计要求
1、利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音响,从而演奏乐曲(最少储存三首乐曲,每首不少于三十秒);
2、采用LCD显示;
3、开机时有英文欢迎字符,播放时显示歌曲序号(或名称);
4、可通过功能键选择乐曲,暂停,播放;
5、选做内容:
显示乐曲播放时间或剩余时间;
6、本设计中用89C51单片机,4*4键盘,蜂鸣器,16*2LCD,七段显示数码管LED;
三、总体设计
原理图如下图所示:
图1原理图
应用AT89S51单片机来设计音乐盒的硬件电路,并利用汇编语言进行程序设计。
通过控制单片机内部的定时器来产生不同频率的方波,驱动蜂鸣器发出不同音调的音乐,再利用延迟来控制发音时间的长短。
程序通过把乐谱转化成相应的定时常数来驱动发音设备演奏出悦耳动听的音乐。
对于不同的音乐只需要改变相应的定时常数即可。
声音是音频振动的结果,振动的频率高则为高音,频率低则为低音。
音频X围为20HZ-200KHZ之间,而人类耳朵比较容易辨识的声音大概是200HZ-20KHZ。
一般音响电路是以正弦波信号驱动喇叭,产生悦耳的音乐的;
在数字电路里,则是以脉冲信号驱动喇叭以产生声音。
同样的频率,脉冲信号或正弦信号产生的音效,对于人类的耳朵来说很难有所区别。
AT89S51单片机有3个独立的16位定时/计数器,即定时/计数器0(T0),定时/计数器1(T1)和定时/计数器2(T2)。
它们都有定时或事件计数功能,可用于定时控制、延时、对外事件计数和检测等场合。
3个16位定时/计数器,其中T0,T1可作16位加1计数器,T2既可作16位加1计数器,也可作减1计数器,每个定时/计数器都可由软件设置为定时工作方式或计数工作方式。
当设置为计数工作方式时,通过引脚T0(P3.4),T1(P3.5),T2(P1.0)对外部脉冲信号计数,当输入脉冲信号从1到0负跳变时,计数器就自动就1。
为了确保某个电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。
音乐的音拍
曲调值
DELAY
调4/4
125ms
62ms
调3/4
187ms
94ms
调2/4
250ms
键盘
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
按键功能说明:
1~A:
十首歌曲
C:
上一首歌曲
D:
下一首歌曲
E:
歌曲暂停
F:
开机画面
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。
也可在LED显示歌曲号。
(1)硬件电路中用P1.0~P1.7控制按键,其中P1.0~P1.3扫描行,P1.4~P1.7扫描列。
(2)用P0.0~P0.7,P2.0~P2.7控制LED,其中P0.0~P0.7控制七段码a,b,c,d,e,f,g,用P2.0~P2.7为数码管位选信号。
(3)用,P2.0~P2.2作为LCD的RS,R/W,E的控制信号。
用P0.0~P0.7作为LCD的D0~D7的控制信号。
(4)用P3.7口控制蜂鸣器(J2,J4断开,J3短接)。
(5)电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。
四、各部分电路设计
1、键盘系统
图2键盘
2、显示系统
对于显示时间程序的设计,主要依靠单片机内部定时器的计数功能实现。
单片机P0口接LCD数码管,并外接1K欧的排阻,利用单片机内部的定时器中断控制时间程序,然后在数码管上显示出时间。
图3LED显示系统
3、发音系统
图4扬声器
4、软件设计
程序流程图:
图5程序流程图
五、整体电路图
图6整体电路图
六、设计总结
1、设计过程中遇到的问题及解决方法
有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发行是因为程序中有的指令书写得不规X导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。
程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。
当用JNZ指令时,跳转X围比较少,这时要用一个标号中转。
编程时要注意,在程序开始时,要写入各定时器中断的入口地址。
编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。
2、设计体会
学习单片机,对单片机的硬件设计,软件设计掌握的深度不够,但通过此次课程设计,却改变了很多,首先对于硬件电路的工作原理有了进一步的学习,同样就有了进一步的认识;
其次软件方面,在程序的设计,程序的调试方面都学到了很多东西,这是第一次阅读编写单片机的大程序,很有成就感。
单片机AT89S51是一种非常小巧但功能非常多,应用非常广的一种芯片,功率也非常的小,采用AT89S51作为系统核心制作音乐演奏控制设计电路简单了很多,由于可以反复烧写,为学习降低成本。
本设计外部采用单片机的复位电路设计、单片机的震荡电路设计、LCD数码管显示正在播放的音乐序号,按键控制等,但由于AT89S51分辨率不是太高,音乐有点单调,另外,由于时间关系具体电路还有的地方不尽完善之处。
3、对设计的建议
希望下一次课程设计中,每个人都能有一块实验开发板,这样能使每个人都能得到充分的锻炼!
参考文献
[1]高锋,单片微型计算机原理与接口技术,科学,2008年。
[2]李传军,单片机原理及应用(第一版),某科学技术,2006年。
[3]杨志忠,数字电子技术,高等教育(第四版),2007年。
[4]X静武,单片机原理、应用与PROTEUS仿真,电子工业,2009年。
本程序可以实现课程设计的基本要求和附加功能,并可以通过按键播放七首歌曲。
实验程序如下:
RSBITP2.0;
定义液晶显示端口标号
RWBITP2.1
EBITP2.2
;
********************************************
L50MSEQU60H
L1MSEQU61H
L250MSEQU62H
SECEQU65H
MINEQU64H
HOUEQU63H
*******************************************
org0000h
ljmpmain
ORG000BH
LJMPTT0
ORG001BH
LJMPT1INT
org1000h
main:
-----------------------;
液晶初始化
MOVSP,#70H
MOVP0,#01H;
清屏
CALLENABLE
MOVP0,#38H;
8位,2行显示
lCALLENABLE
MOVP0,#0FH;
屏显on,光标on,闪烁on
MOVP0,#06H;
计数地址加1,显示幕on
-------------------------------内存初始化
lcallinitil
-------------------------------
key1:
lcallkey
lcallmodd
ljmpkey1
---------------------键盘扫描
key:
nop
nop
lcallks
jnzk1;
有按键转到K1
lcallkaiji
lcallSOP
xn:
ljmpkey
k1:
lcallmodd
lcallmodd
jnzk2
ljmpkey
k2:
movR2,#0feh;
读键盘
movR4,#00h
k3:
movA,R2
movP1,A
movA,P1
ACC.4,L1;
为1跳转,第一行无按键
mova,#00h
ljmplk
L1:
acc.5,L2
mova,#04h
L2:
acc.6,L3
mova,#08h
L3:
acc.7,next1
mova,#0ch
-------------------------------------------------------
lk:
adda,R4
pushacc
k4:
lcalldelay1;
若同时有其他按键,则等待
jnzk4
--------------------------------------------------------
movr3,#07h
clra
movr0,#30h
movr1,#31h
mm1:
mova,r1
movr0,a
incr0
incr1
djnzr3,mm1
popacc
movr0,a
RET
------------------------------------------------------
next1:
incR4;
------列扫描
mova,R2
JNBacc.3,n2
ljmpn1
n2:
n1:
rla
movR2,a
ljmpk3
----------------------------------------------
ks:
mova,#0f0h;
判断P1口
movP1,a
mova,P1
cpla
anla,#0f0h
--------------------------------------------------
DELAY1:
SETBRS0
dl:
movR5,#0ah
dl2:
movR6,#63
dl3:
nop
djnzR6,dl3
djnzR5,dl2
CLRRS0
---------------------------------------------------
30H-37H初值为零
---------------------------