单片机课程设计简易电子琴.docx

上传人:b****5 文档编号:6060487 上传时间:2023-01-03 格式:DOCX 页数:17 大小:219.68KB
下载 相关 举报
单片机课程设计简易电子琴.docx_第1页
第1页 / 共17页
单片机课程设计简易电子琴.docx_第2页
第2页 / 共17页
单片机课程设计简易电子琴.docx_第3页
第3页 / 共17页
单片机课程设计简易电子琴.docx_第4页
第4页 / 共17页
单片机课程设计简易电子琴.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机课程设计简易电子琴.docx

《单片机课程设计简易电子琴.docx》由会员分享,可在线阅读,更多相关《单片机课程设计简易电子琴.docx(17页珍藏版)》请在冰豆网上搜索。

单片机课程设计简易电子琴.docx

单片机课程设计简易电子琴

 

课程设计

 

课程设计名称:

单片机课程设计

专业年级:

电子信息科学与技术

学生姓名:

冯利

学号:

200938930638

指导教师:

王彩虹

课程设计时间:

2011.6.20—2011.6.26

 

09级国电专专业课程设计任务书

学生姓名

冯利

专业班级

国电专0906

学号

200938930638

题目

51单片机的简易电子琴设计

课题性质

工程设计

题目来源

自拟

指导教师

王彩虹

同组姓名

范继超

主要内容

设计一个51单片机系统,实现简易电子琴操作的电路。

要求:

1设计51单片机最小系统;

2.设置至少10个按键,能发出doremifasollaSIDO;

能播放示范曲;

3.能够调节低音、高音和中音。

任务要求

1.根据功能要求选择设计方案,并进行论证。

2.画出电路的总体方框图和电路原理图。

3.说明系统工作原理,对系统进行调试。

4.写出课程设计报告。

参考文献

1.单片机技术有关教材

2.电路设计手册

3.其他资料

审查意见

指导教师签字:

王彩虹

教研室主任签字:

焦素敏年月日

说明:

本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页

1.任务及要求

设计一个51单片机系统,实现简易电子琴操作的电路。

要求:

1.设计51单片机最小系统;

2.设置至少10个按键,能发出doremifasollasido;

能播放示范曲;

3.能够调节低音、高音和中音。

2.设计方案

1.定时/计数器的设计和状态字定义:

若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。

利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。

就可在P1.0引脚上得到此频率的脉冲。

利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。

计数脉冲值与频率的关系式是:

N=fi÷2÷fr,式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。

其计数初值T的求法如下:

T=65536-N=65536-fi÷2÷fr

例如:

设K=65536,fi=1MHz,求中音DO(261Hz)。

T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr,中音DO的T=65536-500000/523=64580。

单片机12MHZ晶振,中音符与计数T0相关的计数值如表所示:

音符

频率(HZ)

简谱码(T值)

音符

频率(HZ)

简谱码(T值)

低1 DO

262

63628

#4FA#

740

64860

#1 DO#

277

63731

中5SO

784

64898

低2 RE

294

63835

#5SO#

831

64934

#2RE#

311

63928

中6LA

880

64968

低3M

330

64021

#6

932

64994

低4FA

349

64103

中7SI

988

65030

#4FA#

370

64185

高1DO

1046

65058

低5SO

392

64260

#1DO#

1109

65085

#5SO#

415

64331

高2RE

1175

65110

低6LA

440

64400

#2RE#

1245

65134

#6

466

64463

高3M

1318

65157

低7SI

494

64524

高4FA

1397

65178

中1DO

523

64580

#4FA#

1480

65198

#1DO#

554

64633

高5SO

1568

65217

中2RE

587

64684

#5SO#

1661

65235

#2RE#

622

64732

高6LA

1760

65252

中3M

659

64777

#6

1865

65268

中4FA

698

64820

高7SI

1967

65283

采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:

低音0-19之间,中音在20-39之间,高音在40-59之间

用单片机播放音乐,或者弹奏电子琴,实际上是按照特定的频率,输出一连串的方波。

为了输出合适的方波,首先应该知道音符与频率的关系。

2.音名

从常见的电子琴的键盘谈起。

