基于51单片机的电子琴设计课程设计说明书附原理图PCB和程序Word文档下载推荐.docx
- 文档编号:20020664
- 上传时间:2023-01-15
- 格式:DOCX
- 页数:53
- 大小:525.84KB
基于51单片机的电子琴设计课程设计说明书附原理图PCB和程序Word文档下载推荐.docx
《基于51单片机的电子琴设计课程设计说明书附原理图PCB和程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于51单片机的电子琴设计课程设计说明书附原理图PCB和程序Word文档下载推荐.docx(53页珍藏版)》请在冰豆网上搜索。
5)目次页(附件不统一编入)
6)论文主体部分:
引言(或绪论)、正文、结论
7)参考文献
8)致谢
9)附录(对论文支持必要时)
2.论文字数要求:
理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:
任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:
1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写
2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画
3)毕业论文须用A4单面打印,论文50页以上的双面打印
4)图表应绘制于无格子的页面上
5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序
1)设计(论文)
2)附件:
按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
指导教师评阅书
指导教师评价:
一、撰写(设计)过程
1、学生在论文(设计)过程中的治学态度、工作精神
□优□良□中□及格□不及格
2、学生掌握专业知识、技能的扎实程度
3、学生综合运用所学知识和专业技能分析和解决问题的能力
4、研究方法的科学性;
技术线路的可行性;
设计方案的合理性
5、完成毕业论文(设计)期间的出勤情况
二、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
2、是否完成指定的论文(设计)任务(包括装订及附件)?
三、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
2、论文的观念是否有新意?
设计是否有创意?
3、论文(设计说明书)所体现的整体水平
建议成绩:
(在所选等级前的□内画“√”)
指导教师:
(签名)单位:
(盖章)
年月日
评阅教师评阅书
评阅教师评价:
一、论文(设计)质量
二、论文(设计)水平
评阅教师:
教研室(或答辩小组)及教学系意见
教研室(或答辩小组)评价:
一、答辩过程
1、毕业论文(设计)的基本要点和见解的叙述情况
2、对答辩问题的反应、理解、表达情况
3、学生答辩过程中的精神状态
评定成绩:
教研室主任(或答辩小组组长):
(签名)
教学系意见:
系主任:
1摘要……………………………………………………………………1
2关键字…………………………………………………………………1
3设计任务及要求………………………………………………………1
4方案可行性论证………………………………………………………1
5程序框图………………………………………………………………2
6关键单元电路与程序介绍……………………………………………3
6.1复位与震荡电路………………………………………………3
6.24x4矩阵键盘…………………………………………………3
6.3数码管与LED灯………………………………………………4
6.4蜂鸣器…………………………………………………………6
6.5音乐相关知识…………………………………………………7
7调试过程………………………………………………………………11
8总结与体会……………………………………………………………11
9参考文献………………………………………………………………11
10附录……………………………………………………………………12
10.1设备与仪器……………………………………………………12
10.2软件……………………………………………………………12
10.3原件清单………………………………………………………12
10.4原理图与PCB图………………………………………………13
10.5总程序……………………………………………………………14
10.6实物图……………………………………………………………31
【摘要】:
打造一个多功能电子琴,核心是一块单片机。
单片机读取键值,为内置定时器赋初值,定时器每溢出一次,驱动蜂鸣器的引脚电平就取反一次,产生相应频率的方波,即音调;
设好键值与数码管段码表的对应关系,键按下时,数码管显示对应音调。
一首音乐储存在一个表中,表中的数据是音调与节拍,单片机读取音符的音调与节拍,根据音调赋予定时器初值,根据节拍决定定时器工作的时间,也就是蜂鸣器响的时间,一个接一个地读取音符,即可播放一首歌曲。
节拍用led灯的点亮个数表示。
单片机读取音乐表中的节拍,控制led灯的点亮个数,达到显示节拍的效果。
特别要注意的是:
该方案采用了两个定时器,T0、T1。
T0作为驱动蜂鸣器的定时器,要给予高优先级,不然会被T1干扰,音质变差。
【关键字】:
单片机、stc89c52、电子琴、C51、keil。
【设计任务及要求】:
1.通过按键能够发出相应的音符并播放产生乐音,实现演奏;
2.演奏的同时可数字显示当前的音调,利于培养乐感
3.可以选定播放固定乐曲自动演奏,演奏时LED进行节拍指示;
4.在自动演奏和奏乐的过程中按停止键则中断演奏;
5.可以选择调节音或小。
【方案可行性论证】:
本课题采用stc89c52单片机作为核心器件,实现基本的音乐弹奏、音乐播放、音调显示和音乐节拍指示的功能。
1.音乐弹奏:
通过程序识别4x4矩阵键盘中按下的键的坐标(x,y),
然后根据(x,y)从计数初值表中读取对应的计数初值,赋值给定时器0,定时器产生对应频率的方波,达到播放对应音调的功能。
2.音乐播放:
先建立一个包含一首音乐的音调与节拍的表。
其中,音调就是0x01(低音、do)、0x12(中音、re)、0x23(高音、mi)之类的数;
节拍就是0x02(半拍),0x04(一拍)之类的数。
然后,根据音调读取计数初值,再将计数初值赋给定时器T0->
开启定时器T0->
读取节拍并延时->
关闭定时器T0。
这样就发出了一个音,然后再读下一个音的初值与节拍,重复上一个操作即可。
(具体实现方法见附录总程序)
3.数码管显示音调:
①按键:
读出按键坐标(x,y),用if语句来判断(x,y)该给数码管赋什么值,然后从ucharcodenum[]表中读取这个值赋给数码管(例如P0)。
②播放歌曲时:
读入音调,根据音调的值来判断num[i]这个表中的i,再把num[i]赋给P0口。
4.led灯的节拍指示:
采用定时器1来控制,作为节拍指示。
①按键时:
根据按下的时长来控制led的点亮个数,并且是按一定的时间间隔逐个点亮;
释放按键时,led灯按一定的时间间隔逐个熄灭,从而达到一种比较简单的节拍指示效果。
②播放音乐时:
根据音符的节拍,控制点亮到哪一个灯,在点亮那个灯之前,前面的灯逐个等时距点亮。
音符结束后,led灯全部一起熄灭。
这样,达到了一个精确显示节拍的效果。
开始
【程序框图】:
扫描键盘
根据音调给T0赋初值
开启T0T1
是否停止播放
读下一个音符
关闭T0T1数码管与led
数码管显示音调
Led指示节拍
否
按节拍延迟
算出音符的音调、节拍
是否结束符
关闭定时器
P0口置0
是
按键是否释放
开启定时器,并赋初值,蜂鸣器发声
算出定时器初值
识别按键
有矩阵键按下
播放键按下
读取歌曲
【复位与震荡电路】:
原件的参数如图所示。
C1,C2可采用30pF无极性陶瓷电容;
C3可采用10µ
F记性电解质电容。
值得注意的是,晶振不能随便摸!
尤其在通电工作的时候,触摸容易损坏。
自从摸过一次后,震荡频率变得不稳定,蜂鸣器声音时好时坏。
【4x4矩阵键盘】:
键盘扫描的基本思路是:
先得出触发按键的“行”,即横坐标x,再得出他的“列”,即纵坐标y。
以下是获取横坐标x的代码:
ucharkey_x()/*P1口高位接纵坐标(P1.7-P1.4)低位接横坐标(P1.3-P1.0)*/
{
uchari;
P1=0x0f;
/*有按键按下后对应按键的横坐标电位被拉低(注意低电位引脚不能被高电位引脚抬高,只能是低电位拉低高电位)*/
if(P1_0==0)
{delayms(5);
//延时5ms去抖动
if(P1_0==0)
i=1;
}
elseif(P1_1==0)
if(P1_1==0)
i=2;
elseif(P1_2==0)
if(P1_2==0)
i=3;
elseif(P1_3==0)
if(P1_3==0)
i=4;
else
i=0;
return(i);
//0表示按键未按下
获取y的方法与获取x的方法类似,具体可以参考附件总程序。
得到触发按键的坐标(x,y)之后,可以通过x,y的值来确定按键的功能。
例如x==1,y==1时(S1按下),可以让数码管显示1:
if(x==1&
&
y==1)
P0=led_table[1];
或者更方便一点:
if(x==1)
P0=led_table[y];
就能显示第一行的所有的数了。
【数码管与LED灯】:
数码管:
在本课题中,数码管要显示A-G,1-7,1.-7.,所以段码比较另类。
num[0]的值是没用到的,起占位作用。
ucharcodenum[]={0x00,//共阴极数码管段选码
0x77,0x7c,0x39,0x5e,0x79,0x71,0x3d,//a-g
0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//1-7
0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87//1.-7.
};
编写程序时,要根据实际情况来编写:
比如16个按键不能够把低中高音都全部表示完全,只能选取合适的部分。
我让第一行的按键触发低音4-7,第二行触发中音1-4,第三行触发中音5-7和高音1,第四行触发高音2-5。
这样设置能弹奏大部分曲目。
以下是控制数码管的代码片段:
if(x==1)
P0=num[3+y];
//低音4-7
elseif(x==2)
P0=num[7+y];
//中音1-4
elseif(x==3)
P0=num[11+y];
//中音5-7和高音1
elseif(x==4)
P0=num[15+y];
//高音2-5
LED灯:
因为LED灯要按一定的时间逐个点亮或者逐个熄灭,所以我用定时器1来控制它。
定时器1每溢出一次并满足一定条件时flash变量就+1或者-1,然后从led_table[]这个表中读出相应的数赋给P2口。
表:
ucharcodeled_table[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
/*发光二极管闪烁表*/
代码:
if(x!
=0&
y!
flash<
8)//最大加到8
++flash;
elseif(x==0&
y==0&
flash>
0)//最小减到0
--flash;
P2=led_table[flash];
播放音乐时又有所不同:
播放音乐时,led灯要精确地显示当前音符的节拍,所以if语句里加了一条限制语句:
flash<
jiepai)
if(out==1&
8&
jiepai)/*out==1表示有歌曲发声时,(flash<
jiepai)使led灯刚好指示节拍*/
elseif(out==0&
0)
这样做,就能看得出音符的节拍了。
只是,由于led灯的个数有限,所以大于二分音符(2拍)的节拍就无法看到了。
因为8个灯全亮才表示二分音符。
如果当初采用16个灯的话,就没有这个窘境了。
【蜂鸣器】:
蜂鸣器采用一个s8550NPN三极管驱动,一个可变电阻改变音量。
三极管的选用要注意放大倍数,放大倍数太小会导致蜂鸣器声音很小。
最初采用8050就造成了这个问题。
另外,采用P3.0口连接接蜂鸣器是一个错误。
因为P3.0、P3.1是烧写程序用到的接口。
倘若连接了其他器件,每次调试都要拔下烧写线,很不方便。
【音乐相关知识】:
【表6.5.1】音符频率对照表
音符
频率(HZ)
简谱码(T值)
低1 DO
262
636280xf88c
#4FA#
740
64860
#1 DO#
277
63731
中5SO
784
648980xfd82
低2 RE
294
638350xf95b
#5SO#
831
64934
#2RE#
311
63928
中6LA
880
649680xfdc8
低3M
330
640210xfa15
#6
932
64994
低4FA
349
641030xfa67
中7SI
988
650300xfe06
370
64185
高1DO
1046
650580xfe22
低5SO
392
642600xfb04
#1DO#
1109
65085
415
64331
高2RE
1175
651100xfe56
低6LA
440
644000xfb90
#2RE#
1245
65134
466
64463
高3M
1318
651570xfe85
低7SI
494
645240xfc0c
高4FA
1397
651780xfe9a
中1DO
523
645800xfc44
1480
65198
554
64633
高5SO
1568
652170xfec1
中2RE
587
646840xfcac
1661
65235
622
64732
高6LA
1760
652520xfee4
中3M
659
647770xfd09
1865
65268
中4FA
698
648200xfd34
高7SI
1967
652830xff03
音调、节拍以及编码的确定方法:
一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍。
其中节拍表示一个音符唱多长的时间。
音调的确定:
不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。
把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。
两个音之间的距离有两个“半音”,就叫“全音”。
在钢琴等键盘乐器上,C–D、D–E、F–G、G–A、A–B两音之间隔着一个黑键,他们之间的距离就是全音;
E–F、B–C两音之间没有黑键相隔,它们之间的距离就是半音。
通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上﹟号或者b号的叫变化音。
﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。
例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266Hz)的一倍;
同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294Hz)的一倍。
1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。
利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
2)利用stc89c52的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。
此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;
若查表结果为FFH,则产生相应的停顿效果。
3)例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次计数956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系公式如下:
N=Fi
2
Fr
N:
计算值;
Fi:
内部计时一次为1us,故其频率为1MHz;
4)其计数值的求法如下:
T=65536-N=65536-Fi
Fr
例如:
设K=65536,F=1000000=Fi=1MHz,求低音DO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 电子琴 设计 课程设计 说明书 原理图 PCB 程序