基于51单片机的电子琴设计【附原理图、PCB和程序】

上传人:QQ15****706 文档编号:52454164 上传时间:2018-08-21 格式:DOC 页数:32 大小:862KB
返回 下载 相关 举报
基于51单片机的电子琴设计【附原理图、PCB和程序】_第1页
第1页 / 共32页
基于51单片机的电子琴设计【附原理图、PCB和程序】_第2页
第2页 / 共32页
基于51单片机的电子琴设计【附原理图、PCB和程序】_第3页
第3页 / 共32页
基于51单片机的电子琴设计【附原理图、PCB和程序】_第4页
第4页 / 共32页
基于51单片机的电子琴设计【附原理图、PCB和程序】_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《基于51单片机的电子琴设计【附原理图、PCB和程序】》由会员分享,可在线阅读,更多相关《基于51单片机的电子琴设计【附原理图、PCB和程序】(32页珍藏版)》请在金锄头文库上搜索。

1、课程设计说明书题 目: 基于单片机的电子琴设计 院 (系): 电子工程与自动化学院 专 业: 测控技术与仪器(卓越) 学生姓名: 学 号: 指导教师: 2013 年 9 月 21 日目目 录录1 摘要 12 关键字 13 设计任务及要求 14 方案可行性论证 15 程序框图 26 关键单元电路与程序介绍 36.1 复位与震荡电路 36.2 4x4 矩阵键盘 36.3 数码管与 LED 灯 46.4 蜂鸣器 66.5 音乐相关知识 77 调试过程 118 总结与体会 119 参考文献 1110 附录 1210.1 设备与仪器 1210.2 软件 1210.3 原件清单 1210.4 原理图与 P

2、CB 图 1310.5 总程序 1410.6 实物图 31【摘要摘要】:打造一个多功能电子琴,核心是一块单片机。单片机读取键值,为内置定时器赋初值,定时器每溢出一次,驱动蜂鸣器的引脚电平就取反一次,产生相应频率的方波,即音调;设好键值与数码管段码表的对应关系,键按下时,数码管显示对应音调。一首音乐储存在一个表中,表中的数据是音调与节拍,单片机读取音符的音调与节拍,根据音调赋予定时器初值,根据节拍决定定时器工作的时间,也就是蜂鸣器响的时间,一个接一个地读取音符,即可播放一首歌曲。节拍用 led 灯的点亮个数表示。单片机读取音乐表中的节拍,控制 led灯的点亮个数,达到显示节拍的效果。特别要注意的

3、是:该方案采用了两个定时器,T0、T1。T0 作为驱动蜂鸣器的定时器,要给予高优先级,不然会被 T1 干扰,音质变差。【关键字关键字】:单片机、stc89c52、电子琴、C51、keil。【设计任务及要求设计任务及要求】:1.通过按键能够发出相应的音符并播放产生乐音,实现演奏;2.演奏的同时可数字显示当前的音调,利于培养乐感3.可以选定播放固定乐曲自动演奏,演奏时 LED 进行节拍指示;4.在自动演奏和奏乐的过程中按停止键则中断演奏;5.可以选择调节音或小。【方案可行性论证方案可行性论证】:本课题采用 stc89c52 单片机作为核心器件,实现基本的音乐弹奏、音乐播放、音调显示和音乐节拍指示的

4、功能。1.音乐弹奏:通过程序识别 4x4 矩阵键盘中按下的键的坐标(x,y) ,然后根据(x,y)从计数初值表中读取对应的计数初值,赋值给定时器 0,定时器产生对应频率的方波,达到播放对应音调的功能。2.音乐播放:先建立一个包含一首音乐的音调与节拍的表。其中,音调就是 0x01(低音、do)、0x12(中音、re)、0x23(高音、mi)之类的数;节拍就是 0x02(半拍) ,0x04(一拍)之类的数。然后,根据音调读取计数初值,再将计数初值赋给定时器 T0 - 开启定时器 T0 - 读取节拍并延时 - 关闭定时器 T0 。这样就发出了一个音,然后再读下一个音的初值与节拍,重复上一个操作即可。

5、 (具体实现方法见附录总程序)3.数码管显示音调: 按键:读出按键坐标(x,y) ,用 if 语句来判断(x,y)该给数码管赋什么值,然后从uchar code num 表中读取这个值赋给数码管(例如 P0)。 播放歌曲时:读入音调,根据音调的值来判断numi这个表中的 i,再把numi赋给 P0 口。4.led 灯的节拍指示:采用定时器 1 来控制,作为节拍指示。按键时:根据按下的时长来控制 led 的点亮个数,并且是按一定的时间间隔逐个点亮;释放按键时,led 灯按一定的时间间隔逐个熄灭,从而达到一种比较简单的节拍指示效果。播放音乐时:根据音符的节拍,控制点亮到哪一个灯,在点亮那个灯之前,

6、前面的灯逐个等时距点亮。音符结束后,led 灯全部一起熄灭。这样,达到了一个精确显示节拍的效果。【程序框图程序框图】:开始扫描键盘读取歌曲是否播放键按下有矩阵键按下否识别按键 数码管显示音调算出定时器初值开启定时器,并 赋初值,蜂鸣器 发声按键是否释放关闭定时器 P0 口置 0是否否算出音符的 音调、节拍根据音调给 T0 赋初值 开启 T0 T1按节拍延迟关闭 T0 T1 数 码管与 led是否结束符否读下一个音符数码管显示音调 Led 指示节拍是是否停止播放是【复位与震荡电路复位与震荡电路】:原件的参数如图所示。C1,C2 可采用 30pF 无极性陶瓷电容;C3 可采用 10F 记性电解质电