主要分成低音、中音和高音三个区域,每个区域都有12个琴键。

其中的白键,简谱音符标为1、2、3、4、5、6、7,大家一般都读成哆、来、咪、发、嗦、拉、西。

按键

1

3

4

5

6

7

8

音符

1

3

4

5

6

7

I

频率值

524

660

698

784

880

988

1048

3.音调数据表

单片机发出不同频率的方波,人听起来,就是不同的音调。

上表中的频率数值,有些过多,去掉不常用的黑键频率,只是把白键对应的数据存放在单片机中,即可满足绝大部分的应用需求。

定义音调数据表的程序如下:

DW63628,63835,64021,64103,64260,64400,64524;64580,低音区:

1234567

DW64580,64671,64777,64820,64898,64968,6503065058中音区:

1234567

DW65058,65110,65157,65178,65217,65252,6528365312高音区:

1234567

把这个数据表,放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那么,在扬声器中,即可听到上表中频率的声音。

音乐的音拍,一个节拍为单位(C调)

曲调值

DELAY

 

曲调值

DELAY

调4/4

125ms

 

调4/4

62ms

调3/4

187ms

 

调3/4

94ms

调2/4

250ms

 

调2/4

125ms

三.设计电路图

1.晶振部分

本次采用12MHZ晶振,机器周期为1us,连接两个30pF的电容,连接到AT89C51的XATL1,XATL2 上面,连接电路图如下:

2.音频输出  本次只是简单的使用一个蜂鸣器连接到AT89C51的p1.0口上

3.高。

中。

低及音乐播放键:

检测高中低是否按下,来跳转到音阶键上输出不同频率的音阶音,检测播放是否按下,跳转到示范曲目播放

4.AT89C51

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

1.主要特性:

·与MCS-51兼容

·4K字节可编程闪烁存储器

·寿命:

1000写/擦循环

·数据保留时间:

10年

·全静态工作:

0Hz-24Hz

·三级程序存储器锁定

·128*8位内部RAM

·32可编程I/O线

·两个16位定时器/计数器

·5个中断源

·可编程串行通道

·低功耗的闲置和掉电模式

·片内振荡器和时钟电路

5.音阶键部分

6.设计电路总体图样

 

4、设计流程图

1.音阶键识别

 

5、程序如下:

KEYBUFEQU30H

STH0EQU31H

STL0EQU32H

DELYEQU33H

NUMEQU34H

ORG0000H

AJMPMAIN;跳转到主函数

ORG000BH

LJMPINT_T0;音乐输出口

ORG0040H

MAIN:

MOVTMOD,#01H;写出计时器控制字,T0方式计时

SETBEA;开中断总开关

SETBET0;允许T0中断

MOVNUM,#01H;;num置1

MOVR1,#00H

TEST:

;低音检测

ANLTH0,#00H;高位清零

ANLTL0,#00H;低位清零

MOVA,P2;P2进入

CJNEA,#0FEH,TEST1;检测P2.0口低音键是否按下

MOVDPTR,#TABLE1;低音键按下,进入低音表地址

AJMPWAIT;跳转到音阶检测

TEST1:

;中音检测

CJNEA,#0FDH,TEST2;检测P2.0中音键是否按下

MOVDPTR,#TABLE2;中音键按下,进入中音表地址

AJMPWAIT

TEST2:

;高音检测

CJNEA,#0FBH,TEST3;检测P2.0口高音键是否按下

MOVDPTR,#TABLE3;高音键按下,进入高音表地址

AJMPWAIT

TEST3:

;音乐播放检测

CJNEA,#0F7H,TEST4;检测音乐播放键是否按下若有按下则转至EXIT

LCALLDELAY10MS;软件延时消抖

MOVA,P2

CJNEA,#0F7H,TEST4;检测播放键是否再次按下

MOVA,NUM

CJNEA,#01H,EXIT;检测高低中是否再次按下

MOVNUM,#00H

MOVDPTR,#TABLE4;进入音乐播放表

AJMPWAIT1;跳转至音乐播放入口

EXIT:

CLRTR0;计数器停止,音乐播放结束

