收藏 分享(赏)

电子琴的实验报告.doc

上传人:精品资料 文档编号:8211780 上传时间:2019-06-14 格式:DOC 页数:12 大小:338KB
下载 相关 举报
电子琴的实验报告.doc_第1页
第1页 / 共12页
电子琴的实验报告.doc_第2页
第2页 / 共12页
电子琴的实验报告.doc_第3页
第3页 / 共12页
电子琴的实验报告.doc_第4页
第4页 / 共12页
电子琴的实验报告.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、单片机课程设计设计题目 电子琴指导老师:苏参与实验者: moxiaoxiao专业:统本电信 0801地点:3#楼北楼 605电子琴一.设计目的:(1).培养综合运用知识的能力(2).朋友查阅资料,使用工程设计标准及编写设计文档的能力.(3).掌握单片机应用系统的设计方法.(4).提高计算机绘图能力二.设计任务:利用 DP51PROC 实验系统上的定时器/计数器,按键和蜂鸣器单元。用单片机 I/O 口线控制蜂鸣器发出不同的音调,程序检测按键状态,7 个按键中某一键按下时,蜂鸣器对应标称音阶.三.设计与调试环境KEIL uVision2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司

2、的 MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM ,汇编和 C 语言的程序设计,它的界面和常用的微软 VC+的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。1:按下面的步骤建立一个项目:图 14 选取芯片图 15 新建程序文件(1)点击 图 15 中的 3 保存新建的程序,也可以用菜单 FileSave 或快捷键 Ctrl+S 进行保存。因是新文件所以保存时会弹出类似 图 13 的文件操作窗口,我们把第一个程序命名为 test1.c,保存在项目所在的目录中,这时程序单词有了不同的颜色,说明 KEIL 的 C 语法检查生效了。如 图 16 鼠

3、标在屏幕左边的 Source Group1 文件夹图标上右击弹出菜单,在这里可以做项目中增加减少文件等操作。我们选 “Add File to Group SourceGroup 1”弹出文件窗口,选择刚刚保存的文件,按 ADD 按钮,关闭文件窗,程序文件已加到项目中了。这时在 Source Group1 文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。图 16 把文件加入到项目文件组中编译程序(2)进入调试模式,软件窗口样式大致如 图 18 所示。图中 1 为运行,当程序处于停止状态时才有效,2 为停止,程序处于运行状态时才有效。3 是复位,模拟芯片的复位,程序回到最

4、开头处执行。按 4 我们可以打开 5 中的串行调试窗口,这个窗口我们可以看到从 51 芯片的串行口输入输出的字符,这项目也正是在这里看运行结果。2.输入输出引脚(1) P0 端口P0.0-P0.7 P0 是一个 8 位漏极开路型双向 I/O 端口,端口置 1(对端口写1)时作高阻抗输入端。作为输出口时能驱动 8 个 TTL。对内部 Flash 程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。在访问外部程序和外部数据存储器时,P0 口是分时转换的地址 (低 8 位)/数据总线,访问期间内部的上拉电阻起作用。(2) P1 端口P1.0P1.7 P1 是一个带有内部上拉电阻

5、的 8 位双向 I/0 端口。输出时可驱动 4 个 TTL。端口置 1 时,内部上拉电阻将端口拉到高电平,作输入用。对内部 Flash 程序存储器编程时,接收低 8 位地址信息。(3) P2 端口P2.0P2.7 P2 是一个带有内部上拉电阻的 8 位双向 I/0 端口。输出时可驱动 4 个 TTL。端口置 1 时,内部上拉电阻将端口拉到高电平,作输入用。对内部 Flash 程序存储器编程时,接收高 8 位地址和控制信息。在访问外部程序和 16 位外部数据存储器时,P2 口送出高 8 位地址。而在访问 8 位地址的外部数据存储器时其引脚上的内容在此期间不会改变。(4) P3 端口P3.0P3.

