电子琴的实验报告.doc_第1页
电子琴的实验报告.doc_第2页
电子琴的实验报告.doc_第3页
电子琴的实验报告.doc_第4页
电子琴的实验报告.doc_第5页
免费预览已结束,剩余7页可下载查看

下载本文档

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

文档简介

单片机课程设计设计题目 电子琴指导老师:苏参与实验者: moxiaoxiao 专业:统本电信0801 地点:3#楼北楼605电子琴一.设计目的:(1).培养综合运用知识的能力(2).朋友查阅资料,使用工程设计标准及编写设计文档的能力.(3).掌握单片机应用系统的设计方法.(4).提高计算机绘图能力二.设计任务: 利用DP51PROC实验系统上的定时器/计数器,按键和蜂鸣器单元。用单片机I/O口线控制蜂鸣器发出不同的音调,程序检测按键状态,7个按键中某一键按下时,蜂鸣器对应标称音阶.三.设计与调试环境KEIL uVision2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的 MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM ,汇编和 C 语言的程序设计,它的界面和常用的微软VC+的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。1:按下面的步骤建立一个项目:图 14 选取芯片图 15 新建程序文件(1)点击 图15 中的 3 保存新建的程序,也可以用菜单 FileSave 或快捷键 Ctrl+S 进行保存。因是新文件所以保存时会弹出类似 图13 的文件操作窗口,我们把第一个程序命名为test1.c,保存在项目所在的目录中,这时程序单词有了不同的颜色,说明 KEIL 的 C 语法检查生效了。如 图16 鼠标在屏幕左边的 Source Group1 文件夹图标上右击弹出菜单,在这里可以做项目中增加减少文件等操作。我们选 “Add File to Group SourceGroup 1”弹出文件窗口,选择刚刚保存的文件,按 ADD 按钮,关闭文件窗,程序文件已加到项目中了。这时在 Source Group1 文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。图 16 把文件加入到项目文件组中编译程序(2)进入调试模式,软件窗口样式大致如 图18 所示。图中 1 为运行,当程序处于停止状态时才有效,2 为停止,程序处于运行状态时才有效。3 是复位,模拟芯片的复位,程序回到最开头处执行。按 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 是一个带有内部上拉电阻的 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.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生成 HEX 文件和最小化系统3:如何用 KEIL uVision2 来编译生成用于烧写芯片的 HEX文件。HEX 文件格式是 Intel 公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16 进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。打开第一课做的项目,打开它的所在目录,找到test.Uv2的文件就可以打开先前的项目了。然后右击 图31中的 1 项目文件夹,弹出项目功能菜单,选 Options for TargetTarget1,弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在 Project 菜单中也有一样的菜单可选。打开项目选项窗口,转到 Output 选项页 图32所示,图中 1 是选择编译输出的路径,2 是设置编译输出生成的文件名,3 则是决定是否要创建 HEX文件,选中它就可以输出 HEX 文件到指定的路径中。将它重新编译一次,很快在编译信息窗口中就显示 HEX 文件创建到指定的路径中了,如 图33。这样就可用编程器所附带的软件去读取并烧到芯片了。(技巧:一、在 图31中的 1 里的项目文件树形目录中,先选中对象,再单击它就可对它进行重命名操作,双击文件图标便可打开文件。二、在 Project 下拉菜单的最下方有最近编辑过的项目路径保存,可以快速打开最近在编辑的项目。)图31项目功能菜单图32 项目选项窗口四.工作原理:要求设计的电子琴共有七个按键对应着七个音阶,也就是按下不同的按键时,蜂鸣器会发出不同平率的声音。而这些声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线不断的输出“高”“低”电平,则在该口线上就能产生一定频率的方波,将该方波接上喇叭就能发出一定频率的声音,若再利用程序控制“高”“低”电平的持续时间,就能改变输出波形的频率,从而改变音调。我们用MC51单片机实现这一功能。不同音阶所对应的频率如下图所示:音名1234567频率(Hz)523.3587.3659.3698.3784880987.8乐曲中,每一音符对应着确定的频率,表1给出C调时各音符频率。如果单片机某个口线输出“高”“低”电平的频率和某个音符的频率一样,那么将此口线接上喇叭就可以发出此音符的声音。本系统就是根据此原理设计,对于51单片机来说要产生一定频率的方波大致是先将某口线输出高电平然后延时一段时间再输出低电平,如此循环的输出就会产生一定频率的方波,通过改变延时的时间就可以改变输出方波的频率本系统的具体电路如右图所示。图中P11-P17分别接7个按键对应着乐曲中的1、2、3、4、5、6、7七个音符。P36口通过功率放大芯片 LM386与喇叭相连。当P11P1.7中有一个按键按下时单片机便执行相应的子程序对定时器赋一个计数初值同时使P36口输出高电平。当定时器定时结束时将P36口的值取反并重新赋计数初值继续计数,再次计完时再将P36口的值取反再赋初值计数,如此循环便在P36口产生一定频率的方波, LM386将此方波经过功率放大后通过喇叭输出便产生对应音符的声音。按不同的按键单片机便执行不同的子程序给定时器赋不同的初值得到不同频率的方波从而输出不同的声音,因此按一个按键输出一种音符。在单片机的特殊功能寄存器中有6个寄存器(TH1、TH0、TL1、TL0、TMOD、TCON)是用来控制单片机的定时器的,通过编程对这些特殊功能寄存器的读写就可以控制单片机的两个定时器T0、T1。当单片机复位时这6个寄存器默认值都是00H。五.设计思想(1)系统的总框图(2)系统电路图(3)软件设计思路由于每个音阶对应着不同的频率,当然对单片机来说产生不同的频率非常方便,我们可以利用单片机的定时、计数器T0来产生这样的方波频率信号,因此我们只要把1-7的七个音阶对应的频率关系弄正确即可。本次设计中单片机晶振为12MHz,那么定时器的计数周期为1MHz,假如选择工作方式为1,那T值便为T=216-5*105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数T0相关的计数值如下表所示:采用查表程序查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据。工作方式1工作方式1是16位的定时计数方式,将M1M0设为01。对于定时器的工作模式可以根据定时器的寄存器TMOD来设置:M1M0:定时计数器共有四种工作方式,就是用M1M0来控制的,2位正好是四种组合。CT:定时计数器即可作定时用也可用计数用,如果C/T为O就是用作定时器(开关往上打),如果CT为1就是用作计数器(开关往下打)。一个定时计数器同一时刻要么作定时用,要么作计数用,不能同时用的。GATE:当我们选择了定时或计数工作方式后,定时计数脉冲却不一定能到达计数器端,中间还有一个开关,显然这个开关不合上,计数脉冲就没法过去,那么开关什么时候过去呢? 有两种情况GATE=0,分析一下逻辑,GATE非后是1,进入或门,或门总是输出1,和或门的另一个输入端INT1无关,在这种情况下,开关的打开、合上只取决于TR1,只要TR1是1,开关就合上,计数脉冲得以畅通无阻,而如果TR1等于0则开关打开,计数脉冲无法通过,因此定时计数是否工作,只取决于TR1。GATE=1,在此种情况下,计数脉冲通路上的开关不仅要由TR1来控制,而且还要受到INT1引脚的控制,只有TRl为1,且INT1引脚也是高电平,开关才合上,计数脉冲才得以通过。这个特性可以用来测量一个信号的高电平的宽度。 程序流程图第一步是对定时器T0进行初始化,设定它的工作状态(对于本系统将T0设定为工作方式O);然后判断是否有键按下,如果没有按键按下,继续判断,如果有按键按下,则判断是哪个键按下;再根据按键的功能将计数初值装入定时器T0中中并启动T0,当T0定时完毕后,重新装入计数初值继续定时并将P3 6取反,再次定时完毕后再一次的装入计数初值继续定时并将P36取反,一直循环此操作直到按键释放为止,按键释放后停止T0工作并再次判断是否又有按键按下,并继续执行以前的过程。 程序BUZZ EQU P3.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,#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 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:SETB

温馨提示

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

评论

0/150

提交评论