MOVR1,#00H;清零

MOVNUM,#01H

TEST4:

MOVA,NUM

CJNEA,#01H,WAIT2

LJMPTEST;跳转至TEST重新检测

WAIT2:

LJMPWAIT1;跳转至音乐播放入口

 

WAIT:

CLRTR0

MOVNUM,#01H

SCAN1:

MOVP3,#0F0H;音阶按键检测程序入口

CLRTR0

MOVA,P3;

ANLA,#0F0H

CJNEA,#0F0H,TEE1

AJMPTEST;跳转至TEST重新检测

TEE1:

LCALLDELAY10MS;软件延时消抖

CJNEA,#0F0H,TEE2

AJMPTEST

TEE2:

MOVA,#0FEH

SCAN2:

MOVP3,A

MOVA,P3

MOVB,A

ANLA,#0F0H

CJNEA,#0F0H,CARRY

MOVA,B

RLA

CJNEA,#0BFH,SCAN2

LJMPSCAN1

CARRY:

ANLB,#0FH;键值处理

ORLA,B

CJNEA,#0EEH,KEY1;检测音符键1是否按下

MOVKEYBUF,#00H;赋予键值

LJMPWAI;调至按键处理程序

KEY1:

CJNEA,#0EDH,KEY2;检测音符键2是否按下

MOVKEYBUF,#02H;赋予键值

LJMPWAI;调至按键处理程序

KEY2:

CJNEA,#0EBH,KEY3;检测音符键3是否按下

MOVKEYBUF,#04H;赋予键值

LJMPWAI;调至按键处理程序

KEY3:

CJNEA,#0E7H,KEY4;检测音符键4是否按下

MOVKEYBUF,#06H;赋予键值

LJMPWAI;调至按键处理程序

KEY4:

CJNEA,#0DEH,KEY5;检测音符键5是否按下

MOVKEYBUF,#08H;赋予键值

LJMPWAI;调至按键处理程序

KEY5:

CJNEA,#0DDH,KEY6;检测音符键5是否按下

MOVKEYBUF,#0AH;赋予键值

LJMPWAI;调至按键处理程序

KEY6:

CJNEA,#0DBH,KEY7;检测音符键6是否按下

MOVKEYBUF,#0CH;赋予键值

LJMPWAI;调至按键处理程序

KEY7:

CJNEA,#0D7H,SCAN1

MOVKEYBUF,#0EH;赋予键值

LJMPWAI;调至按键处理程序

WAI:

MOVA,KEYBUF;按键处理程序入口

MOVCA,@A+DPTR

MOVSTH0,A

INCKEYBUF

MOVA,KEYBUF

MOVCA,@A+DPTR

MOVSTL0,A

MOVTH0,STH0

MOVTL0,STL0

SETBTR0

LCALLDELAY100MS

LJMPSCAN1

 

WAIT1:

CJNER1,#00H,LOOP;播放音乐程序入口

LOOP:

MOVA,R1

MOVCA,@A+DPTR

MOVSTH0,A

INCR1

MOVA,R1

MOVCA,@A+DPTR

CJNEA,#0FEH,NEXT1

MOVR1,#00H

LJMPLOOP

NEXT1:

MOVSTL0,A

INCR1

MOVA,R1

MOVCA,@A+DPTR

MOVDELY,A

MOVTH0,STH0

MOVTL0,STL0

SETBTR0

NEXT2:

LJMPDELAY187MS;节拍延时控制

NEXT3:

DJNZDELY,NEXT2

INCR1

LJMPTEST

NOKEY:

LJMPTEST;重新检测

DELAY10MS:

MOVR6,#10;10ms延时

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET;子程序返回

DELAY100MS:

MOVR5,#06EH;100ms延时

DL0:

MOVR4,#0CFH

DJNZR4,$

DJNZR5,DL0

RET;子程序返回

DELAY187MS:

MOVR3,#187;187ms延时,用于节拍控制

DL1:

MOVR2,#248

DJNZR2,$

DJNZR3,DL1

LJMPNEXT3

INT_T0:

MOVTH0,STH0;高8为输入

MOVTL0,STL0;低8位输入