6、7 P2 是一个带有内部上拉电阻的 8 位双向 I/0 端口。输出时可驱动 4 个 TTL。端口置 1 时,内部上拉电阻将端口拉到高电平,作输入用。对内部 Flash 程序存储器编程时,接控制信息。除此之外 P3 端口还用于一些专门功能,具体请看表 22.。P13 端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。P3 引脚兼用功能P3.0 串行通讯输入(RXD)P3.1 串行通讯输出(TXD)P3.2 外部中断 0(P3.3 外部中断 1(INT1)P3.4 定时器 0P3.5 定时器 1P3.6 外部数据存储器写选通 WRP3.7 外部数据存储器写选通 RD生成 HE

7、X 文件和最小化系统3:如何用 KEIL uVision2 来编译生成用于烧写芯片的 HEX 文件。HEX 文件格式是 Intel 公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用 16 进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。打开第一课做的项目,打开它的所在目录,找到 test.Uv2的文件就可以打开先前的项目了。然后右击 图 31 中的 1 项目文件夹,弹出项目功能菜单,选 Options for TargetTarget1,弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在 Projec

8、t 菜单中也有一样的菜单可选。打开项目选项窗口,转到 Output 选项页 图32 所示,图中 1 是选择编译输出的路径,2 是设置编译输出生成的文件名,3 则是决定是否要创建 HEX 文件,选中它就可以输出 HEX 文件到指定的路径中。将它重新编译一次,很快在编译信息窗口中就显示 HEX 文件创建到指定的路径中了,如 图 33。这样就可用编程器所附带的软件去读取并烧到芯片了。(技巧:一、在 图 31 中的 1 里的项目文件树形目录中,先选中对象,再单击它就可对它进行重命名操作,双击文件图标便可打开文件。二、在 Project 下拉菜单的最下方有最近编辑过的项目路径保存,可以快速打开最近在编辑

9、的项目。 )图 31 项目功能菜单图 32 项目选项窗口四.工作原理:要求设计的电子琴共有七个按键对应着七个音阶,也就是按下不同的按键时,蜂鸣器会发出不同平率的声音。而这些声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线不断的输出“高”“低”电平,则在该口线上就能产生一定频率的方波,将该方波接上喇叭就能发出一定频率的声音,若再利用程序控制“高”“ 低”电平的持续时间,就能改变输出波形的频率,从而改变音调。我们用 MC51 单片机实现这一功能。不同音阶所对应的频率如下图所示:音名 1 2 3 4 5 6 7频率(Hz)523.3 587.3 659.3 698.3 784 88

10、0 987.8乐曲中,每一音符对应着确定的频率,表 1 给出 C 调时各音符频率。如果单片机某个口线输出“高”“低” 电平的频率和某个音符的频率一样,那么将此口线接上喇叭就可以发出此音符的声音。本系统就是根据此原理设计,对于 51 单片机来说要产生一定频率的方波大致是先将某口线输出高电平然后延时一段时间再输出低电平,如此循环的输出就会产生一定频率的方波,通过改变延时的时间就可以改变输出方波的频率本系统的具体电路如右图所示。图中 P11-P17 分别接 7 个按键对应着乐曲中的1、2、3、4、5、6、7 七个音符。P36 口通过功率放大芯片 LM386 与喇叭相连。当P11P1.7 中有一个按键

11、按下时单片机便执行相应的子程序对定时器赋一个计数初值同时使 P36 口输出高电平。当定时器定时结束时将 P36 口的值取反并重新赋计数初值继续计数,再次计完时再将 P36 口的值取反再赋初值计数,如此循环便在 P36 口产生一定频率的方波, LM386 将此方波经过功率放大后通过喇叭输出便产生对应音符的声音。按不同的按键单片机便执行不同的子程序给定时器赋不同的初值得到不同频率的方波从而输出不同的声音,因此按一个按键输出一种音符。在单片机的特殊功能寄存器中有 6 个寄存器(TH1、TH0 、TL1、TL0、TMOD、TCON)是用来控制单片机的定时器的,通过编程对这些特殊功能寄存器的读写就可以控

12、制单片机的两个定时器 T0、T1。当单片机复位时这 6 个寄存器默认值都是 00H。五.设计思想(1)系统的总框图(2)系统电路图(3)软件设计思路由于每个音阶对应着不同的频率,当然对单片机来说产生不同的频率非常方便,我们可以利用单片机的定时、计数器 T0 来产生这样的方波频率信号,因此我们只要把 1-7的七个音阶对应的频率关系弄正确即可。本次设计中单片机晶振为 12MHz,那么定时器的计数周期为 1MHz,假如选择工作方式为 1,那 T 值便为 T=216-5*105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数 T0 相关的计数值如下表所示:采用查表

13、程序查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据。工作方式 1工作方式 1 是 16 位的定时计数方式,将 M1M0 设为 01。对于定时器的工作模式可以根据定时器的寄存器 TMOD 来设置: M1M0:定时计数器共有四种工作方式,就是用 M1M0 来控制的,2 位正好是四种组合。 CT :定时计数器即可作定时用也可用计数用,如果 C/T 为 O 就是用作定时器( 开关往上打),如果 C T 为 1 就是用作计数器( 开关往下打 )。一个定时计数器同一时刻要么作定时用,要么作计数用,不能同时用的。 GATE:当我们选择了定时或计数工作方式后,定时计数脉冲却不一

14、定能到达计数器端,中间还有一个开关,显然这个开关不合上,计数脉冲就没法过去,那么开关什么时候过去呢? 有两种情况GATE=0,分析一下逻辑, GATE 非后是 1,进入或门,或门总是输出 1,和或门的另一个输入端 INT1 无关,在这种情况下,开关的打开、合上只取决于 TR1,只要 TR1是 1,开关就合上,计数脉冲得以畅通无阻,而如果 TR1 等于 0 则开关打开,计数脉冲无法通过,因此定时计数是否工作,只取决于 TR1。GATE=1,在此种情况下,计数脉冲通路上的开关不仅要由 TR1 来控制,而且还要受到 INT1 引脚的控制,只有 TRl 为 1,且 INT1 引脚也是高电平,开关才合上

15、,计数脉冲才得以通过。这个特性可以用来测量一个信号的高电平的宽度。 程序流程图第一步是对定时器 T0 进行初始化,设定它的工作状态(对于本系统将 T0 设定为工作方式 O);然后判断是否有键按下,如果没有按键按下,继续判断,如果有按键按下,则判断是哪个键按下;再根据按键的功能将计数初值装入定时器 T0 中中并启动 T0,当 T0 定时完毕后,重新装入计数初值继续定时并将 P3 6 取反,再次定时完毕后再一次的装入计数初值继续定时并将 P36 取反,一直循环此操作直到按键释放为止,按键释放后停止T0 工作并再次判断是否又有按键按下,并继续执行以前的过程。 程序BUZZ EQU P3.3 ; 定义

16、端口 ORG 1000HLJMP MAINORG 000BHLJMP INT_T0ORG 1100HMAIN:MOV SP,#60H ; 初始化堆栈指针MOV P1,#0FFH ; 设置 P1 口为输入模式MOV TMOD,#01H ; 设置定时器 0 为工作模式 1SETB ET0 ; 开定时器 0 中断SETB EA ; 开总中断CLR TR0 ; 关闭定时器 0START:MOV R0,P1CJNE R0,#0FFH,KEY1; 键盘扫描CLR TR0SJMP STARTKEY1:CJNE R0,#0FEH,KEY2 ; K1 键按下MOV 30H,#0FBH ; 设置音阶 1MOV 3

17、1H,#0E9HLJMP SET_TIMERKEY2:CJNE R0,#0FDH,KEY3; K2 键按下MOV 30H,#0FCH ; 设置音阶 2MOV 31H,#5CHLJMP SET_TIMERKEY3:CJNE R0,#0FBH,KEY4; K3 键按下MOV 30H,#0FCH ; 设置音阶 3MOV 31H,#0C1HLJMP SET_TIMERKEY4:CJNE R0,#0F7H,KEY5 ; K4 键按下MOV 30H,#0FCH ; 设置音阶 4MOV 31H,#0EFHLJMP SET_TIMERKEY5:CJNE R0,#0EFH,KEY6 ; K5 键按下MOV 30

18、H,#0FDH ; 设置音阶 5MOV 31H,#045HLJMP SET_TIMERKEY6:CJNE R0,#0DFH,KEY7; K6 键按下MOV 30H,#0FDH ; 设置音阶 6MOV 31H,#92HLJMP SET_TIMERKEY7:CJNE R0,#0BFH,NOKEY; K7 键按下MOV 30H,#0FDH ; 设置音阶 7MOV 31H,#0D6HSET_TIMER:SETB TR0 ; 发声SJMP STARTNOKEY:CLR TR0 ; 无键按下SJMP STARTINT_T0: ; T0 中断服务程序MOV TH0,30H ; 定时器赋初值MOV TL0,31HCPL BUZZ ; 输出方波RETI;END六. 总结通过两周的紧张工作,终于完成了简易电子琴的设计,这个课程设计是我受益匪浅,在老师的指导下,我们逐渐了解了硬件设计的整个流程,并且加深了我对单片机这门课程内容的理解,通过这个课程设计,不仅使我了解了组成原理的脊髓,而且使我对单片机从陌生到处不理解,扩充了我的知识面和理解应用能力。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报