1、沈阳理工大学专用纸1成 绩 评 定 表学生姓名 班级学号专 业 电子信息科学与技术课程设计题目 基于单片机的 16 键电子琴设计评语组长签字:成绩日期 年 月 日沈阳理工大学专用纸2课程设计任务书学 院 学院 专 业学生姓名 班级学号课程设计题目 基于单片机的 16 电子琴设计实践教学要求与任务:使用 4*4 矩阵式键盘设计出 16 个音符,通过控制单片机定时器的定时时间产生不同频率的音频脉冲,经放大后驱动喇叭发出相应 16 种不同音节的声音。用软件延时来控制发音时间的长短,控制节拍。工作计划与进度安排:2013 年 3 月 4-5 日 布置任务画电路原理图、焊接硬件2013 年 3 月 6-
2、7 日 编写程序并调试2013 年 3 月 8-9 日 软硬件联调2013 年 3 月 10 日 撰写报告、验收答辩指导教师:年 月 日专业负责人:年 月 日学院教学副院长:年 月 日沈阳理工大学专用纸3目录1.概述 32.课程设与任务与要求 42.1 设计课题 42.2 设计目的 43.设计原理 44.软件流程 54.1 主要芯片介绍 AT89S51 简介 .54.2 实现过程 64.3 音乐产生的原理 75.Proteus 模拟仿真 .96.单片机源程序 107.硬件实物图 128.实验结果 139.结束语 1310.心得体会 1411.参考文献 14沈阳理工大学专用纸41.概述随着社会的
3、发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。我们都会抽空欣赏世界名曲,作为对精神的洗礼。本课程设计一个基于单片机的简易电子琴。电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,这已经溶入现代人们的生活中,成为不可替代的一部分。本系统是 51 系列单片机 AT89C51 为主控制器,附有矩阵键盘、扬声器组成。系统完成播放相应音符等基本功能。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。2.课程设与任务与要求2.1 设计
4、课题基于单片机的 16 电子琴设计2.2 设计目的培养和锻炼在校学生综合应用所学理论知识解决实际问题的能力。为了巩固和运用所学课程,理论联系实际、提高分析、解决实际问题及团队的合作能力,旨在培养大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题的一种较好方法。电子琴能够弹奏出美妙的音符,对我们充满了吸引的同时也让我们充满了好奇,通过此次的课程设计让我们亲手来揭开电子琴神秘的面纱。让我们知道我们也是有能力来制作出一个简易电子琴的。沈阳理工大学专用纸53.设计原理单片机 P3 为输入端口,接有*矩阵式键盘,键盘上设计有 16 个音符。键盘的条行线的一端与单片机 P3 端口
5、的 P3.0、 P3.1、P3.2、P3.3 口相接,另一端通过上拉电阻接到+5V 上;条列线的一端与 P3 端口的P3.4、P3.5、P3.6、P3.7 口相接。单片机的 P2.4 端口为输出端,通过限流电阻R 与三极管基极相连,三极管的集电极接有喇叭。然后利用三级管放大的原理使声音放大,通过 16 个按钮组成 16 种不同的音节。本文的主要内容是用AT89S51 单片机为核心控元件,设计一个电子琴,以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块。在主控模块上高有 16 个按键和场声器。4.软件流程4.1 主要芯片介绍 AT89S51 简介AT89S51 是一个低功耗,高性能
6、CMOS 8 位单片机,片内含 4k Bytes ISP(In-system programmable)的可反复擦写 1000 次的 Flash 只读程序存储器,器件采用 ATMEL 公司的高密度、非易失性存储技术制造,兼容标准 MCS-51 指令系统及 80C51 引脚结构,芯片内集成了通用 8 位中央处理器和 ISP Flash 存储单元,功能强大的微型计算机的 AT89S51 可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S51 具有如下特点:40 个引脚(引脚图如图 1-2 所示),4k Bytes Flash 片内程序存储器,128 bytes 的随机存取数据存储器(RA
7、M),32 个外部双向输入/输出(I/O)口,5 个中断优先级 2 层中断嵌套中断,2 个 16 位可编程定时计数器,2 个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S51 设计和配置了振荡频率可为 0Hz 并可通过软件设置省电模沈阳理工大学专用纸6式。空闲模式下,CPU 暂停工作,而 RAM 定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存 RAM 的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有 PDIP、TQFP 和 PLCC 等三种封装形式,以适应不同产品的需求。4.2 实现过程组成键盘的按键有机械式、电容式、导电橡胶式、
8、薄膜式多种,但不管什么形式,其作用都是一个使电路接通与断开的开关。目前微机系统中使用的键盘按其功能不同,通常可分为编码键盘和非编码键盘两种基本类型。编码键盘:键盘本身带有实现接口主要功能所需的硬件电路。不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被按键功能对应的键码(如 ASCII 码)送往 CPU。所以,编码键盘接口简单、使用方便。但由于硬件电路较复杂,因而价格较贵。非编码键盘:键盘只简单地提供按键开关的行列矩阵。有关按键的识别、沈阳理工大学专用纸7键码的确定与输入、去抖动等功能均由软件完成。目前微机系统中,一般为了降低成本大多数采用非编码键盘。键盘接口必须具有去抖动、
9、防串键、按键识别和键码产生 4 个基本功能。(1)去抖动:每个按键在按下或松开时,都会产生短时间的抖动。抖动的持续时间与键的质量相关,一般为 520mm。所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。去抖问题可通过软件延时或硬件电路解决。(2)防串键:防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。常用的方法有双键锁定和 N 键轮回两种方法。双键锁定,是当有两个或两个以上的按键按下时,只把最后释放的键当作有效键并产生相应的键码。N 键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。(3
10、)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。常用的方法有行扫描法和线反转法两种。行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。线反转法的基本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。(4)键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。4.3 音乐产生的原理一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构
11、成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器 T0 来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。若要产生音频脉冲,只要算出某一音频的周期(1/频率) ,再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将 P1.0 反相,然后重复计时再反相。就可在 P1.0 引脚上得到此频率的脉冲。沈阳理工大学专用纸8利用 AT89C51 的内部定时器使其工作计数器模式(MODE1)下,改变计数值 TH0 及 TL0 以产生不同频率的方法产生不同音阶,例如,频率为 523Hz,其周期 T1/52319
12、12s,因此只要令计数器计时 956s/1s956,每计数956 次时将 I/O 反相,就可得到中音 DO(523Hz) 。计数脉冲值与频率的关系式(如式 2-1 所示)是:Nfi2fr 2-1式中,N 是计数值;fi 是机器频率(晶体振荡器为 12MHz 时,其频率为 1MHz) ;fr 是想要产生的频率。其计数初值 T 的求法如下:T65536N65536fi2fr例如:设 K65536,fi1MHz,求低音 DO(261Hz) 、中音 DO(523Hz) 、高音 DO(1046Hz)的计数值。T65536N65536fi2fr6553610000002fr65536500000/fr低音
13、 DO 的 T65536500000/26263627中音 DO 的 T65536500000/52364580高音 DO 的 T65536500000/104665059单片机 12MHZ 晶振,高中低音符与计数 T0 相关的计数值如表 2-2 所示表 4-1 音符频率表音符 频率(HZ) 简谱码(T 值) 音符 频率(HZ) 简谱码(T 值)低 1 DO 262 63628 # 4 FA# 740 64860#1 DO# 277 63731 中 5 SO 784 64898低 2 RE 294 63835 # 5 SO# 831 64934#2 RE# 311 63928 中 6 LA 8
14、80 64968低 3 M 330 64021 # 6 932 64994低 4 FA 349 64103 中 7 SI 988 65030# 4 FA# 370 64185 高 1 DO 1046 65058低 5 SO 392 64260 # 1 DO# 1109 65085沈阳理工大学专用纸9# 5 SO# 415 64331 高 2 RE 1175 65110低 6 LA 440 64400 # 2 RE# 1245 65134# 6 466 64463 高 3 M 1318 65157低 7 SI 494 64524 高 4 FA 1397 65178中 1 DO 523 64580
15、 # 4 FA# 1480 65198# 1 DO# 554 64633 高 5 SO 1568 65217中 2 RE 587 64684 # 5 SO# 1661 65235# 2 RE# 622 64732 高 6 LA 1760 65252中 3 M 659 64777 # 6 1865 65268中 4 FA 698 64820 高 7 SI 1967 65283我们要为这个音符建立一个表格,单片机通过查表的方式来获得相应的数据低音 019 之间,中音在 2039 之间,高音在 4059 之间TABLE: DW 0, 63628, 63835, 64021, 64103, 64260
16、, 64400, 64524, 0, 0DW 0, 63731, 63928, 0, 64185, 64331, 64463, 0, 0, 0DW 0, 64580, 64684, 64777, 64820, 64898, 64968, 65030, 0, 0DW 0, 64633, 64732, 0, 64860, 64934, 64994, 0, 0, 0DW 0, 65058, 65110,65157, 65178, 65217, 65252, 65283, 0, 0DW 0, 65085, 65134, 0, 65198, 65235, 65268, 0, 0, 0DW 0 音乐的音拍
17、,一个节拍为单位(C 调) (如表 2-3 所示)表 4-2 曲调值表曲调值 DELAY 曲调值 DELAY调 4/4 125ms 调 4/4 62ms沈阳理工大学专用纸10调 3/4 187ms 调 3/4 94ms调 2/4 250ms 调 2/4 125ms对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。琴键处理程序,根据检测到得按键值,查询音律表,给计时器赋值,发出相应频率的声音。对音调的控制:根据不同的按键,对定时器 T1 送入不同的初值,调节 T1 的溢出时间,这样就可以输出不同音调频率的方波。不同音调下各个音阶的定时器。在这个程序中用到了两个定时/计数器来完成的。其
18、中 T0 用来产生音符频率,T1 用来产生音拍。5.Proteus 模拟仿真沈阳理工大学专用纸11图 5.16.单片机源程序ORG 00H ;主程序起始地址JMP START ;跳转至主程序ORG 0BH ;T0 起始中断地址JMP TIM0 ;跳转至 T0 中断子程序START:MOV TMOD,#00000001B ;主程序 设 T0 在 MODE1MOV IE,#10000010B ;开通中断SETB TR0 ;启动定时器 T0L1:ACALL KEY ;调用 KEY,判断是否有键按下CLR EA ;中断屏蔽JB F0,L1 ;没按下则 F0=1,否则 F0=0MOV A,22H ;将取
19、码指址暂存地址载入 ARL A ;左移一位MOV DPTR,#TABLE ;存表MOVC A,A+DPTR ;读表,取 T 的值MOV TH0,A ;取到的高位字节存入 21HMOV 21H,A ;取到的高位字节存入 21HMOV A,22H ;载入取码指针值RL A ;向左移一位INC A ;加 1MOVC A,A+DPTR ;到表 TABLE 取低位字节计数值MOV TL0,A ;取到的低位字节存入 T0MOV 20H,A ;取到的低位字节存入 20HL2:ACALL KEY ;调用 KEY,判断是否有键按下SETB EA ;开通中断JB F0,L1 ;是否有键按下,没有则跳转至 L1JM
20、P L2 ;没有则跳转到 L2KEY:SETB F0 ;设 F0=1MOV R3,#0F7H ;扫描初值(P3.3=0)MOV R1,#00H ;取码指针初值L3:MOV A,R3 ;载入扫描指针沈阳理工大学专用纸12MOV P3,A ;输出到 P3,开始扫描MOV A,P3 ;读入 P3SETB C ;令 C=1MOV R5,#04H ;检测 P3-7P3.4L4:RLC A ;左移一位JNC KEYIN ;检测行 C=0,代表有键按下INC R1 ;无键按下则取码指针加 1DJNZ R5,L4 ;四行检测完毕?MOV A,R3 ;载入扫描指针SETB C ;令 C=1RRC A ;扫描下一
21、行MOV R3,A ;存回 R3 扫描针寄存器JC L3 ;C=0 ,表示行扫描完毕RET ;子程序返回KEYIN:MOV 22H,R1 ;将 A 的值暂存入地址 22HCLR F0 ;令 F0=0RET ;子程序返回TIM0:PUSH ACC ;将 A 的值暂存于堆栈PUSH PSW ;将 PSW 的值暂存于堆栈MOV TL0,20H ;重设计数值MOV TH0,21H CPL P2.4 ;将 P2.4 位反相POP PSW ;从堆栈取回 PSW 的值 POP ACC ;从堆栈取回 A 的值RETI ;返回到主程序TABLE:DW 64021,64103,64260,64400 ;编码表DW
22、 64524,64580,64684,64777DW 64820,64898,64968,65030DW 65058,65110,65157,65178END ;程序结束沈阳理工大学专用纸137.硬件实物图图 7.18.实验结果将写入程序的单片机插入实验板插座内,并检查实验板上喇叭接口是否与程序中声音输出端口一致,当检查无误后接通电源,按图 4 所示进行音乐弹奏。沈阳理工大学专用纸149.结束语 电子琴程序从功能设计上可分为两大部分:(1) 利用单片机内定时器 T0 产生 16 个音符,16 个音符代码在表中的排列顺序与 16 个按键上所标出的音符是对应的。(2) 通过对键盘不断进行扫描,当确
23、定有按键操作后,将所按下的键转换成相对应的音符,并通过输出端口使喇叭发出相对应的声音,声音的长短由按键的时间决定。10.心得体会这次实验总共经历了两周的时间,从功能需求分析到功能分析,从程序的设计到程序的调试,下载,从购买所需硬件到焊接实物硬件,检查问题并解决直到最终合电子琴发出相对应的 16 种音阶,完成了这次具有实际使用价值的实验。在设计中我运用自己平时学到的一些知识,以及自己在课下所查找的进行设计,刚开始遇到很多困难,包括结合用汇编语语环境语言的不熟悉,后来和同组的人一起研究,最终对一些课程设计中的故障找到了解决方案。我感觉自己在设计方面提高很大,特别是在设计程序时,逻辑思维能力有所加强
24、,同时对以前所学的知识有了更深刻的认识,并进一步的得到了巩固和提高,充分的做到了理论联系实际,也使我认识到理论与实际的差别,通过该课程设计,不但对单片机有了较为全面的认识,而且相关的知识也有了足够的掌握,我感觉最重要的还是设计思维的形成。更发现自己在学习中的缺陷。对以后的学习也有很大的帮助。两周的课程设计中,除了设计方面,我感觉实物焊接方面也是一个很大的挑战,当所有元件焊接好后电子琴并没有响,我用万用表逐个点得去检查直到解决所有问题。我所收获的不仅是学习知识方面,更多的是生活方面。我了解到,在我们的生活中,应该学会与别人共享,分享知识,分享问题,这样更有助于我们的交流,有利于我们共同进步,有利
25、于我们对学习养成良好的兴趣。最后,我要感谢那些带我们课程设计的老师们,感谢你们对我们的耐心和鼓励,让我们有信心继续下去,成功走到最后,完成了这次实验。11.参考文献1 陈火旺,刘春林,谭庆平,等程序设计语言编译原理沈阳理工大学专用纸15M国防工业出版社20022 陈意云,张昱编译原理M北京:高等教育出版社3 吕映芝, 张素芹, 蒋维杜. 编译原理M. 北京: 清华大学出版社,1998.4 Louden K C. 编译原理及实践M. 冯博琴, 冯 岚, 译. 北京: 机械工业出版社, 2000.5 Aho A V, Sethi R, Ullman J D. 编译原理M. 李建中, 姜守旭, 译.北京: 机械工业出版社, 2003.6 张幸儿. 计算机编译原理:编译程序构造实践M. 北京: 科学出版社, 2005.