基于51单片机数字音乐盒的设计
基于51单片机的lcd多功能数字音乐盒设计(毕业设计)[管理资料]
![基于51单片机的lcd多功能数字音乐盒设计(毕业设计)[管理资料]](https://img.taocdn.com/s3/m/ebd7adaabe23482fb4da4cfa.png)
毕业设计论文题目:基于51单片机的LCD多功能数字音乐盒设计学校:西北民族大学学院:电气工程学院专业班级:08电气工程及其自动化(1)班学号:P 0 8 1 6 1 3 3 1 6姓名:苏军指导老师:马慧兰基于51单片机的LCD多功能数字音乐盒设计摘要:本设计是应用MCS-51单片机原理和控制理论设计音乐盒演奏控制器的硬件电路,并利用汇编语言进行程序设计。
利用控制单片机内部的定时器来产生不同的频率的方波,驱动喇叭发出不一样的音乐,再通过延迟来控制发音时间的长短。
把乐谱变成相应的定时常数就可以从发音设备中演奏出动听的音乐。
这种控制电路结构简单,可用性高,应运性强,软件程序适应范围广,对于不同的音乐只需要改变相应的定时常数即可。
对单片机和音乐爱好者有不一样的借鉴价值。
关键词:单片机,汇编语言,音乐盒Based on 51 single-chip LCD multifunctiondigital music box designAbstract: This design is the application of MCS-51 single-chip microcomputer principle and control theory design music box play hardware circuit, and use assembly languages program design. Using single chip microcomputer control internal timer to produce a different frequency of square wave, drive speaker different music, again through the delay to control the length of time the pronunciation. The score into the corresponding time constant can play out in pronunciation equipment from beautiful music. This control circuit structure is simple, usability is high, The Times the gender is strong, software program to adapt to the wide, for different music only need to change the timing of corresponding constant can. The SCM and music lovers have different reference value.Key words: a single-chip microcomputer, assembly language, music box目录摘要 (2)关键词 (2)Abstract (2)Key words (2)前言 (3)第一章原理及硬件介绍 (5)1.1 基本原理简述 (5)1.2 STC89C52RC 介绍 (6)1.2.1主要特性 (6)1.2.2 STC89C52RC的工作模式 (6)1.2.3 STC89C52RC引脚功能说明 (6)1.3 LCD显示 (10)第二章软件仿真及测试 (11)开机第一首歌 (11)下一曲 (12)上一曲 (12)元件清单 (15)参考文献 (15)附录一源程序 (16)前言单片机是指一个集成在一块芯片上的完整计算机系统。
基于51单片机音乐盒课程设计

4.4按键与蜂鸣器接口端程序设计- 16 -
4.5外部中断程序设计- 16 -
4.6定时程序设计- 17 -
4.7延时程序编写- 18 -
4.8主程序的编写- 18 -
五、系统仿真与调试- 20 -
5.1仿真平台- 20 -
5.2仿真调试- 20 -
5.3测试总结- 21 -
上拉电阻就是将电源通过电阻接到输出端。如果输出端是OC(集电极开路,TTL)或OD(漏极开路,CMOS)输出,不接上拉电阻则输出端无驱动能力。对于P1、P2、P3口内部就以及有上拉电阻,如果其端口电流较大,电平就会降低(电阻大,相应压降也太大),就可以通过外接上拉电阻(就是并一个电阻在IC内部的上拉电阻上,这时总电阻减小,总电流增大)提供电流分量,将电平“拉高”。
本设计中的晶振振荡电路(如图2)是在一个反相放大器(注意是放大器不是反相器)的两端接入晶振,再有两个电容分别接到晶振的两端,每个电容的另一端再接到地,这两个电容串联的容量值就应该等于电路的负载电容。同时,晶振可以等效为一个电感,所以只要晶振的两端并联上合适的电容它晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。其中端点1接STC89C52RC芯片的19引脚,端点2接芯片的18引脚。这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,由于晶振等效为电感的频率范围很窄所以即使其他元件的参数变化很大这个振荡器的频率也不会有很大的变化。本实验中使用的是22PF的电容,如果再考虑元件引脚的等效输入电容,则两个22PF的电容构成晶振的振荡电路就是比较好的选择,但本设计简易,所以对于等效输入电容带来的误差不予讨论。
1.2
完成该模块的硬件和软件的设计,在Proteus软件上仿真通过后,用Altium_Designer软件进行PCB单面板的绘制,修改合理后制成单面覆铜板。随后将程序下载到单片机进行硬件验证。最后就课程设计本身提交一篇课程设计说明文档。
基于51单片机的音乐盒设计

基于51单片机的音乐盒设计基于51单片机的音乐盒设计题目要求:1. 查阅资料,了解单片机控制单音喇叭发声原理;2. 设计基于单片机的电子音乐盒;3.通过按钮可选择不同的音乐,切换3首音乐;运行仿真图:程序完整代码:#includesbit fx_buzzer=P3^7; //蜂鸣器音乐输出,可根据需要自行修改sbit music_1 = P2^0; //第一首音乐sbit music_2 = P2^1; //第二首音乐sbit music_3 = P2^2; //第二首音乐unsigned int tone; //简谱音调计数unsigned char fx_timeh,fx_timel,music,speed; //fx_timeh:TH0初值,fx_timel:TL0初值; music =1播放,=0停止unsigned char code fx_tone0[]={ //音调对应定时器初值0xFC,0x8E, 0xFC,0xED, 0xFD,0x43, //中音0xFD,0x6A, 0xFD,0xB3, 0xFD,0xF3, 0xFE,0x2D,0xFE,0x47, 0xFE,0x76, 0xFE,0xA1, //高音0xFE,0xC7, 0xFE,0xD9, 0xFE,0xF9, 0xFF,0x16};unsigned char code songbie[]={//送别0x54,0x32,0x52,0x88,0x64,0x84,0x58,0x54,0x12,0x22,0x34,0x22,0x12,0x2c,0x04, 0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0x72,0x1c,0x64,0x8c,0x74,0x62,0x72,0x88,0x62,0x72,0x82,0x62,0x52,0x32,0x12,0x2f,0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0x72,0x1c,0x64,0x8c,0x74,0x62,0x72,0x88,0x62,0x72,0x82,0x62,0x52,0x32,0x12,0x2f,0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0x72,0x1c, 0xff}; unsigned char code qnzl[]={ //千年之恋0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,0x42,0x63,0x83,0x83,0x91,0x91,0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff};unsigned char code laohu[]={ //两只老虎0x14,0x14,0x24,0x34,0x14,0x14,0x24,0x34,0x14,0x34,0x44,0x58,0x34,0x44,0x58,0x53,0x61,0x53,0x41,0x34,0x14,0x53,0x61,0x53,0x41,0x34,0x14,0x14,0x54,0x18,0x14,0x54,0x18,0xFF};unsigned char keyValue; //存储按下的键值void init() //初始化函数{EA=1;//开总中断TMOD=0x10;//定时器0工作在方式1TH1=0;TL1=0;ET1=1;music=1; //默认播放tone=0;speed=20;}//播放速度void fx_delay(unsigned char i) //音长延时函数 {unsigned int j,k;for(i;i>0;i--)for(k=speed;k>0;k--)for(j=625;j>0;j--);}void play(unsigned char *temp) //音阶播放函数 {} if(speed60) speed=60; while(1) { if(!music) break; if(music==2){tone=0;music=1;break;} //配合按钮换歌 if(temp[tone]==0xff){tone=0;break;};if(temp[tone]/16!=0) //取高4位的音阶判断 { fx_timeh=fx_tone0[temp[tone]/16*2-2]; fx_timel=fx_tone0[temp[tone]/16*2-1]; TR1=1; } fx_delay(temp[tone]%16); //取数的低4位 TR1=0; tone++; } TR1=0;void fx_tone() interrupt 3 //用于产生各种音调 {TH1=fx_timeh;TL1=fx_timel;fx_buzzer=~fx_buzzer;}void Delay10ms(unsigned int n) //延时函数,延时10ms {unsigned char a, b;for (; n>0; n--){for (b=38; b>0; b--){for (a=130; a>0; a--);}}}void EX0_INT(void) interrupt 0 //外部INT0{if(tone !=0 ) music = 2;if(music_1 == 0){Delay10ms(1);if(music_1 == 0){while(music_1 == 0); //等待松开按钮 keyValue = 1; //播放第一首音乐-送别 } } if(music_2 == 0) { Delay10ms(1); if(music_2 == 0) { while(music_2 == 0); //等待松开按钮 keyValue = 2; //播放第二首音乐}} if(music_3 == 0) { Delay10ms(1); if(music_3 == 0) { } } while(music_3 == 0); //等待松开按钮 keyValue = 3; //播放第三首音乐//主函数void main(){init(); //初始化函数//play(song1); //音阶播放函数IT0=1; //外部中断INT0位下降沿触发 EX0=1; //开INT0中断允许 EA=1; while(1) { if(keyValue == 1) {play(songbie); //播放第一首音乐-送别 }else if(keyValue == 2){play(qnzl); //播放第二首音乐 }else if(keyValue == 3){play(laohu); //播放第三首音乐 }}}Proteus 仿真图:。
基于51单片机的音乐盒设计报告

摘要本作品利用单片机的IO口对蜂鸣器输送不同频率的信号,让单片机发出不同音调的声音。
以“新年好”曲调为基础以C51为语法编出51音乐盒的程序。
根据电路图焊接了蜂鸣器模块与TX-1C51开发板用杜邦线进行连接。
除了蜂鸣器外接模块外还使用了1602液晶显示模块作为外设连接。
本人对单片机演奏音乐比较有兴趣。
在此,本人将就这方面的知识做一些简介,但愿能对单片机演奏音乐比较有兴趣而又不知其解的朋友能有所启迪。
一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。
音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。
音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
关键词: 51单片机音乐盒液晶屏幕显示模块蜂鸣器模块 C51目录1 设计任务目的与要求 (1)1.1任务设计目的 (1)1.2任务要求 (1)2 模块及其原理介绍 (2)2.1蜂鸣器模块 (2)2.21602液晶显示模块 (2)3 设计方案 (3)3.1软件设计 (3)3.2硬件设计 (3)4 实验结果与数据分析 (4)4.1测试步骤 (4)4.2实验现象 (4)5 结论与问题讨论 (4)5.1完成设计的要求程度 (4)5.2遇到的问题以及解决办法 (4)5.3存在的不足及改进思路 (4)参考文献 (5)附录 (5)附录一:C51程序 (5)1 设计任务目的与要求1.1任务设计目的本人对单片机演奏音乐比较有兴趣,所以选择51音乐盒的题目。
本设计通过两个模块的制作并与开发板一并使用。
通过本次设计不止熟悉焊接和熟悉各个电子元器件,而且还提高了对外设模块使用单片机编程的技能。
基于51单片机数字音乐盒的设计毕业设计

学位论文原创性声明
本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。
b. 可通过功能键选择乐曲、暂停、播放。
第二章
2.1
该系统由延时165MS,即十六分音符子函数、延时1MS子函数、按键扫描子函数、播放音乐子函数、定时器1中断子函数、定时器0中断子函数、主函数和数据定义这几部分组成。
3、论文(设计说明书)所体现的整体水平
□ 优 □ 良 □ 中 □ 及格 □ 不及格
建议成绩:□优□良□中□及格□不及格
(在所选等级前的□内画“√”)
评阅教师:(签名)单位:(盖章)
年 月 日
摘 要
本设计是一个基于STC89C51RC系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。本音乐盒共有四首歌曲,用4个按键控制。播放歌曲时,蜂鸣器发出某个音调。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。
单片机实物设计
题 目:单片机音乐盒设计
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
基于c51单片机音乐盒设计.

基于c51单片机音乐盒设计.音乐盒是一种通过内置于其中的机械结构或者电流来制造音乐的一种装置,它是一种完全可以自己动手制作的小型装置。
音乐盒可以引起大家的兴趣,并且对于音乐爱好者而言,它更是不可或缺的工具。
而在本文中,我们将介绍一种基于c51单片机的音乐盒设计方案。
首先,我们需要了解c51单片机的一些基本特性和特点,这样才能更好地去理解音乐盒的设计方案。
c51单片机是一种非常常见的单片机,它具有操作简单,可扩展性强,代价低廉等特点,在市场中被广泛的应用在各种电子产品中。
基于c51单片机的音乐盒设计方案主要包括硬件部分和软件部分,接下来我们将详细介绍这两部分的内容。
硬件设计:1、音源部分音乐盒的核心部分是音源,所以我们需要采用一种高质量、高保真度的音源。
音源可以采用蜂鸣器、扬声器等。
2、时钟部分c51单片机的时钟部分是控制器的基础。
我们采取计数器,通过方波的输出频率来控制计数器进行计数,并通过定时器来实现时钟的计数。
时钟部分包括一定的高级电路,这些电路包括晶振、电容、电阻等等。
3、输入输出端口为了方便对音乐盒进行控制,我们需要在音乐盒中设置一些输入输出端口,这些端口可以通过外部设备来实现,可以通过按键来控制音乐盒的运作。
1、程序框架首先,我们需要确定程序的框架。
程序框架分为以下几个部分,包括时钟设置、中断处理、函数处理、主函数等。
时钟设置部分主要包括两个功能:时钟的计时和频率控制。
这些设置应该与硬件的时钟部分配合符合音乐节拍和时间的要求,通过设计、调整达到准确、稳定的效果。
3、中断处理音乐盒的中断处理部分是整个程序的核心,它包括多种中断请求,包括时钟中断、按键事件中断等。
这些中断请求可以被设置成高优先级或低优先级,以实现更好的控制效果。
4、功能处理对于在音乐盒运行中,需要频繁进行操作的函数,我们应该单独设置一个处理函数,并将其函数调用编入到主函数中。
5、主函数最后,我们需要编写主函数,以实现音乐盒在不同的运行模式中切换,及处理各种异常情况。
基于51单片机的电子八音盒详细设计步骤

一、设计目的利用8052单片机结合内部定时器设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。
二、设计要求其基本功能为:1,使用LED显示器来显示目前演奏的歌曲编号;2,具有8个按键操作来选择演奏哪一首歌曲;3,内建8首歌曲旋律,按下单键可以演奏歌曲。
三、设计器材T89C52单片机、晶振、八个按键、二位一体共阳极数码管、电阻电容若干、导线。
四、设计方案及分析设计思路:(1)选择8052单片机,通过T0定时中断,并配合P2.0引脚输出音频频率。
(2)P2.0引脚输出接蜂鸣器。
(3)通过P0口接LED。
(4)P1口接键盘,输入歌曲号。
音符产生方法:不同的音调有不同的频率。
频率不同,音调也就不同。
利用定时器,使其工作在模式1,定时中断,然后控制P2.0引脚的输出每次取反,就可以在P2.0的引脚输出相应的方波频率。
改变计数初值,就改变了频率。
定时器的定时时间等于半个周期,定时时间到就输出脉冲取反,重复此过程,就可在P2.0引脚得到一音频的脉冲。
如:中音1的频率=523HZ,周期T=1/523=1912us;定时器的定时时间为:T/2=1912/2us=956us;计算得TH0,TL0的计数初值THTL=64580下面是个音符计数初值节拍产生方法:音乐中的节拍用延时时间产生。
假设1/4拍执行一次延时程序,这1/2拍就执行两次延时程序,所以只要求出1/4延时时间,其余的节拍就是他的倍数。
为方便记谱,将节拍数也进行编码,如下:建立曲谱编码表:编谱用8位编码,高4位代表音符,低4位代表节拍。
如5 6中音5,中音6,都是1/2拍,则编码为:82H 92H程序清单:#include <reg52.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit SPEAK = P2^0;//接蜂鸣器管脚uchar th0_f;uchar tl0_f;uchar code SEG[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};uchar code jie8[8]={12,14,16,17,19,21,23,24};/**************************中断函数*******************************************/ timer0() interrupt 1{TL0=tl0_f;TH0=th0_f;SPEAK =~SPEAK; //取反音乐输出IO}/********************T0的值,及输出频率对照表***********************************/ uchar code freq[36*2]={0xA9,0xEF,//00220HZ ,1 //00x93,0xF0,//00233HZ ,1#0x73,0xF1,//00247HZ ,20x49,0xF2,//00262HZ ,2#0x07,0xF3,//00277HZ ,30xC8,0xF3,//00294HZ ,40x73,0xF4,//00311HZ ,4#0x1E,0xF5,//00330HZ ,50xB6,0xF5,//00349HZ ,5#0x4C,0xF6,//00370HZ ,60xD7,0xF6,//00392HZ ,6#0x5A,0xF7,//00415HZ ,70xD8,0xF7,//00440HZ 1 //120x4D,0xF8,//00466HZ 1# //130xBD,0xF8,//00494HZ 2 //140x24,0xF9,//00523HZ 2# //150x87,0xF9,//00554HZ 3 //160xE4,0xF9,//00587HZ 4 //170x3D,0xFA,//00622HZ 4# //180x90,0xFA,//00659HZ 5 //190xDE,0xFA,//00698HZ 5# //200x29,0xFB,//00740HZ 6 //210x6F,0xFB,//00784HZ 6# //220xB1,0xFB,//00831HZ 7 //230xEF,0xFB,//00880HZ `10x2A,0xFC,//00932HZ `1#0x62,0xFC,//00988HZ `20x95,0xFC,//01046HZ `2#0xC7,0xFC,//01109HZ `30xF6,0xFC,//01175HZ `40x22,0xFD,//01244HZ `4#0x4B,0xFD,//01318HZ `50x73,0xFD,//01397HZ `5#0x98,0xFD,//01480HZ `60xBB,0xFD,//01568HZ `6#0xDC,0xFD,//01661HZ `7 //35};/***************************音乐符号串解释函数****************************/ //入口:要解释的音乐符号串,输出的音调串,输出的时长串changedata(uchar *song,uchar *diao,uchar *jie){uchar i,i1,j;char gaodi; //高低+/-12音阶uchar banyin;//有没有半个升音阶uchar yinchang;//音长uchar code jie7[8]={0,12,14,16,17,19,21,23}; //C调的7个值*diao=*song;for(i=0,i1=0;;){gaodi=0; //高低=0banyin=0;//半音=0yinchang=4;//音长1拍if((*(song+i)=='|') || (*(song+i)==' ')) i++; //拍子间隔和一个空格过滤switch(*(song+i)){case ',': gaodi=-12;i++;//低音break;case '`': gaodi=12;i++; //高音break;}if(*(song+i)==0) //遇到0结束{*(diao+i1)=0; //加入结束标志0*(jie+i1)=0;return;}j=*(song+i)-0x30; i++; //取出基准音j=jie7[j]+gaodi; //加上高低音yinc: switch(*(song+i)){case '#': //有半音j加一个音阶i++;j++;goto yinc;case '-': //有一个音节加长yinchang+=4;i++;goto yinc;case '_': //有一个音节缩短yinchang/=2;i++;goto yinc;case '.': //有一个加半拍yinchang=yinchang+yinchang/2;i++;goto yinc;}*(diao+i1)=j; //记录音符*(jie+i1)=yinchang; //记录音长i1++;}}/******************************奏乐函数***************************************/ //入口:要演奏的音乐符号串void play(uchar *songdata){uchar i,c,j=0;uint n;uchar diaodata[48]; //音调缓冲uchar jiedata[48]; //音长缓冲changedata(songdata,diaodata,jiedata); //解释音乐符号串TR0=1;while(P1=0xff){for(i=0;diaodata[i]!=0;i++) //逐个符号演奏{tl0_f=freq[diaodata[i]*2]; //取出对应的定时值送给T0th0_f=freq[diaodata[i]*2+1];for(c=0;c<jiedata[i];c++) //按照音长延时{for(n=0;n<29500;n++); //29500if(P1!= 0xff)//((!K1)||(!K2)||(!K3)||(!K4))//发现按键,立即退出播放{TR0=0;return;}}TR0=0;for(n=0;n<460;n++); //音符间延时TR0=1;}}TR0=0;}//茉莉花uchar code molihua[]={"33_5_6_`1_`1_6_|55_6_5-|33_5_6_`1_`1_6_|55_6_5-|""5553_5_|665-|32_3_53_2_|11_2_1|"//"3_2_1_3_2.3_|56_`1_5-|23_5_2_3_1_,6_|,5-,61|"//"2.3_1_2-1_,6_|,5--"};//世上只有妈妈好uchar code mamahao[]={"6.5_35|`16_5_6-|35_6_53_2_|1_,6_5_3_2-|""2.3_55_6_|321-|5.3_2_1_,6_1_|,5--"};//小毛驴uchar code xiaomaolv[]={"1_1_1_3_|5_5_5_5_|6_6_6_`1|5-|""4_4_4_6_|3_3_3_3_|2_2_2_2_|5-"};//我是一只菠萝uchar code boluo[]={"1-|2_4_3_2_55|5_6_3_4_22|2_4_3_2_1_`1_7_6_|5_4_2_3_11|""2_4_3_2_55|5_6_3_4_22|2_4_3_2_1_5_2_3_|1---|"};//小星星uchar code xiaoxingxing[]={"1155|665-|4433|221-|""5544|332-|5544|332-|""1155|665-|4433|221-|"};//春天在哪里uchar code chuntian[]={"3_3_3_1_|,5,5_|3_3_3_1_|3-|5_5_3_1_|,5_,5_,5|,6_,7_1_3_|2-|" "3_3_3_1_|,5,5_|3_3_3_1_|3-|5_6_5_6_|5_4_3_1_|,5_3_|2_1_"};//两只老虎uchar code laohu[]={"1231|1231|345-|345-|""5_6_5_4_31|5_6_5_4_31|""151-|151-"};//就是爱你uchar code jiushiaini[]={"3_2_3_4_5,7_1_|1`1_7_7 5_6_|66_5_5_3_2_1_3_|4_,6_,7_1_32|" "3_2_3_4_5,7_1_|1`1_7_7_`3_|3-6_|5_4_.4_5_5-|4_,6_ ,7_1_32._1_|"};//黑白配uchar code heibai[]={"32345-|1,7123-|3,5,611-|"};//找朋友uchar code zhaopeng[]={"5_6_5_6_|5_6_5|5_`1_7_6_|5_6_5"};//数鸭子uchar code shuya[]={"313_3_1|3_3_5_6_5-|6_6_5_5_4_4_4|2_3_2_1_2"};//欢乐颂uchar code huanle[]={"3345|5432|1123|322-|3345|5432|1123|211-|"};//一分钱uchar code yifen[]={"5`1|6_`1_5|3_5_2_3_|5|3_5_6_`1_|5_6_5_3_|5_13_2"};//乐谱方式输入的音乐播放/*******************************主函数****************************************/ void main(void){P1=0xff;P0=SEG[0];TMOD = 0x01; //使用定时器0的16位工作模式TR0 = 0;ET0 = 1;EA = 1;while(1){switch(P1){case 0xfe:while(P1==0xfe){;}P0=SEG[1];play(molihua);SPEAK=0;break;//0 按下相应的键显示相对应的码值case 0xfd:while(P1==0xfd){;}P0=SEG[2];play(yifen);SPEAK=0;break;//1case 0xfb: while(P1==0xfb){;}P0=SEG[3];play(mamahao);SPEAK=0;break;//2case 0xf7: while(P1==0xf7){;}P0=SEG[4];play(xiaomaolv);SPEAK=0;break;//3case 0xef: while(P1==0xfe){;}P0=SEG[5];play(laohu);SPEAK=0;break;//4case 0xdf: while(P1==0xdf){;}P0=SEG[6];play(huanle);SPEAK=0;break;//5case 0xbf: while(P1==0xbf){;}P0=SEG[7];play(chuntian);SPEAK=0;break;//6case 0x7f: while(P1==0x7f){;}P0=SEG[8];play(zhaopeng);SPEAK=0;break;//7default: break;}TR0 = 0;}}五、问题分析与解决方法问题一:仿真问题仿真图画好之后,开始运行,数码管和发光二极管都没有反应。
单片机课程设计(含程序)——基于C51单片机的电子音乐盒

单片机课程设计题目基于C51单片机的电子音乐盒学院机电与信息工程学院专业电子信息工程年级 XXXX级学号XXXXXXXXXXXXXXXXXXXXXXXXXXX姓名 XXXXXXXXXXXXXXX指导教师 XXXXX成绩目录摘要 (1)Abstract (1)第一章绪论 (2)1.1背景 (2)1.2单片机概述 (2)1.3目的与意义 (2)第二章总体设计 (3)2.1总体设计 (3)2.2总体方案论证与设计 (3)2.2.1单片机选择 (3)第三章硬件设施 (4)3.1单片机简介 (4)3.2最小系统 (4)3.3按键电路 (4)3.4 LCD1602液晶显示电路 (5)3.5 PCB图 (8)3.6发声模块(功率放大) (8)第四章软件设计 (9)4.1软件模块及发声原理 (10)4.1.1音调的产生 (10)4.1.2节拍的确定 (12)4.2 软件设计流程 (14)4.3 发声程序 (15)4.4 按键电路设计 (16)4.5 LCD1602液晶显示电路设计 (17)4.5.1 LCD显示模块 (17)4.5.2 LCD延时模块 (19)第五章调试 (19)5.1硬件调试 (19)5.2软件调试 (21)5.3联合调试 (22)第六章总结 (22)附录1 总原理图 (23)附录2 程序 (23)1.主函数模块 (23)2.LCD模块 (30)3. LCD参数设定头文件 (31)4.LCD延时函数 (32)摘要本设计是一个基于STC89C51RC系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。
该音乐盒主要由按键电路、复位电路、时钟电路、喇叭以及LCD1602液晶显示系统组成。
本音乐盒共有四首歌曲,用3个按键控制上一曲下一曲以及暂停和恢复。
播放歌曲时,喇叭发出某个音调。
本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实物设计题目: 单片机音乐盒设计班级: K0312416-17姓名:湛俊朱斌杨裕庆学号:K031241705 K031241632 K031241737摘要本设计是一个基于STC89C51RC系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。
该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。
本音乐盒共有四首歌曲,用4个按键控制。
播放歌曲时,蜂鸣器发出某个音调。
本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS 仿真软件对硬件进行仿真调试,节约了设计时间。
【关键词】STC89C51RC 按键蜂鸣器 LCD1602液晶目录前言 ................................................................................................................................. 第一章工作原理 ..............................................................................................................1.1设计目标 ...............................................................................................................第二章软件设计与分析...................................................................................................2.1 软件设计的组成...................................................................................................2.2 各部分软件分析 .................................................................................................2.2.1 延时165MS,即十六分音符子函数 ..........................................................2.2.2 延时1MS子函数......................................................................................2.2.3 定时器0中断子函数 ..............................................................................2.2.4 播放音乐子函数......................................................................................2.5 定时器1中断子函数..................................................................................2.6 按键扫描子函数 .........................................................................................2.2.7 主函数.....................................................................................................2.3 总源程序 ............................................................................................................ 第三章软件仿真 ..............................................................................................................3.仿真图......................................................................................................................3.1 元件清单 ............................................................................................................... 总结 ..................................................................................................................................... 参考文献..............................................................................................................................第一章工作原理1.1设计目标1.1.1基本功能具体要求是:以单片机为核心,设计一个数字音乐盒:利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少3首乐曲,每首不少于30s)。
采用LCD显示信息。
a. 开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)。
b. 可通过功能键选择乐曲、暂停、播放。
第二章软件设计与分析2.1 软件设计的组成该系统由延时165MS,即十六分音符子函数、延时1MS子函数、按键扫描子函数、播放音乐子函数、定时器1中断子函数、定时器0中断子函数、主函数和数据定义这几部分组成。
2.2 各部分软件分析2.2.1 延时165MS,即十六分音符子函数//延时165MS,即十六分音符子函数void delay1(uint z){uint x,y;for(x=z;x>0;x--)for(y=19000;y>0;y--);}2.2.2 延时1MS子函数//延时1MS子函数void delay2(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);2.2.3 定时器0中断子函数//定时器0中断子函数void t0() interrupt 1 //用于产生各种音调{TH0=a;TL0=b;BEEP=~BEEP;}2.2.4 播放音乐子函数//播放音乐子函数void song(){uint temp;uchar aa;//aa是简谱c=0;while(1){if(count2==0){break;}if(count2==1) //选曲temp=table1[c];if(count2==2)temp=table2[c];if(count2==3)temp=table3[c];if(count2==4)temp=table4[c];if(temp==0xff)break;aa=temp/16; //取数的高4位if(aa!=0){a=cuzhi[aa*2];b=cuzhi[aa*2+1];}else{TR1=0;BEEP=1;//关蜂鸣器}delay1(temp%16); //取数的低4位TR1=0; //唱完一个音停10MSBEEP=1;delay2(10);TR1=1;c++;}TR1=0;BEEP=1;}2.2.5 定时器1中断子函数//定时器1中断子函数void t1() interrupt 3 //用于产生各种音调{key();}2.2.6 按键扫描子函数void key(){if(k3==0){delay2(10);if(k3==0){num1++;if(num1==1){TR1=0;aa=count2;count2=0;}if(num1==2){num1=0;count2=aa;TR1=1;}while(!k3);}}if(k4==0){delay2(10);if(k4==0){TR1=0;count2=0;c=0;write_com(0x01);//清屏write_com(0x80+0);write_date('W');write_com(0x80+1);write_date('e');write_com(0x80+2);write_date('l');write_com(0x80+3);write_date('c');write_com(0x80+4);write_date('o');write_com(0x80+5);write_date('m');write_com(0x80+6);write_date('e');write_com(0x80+7);write_date(' ');write_com(0x80+8);write_date('t');write_com(0x80+9);write_date('o');write_com(0x80+10);write_date(' ');write_com(0x80+11);write_date('u');write_com(0x80+12);2.2.7 主函数//主函数void main(){TMOD=0x10;//定时器0工作在方式1TH1=0;TL1=0;ET1=1;EA=1;//开总中断EX1=1;//开外部中断1IT1=1;//下降沿时触发中断EX0=1;//开外部中断0IT0=1;//下降沿时触发中断count2=0;//唱第一首歌LCD1602_init();while(1)//大循环{song();}}2.3 总源程序#include<reg51.h>//51单片机头文件typedef unsigned char uchar;typedef unsigned int uint;sbit RS=P2^7;//LCD1602数据/命令选择端(H/L) sbit RW=P2^6;//LCD1602读/写选择端(H/L) sbit E=P2^5;//LCD1602使能信号端sbit BEEP=P2^0;//蜂鸣器接口sbit k1=P3^2;//下一首sbit k2=P3^3;//上一首sbit k3=P2^1;//播放/暂停sbit k4=P2^2;//复位char count2;//歌曲标志uchar a,b,c,aa,num;uchar num1,num2;//---------------------------简谱---------------------------------------//编程规则:字节高位是简谱,低位是持续时间,//代表多少个十六分音符//1-7代表中央C调,8-E代表高八度,0代表停顿//最后的0是结束标志uchar code table1[]={ //千年之恋0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x 94,0xA8,0x08,//前奏0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,//竹林的灯火到过的沙漠0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,//七色的国度不断飘逸风中0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,//有一种神秘灰色的旋涡0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,//将我卷入了迷雾中0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,//看不清的双手0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,//一朵花传来谁经过的温柔0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,//穿越千年的伤痛0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,//只为求一个结果0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,//你留下的轮廓指引我0x42,0x63,0x83,0x83,0x91,0x91,//黑夜中不寂寞0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,//穿越千年的哀愁0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,//是你在尽头等我0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,//最美丽的感动会值得0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff//结束标?//睾?};uchar code table2[]={ //寂寞沙洲冷0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,//自你走后心憔悴0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,//白色油桐风中纷飞0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,//落花似人有情这个季节0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,//河畔的风放肆拼命地吹0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,//不断拨弄离人的眼泪0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,//那样浓烈的爱再也无法给0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,//伤感一夜一夜0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,//当记忆的线缠绕过往支离破碎0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,//是慌乱占据了心扉0x31,0x81,0x81,0x81,0x61,0x91,0x82,//有花儿伴着蝴蝶0x51,0x51,0x51,0x51,0x31,0x61,0x53,//孤雁可以双飞0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,//夜深人静独徘徊0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,//当幸福恋人寄来红色分享喜悦0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,//闭上双眼难过头也不敢回0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,//仍然捡尽寒枝不肯安歇微带着后悔0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,//寂寞沙洲我该思念谁0xff};uchar code table3[]={0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x 20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x 20,0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x 20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x 20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x 20,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x 20,0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x 20,0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x 10,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x 80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x 20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x 20,0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x 10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0xff,};uchar code table4[]={0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0 x1C,0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0 x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0 x20,0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0 x30,0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0 x30,0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0 x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0 x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0 x1F,0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0 x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0 x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0 x20,0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0xff,};//简谱音调对应的定时器初值//适合12的晶振uchar code cuzhi[]={0xff,0xff,//占位0xFC,0x8E,//中央C调1-70xFC,0xED,0xFD,0x43,0xFD,0x6A,0xFD,0xB3,0xFD,0xF3,0xFE,0x2D,0xFE,0x47, //高八度1-70xFE,0x76,0xFE,0xA1,0xFE,0xC7,0xFE,0xD9,0xFE,0xF9,0xFF,0x16};uchar code yinyue[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0x00}; //将音调转化为对应的LED样式//延时165MS,即十六分音符子函数void delay1(uint z){uint x,y;for(x=z;x>0;x--)for(y=19000;y>0;y--);}//延时1MS子函数void delay2(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}//LCD1602液晶写命令子函数void write_com(uchar com){RS=0; //选择写指令RW=0;E=0;P0=com;E=1;delay2(5); //无延时不能正常工作 E=0;}//LCD1602液晶写数据子函数void write_date(uchar date){RS=1; //选择写数据RW=0;E=0;P0=date;E=1;delay2(5); //无延时不能正常工作 E=0;}//LCD1602液晶初始化子函数void LCD1602_init() //初始化{delay2(15);//主函数void main(){TMOD=0x11;//定时器0工作在方式1TH1=0;TL1=0;ET1=1;TH0=0;TL0=0;ET0=1;TR0=1;EA=1;//开总中断EX1=1;//开外部中断1IT1=1;//下降沿时触发中断EX0=1;//开外部中断0IT0=1;//下降沿时触发中断count2=0;//唱第一首歌LCD1602_init();while(1)//大循环{song();}}//定时器0中断子函数void t0() interrupt 1{num2++;if(num2==5){num2=0;key();}}//定时器1中断子函数void t1() interrupt 3 //用于产生各种音调{TH1=a;TL1=b;BEEP=~BEEP;}void wb0() interrupt 0{TR1=0;if(k1==0){delay2(10);if(k1==0){count2++;c=0;//从头开始唱if(count2==1){write_com(0x01);delay2(10);write_com(0x80+0);write_date(' ');write_com(0x80+1);write_date(' ');write_com(0x80+2);write_date(' ');write_com(0x80+3);write_com(0xc0+8);write_date(' ');write_com(0xc0+9);write_date('f');write_com(0xc0+10);write_date('l');write_com(0xc0+11);write_date('o');write_com(0xc0+12);write_date('w');write_com(0xc0+13);write_date('e');write_com(0xc0+14);write_date('r');write_com(0xc0+15);write_date('s');}if(count2>4){count2=1;c=0;//从头开始唱TR1=1;}while(!k1);}}}void wb1() interrupt 2{TR1=0;if(k2==0){delay2(10);if(k2==0){count2--;c=0;//从头开始唱if(count2==1)}if(count2<=0){count2=4;c=0;//从头开始唱TR1=1;}while(!k2);}}}3仿真图3.1原理图3.2 元件清单总结这次设计进一步端了我的学习态度,学会了实事求是,严谨的作风,对自己要严格要求,不能够一知半解,要力求明明白白。