单片机课程设计 八音盒.docx
- 文档编号:6497983
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:30
- 大小:521.13KB
单片机课程设计 八音盒.docx
《单片机课程设计 八音盒.docx》由会员分享,可在线阅读,更多相关《单片机课程设计 八音盒.docx(30页珍藏版)》请在冰豆网上搜索。
单片机课程设计八音盒
《单片机原理及应用》课程设计
—八音盒设计
班级:
机081-4
学号:
200823501433
姓名:
信召峰
完成日期:
2011年7月5日
目录
一、课程设计任务书3
二、设计项目简介3
2.1、设计思路3
2.2、音符产生方法3
2.3、节拍产生方法4
三、电路原理图6
四、系统功能简介6
五、程序框图7
六、程序清单9
七、总结26
参考文献:
27
8051八音盒
一、课程设计任务书
8051八音盒
本设计利用8051单片机结合内部定时器LCD设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。
本设计可以学习8051定时器程序设计,按键扫描及歌曲旋律简单直觉式输入法的设计方法。
其基本功能为:
1、使用LCD显示器来显示目前演奏的歌曲编号;2、具有16个按键操作来选择演奏哪一首歌曲;3、内建10首歌曲旋律,按下单键可以演奏歌曲;4、演奏时可以按键中断。
程序执行后工作指示LED闪动,表示程序开始执行,按下单键0~9便可以演奏歌曲,歌曲演奏中,可以按键中断。
二、设计项目简介
1、设计思路:
(1)选用Philips公司P87C51RB+单片机,它具有16KB的内部ROM,3个定时器/计数器,2个中断。
(2)通过中断实现歌曲的播放和暂停。
(3)通过定时实现LED闪烁和音乐频率的变化
(4)通过键盘实现歌曲的选择。
2、音符产生方法:
不同的音调有不同的频率。
频率不同,音调也就不同。
利用定时器,使其工作在模式0,定时中断,然后控制P3.7引脚的输出每次取反,就可以在P3.7的引脚输出相应的方波频率。
改变计数初值,就改变了频率。
定时器的定时时间等于半个周期,定时时间到就输出脉冲取反,重复此过程,就可在P3.7引脚得到一音频的脉冲。
如:
C调中音1的频率=523HZ,周期T=1/523=1912us;
定时器的定时时间为:
T/2=1912/2us=956us;
则其计数初值为:
TH0=(8192-C)/32;TL0=(8192-C)%32;
下面是音符及其程序中对应的编码
音符
音符编码
音符
音符编码
音符
音符编码
低音1
l_dao
中音1
dao
高音1
h_dao
低音2
l_re
中音
re
高音2
h_re
低音3
l_mi
中音
mi
高音3
h_mi
低音4
l_fa
中音
fa
高音4
h_fa
低音5
l_sao
中音
sao
高音5
h_sao
低音6
l_la
中音
la
高音6
h_la
低音7
l_xi
中音
xi
高音7
h_xi
3、节拍产生方法:
音乐中的节拍用延时时间产生。
假设1/4拍执行一次延时程序,这1/2拍就执行两次延时程序,所以只要求出1/4延时时间,其余的节拍就是他的倍数。
为方便记谱,将节拍数也进行编码,如下:
节拍
节拍编码(基本延时次数)
1/4
1
1/2
2
3/4
3
4/4
4
建立曲谱编码表,例如:
简谱编码:
re,sao,mi,re,mi,sao,mi,re,dao,re,re,sao,re,mi,sao,mi,re,dao,l_la,dao,dao,mi,re,mi,l_sao,re,l_xi,l_la,l_sao,l_la,
dao,re,l_xi,l_la,l_sao,l_mi,l_sao,0xff
节拍编码:
4,4,2,2,4,2,2,2,2,8,4,4,4,2,2,
2,2,2,2,8,4,4,2,2,4,2,2,2,2,4,
6,2,2,2,2,2,16
三、电路原理图:
四、系统功能简介:
1、此8051八音盒具有矩阵式键盘共十个按键,0~9按键用于选择歌曲,通过P2口与单片机相连。
2、LCD通过用于显示,显示当前正在播放的歌曲编号。
P0口输出编号,P1.4、P1.5、P1.6用于控制LCD。
3、有中断按键,在单片机播放旋律时可以按中断0键实现歌曲暂停,再按中断1实现歌曲暂停后的播放。
4、LED灯连接在P1.7口,用LED灯闪烁指示单片机处于工作状态。
5、歌曲音调经P3.7口的喇叭播放出来。
五、程序框图:
六、程序清单:
#include
#include
#include
unsignedintC;//储存定时器的定时常数
//以下是C调低音的音频宏定义
#definel_dao262//将“l_dao”宏定义为低音“1”的频率262Hz
#definel_re286//将“l_re”宏定义为低音“2”的频率286Hz
#definel_mi311//将“l_mi”宏定义为低音“3”的频率311Hz
#definel_fa349//将“l_fa”宏定义为低音“4”的频率349Hz
#definel_sao392//将“l_sao”宏定义为低音“5”的频率392Hz
#definel_la440//将“l_a”宏定义为低音“6”的频率440Hz
#definel_xi494//将“l_xi”宏定义为低音“7”的频率494Hz
//以下是C调中音的音频宏定义
#definedao523//将“dao”宏定义为中音“1”的频率523Hz
#definere587//将“re”宏定义为中音“2”的频率587Hz
#definemi659//将“mi”宏定义为中音“3”的频率659Hz
#definefa698//将“fa”宏定义为中音“4”的频率698Hz
#definesao784//将“sao”宏定义为中音“5”的频率784Hz
#definela880//将“la”宏定义为中音“6”的频率880Hz
#definexi987//将“xi”宏定义为中音“7”的频率523H
//以下是C调高音的音频宏定义
#defineh_dao1046//将“h_dao”宏定义为高音“1”的频率1046Hz
#defineh_re1174//将“h_re”宏定义为高音“2”的频率1174Hz
#defineh_mi1318//将“h_mi”宏定义为高音“3”的频率1318Hz
#defineh_fa1396//将“h_fa”宏定义为高音“4”的频率1396Hz
#defineh_sao1567//将“h_sao”宏定义为高音“5”的频率1567Hz
#defineh_la1760//将“h_la”宏定义为高音“6”的频率1760Hz
#defineh_xi1975//将“h_xi”宏定义为高音“7”的频率1975Hz
#defineucharunsignedchar
uchari,j,k;
ucharkeynum=0x0a;
sbitsound=P3^7;//将sound位定义为P3.7
sbitRS=P1^4;//寄存器选择位,将RS位定义为P1.4引脚
sbitRW=P1^5;//读写选择位,将RW位定义为P1.5引脚
sbitE=P1^6;//使能信号位,将E位定义为P1.6引脚
sbitBF=P0^7;//忙碌标志位,,将BF位定义为P0.7引脚
sbitLED=P1^7;//将LED灯闪烁定义为P1.7
//以下是《好人一生平安》的一段简谱
unsignedintcodef0[]={re,mi,re,dao,l_la,dao,l_la,//每行对应一小节音符
l_sao,l_mi,l_sao,l_la,dao,
l_la,dao,sao,la,mi,sao,
re,
mi,re,mi,sao,mi,
l_sao,l_mi,l_sao,l_la,dao,
l_la,l_la,dao,l_la,l_sao,l_re,l_mi,
l_sao,
re,re,sao,la,sao,
fa,mi,sao,mi,
la,sao,mi,re,mi,l_la,dao,
re,
mi,re,mi,sao,mi,
l_sao,l_mi,l_sao,l_la,dao,
l_la,dao,re,l_la,dao,re,mi,
re,
l_la,dao,re,l_la,dao,re,mi,
re,0xff};//以0xff作为音符的结束标志
//以下是简谱中每个音符的节拍
//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位
unsignedcharcodeJP0[]={4,1,1,4,1,1,2,
2,2,2,2,8,
4,2,3,1,2,2,
10,
4,2,2,4,4,
2,2,2,2,4,
2,2,2,2,2,2,2,
10,
4,4,4,2,2,
4,2,4,4,
4,2,2,2,2,2,2,
10,
4,2,2,4,4,
2,2,2,2,6,
4,2,2,4,1,1,4,
10,
4,2,2,4,1,1,4,
10};
//以下是《好人一生平安》的一段简谱
unsignedintcodef1[]={h_dao,h_dao,mi,sao,//每行对应一小节音符
h_dao,h_dao,mi,sao,
mi,mi,sao,h_dao,h_dao,
la,la,fa,h_re,h_re,
sao,la,sao,fa,
mi,re,mi,dao,
sao,la,sao,fa,
mi,re,mi,dao,
sao,la,h_dao,mi,
sao,h_mi,h_re,h_dao,
sao,la,mi,
sao,la,h_dao,mi,
sao,h_mi,h_re,h_dao,
sao,la,h_dao,
sao,mi,sao,la,sao,h_dao,h_dao,dao,
sao,mi,sao,la,sao,h_re,h_re,dao,
sao,la,h_dao,h_dao,
sao,la,h_re,h_re,
sao,la,h_mi,h_mi,
sao,la,h_mi,h_re,h_dao,
dao,0xff};//以0xff作为音符的结束标志
//以下是简谱中每个音符的节拍
//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位
unsignedcharcodeJP1[]={4,2,2,8,
4,2,2,8,
2,4,2,4,4,
2,4,2,4,4,
3,1,2,2,
2,2,2,2,
3,1,2,2,
2,2,2,2,
6,2,4,4,
3,2,2,2,
6,2,8,
6,2,4,4,
3,2,2,2,
6,2,8,
2,1,1,2,2,2,2,4,
2,1,1,2,2,2,2,4,
3,1,2,2,
3,1,2,2,
3,1,2,2,
3,1,3,1,4,
8};
//以下是歌曲2《毕业歌》的一段简谱
unsignedintcodef2[]={h_dao,h_dao,dao,h_dao,la,sao,mi,sao,dao,mi,re,
dao,dao,dao,re,mi,fa,sao,la,h_dao,dao,mi,mi,sao,
h_dao,dao,mi,fa,sao,la,
sao,la,sao,mi,dao,mi,re,re,dao,dao,re,mi,sao,mi,
re,mi,re,dao,mi,re,dao,dao,mi,fa,sao,sao,sao,
la,xi,h_dao,h_dao,dao,h_re,h_re,h_dao,h_la,xi,la,
sao,sao,dao,re,mi,mi,mi,sao,la,mi,re,re,dao,re,re,dao,
0xff};//以0xff作为音符的结束标志
//以下是简谱中每个音符的节拍
//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位
unsignedcharcodeJP2[]={2,2,4,2,4,2,
3,1,2,2,8,
6,2,3,1,2,2,
4,4,4,2,1,1,4,4,
3,1,2,2,2,4,2,
2,4,2,8,4,2,1,1,
2,4,2,2,4,2,
6,2,8,6,2,3,1,2,2,2,
6,2,4,2,2,2,4,2,2,4,2,
4,4,3,1,2,2,2,2,4,2,4,2,2,2,4,2};
//以下是歌曲3《沂蒙山小调》的一段简谱unsignedintcodef3[]={re,sao,mi,re,mi,sao,mi,re,dao,re,re,sao,re,mi,sao,mi,re,dao,l_la,dao,dao,mi,re,mi,l_sao,re,l_xi,l_la,l_sao,l_la,
dao,re,l_xi,l_la,l_sao,l_mi,l_sao,0xff};
unsignedcharcodeJP3[]={4,4,2,2,4,2,2,2,2,8,4,4,4,2,2,
2,2,2,2,8,4,4,2,2,4,2,2,2,2,4,
6,2,2,2,2,2,16};
//以下是歌曲4《套马杆》的一段简谱
unsignedintcodef4[]={dao,dao,dao,l_la,dao,re,mi,sao,la,sao,mi,re,mi,
mi,la,la,h_dao,h_dao,la,sao,mi,mi,mi,sao,re,sao,la,sao,mi,l_la,l_la,
dao,dao,re,re,mi,re,re,re,mi,l_sao,l_la,
l_la,l_la,l_la,dao,re,mi,sao,mi,re,re,l_sao,l_xi,l_la,
dao,dao,dao,l_la,dao,re,mi,sao,la,sao,mi,re,mi,
mi,la,la,h_dao,h_dao,la,sao,mi,mi,mi,sao,re,sao,la,sao,mi,l_la,l_la,
dao,dao,re,re,mi,re,re,re,mi,l_sao,mi,
re,re,re,mi,sao,re,re,re,la,sao,mi,0xff};//以0xff作为音符的结束标志
//以下是简谱中每个音符的节拍
//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位
unsignedcharcodeJP4[]={2,2,2,2,2,2,2,2,2,2,2,2,8,
2,2,2,2,2,1,1,2,1,1,2,2,2,1,1,6,1,1,
2,2,2,1,1,10,2,2,2,2,8,
2,2,2,2,2,2,2,2,2,2,2,2,8,
2,2,2,2,2,2,2,2,2,2,2,2,8,
2,2,2,2,2,1,1,2,1,1,2,2,2,1,1,6,1,1,
2,2,2,1,1,10,2,2,2,2,8,
2,2,2,2,4,4,2,2,2,2,8};
//以下是歌曲5《军港之夜》的一段简谱
unsignedintcodef5[]={mi,sao,mi,sao,mi,dao,dao,mi,mi,sao,mi,sao,sao,mi,
mi,re,mi,re,l_xi,l_la,l_xi,l_la,l_sao,dao,l_sao,mi,mi,dao,re,mi,re,mi,mi,l_la,l_sao,dao,mi,sao,sao,mi,sao,sao,mi,mi,mi,re,dao,re,mi,l_xi,l_sao,l_la,l_xi,l_la,dao,l_xi,mi,mi,l_xi,l_la,l_xi,l_la,l_xi,mi,mi,l_xi,l_xi,l_la,l_xi,l_la,
re,l_la,dao,l_xi,l_la,mi,sao,sao,mi,la,sao,la,sao,mi,sao,mi,dao,mi,mi,mi,sao,mi,sao,sao,mi,
mi,re,mi,re,l_xi,l_la,l_xi,l_la,l_sao,mi,mi,sao,sao,mi,la,sao,la,sao,mi,sao,mi,dao,mi,mi,sao,mi,sao,sao,mi,mi,mi,re,mi,re,l_xi,l_la,l_xi,l_la,l_sao,dao,mi,sao,sao,mi,mi,re,mi,re,xi,l_la,l_sao,0xff};//以0xff作为音符的结束标志
//以下是简谱中每个音符的节拍
//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位
unsignedcharcodeJP5[]={2,6,2,6,2,2,2,2,2,6,2,2,2,2,2,1,1,4,2,1,1,2,2,8,
2,2,2,2,1,1,4,2,4,2,2,8,2,2,2,2,4,2,4,4,1,1,2,8,
4,2,2,1,1,4,2,2,2,2,2,1,1,6,2,2,2,2,2,1,1,4,
2,1,1,2,2,8,2,2,2,2,2,1,1,4,1,2,1,2,1,1,2,6,2,2,2,2,
2,1,1,4,2,1,1,2,2,8,2,2,2,2,2,1,1,4,1,2,1,2,2,2,6,
2,2,2,1,1,2,1,1,4,2,1,1,2,2,8,2,2,2,2,2,1,1,4,4,2,2};
//以下是歌曲6《童年》的一段简谱
unsignedintcodef6[]={h_mi,h_mi,h_mi,h_mi,h_re,h_re,h_dao,h_dao,h_dao,h_re,h_dao,
la,sao,sao,sao,sao,la,sao,h_re,h_mi,h_dao,h_dao,mi,sao,sao,sao,mi,//每行对应一小节音符la,la,xi,la,dao,la,la,sao,h_dao,h_dao,h_dao,h_dao,la,h_dao,la,sao,sao,mi,sao,sao,sao,mi,la,la,xi,la,dao,la,la,sao,h_dao,h_dao,h_dao,h_dao,la,la,h_dao,h_re,h_re,h_sao,h_sao,h_sao,h_sao,h_sao,h_sao,h_mi,h_re,h_dao,h_dao,la,la,la,h_dao,la,h_dao,h_re,h_re,h_re,h_dao,h_re,h_dao,h_mi,h_re,h_re,h_re,h_mi,h_mi,h_mi,h_mi,h_re,h_re,h_dao,h_dao,h_dao,h_re,h_dao,la,sao,sao,sao,dao,sao,0xff};//以0xff作为音符的结束标志
//以下是简谱中每个音符的节拍
//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位
unsignedcharcodeJP6[]={2,4,2,2,2,4,2,4,2,2,2,2,2,2,4,2,2,2,2,2,8,4,2,2,4,2,2,
2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,8,4,2,2,4,2,2,2,2,2,2,2,2,2,2,
2,3,1,2,2,2,2,8,8,2,4,1,1,2,2,2,2,2,4,1,1,2,2,2,2,
2,2,2,2,2,2,2,2,8,8,2,4,2,2,2,4,2,4,2,2,2,2,2,2,2,2,2};
//以下是歌曲7《爱情买卖》的一段简谱
unsignedintcodef7[]={mi,la,la,xi,h_dao,h_re,h_mi,h_sao,h_mi,h_re,h_dao,h_dao,h_re,
h_dao,h_re,h_mi,la,la,mi,re,re,mi,//每行对应一小节音符
re,re,mi,re,dao,dao,re,sao,sao,sao,mi,sao,sao,sao,mi,la,mi,mi,re,re,mi,la,la,mi,re,re,mi,mi,mi,
re,re,mi,re,dao,dao,re,sao,sao,sao,mi,mi,sao,sao,sao,mi,mi,mi,xi,sao,sao,mi,mi,la,mi,la,h_dao,h_dao,mi,la,h_dao,0xff};//以0xff作为音符的结束标志
//以下是简谱中每个音符的节拍
//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位
unsignedcharcodeJP7[]={4,8,2,2,2,2,2,1,1,12,8,2,2,2,2,16,2,2,2,2,2,6,
2,1,1,2,2,2,6,2,2,2,2,2,2,2,2,2,2,2,2,2,6,2,2,2,2,2,2,3,2,
2,1,1,2,2,2,6,2,2,1,1,2,2,2,1,1,1,1,2,2,1,1,2,8,2,2,2,2,2,2};
//以下是歌曲8《荷塘月色》的一段简谱
unsignedin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机课程设计 八音盒 单片机 课程设计