7、容。值得注意的是,晶振不能随便摸!尤其在通电工作的时候,触摸容易损坏。自从摸过一次后,震荡频率变得不稳定,蜂鸣器声音时好时坏。【4x4【4x4 矩阵键盘矩阵键盘】:键盘扫描的基本思路是:先得出触发按键的“行” ,即横坐标 x,再得出他的“列” ,即纵坐标 y。以下是获取横坐标以下是获取横坐标 x x 的代码:的代码:uchar key_x() /*P1 口高位接纵坐标(P1.7 - P1.4) 低位接横坐标(P1.3 - P1.0)*/uchar i;P1 = 0x0f; /*有按键按下后 对应按键的横坐标电位被拉低( 注意低电位引脚不能 被高电位引脚抬高,只能是低电位拉低高电位)*/ if(

8、P1_0 = 0) delayms(5); /延时 5ms 去抖动 if(P1_0 = 0) i = 1; else if(P1_1 = 0) delayms(5); if(P1_1 = 0) i = 2; else if(P1_2 = 0) delayms(5); if(P1_2 = 0) i = 3; else if(P1_3 = 0) delayms(5); if(P1_3 = 0) i = 4; else i = 0; return (i); /0 表示按键未按下获取 y 的方法与获取 x 的方法类似,具体可以参考附件总程序。得到触发按键的坐标(x,y)之后,可以通过 x,y 的值来确

9、定按键的功能。例如 x=1,y=1 时(S1 按下) ,可以让数码管显示 1:if(x = 1 或者更方便一点:if(x = 1)P0 = led_tabley;就能显示第一行的所有的数了。【数码管与数码管与 LEDLED 灯灯】:数码管:数码管:在本课题中,数码管要显示 A - G , 1 - 7, 1. - 7. ,所以段码比较另类。num0的值是没用到的,起占位作用。uchar code num=0x00,/共阴极数码管段选码0x77,0x7c,0x39,0x5e,0x79,0x71,0x3d, /a - g0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, /1 -

10、 70x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87 /1. - 7.;编写程序时,要根据实际情况来编写:编写程序时,要根据实际情况来编写:比如 16 个按键不能够把低中高音都全部表示完全,只能选取合适的部分。我让第一行的按键 触发低音 4 - 7,第二行触发中音 1 - 4,第三行触发中音 5 - 7 和高音 1,第四行触发高音 2 - 5。这样设置能弹奏大部分曲目。以下是控制数码管的代码片段: if(x = 1) P0 = num3 + y ; /低音 4 - 7 else if(x = 2) P0 = num7 + y; /中音 1 - 4 else if(x = 3

11、) P0 = num11 + y; /中音 5 - 7 和 高音 1 else if(x = 4) P0 = num15 + y; /高音 2 - 5LEDLED 灯:灯:因为 LED 灯要按一定的时间逐个点亮或者逐个熄灭,所以我用定时器 1 来控制它。定时器 1 每溢出一次并满足一定条件时 flash 变量就+1 或者-1,然后从led_table这个表中读出相应的数赋给 P2 口。表:表:uchar code led_table=0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00;/*发光二极管闪烁表*/代码:代码:if(x != 0 P2 = led

12、_tableflash;播放音乐播放音乐时又有所不同:播放音乐时,led 灯要精确地显示当前音符的节拍,所以 if 语句里加了一条限制语句:flash 0) -flash;P2 = led_tableflash;这样做,就能看得出音符的节拍了。只是,由于 led 灯的个数有限,所以大于二分音符(2 拍)的节拍就无法看到了。因为 8 个灯全亮才表示二分音符。如果当初采用 16 个灯的话,就没有这个窘境了。【蜂鸣器蜂鸣器】:蜂鸣器采用一个s8550 NPN 三极管驱动,一个可变电阻改变音量。三极管的选用要注意放大倍数,放大倍数太小会导致蜂鸣器声音很小。最初采用 8050 就造成了这个问题。另外,采

13、用 P3.0 口连接接蜂鸣器是一个错误。因为 P3.0、P3.1 是烧写程序用到的接口。倘若连接了其他器件,每次调试都要拔下烧写线,很不方便。【音乐相关知识音乐相关知识】:【表 6.5.1】音符频率对照表音符频率(HZ)简谱码(T 值)音符频率(HZ)简谱码(T 值)低 1 DO26263628 0xf88c # 4 FA#74064860#1 DO#27763731中 5 SO78464898 0xfd82低 2 RE29463835 0xf95b # 5 SO#83164934#2 RE#31163928中 6 LA88064968 0xfdc8低 3 M33064021 0xfa15 #

14、 693264994低 4 FA34964103 0xfa67中 7 SI98865030 0xfe06# 4 FA#37064185高 1 DO104665058 0xfe22低 5 SO39264260 0xfb04 # 1 DO#110965085# 5 SO#41564331高 2 RE117565110 0xfe56低 6 LA44064400 0xfb90 # 2 RE#124565134# 646664463高 3 M131865157 0xfe85低 7 SI49464524 0xfc0c高 4 FA139765178 0xfe9a中 1 DO52364580 0xfc44 # 4 FA#148065198# 1 DO#55464633高 5 SO156865217 0xfec1中 2 RE58764684 0xfcac # 5 SO#1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 论文指导/设计

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号