基于单片机控制的电子音乐盒课程设计内容摘要:

第 10 页图 数码管引脚图 图 数码管仿真图 图 数码管实物图 键盘部分 键盘是由一组按压式或触摸式开关构成的阵列,是一种常用的输入设备。 键盘可分为编码式键盘和非编码式键盘两种。 ,这种键盘所需程序简单,但硬件电路复杂、价格昂贵通常不被单片机系统采用。 ,其硬件逻辑与按键编码不存在严格的对应关系,而要由所用的程序来决定。 非编码键盘的硬件接口简单,但是要占用较多的CPU 时间,通常采用可编程键盘管理芯片来克服这个缺点。 本设计使用两种按键,一种是按键式非编码键盘和轻触式非编码开关。 按键开关单片机课程设计设计(论文) 第 11 页在接线时由于有六个引脚,连接时需要用万用表进行测量,然后接通两个引脚。 轻触开关一 种 电 子 开 关 , 使 用 时 轻 轻 点 按 开 关 按 钮 就 可 使 开 关 接 通 , 当 松 开 手 时 开 关 既 断开 , 其 内 部 结 构 是 靠 金 属 弹 片 受 力 弹 动 来 实 现 通 断 的。 但 微 动 开 关 也 有 它 不 足 的 地 方 ,频 繁 的 按 动 会 使 金 属 弹 片 疲 劳 失 去 弹 性 而 失 效 , 连 接 时 接 通 对 角 线 即 可。 蜂鸣器部分 1. 蜂 鸣 器 的 作 用 : 蜂 鸣 器 是 一 种 一 体 化 结 构 的 电 子 讯 响 器 , 采 用 直 流 电 压供 电 , 广 泛 应 用 于 计 算 机 、 打 印 机 、 复 印 机 、 报 警 器 、 电 子 玩 具 、 汽 车 电 子 设 备 、 电话 机 、 定 时 器 等 电 子 产 品 中 作 发 声 器 件。 2. 蜂 鸣 器 的 分 类 : 蜂 鸣 器 主 要 分 为 压 电 式 蜂 鸣 器 和 电 磁 式 蜂 鸣 器 两 种 类 型。 3. 蜂 鸣 器 的 电 路 图 形 符 号 : 蜂 鸣 器 在 电 路 中 用 字 母 “H”或 “HA”( 旧 标 准 用“FM”、 “LB”、 “JD”等 ) 表 示。 ( 二 ) 蜂 鸣 器 的 结 构 原 理    1. 压 电 式 蜂 鸣 器 压 电 式 蜂 鸣 器 主 要 由 多 谐 振 荡 器 、 压 电 蜂 鸣 片 、 阻 抗 匹 配器 及 共 鸣 箱 、 外 壳 等 组 成。 有 的 压 电 式 蜂 鸣 器 外 壳 上 还 装 有 发 光 二 极 管。 多 谐 振 荡 器 由 晶 体 管 或 集 成 电 路 构 成。 当 接 通 电 源 后 ( ~15V 直 流 工 作 电 压 ) ,多谐 振 荡 器 起 振 ,输 出 ~ 的 音 频 信 号 , 阻 抗 匹 配 器 推 动 压 电 蜂 鸣 片 发 声。 压 电 蜂 鸣 片 由 锆 钛 酸 铅 或 铌 镁 酸 铅 压 电 陶 瓷 材 料 制 成。 在 陶 瓷 片 的 两 面 镀 上 银 电 极 ,经 极 化 和 老 化 处 理 后 , 再 与 黄 铜 片 或 不 锈 钢 片 粘 在 一 起。 2. 电 磁 式 蜂 鸣 器 电 磁 式 蜂 鸣 器 由 振 荡 器 、 电 磁 线 圈 、 磁 铁 、 振 动 膜 片 及 外壳 等 组 成。 接 通 电 源 后 , 振 荡 器 产 生 的 音 频 信 号 电 流 通 过 电 磁 线 圈 , 使 电 磁 线 圈 产 生磁 场。 振 动 膜 片 在 电 磁 线 圈 和 磁 铁 的 相 互 作 用 下 , 周 期 性 地 振 动 发 声。 单片机课程设计设计(论文) 第 12 页第 5 章 系统软件设计 软件系统介绍一个系统的正常运行不仅需要硬件系统的支持,而且需要软件系统的支持。 如果把硬件比作躯体,那软件就是灵魂,硬件系统和软件系统相互间密切的配合才构建了能够“思考”和“判断”的整体系统。 借助软件的可编程性,可以精简硬件系统的组成;凭借软件的灵活性,可以不用对硬件系统进行修改而实现系统功能的修改。 软件系统与硬件系统是密切相联的,软件系统建立在硬件系统之上,离开了硬件系统,软件将无法实现任何功能。 软件的设计有一定的针对性,对于不同的硬件系统,需要编写不同的软件。 与硬件系统一样,软件系统的好坏,直接影响到系统的工作效率和可靠性。 应用软件的选择——keilc51单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。 机器汇编是通过汇编软件将源程序变为机器码,用于 MCS51 单片机的汇编软件有早期的 A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil 软件是目前最流行开发MCS51 系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持 Keil 即可看出。 Keil 提供了包括 C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。 运行Keil 软件需要 Pentium 或以上的 CPU,16MB 或更多 RAM、20M 以上空闲的硬盘空间、WIN9NT、WIN20WINXP 等操作系统。 掌握这一软件的使用对于使用 51 系列单片机的爱好者来说是十分必要的,如果你使用 C 语言编程,那么 Keil 几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件) ,即使不使用C 语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 Keil C51 是美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,与汇编相比,C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。 用过汇编语言后再使用 C 来开发,体会更加深刻。 Keil C51 软件提供丰富的库函数和功能强大的集成开发调试工具,全 Windows 界面。 另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到 Keil C51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。 在开发大型软件时更能体现高级语言的优势。 C51 工具包的整体结构,其中 uVision 与 Ishell 分别是 C51 for Windows 和 for 单片机课程设计设计(论文) 第 13 页Dos 的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。 开发人员可用 IDE 本身或其它编辑器编辑 C 或汇编源文件。 然后分别由 C51 及 A51 编译器编译生成目标文件(.OBJ)。 目标文件可由 LIB51 创建生成库文件,也可以与库文件一起经 L51 连接定位生成绝对目标文件(.ABS)。 ABS 文件由 OH51 转换成标准的 Hex 文件,以供调试器 dScope51 或 tScope51 使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如 EPROM 中。 主程序main(){ uint i。 k=8。 init()。 for(i=0。 i15。 i++) { WriteData(tab[i])。 //LCD 写数据函数写第一行 mydelay(50)。 } mydelay(1000)。 WriteCMD(0x80+0x40+2)。 //将指针设到第二行空两字符 for(i=0。 i6。 i++) { WriteData(tab1[i])。 mydelay(50)。 }InitialSound()。 //发音初始化程序while(1){ Getch()。 //扫描键盘,获得键值 if(k==0) //若键值为 0 { uint i。 init()。 for(i=0。 i10。 i++)单片机课程设计设计(论文) 第 14 页 { WriteData(tab2[i])。 //写第一首歌序号 mydelay(50)。 } mydelay(1000)。 WriteCMD(0x80+0x40)。 //转到第二行 for(i=0。 i9。 i++) { WriteData(tab3[i])。 //写歌名 mydelay(50)。 } Play(Music_Girl,0,3,360)。 //播放第一首歌 Delay1ms(500)。 break。 } else if (k==1) //若键值为 1{ uint i。 init()。 for(i=0。 i11。 i++) { WriteData(tab4[i])。 //写第二首歌序号 mydelay(50)。 } mydelay(1000)。 WriteCMD(0x80+0x40)。 //转到第二行 for(i=0。 i11。 i++) { WriteData(tab5[i])。 //写歌名 mydelay(50)。 }Play(Music_Jingle,0,3,360)。 //播放第二首歌Delay1ms(500)。 单片机课程设计设计(论文) 第 15 页break。 } else if (k==2) //若键值为 2{ uint i。 init()。 for(i=0。 i10。 i++) { WriteData(tab6[i])。 //写第三首歌序号 mydelay(50)。 } mydelay(1000)。 //WriteCMD(0x01)。 WriteCMD(0x80+0x40)。 //转到第二行 for(i=0。 i6。 i++) { WriteData(tab7[i])。 //写歌名 mydelay(50)。 }Play(Music_Two,0,3,360)。 //播放第三首歌Delay1ms(500)。 break。 }else if (k==3) //若键值为 3{ uint i。 init()。 for(i=0。 i10。 i++) { WriteData(tab8[i])。 //写第四首歌序号 mydelay(50)。 } mydelay(1000)。 WriteCMD(0x80+0x40)。 //转到第二行单片机课程设计设计(论文) 第 16 页 for(i=0。 i6。 i++) { WriteData(tab9[i])。 //写歌名 mydelay(50)。 } Play(Music_Four,0,3,360)。 //播放第三首歌Delay1ms(500)。 break。 }}}void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed){unsigned int NewFreTab[12]。 //新的频率表unsigned char i,j。 unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength。 unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD。 for(i=0。 i12。 i++) // 根据调号及升降八度来生成新的频率表 {j = i + Signature。 if(j 11){j = j12。 NewFreTab[i] = FreTab[j]*2。 } elseNewFreTab[i] = FreTab[j]。 if(Octachord == 1)NewFreTab[i]=2。 else if(Octachord == 3)单片机课程设计设计(论文) 第 17 页NewFreTab[i]=2。 }SoundLength = 0。 while(Sound[SoundLength] != 0x00) //计算歌曲长度{SoundLength+=2。 }Point = 0。 Tone = Sound[Point]。 Length = Sound[Point+1]。 // 读出第一个。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。