CPLP1.0;音乐输出口启用

RETI;中断返回

TABLE1:

DB0f8h,094h,0f9h,05ch,0fah,01Ah,0FAH,06AH;低音调表值

DB0FBH,00H,0FBH,08CH,0FCH,0EH,0FCH,044H;

TABLE2:

DB0FCH,04AH,0FCH,0AEH,0FDH,008H,0FDH,030H;中音调表值

DB0FDH,080H,0FDH,0C6H,0FEH,02H,0FEH,022H;

TABLE3:

DB0FEH,02AH,0FEH,05CH,0FEH,084H,0FEH,098H;高音调表值

DB0FEH,0C0H,0FEH,0E8H,0FFH,006H,0FFH,029H;

•SONG1:

;化蝶

•.DB-3,04H,-5,03H,-6,01H,1,03H,2,01H,-6,01H,1,01H,-5,02H

•.DB5,03H,+1,01H,6,01H,5,01H,3,01H,5,01H,2,08H

•.DB2,02H,2,01H,3,01H,-7,02H,-6,02H,-5,03H,-6,01H,1,02H,2,02H

•.DB-3,02H,1,02H,-6,01H,-5,01H,-6,01H,1,01H,-5,08H

•.DB3,03H,5,01H,-7,03H,2,01H,-6,01H,1,01H,5,05H

•.DB-3,02H,-5,01H,-3,01H,-5,01H,-6,01H,-7,01H,2,01H,-6,06H,-5,01H,-6,01H

•.DB1,03H,2,01H,5,02H,3,02H,2,02H,3,01H,2,01H,1,02H,-6,01H,-5,01H

•.DB-3,04H,1,04H,-6,01H,1,01H,-6,01H,-5,01H,-3,01H,-5,01H,-6,01H,1,01H

•.DB-5,08H,FFH,08H

 

6、心得体会

本次单片机课程设计,本身题目并没有多大难度,但对初学者得我来说还是有些小困难,但经过理论知识的进一步学习,查阅了大量资料之后,了解了设计思路,在参考了网上的一些程序及类似作品之后,仍将它安老师要求做了出来,中间花费了很大功夫,对程序及电路图做了多次修改,终于,一份还算令自己满意的完成品诞生了!

本次简易单片机设计,要求是能发出八个音阶声音,并能控制低,中,高三音变换,还能播放示范曲目。

我利用AT89C51单片机

 

这次我主要的设计是一个游戏型的电子琴,采用16个键分别代表16个音,通过对按键的随意按击从而产生不同的音乐,主要是通过每个按键所产生的频率不同来使得发出的各个音不同,从而产一音乐,虽然显得单一,但是至少很简单。

这次主要参考了网上的一个实例,再加上了一些自己的补充。

我主要针对了这个设计的原理和程序的编写,从而来更好的会习设计的方法和创新。

最后,通过这次的自主完成单片机的应用系统设计,虽说不完全是自己完成,但是至少有一点,让我们学会了如何去完成一个设计报告,让我更进一步了解了单片机,也让我感受到做出一个设计的开心,喜悦与担心。

相信这对以后的毕业设计也会有很大的帮助。

参与本次设计,我也有不少收获:

第一、系统而比较全面地检查了我所学的专业知识,补充了我未学的专业知识,对一个产品的开发的步骤有一定的认识。

“查漏补缺”的同时进一步巩固了专业知识,锻炼了自己。

第二、训练了我的动手能力。

电路板得读取,程序得编制等实际操作让我真正地理解了“学以致用”的含义。

第三、在学习怎样开发SPCE061A板的同时也使我们对相应的软件环境有了更进一步的认识和了解。

比如:

Protel99SE电路板的设计环境,IDE单片机的开发环境等。

第四、使我真正意识到团队合作的重要性。

一个产品的诞生,离不开设计参与者的文化素质,更离不开他们的团队精神。

所有的参与者都是优秀的,但谁都不是最优秀的。

第五、发掘自我潜能,重视能力,注重培养自己的兴趣与爱好。

学习分析和解决问题,不要因为困难而害怕困难,只有坚持才能够取得最后的成功。

 

.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1