数字音乐盒的课程设计报告.docx
《数字音乐盒的课程设计报告.docx》由会员分享,可在线阅读,更多相关《数字音乐盒的课程设计报告.docx(20页珍藏版)》请在冰豆网上搜索。
数字音乐盒的课程设计报告
数字音乐盒的设计
摘要
传统音乐盒,多是机械型的,体积笨重,发音单调,水、灰尘等外在因素,容易使部金属发音条变形,从而造成发音跑调。
另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。
本设计是一个基于AT89C51系列单片机的音乐盒。
该音乐盒主要由按键电路、复位电路、时钟电路、显示电路以及蜂鸣器组成。
使用四个按键控制音乐盒,其中两个按键用来控制歌曲的播放、暂停,另两个用来控制液晶上歌曲次序的变化,本音乐盒共有三首歌曲。
播放歌曲时,相应歌曲对应相应数码管上歌曲次序及歌名的显示。
关键词:
AT89C51,蜂鸣器,LCD液晶显示,音乐盒
1绪论
1.1课题描述
随着人类社会的开展,人们对视觉、听觉方面的享受提出了越来越高的要求。
小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。
传统的音乐盒大多数是机械型的,体积笨重,发音单调,不能实现批量生产。
本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,使用方便,可以批量生产,具有一定的商业价值。
本设计是基于单片机的数字音乐盒设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子数字音乐盒[1]。
1.2根本工作原理及框图
本次设计是一个基于AT89C51单片机的音乐盒,该音乐盒主要由时钟电路、复位电路、按键电路、蜂鸣器以及显示电路组成。
使用其中两个按键来控制播放和暂停另外两个按键用来控制换曲。
利在液晶上显示曲目的更换,共三首音乐,蜂鸣器每播放一首歌时液晶上显示相对应的歌曲次序。
系统组成框图如图1。
图1根本工作原理框图
2相关芯片及硬件电路设计
2.1AT89C51芯片
图2AT89C51引脚图
2.1.1AT89C51的功能特性
AT89C51提供以下标准功能:
4K字节Flash闪速存储器,128字节部RAM,32个I/O口线,两个十六位定时/计数器,一个5向量两级中断构造,一个全双工串行通信口,片振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停顿CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的容,但振荡器停顿工作并制止其他所有部件工作直到下一个硬件复位。
2.1.2AT89C51的主要性能参数
AT89C51主要性能参数如下:
●与MC-51产品指令系统完全兼容
●K字节可编程闪烁存储器
●寿命:
1000写/擦循环
●数据保存时间:
10年
●全静态工作:
0Hz-24Hz
●三级程序存储器锁定
●128*8位部RAM
●32可编程I/O线
●两个16位定时器/计数器
●5个中断源
●可编程串行通道
●低功耗的闲置和掉电模式
2.2时钟电路
时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的根底。
在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢[2]。
为到达振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个22PF的电容,晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。
时钟电路如图3。
图3时钟电路
2.3复位电路
单片机在启动时都需要进展复位,以使CPU及系统各部件处于确定的初始状态,并从初态开场工作。
51系列单片机的复位信号是从RST引脚输入到芯片的施密特触发器中的。
当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,那么CPU就可以响应并将系统复位[3]。
单片机系统的复位方式有:
手动按钮复位和上电复位。
复位电路如图4。
图4复位电路
2.4按键电路
按键的闭合与否,反映在行线输出电压上就呈现高电平或低电平,如果高电平表示键断开,低电平那么表示键闭合,通过对行线电平上下状态的检测,便可确认按键按下与否。
P1.0,P1.1,P1.4,P1.5作为控制按键,其中P1.0-P1.1扫描行,P1.4-P1.5扫描列;可通过功能键选择乐曲、暂停、播放。
按键电路如图5。
图5按键电路
2.5蜂鸣器电路
电路中蜂鸣器是发声元件,在其两端施加直流电压〔有源蜂鸣器〕或者方波〔无源蜂鸣器〕就可以发声,其主要参数是外形尺寸、发声方向、工作电压、工作频率、工作电流、驱动方式〔直流/方波〕等[4]。
由于蜂鸣器的工作电流一般比拟大,单片机的I/O口是无法直接驱动的〔但AVR可以驱动小功率蜂鸣器〕,所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。
蜂鸣器由一个三极管,两个电阻和一个二极管组成。
蜂鸣器电路如图6。
图6蜂鸣器电路
2.6显示电路
2.6.1线段的显示
点阵图形式液晶由M×N显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的容和显示屏上相应位置的亮暗对应。
例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的容决定,当〔000H〕=FFH时,那么屏幕的左上角显示一条短亮线,长度为8个点;当〔3FFH〕=FFH时,那么屏幕的右下角显示一条短亮线;当〔000H〕=FFH,〔001H〕=00H,〔002H〕=00H,……〔00EH〕=00H,〔00FH〕=00H时,那么在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。
这就是LCD显示的根本原理[5]。
2.6.2字符的显示
用LCD显示一个字符时比拟复杂,因为一个字符由6×8或8×8点阵组成,要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1〞,其它的为“0〞,为“1〞的点亮,为“0〞的不亮。
这样一来就组成某个字符。
但由于带字符发生器的控制器来说,显示字符就比拟简单了,可以让控制器工作在文本方式,根据在LCD上开场显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可[6]。
显示电路如图7。
图7显示电路
2.7总体电路
总结时钟电路、复位电路、按键电路、蜂鸣器以及显示电路,把其放入一个电路。
得到总体的电路。
总体电路如图8。
图8总体电路图
3系统软件设计
3.1程序主要流程
流程图如图9所示。
图9流程图
3.2程序设计
对音乐doremifasolasi分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。
播放长度以十六分音符为单位〔在本程序中为165ms〕,一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。
音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。
以0xff作为曲谱的完毕标志[7]。
举例1:
音调do,发音长度为两拍,即二分音符,将其编码为0x18。
举例2:
音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。
先将歌曲的简谱进展编码,储存在一个数据类型为unsignedchar的数组中。
程序从数组中取出1个数,然后别离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着别离出该数的低4位,得到延时时间,接着调用软件延时。
程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharm,n;
uchari,timecount=0,timesec=0,timemin=0,timecheck=0;
charr0=2;
sbitbeepIO=P3^0;
typedefunsignedcharBYTE;
typedefunsignedintWORD;
typedefbitBOOL;
sbitrs=P2^0;
sbitrw=P2^1;
sbitep=P2^2;
sbitpausekey=P1^1;
uchark,q,f;
ucharcodedis1[]={"1jimoshazhou"};
ucharcodedis2[]={"2tonghua"};
ucharcodedis3[]={"3qiannianlian"};
ucharcodeT[49][2]={{0,0},
{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},
{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},
{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},
{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}
};
ucharcodemusic1[][2]={{0,4},
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},
{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},
{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},
{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},
{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},
{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},
{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},
{17,4},{24,4},{24,4},{20,4},{15,4},{17,12},
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},
{29,4},{27,2},{29,2},{27,