电子琴的实验报告_第1页
电子琴的实验报告_第2页
电子琴的实验报告_第3页
电子琴的实验报告_第4页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

3、生效了。如图 1 6 鼠标在屏幕左边的Source Group1 文件夹图标上右击弹出菜单,在这里可以做项目中增加减少文件等操作。我们选 “ Add File to GroupSourceGroup”1 弹出文件窗口,选择刚刚保存的文件,按ADD按钮,关闭文件窗,程序文件已加到项目中了。这时在 Source Group1 文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。供参考图 1 6 把文件加入到项目文件组中编译程序(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.0 P1.7 P

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

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

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

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

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

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

11、时器赋一个计数初值同时使P36口输出高电平。当定时器定时结束时将P3 6 口的值取反并重新赋计数初值继续计数,再次计完时再将P3 6 口的值取反再赋初值计数,如此循环便在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 位正好是四种组合。C T:定时计数器即可作定时用也可用计数用,如果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 取反,再次定时完毕后再一次的装入计数初值继续定时并将P3 6 取反,一直循环此操作直到按键释放为止,按键释放后停止T0 工作并再次判断是否又有按键按下,并继续执行以前的过程。供参考 程序BUZZ EQU P3.

16、3 ;定义端口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 31H,#0

17、E9HLJMP SET_TIMERKEY2:CJNE R0,#0FDH,KEY3;K2 键按下MOV 30H,#0FCH ;设置音阶 2MOV 31H,#5CHLJMP SET_TIMERKEY3:CJNE R0,#0FBH,KEY4;K3 键按下MOV 30H,#0FCH ;设置音阶 3供参考MOV 31H,#0C1HLJMP SET_TIMERKEY4:CJNE R0,#0F7H,KEY5 ;K4 键按下MOV 30H,#0FCH ;设置音阶 4MOV 31H,#0EFHLJMP SET_TIMERKEY5:CJNE R0,#0EFH,KEY6 ;K5 键按下MOV 30H,#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:S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论