远程点歌系统.doc_第1页
远程点歌系统.doc_第2页
远程点歌系统.doc_第3页
远程点歌系统.doc_第4页
远程点歌系统.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

摘要 本设计是一个基于 STC89C52 系列单片机的点歌系统 依据单片机技术原理 通过硬件电路制作以及软件编译 设计制作出一个多功能多功能点歌系统 该点歌 系统主要由单片机 8255 芯片 LED 显示电路 复位电路 时钟电路以及蜂鸣器组 成 用户从客户机选择要播放的曲目 客户机通过串口将选择信息传给单片机 单 片机根据客户机给的信息做出选择 播放预先存放在 ROM 中的音乐 并用 LED 显 示播放歌曲 放完后在提示客户机选择下一曲 用蜂鸣器播放音乐 本设计利用 KEIL 编程软件对点歌系统源程序进行编程并调试 节约了设计时间 关键词 关键词 点歌 STC89C52 单片机 LED 串口 目 录 1 引言 1 1 1 设计目的 1 1 2 设计要求 1 1 3 设计内容 1 2 设计方法对比 1 2 1 设计方案一 1 2 2 设计方案二 2 2 3 方案选择 3 3 电路硬件分析 3 3 1 总体设计框图 3 3 2 STC89C52 简介 3 3 3 LED 显示电路设计与原理 4 3 4 时钟振荡电路 4 3 5 串口电路 5 4 软件分析 5 4 1 音调的确定 5 4 2 节拍的确定 7 4 3 编码 8 4 4 软件程序设计 9 4 4 1 主程序流程图 9 4 4 2 播放音乐子程序流程图 11 4 4 3 程序源代码 见附录一 12 5 总结 12 6 致谢 13 参考文献 13 附录一 14 1 远程点歌系统 1 引言引言 随着人类社会的发展 人们对视觉 听觉方面的享受提出了越来越高的要求 点歌系统可以提高人们的精神文化享受 传统点歌系统较为复杂 一般嵌入在一些 专用影音设备中 且成本较高 本点歌系统是以单片机为核心元件的电子式点歌系 统 体积小 重量轻 能演奏和旋音乐及使用方便 加之性价比较高 具有一定的 商业价值 1 1 设计目的设计目的 1 熟悉单片机的应用与开发 2 学习用 C 语言开发应用程序 3 学习远程控制与歌曲播放的开发 1 2 设计要求设计要求 利用单片机作为控制核心 完成一个从客户机选择的点歌系统 具体要求如下 1 用户从客户机选择要播放的曲目 2 电脑通过串口将选择信息传给单片机 3 单片机根据电脑给的信息做出选择 播放预先存放在 ROM 中的音乐 4 用扬声器播放音乐完后 提示下一次选择 1 3 设计内容设计内容 1 电路有两种工作模式 暂停模式和播放模式 2 按下按键 1 进入演奏音乐模式 再按切换歌曲 共两首歌曲 3 按下按键 2 进入花样灯模式 再按切换 LED 花样 共三种花样 2 设计方法对比设计方法对比 本设计是一个基于单片机的点歌系统 客户机选择所喜欢的歌曲 单片机执行 音乐播放程序 蜂鸣器发出某个音调 与之相对应的数码管显示播放的曲目 在本 设计中单片机的选型决定系统的可靠性 可用性及性价比 下面对主控芯片进行比 较 2 2 1 设计方案一设计方案一 电路如图 1 所示 以 ATmega103L 为主要控制芯片 由于对音乐的质量 功率 没有特别要求 采用三极管放大即可满足条件 于是 引脚 P3 3 输出的音频脉冲信 号 连接到一个三极管 9015 上 经放大后直接驱动蜂鸣器发声 ATmega103L 有 40 个引脚 外中断 8 个 4 8 组 I O 口 全双工串行通信口 128K Flash 片内程序 存储器 支持在线编程 ATmega103L 单片机 LED 显示8255 蜂鸣器 串口 震荡电路 2 2 设计方案二设计方案二 电路如图 2 所示 以 STC89C52 为主要控制芯片 40 个引脚 4K Flash 片内程 序存储器 4 8 组 I O 口 5 个中断优先级 2 层中断嵌套中断 2 个 16 位可编程定 时计数器 2 个全双工串行通信口 看门狗 WDT 电路 片内时钟振荡器 图 1 ATmega103L系列单片机 3 STC89C52 单片机 LED 显示8255 蜂鸣器 串口 震荡电路 2 3 方案选择方案选择 比较两种芯片可以看出 用 ATmega103L 作为点歌系统的主控芯片没有充分发挥它的性能 价格也较高 STC89C52 不仅充分发挥了它的性能 而且价格较低廉 考虑两种方案的性能 及性价比 选择方案一 3 电路硬件分析电路硬件分析 3 1 总体设计框图总体设计框图 STC89C52 单片机 LED 显示8255 蜂鸣器 串口 震荡电路 3 2 STC89C52 简介简介 图 3 总体设计框图 图 2 ATmega103L系列单片机 4 STC89C52 是一种带 4K 字节闪存可编程可擦除只读存储器 FPEROM Flash Programmable and Erasable Read Only Memory 的低电压 高性能 CMOS 8 位微处理 器 俗称单片机 STC89C2051 是一种带 2K 字节闪存可编程可擦除只读存储器的单 片机 单片机的可擦除只读存储器可以反复擦除 100 次 该器件采用 ATMEL 高密 度非易失存储器制造技术制造 与工业标准的 MCS 51 指令集和输出管脚相兼容 由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中 ATMEL 的 STC89C52 是 一种高效微控制器 STC89C2051 是它的一种精简版本 STC89C52 单片机为很多嵌 入式控制系统提供了一种灵活性高且价廉的方案 外形及引脚排列如图 4 所示 3 3 LED 显示电路设计与原理显示电路设计与原理 LED 显示电路如图 5 所示 它由 6 位 LED 数码管组成 连接方式为共阳极 数 码管的位数由 8255 的 PA 控制 低电平则有效 数码管显示的内容的由 8255 的 PB 口控制 3 4 时钟振荡电路时钟振荡电路 STC89C52 中有一个用于构成内部振荡器的高增益反相放大器 引脚 XTAL1 和 XTAL2 分别是该放大器的输入端和输出端 这个放大器与作为反馈元件的片外石英 晶体或者陶瓷谐振器一起构成自然振荡器 外接石英晶体及电容 C1 C2 接在放大 器的反馈回路中构成并联振荡电路 对外接电容 C1 C2 虽然没有什么严格的要求 但电容容量的大小会轻微影响振荡频率的高低 振荡器工作的稳定性 起振的难易 图 4 AT89C52 系列单片机 图 5 LED 显示电路设计与原理 5 程序及温度稳定性 如果使用石英晶体 我们推荐电容使用 30PF 10PF 而如果使 用陶瓷振荡器建议选择 40PF 10PF 用户也可以采用外部时钟 采用外部时钟的电 路如图示 这种情况下 外部时钟脉冲接到 XTAL1 端 即内部时钟发生器的输入 端 XTAL2 则悬空 由于外部时钟信号是通过一个 2 分频触发器后作为内部时钟信 号的 所以对外部时钟信号的占空比没有特殊要求 但最小高电平持续时间和最大 的低电平持续时间应符合产品技术条件的要求 振荡器电路图如右 3 5 串口电路串口电路 由于单片机工作电压与客户机串口电压存在电压差 不能直接相连 这里使用 MAX232 芯片转换电压 再接上标准串口 CON32 从而达到与客户机通信的目的 出口硬件连接电路图如下 4 软件软件分析分析 音调 节拍以及编码的确定方法一般说来 单片机演奏音乐基本都是单音频率 图 6 单片机外部振荡电路 图 7 串口电路图电路 6 它不包含相应幅度的谐波频率 也就是说不能像电子琴那样能奏出多种音色的声音 因此单片机奏乐只需弄清楚两个概念即可 也就是 音调 和节拍表示一个音符唱 多长的时间 4 1 音调的确定音调的确定 1 要产生音频脉冲 只要算出某一音频的周期 1 频率 然后将此周期除以 2 即为半周期的时间 利用定时器计时这半个周期时间 每当计时到后就将输出脉 冲的 I O 反相 然后重复计时此半周期时间再对 I O 反相 就可在 I O 脚上得到此频 率的脉冲 2 利用 AT89C52 的内部定时器使其工作在计数器模式 MODE1 下 改变计 数值 TH0 及 TL0 以产生不同频率的方法 此外结束符和休止符可以分别用代码 00H 和 FFH 来表示 若查表结果为 00H 则表示曲子终了 若查表结果为 FFH 则产生相应的停顿效果 3 例如频率为 523Hz 其周期 T 1 523 1912us 因此只要令计数器计时 956us 1us 956 在每次技术 956 次时将 I O 反相 就可得到中音 DO 523Hz 计数脉冲值与频率的关系公式如下 N Fi 2 Fr N 计算值 Fi 内部计时一次为 1us 故其频率为 1MHz 其计数值的求法如下 T 65536 N 65536 Fi 2 Fr 例如 设 K 65536 F 1000000 Fi 1MHz 球低音 DO 261Hz 中音 DO 523Hz 高音的 DO 1046Hz 的计算值 T 65536 N 65536 Fi 2 Fr 65536 1000000 2 Fr 65536 500000 Fr 低音 DO 的 T 65536 500000 262 63627 低音 DO 的 T 65536 500000 523 64580 低音 DO 的 T 65536 500000 1047 65059 C 调各音符频率与计数值 T 的对照表如表 1 所示 表 1 C 调各音符频率与计数值 T 的对照表 低音频率T参数中音频率T参数高音频率T参数 7 Do2621908229Do523956115Do10465757 Do 2771805217 Do 554903108 Do 11095454 Re2941701204Re587852102Re11755151 Re 3111608193 Re 62280497 Re 12454848 Mi3301515182Mi65975991Mi13184545 Fa3491433172Fa69871686Fa13974343 Fa 3701351162 Fa 74067681 Fa 14804141 So3921276153So78463877So15683838 So 4151205145 So 83160272 So 16613636 La4401136136La88056868La17603434 La 4641078129 La 93253664 La 18653232 Si4941012121Si98850661Si19763030 4 2 节拍的确定节拍的确定 一首音乐是由许多不同的音符组成的 而每个音符对应着不同频率 见表 2 这样就可以利用不同的频率的组合 加以与拍数对应的延时 构成音乐 了解音乐 的一些基础知识 我们可知产生不同频率的音频脉冲即能产生音乐 对于单片机来 说 产生不同频率的脉冲是非常方便的 利用单片机的定时 计数器来产生这样的方 波频率信号 因此 需要弄清楚音乐中的音符和对应的频率 以及单片机定时计数 的关系 表 2 节拍与节拍码对照 节拍码节拍数节拍码节拍数 11 4 拍11 8 拍 22 4 拍21 4 拍 33 4 拍33 8 拍 41 拍42 1 拍 51 又 1 4 拍55 8 拍 8 61 又 1 2 拍63 4 拍 82 拍81 拍 A2 又 1 2 拍A1 又 1 4 拍 C3 拍C1 又 1 2 拍 F3 又 3 4 拍 每个音符使用 1 个字节 字节的高 4 位代表音符的高低 低 4 位代表音符的节拍 图 2 为节拍码的对照 如果 1 拍为 0 4 秒 1 4 拍实 0 1 秒 只要设定延迟时间就可 求得节拍的时间 假设 1 4 拍为 1DELAY 则 1 拍应为 4DELAY 以此类推 所以 只要求得 1 4 拍的 DELAY 时间 其余的节拍就是它的倍数 如表 3 为 1 4 和 1 8 节 拍的时间设定 表 3 1 4 和 1 8 节拍的时间设定 曲调值DELAY曲调值DELAY 调 4 4125 毫秒调 4 462 毫秒 调 3 4187 毫秒调 3 494 毫秒 调 2 4250 毫秒调 2 4125 毫秒 4 3 编码编码 先将歌曲的简谱进行编码 如表 4 所示 储存在一个数据类型为 unsigned char 的数组中 程序从数组中取出一个数 然后分离出高 4 位得到音调 接着找出相应 的值赋给定时器 0 使之定时操作蜂鸣器 得出相应的音调 接着分离出该数的低 4 位 得到延时时间 接着调用软件延时 表 4 简谱对应的简谱码 T 值 节拍数 简谱发音简谱码T 值节拍码节拍数 5低音 SO16426011 4 拍 6低音 LA26440022 4 拍 7低音 TI36452433 4 拍 1中音 DO46458041 拍 2中音 RE56468451 又 1 4 拍 3中音 MI66477761 又 1 2 拍 4中音 FA76482082 拍 9 5中音 SO864898A2 又 1 2 拍 6中音 LA964968C3 拍 7中音 TIA65030F3 又 3 4 拍 1高音 DOB65058 2高音 REC65110 3高音 MID65157 4高音 FAE65178 5高音 SOF65217 10 4 4 软件程序设计软件程序设计 4 4 1 主程序流程图主程序流程图 主程序代码 void main void 初始化 用 LED 显示 向客户机发送提示 播放完歌曲 播放歌曲 客户机点歌 调用 PLAY调用 PAUSE 开始 等待 dis play 0 中断响应 是否 图 8 主程序流程图 11 TMOD 0 x21 定时器 0 1 都工作 16 位计数方式 ET0 1 允许定时器 0 溢出中断 EA 1 允许总中断 如不使用中断 可用 屏蔽 ES 1 允许 UART 串口的中断 SCON 0 x50 串口工作方式 1 TH1 0 xF3 定时器初值高 8 位设置 TL1 0 xF3 定时器初值低 8 位设置 PCON 0 x00 波特率不倍频 TR1 1 定时器启动 dis flag 0 a8255 CON 0 x81 a8255 PA 0 xff dis flag 0 while 1 if dis flag 0 PAUSE leddisp 5 0 x11 leddisp 4 0 x0a leddisp 3 0 x13 leddisp 2 0 x05 leddisp 1 0 x0e leddisp 0 0 x15 else PLAY X leddisp 5 0 x11 leddisp 4 0 x12 leddisp 3 0 x0a leddisp 2 0 x14 leddisp 1 0 x10 display if dis flag 0 void song 12 4 4 2 播放音乐子程序流程图播放音乐子程序流程图 修改指针 取下一个编码 结束 dis flag 0 开始 取编码高 4 位 取低 4 位 调用延时程序 关闭定时器 0给定时器 0 赋初值 是否播放完 是否为 0 否是 否 是 播放音乐子程序代码 void song if dis flag 0 while 1 display if dis flag 0 break if pmusic 0 x00 fm 1 TR0 0 leddisp 0 0 x10 图 9 播放音乐子程序流程图 13 UART S send data dis flag 0 while 1 display if dis flag 0 break else leddisp 0 re temp music temp pmusic beat music temp 取得节拍数 beat beat 4 freq music temp 4 取得音符编码 pmusic if freq 0 TR0 0 else TR0 0 FreqTemp FreqTab freq TL0 FreqTemp TH0 FreqTemp 8 TR0 1 delay beat 4 4 3 程序源代码 见附录一 程序源代码 见附录一 5 总结总结 单片机的设计至今为止已经进入了令人鼓舞的阶段 在进行了一个学期的摸索 与实验 使我不仅仅是对于单片机入门软件与硬件的常用设计与功能 还使我对于 一项设计研究的制作过程所需要的详细步骤和具体的实现方法的力度的掌握 14 当然在这次宝贵的课程设计活动中 经验才是对于我们最大的收获 而且还增 强了自身对未知问题以及对知识的深化认识的能力 用受益匪浅这个词语来概括这 次难忘的活动我觉得再合适不过了 但是 光是完成了作品还是不可以自我满足的 在从一开始的时候就怀着将作品制作得更加人性化 更加令人满意 更加地使功能 完美又方便地被应用领域这个最终目的下 随着对单片机这门学科的认识加深 到 达了拓展的程度 我想这个目的将在不远的时期内被实现 总之 这次设计从软件编写 调试到软硬件联机调试 我倾注了大量的时间和 心血 真是曾经为程序的编写而冥思查找过 曾经为无法找出错误而郁闷苦恼过 也曾经为某一功能不能实现而犹豫彷徨过 但最终我成功了 我不仅品味到了结果的喜悦 更明白了过程的弥足珍贵 6 致谢致谢 感谢我的指导老师方智文 他们严谨细致 一丝不苟的作风一直是我工作 学 习中的榜样 他们循循善诱的教导和不拘一格的思路给予我无尽的启迪 感谢我的 室友们 是你们和我共同维系着彼此之间兄弟般的感情 维系着寝室那份家的融洽 从开始进入课题到论文的顺利完成 有多少可敬的师长 同学 朋友给了我无言的 帮助 在这里请接受我诚挚的谢意 参考文献参考文献 1 张鑫 单片机原理及应用 电子工业出版社 2005 8 2 康华光 模拟电子技术基础 第四版 M 武汉 华中理工大学出版社 1999 3 谭浩强 C 语言程序设计 第二版 M 北京 清华大学出版社 1991 4 楼然苗 单片机课程设计指导 第一版 M 北京 航空航天大学出版社 2007 7 15 附录一附录一 程序源代码 include include define a8255 PA XBYTE 0 xD1FF PA 口地址 define a8255 PB XBYTE 0 xD2FF PB 口地址 define a8255 CON XBYTE 0 xD7FF 控制字地址 define uchar unsigned char define uint unsigned int uint FreqTemp uchar music temp 暂时存放从 MusicTable 数组中读出的变量 uchar beat uchar freq 简谱码对应 T 值数组的下标 uchar pmusic 音乐编码指针 uint rece data 1 播放音乐标识符 uchar re temp 0 x10 uchar dis flag uchar leddisp 6 uchar send data 播放完毕 请点歌 n r uchar init data 请点歌 n r sbit fm P3 3 数码显示表 uchar code display code 数码管显示代码表 0 xA0 0 xBB 0 x62 0 x2A 0 1 2 3 0 x39 0 x2C 0 x24 0 xBA 4 5 6 7 0 x20 0 x28 0 x30 0 x25 8 9 A B 0 xE4 0 x23 0 x64 0 x74 C D E F 0 x7f 0 x70 0 xe5 0 xa1 0 x29 0 xff P L U y 灭 16 音调 频率 unsigned int code FreqTab 简谱对应的简谱码 T 值 65535 64260 64400 64524 64580 64684 64777 64820 64898 64968 65030 65058 65110 65157 65178 65217 音乐程序 unsigned char code musi 1 x82 0 x01 0 x81 0 x94 0 x84 0 xb4 0 xa4 0 x04 0 x82 0 x01 0 x81 0 x94 0 x84 0 xc4 0 xb4 0 x04 0 x82 0 x01 0 x81 0 xf4 0 xd4 0 xb4 0 xa4 0 x94 0 xe2 0 x00 unsigned char code musi 2 x32 0 x31 0 x21 0 x32 0 x52 0 x32 0 x31 0 x21 0 x32 0 x62 x32 0 x31 0 x21 0 x32 0 x61 0 x51 0 x32 x00 unsigned char code musi 3 0 x12 0 x12 0 x22 0 x32 0 x31 0 x22 0 x21 0 x22 0 x21 0 x31 0 x51 0 x52 0 x31 0 x52 0 x61 0 x15 0 x14 0 x51 0 x52 0 x31 0 x52 0 x62 0 x13 0 x11 0 x00 unsigned char code musi 4 0 x34 0 x32 0 x32 0 x34 0 x42 0 x51 0 x62 0 x52 0 x42 0 x32 0 x34 0 x04 0 x74 0 x74 0 x62 0 x62 0 x64 0 x3c 0 x04 0 x64 0 x62 0 x52 0 x42 0 x32 0 x00 unsigned char code musi 5 0 x52 0 x42 0 x58 0 x02 0 x42 0 x52 0 x42 0 x38 0 x04 0 x12 0 x32 0 x44 0 x42 0 x52 0 x42 0 x32 0 x12 0 x12 0 xC8 0 x04 0 x52 0 x42 0 x58 0 x02 0 x00 unsigned char code musi 6 0 x52 0 x62 0 x74 0 x74 0 x74 0 x34 0 x42 0 x34 0 x52 0 x56 0 x42 0 x34 0 x34 0 x14 0 x32 0 x12 0 x12 0 xC2 0 xC4 0 x04 0 x52 0 x62 0 x74 0 x74 0 x00 unsigned char code musi 7 17 0 xC2 0 xC2 0 x12 0 x34 0 x32 0 x32 0 x32 0 x12 0 x12 0 x52 0 x54 0 x02 0 xC2 0 x12 0 x32 0 x32 0 x32 0 x32 0 x34 0 x52 0 x72 0 x7C 0 x02 0 x72 0 x00 unsigned char code musi 8 0 x12 0 x52 0 x52 0 x52 0 x56 0 x42 0 x32 0 x42 0 x32 0 x22 0 x18 0 x82 0 x82 0 x82 0 x82 0 x86 0 x72 0 xB2 0 x72 0 x72 0 x62 0 x58 0 x52 0 x820 x00 unsigned char code musi 9 0 xC4 0 x12 0 x32 0 x44 0 x42 0 x52 0 x52 0 x44 0 x32 0 x32 0 x12 0 x14 0 x12 0 x12 0 x32 0 x42 0 x54 0 x44 0 x4F 0 xC4 0 x12 0 x32 0 x44 0 x42 0 x00 unsigned char code musi a 0 x04 0 x24 0 x14 0 xC4 0 x54 0 x54 0 x48 0 x04 0 x54 0 x44 0 x34 0 x22 0 x14 0 xB2 0 xC8 0 x04 0 x12 0 xC2 0 x16 0 x12 0 x76 0 x52 0 x46 0 x12 0 x00 uchar music musi 1 musi 2 musi 3 musi 4 musi 5 musi 6 musi 7 musi 8 musi 9 musi a 显示子程序 void display void uchar i j 50 k 0 xdf for i 0 i 1 k k 0 x80 延时 1MS 18 void delay uint z 延时 1MS uint x y for x z x 0 x for y 65 y 0 y display void UART T unsigned char UART data 定义串口发送数据变量 ES 0 禁止穿行中断 SBUF UART data 将接收的数据发送回去 while TI 0 检查发送中断标志位 display TI 0 令发送中断标志位为 0 软件清零 ES 1 打开穿行中断 void UART S unsigned char str while 1 if str 0 break UART T str display void song if pmusic 0 x00 fm 1 TR0 0 leddisp 0 0 x10 UART S send data 19 dis flag 0 while 1 display if dis flag 0 break else leddisp 0 re temp music temp pmusic beat music temp 取得节拍数 beat beat 4 freq music temp 4 取得音符编码 pmusic if freq 0 TR0 0 else TR0 0 FreqTemp FreqTab freq TL0 FreqTemp TH0 FreqTemp 8 TR0 1 delay beat 主程序 void main void TMOD 0 x21 定时器 0 1 都工作 16 位计数方式 ET0 1 允许定时器 0 溢出中断 EA 1 允许总中断 ES 1 允许 UART 串口的中断 SCON 0 x50 串口工作方式 1 TH1 0 xF3 定时器初值高 8 位设置 TL1 0 xF3 定时器初值低 8 位设置 20 PCON 0 x00 波特率不倍频 TR1 1 定时器启动 dis flag 0 a8255 CON 0 x81 a8255 PA 0 xff dis flag 0 UART S init data while 1 if dis flag 0 PAUSE leddisp 5 0 x11 leddisp 4 0

温馨提示

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

最新文档

评论

0/150

提交评论