单片机MSP430G2课程设计音乐播放器

合集下载

基于单片机音乐播放器课程设计报告书

基于单片机音乐播放器课程设计报告书

目录第一章绪论 (1)第二章音乐播放器主要器件相关知识介绍 (2)2.1 AT89C51 (2)2.2 LCD 显示器 (4)2.3 喇叭 (5)2.4 键盘 (5)第三章音乐播放器设计原理 (6)3.1 单片机发声的基本原理 (6)3.2 设计的相关音乐说明 (7)3.3 音乐播放器设计功能说明 (7)3.4 设计结构框图 (9)3.5 主程序控制的工作流程图 (10)3.6 播放音乐的主程序 (11)设计心得 (15)参考文献 (15)第一章绪论二十世纪九十年代以来,计算机、信息、电子、控制、通信等技术得到迅速发展,促使了社会生产力的提高,也使人们的生产方式和生活方式产生了日新月异的变化。

随着人们生活水平的提高及对音乐的喜爱,对音乐播放器的品质,功能,品种等提出了越来越多的要求,表现在对控制系统性能、可靠性等要求越来越高。

而品质的提高,功能的更新,可靠性的增强,品种的变化无不于产品的核心控制部分水平的提高密不可分。

家用音乐播放器产品及其它有关消费电器产品都是一些开环或闭环控制系统,都由核心控制部分,执行部分与人机界面三部分组成。

而最为重要的控制部分一般是由单片机来执行完成的,这就必将导致和促进单片机在音乐领域应用的发展。

现在这些由单片机实现的音乐播放器的功能越来越强、费用越来越低。

例如,就市场上的mp3目前的功能越来越强大体积却越来越小,价格也逐渐便宜,被大多数人所能接受。

但这些音乐播放器也或多或少的存在着一些问题,解决这些问题,还除智能化的单片机莫属。

设计指标:(1)设计一个(4×4)的键盘,并将16个键设计成16个音;(2)可弹奏想要表达的音乐;(3)该电子琴包含1首示例音乐,接通电源可播放示例音乐。

设计要求:(1)按设计指标进行电路设计;(2)列出音阶与单片机定时器输出频率关系表格;(3)制作符合设计指标的硬件电路。

第二章音乐电子显示屏主要器件相关知识介绍制作音乐播放器所使用的主要元器件AT89S52 1个晶振 12MHZ 1 个LCD1602液晶显示器 1个小喇叭 1个电容 30pf 2个极性电容 1uf 2个10nf 1个电阻 10k 1个470欧 1个1K欧 1个按键 17个排阻 1k 1个2.1 AT89S52 : AT89S52是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。

单片机音乐播放器课程设计

单片机音乐播放器课程设计

单片机音乐播放器课程设计一、课程目标知识目标:1. 理解单片机的基础知识,掌握其内部结构与工作原理;2. 学会使用C语言编写单片机程序,实现音乐播放器的功能;3. 了解音乐播放器的基本组成部分,如音符产生、音调控制等;4. 掌握音乐理论知识,能将简单的乐谱转换为单片机程序。

技能目标:1. 能够运用所学知识,设计并实现一个具有基础音乐播放功能的单片机系统;2. 熟练使用编程软件进行单片机程序编写、调试与优化;3. 学会使用相关工具和仪器,进行电路搭建、测试与故障排查。

情感态度价值观目标:1. 培养学生对单片机及电子制作的兴趣,激发创新精神;2. 培养学生的团队协作能力,学会与他人共同解决问题;3. 增强学生的自信心,敢于面对挑战,勇于克服困难;4. 培养学生的责任心,关注环境保护,养成良好的操作习惯。

课程性质:本课程为实践性较强的课程,以项目为导向,结合单片机原理与应用,培养学生的动手能力和创新能力。

学生特点:本课程针对高中年级学生,学生具备一定的物理、数学基础,对电子制作有一定兴趣,但编程能力参差不齐。

教学要求:教师需结合学生特点,采用循序渐进的教学方法,注重理论与实践相结合,关注个体差异,提高学生的实践操作能力。

在教学过程中,注重引导学生思考,激发学生的学习兴趣,培养其创新精神。

通过课程学习,使学生能够独立完成一个简单的单片机音乐播放器设计。

二、教学内容1. 单片机基础知识:介绍单片机的内部结构、工作原理、性能特点,引导学生了解并掌握单片机的基本概念。

教材章节:第一章 单片机概述2. C语言编程基础:讲解C语言的基本语法、数据类型、运算符、控制结构等,为学生编写单片机程序奠定基础。

教材章节:第二章 C语言基础3. 单片机程序设计与调试:学习如何使用编程软件进行程序编写、调试与优化,掌握单片机程序的开发流程。

教材章节:第三章 单片机程序设计与调试4. 音频信号处理:介绍音频信号的基本知识,如音符、音调、节拍等,学习如何将乐谱转换为单片机程序。

最新单片机课程设计音乐播放器报告

最新单片机课程设计音乐播放器报告

单片机课程设计音乐播放器报告华北航空航天学院单片机课程设计报告课程设计作业学科名称讲师王晓职称音乐播放器设计副教授学生姓名张婷完成时间班级6.12年级B10Xxxx)* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *TAB5: DW 0A08H,0C08H,0C10H,0C08H,0A08H,0D08H,0E08H DW 0D08H,0D08H,0D08H,0D08H,0C08H,0F 0H,0F08H,0F08H DW 0F08H,0D08H,0D08H,0C40H,0A08H,0C08H,0C10H 256总示意图图4.1总示意图2。

元件清单AT89C52,晶振,电容,电阻,抑制,按键,数码管,二极管,蜂鸣器,三极管115,结论这款音乐播放器可以播放四首歌曲,并使用按键选择曲目,基本达到了设计要求用数据线连接计算机作为电源,将下载了程序的单片机插入插座,按下3.3键重复播放当前的曲子,按下3.4键播放前一首曲子,按下3.5键播放下一首曲子,按下REST键复位,从第一首曲子开始数码管显示歌曲曲目。

二极管作为游戏的一部分来增加兴趣6、体验课程设计是培养学生综合运用所学知识、发现、提出、分析和解决实际问题、锻炼实践能力的重要环节。

这也是一个针对学生实际工作能力的具体训练和考核过程。

随着科学技术的发展,单片机已经成为当今计算机应用中前所未有的活跃领域,可以说在生活中无处不在。

因此,对于自动化专业的学生来说,掌握单片机的开发技术是非常重要的。

我的主题是音乐播放器的硬件和软件设计。

经过13周的单片机学习,我将自己设计一件作品。

这是一个测试。

提前很久,我们选择了题目,开始做准备工作,查阅资料,看了学生的小作品和计划的说明,我也对我的题目有了信心。

我学到了很多关于这门课程的设计,如何制定计划,如何实现计划,以及如何克服实施过程中的心理不良情绪。

单片机课程设计 音乐播放系统设计

单片机课程设计  音乐播放系统设计

《单片机原理及应用》课程设计报告书课题名称音乐播放器姓名学号专业指导教师机电与控制工程学院年月日任务书本次课题是:设计一个以单片机为核心的音乐播放器,该音乐播放器具有音乐的循环播放及播放时的音乐显示等功能。

具体要求如下:设计三个键分别实现:播放/停止、下一曲、上一曲;同时用LED显示器显示播放曲目,为了节省电源,LED显示器在播放期间设计为关闭状态,只有当一首歌演奏结束或选曲时显示器才显示曲目信息。

当播放键打开时音乐开始播放,同时LED显示器显示,假如是第一首歌则LED显示器显示数字1,当打开下一曲按键时播放器开始播放第二首歌,同时LED显示器显示数字2。

声音经过三级管放大后由蜂鸣器输出。

音乐可以给我们的生活带来乐趣,音乐可以放松我们的心情,音乐可以让我们得到释怀。

而且通过这次设计我们可以学到关于单片机在实际生活中的设计应用,同时也使我们加深了对单片机的认识,提高了我们的编程能力,为我们能够更好的学习单片机有很大的帮助。

目录1.绪论 (1)2.方案论证 (2)3.方案说明 (2)4.硬件方案设计 (3)5.软件方案设计 (13)6.调试 (14)7.小结 (17)8.参考文献 (11)9.附录 (14)1.绪论二十世纪九十年代以来,计算机、信息、电子、控制、通信等技术得到迅速发展,现代家庭更加注重生活品质,健康、安全、舒适、便捷成为人们的迫切需要。

智能家电控制系统为智能家居的一个重要组成部分,为人们提供方便、安全、智能化、舒适的数字化生活提供解决方案。

随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。

由其是单片机技术的应用产品已经走进了千家万户。

首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。

本设计以数字集成电路技术为基础,单片机技术为核心。

本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。

单片机音乐播放器方案设计书报告

单片机音乐播放器方案设计书报告

1.1显示电路 (1)1.2时钟电路 (1)2.电子音乐产生原理 (1)2.1音调 (1)2.2节拍 (3)3.系统硬件设计 (6)3.1系统总框图 (6)3.2电路设计 (7)3.2.1 单片机时钟电路 (7)3.2.2. 复位电路 (8)3.2.3.电源电路 (8)3.2.4. USB程序下载电路 (9)3.2.5. 蜂鸣器驱动电路 (10)3.2.6.显示电路 (11)3.2.8 矩阵电路 (11)4.系统软件设计 (12)5.总结与展望 (14)6.参考文献 (14)附录 (15)附录1系统总电路 (15)附录2源代码 (16)1.方案与论证1.1 显示电路方案.1:采用LED数码管来显示(电路简单,成本低);方案.2:采用LCD液晶显示器来显示(电路简单,成本高);方案3:采用TFT真彩液晶显示(电路复杂,成本高,但显示的分辨率高);综上所述,选择方案一进行设计。

1.2 时钟电路方案.1:选择DS1302实时时钟芯片来实现音乐播放器(时间准确,但要增加额外开销);方案.2:选择单片机的软件实时来实现音乐播放器(灵活性高,时间不准确);方案.3:选择单片机内部可编程定时器来实现音乐播放器(在不增加额外的开销前提下,时间可以做到准确)。

综上所述,选择方案三进行设计。

2.电子音乐产生原理单片机发音原理:单片机演奏音乐基本是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音,但一定要弄清楚两个概念即可,也就是“音调”和“节拍” 。

·音调表示一个音符唱多高的频率。

·节拍表示一个音符唱多长的时间。

下面,就此两点,阐述说明:2.1音调在音乐中所谓“音调”,其实就是我们常说的“音高”。

在音乐中常把中央C上方的A音定为标准音高,其频率f=440Hz,其余与其比较。

f1和f2为两个音符,当这两个音符的频率相差一倍时,也即f2=2×f1时,则称f2比f1高一个倍频程。

单片机课程设计-音乐播放器

单片机课程设计-音乐播放器

《单片机应用程序设计》课程设计题目:音乐播放器信息科学与工程学院 测控技术与仪器051班200524562008年7月作 者 姓 名: 指 导 教 师:学 院 名 称: 班 级 名 称: 学号:课程设计(论文)任务书课程设计(论文)题目:音乐播发器基本内容:通过单片机的编程设计,配合多个按键和LCD, 实现多种播放功能的音乐播放器。

课程设计(论文)专题部分:题目:音乐播放器基本内容:通过单片机设计多种功能的音乐播放器学生接受课程设计(论文)题目日期第19周指导教师签字:2008年7月摘要近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入。

同时带动传统控制检测日新月益更新。

在实时检测和自动控制的单片机应用系统中,单片往是作为一个核心部件来使用,智能仪器就是以单片机为核心开发的一系列产品。

随着科技的发展,智能仪器和单片机被各个领域所重视,工业方面、冶金方面都存在着许多控制难题,为了提高工作效率这就需要智能仪器和单片机技术的快速发展。

为此为提高本科主的设讣创新能力开设了智能仪器和单片机的课程设讣。

本设汁的LI的是培养理论联系实际的学习方法以及独立解决匸程实际问题的能力。

主要内容是利用89C51单片机及其他一些器件来构成音乐播放器。

从而实现按键控制播放音乐的效果。

关键词:单片机,音乐,RT12864, ATMEL89c51o目录•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• 41.1课程设计目的 (5)1.2课程设计任务 (5)1.3课程设计要求 (5)1.4课程设计的意义 (5)第二章设计原理及总体方案选择 (6)2.1基本原理简述 (6)2.2关于音乐的原理知识 (7)第三章音乐播放器硬件电路的设计和调试 (9)3.1硬件原理电路的设计 (9)3.1. 1时钟与复位模块 (9)3.1. 2按键选择模块 (9)3.1. 3音频发生及放大器模块 (9)3.1. 4 LCD显示模块 (10)3.1.5电路原理图 (10)3.2 ATMEL 89C51 简介 (11)3.2. 1 AT89C51 单片机 (11)3.2.2引脚介绍 (11)第四章软件编程设计与综合测试 (12)4.1编程思路简述 (12)4.2编程方案的设计 (13)4. 2. 1软件功能选择 (13)4. 2. 2 程序流程图 (13)4. 2. 3程序清单 (15)参考文献 (22)心得体会 (23)第一章绪论1・1课程设计目的应用单片机,利用它的原理组成一个音乐播放器。

基于单片机的音乐播放课程设计报告

基于单片机的音乐播放课程设计报告

目录一、引言—本课程设计的目的 (2)二、八路LED跑马灯实验 (2)2.1设计内容 (2)2.2电路图 (2)2.3上机程序 (3)2.4调试结果及结论: (4)三、二位数码管循环显示00~99的实验 (4)3.1设计内容 (4)3.2电路图 (4)3.3上机程序 (5)3.4调试结果及结论 (6)四、单片机演奏音乐实验 (6)4.1设计内容 (6)4.2电路图 (6)4.3上机程序 (7)4.4调试结果及结论 (9)五、心得体会 (9)六、参考文献 (10)摘要:由于单片机体积小、成本低、使用方便,所以被广泛地应用于仪器仪表、现场数据的采集和控制。

通过本次课程设计掌握单片机硬件和软件方面的知识,更深入的了解单片机的实际应用。

一、单片机课程设计的目的以本学期对单片机的学习和认识,并通过本次课程设计加以应用,从而达到一个对所学知识的巩固、更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,再对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。

在根据该电路设计出软件的功能模块、从而完成程序流程图,在根据流程图完成程序的设计,并通过反复的调试、运行、更正,直至完成既定功能为止,最后将软件、硬件结合进行调试、运行,对其功能进行最终测试,并反复思考其测试中遇到相应问题的原因,并将其一一处理,从而完成本次设计的实验要求,以及本次课程设计的最终目的。

二、八路LED跑马灯实验2.1设计内容:八路发光二极管轮流点亮的实验,也就是通常所说的跑马灯实验,首先让我们来完成必须的硬件部分,我们需要焊接上8个发光二极管和8个限流电阻,可以参考下面的原理图和实物图像进行操作,需要注意的是LED是有极性的,引脚长的为正极,引脚短的为负极,负极和电阻一侧连接,如果接错那么相应的那一路可能在实验中不会点亮了。

2.2电路图:.2.3上机程序:org 0000hajmp startorg 0030hstart:mov a,#7fhclr cmov r2,#08hloop: rrc amov p0,acall delaydjnz r2,loopmov r2,#07hloop1: rlc amov p0,acall delaydjnz r2,loop1jmp startdelay:d1: mov r4,#20d2: mov r5,#248djnz r5,$djnz r4,d2retend2.4调试结果及结论:八路发光二极管轮流点亮汇编语言的一大优势就是能够精确控制程序的执行时间,这在编写一些对时序要求严格的外围器件驱动时由为重要!三、二位数码管循环显示00~99的实验3.1设计内容:8段数码管显示.两位数码管显示00--99依次循环(动态扫描方式).p1做LED 显示数据输出口.p3.2;p3.3分别控制数码管个位数和十位数显示.用单片机进行数码显示应具有显示器件;应用最广泛的是8段数码管。

单片机音乐播放课程设计

单片机音乐播放课程设计

单片机音乐播放课程设计一、课程目标知识目标:1. 学生能理解单片机的原理和基本结构,掌握音乐播放器的设计流程。

2. 学生能掌握音乐播放器编程的基本语法和逻辑,如音符的时长、音调控制等。

3. 学生能了解并运用数字信号处理基本概念,如采样、量化等,解释音乐播放过程。

技能目标:1. 学生能运用单片机开发环境进行音乐播放器的程序编写、调试与下载。

2. 学生能通过实验和项目实践,掌握音乐播放器硬件与软件的协同设计方法。

3. 学生能够独立或合作完成音乐播放器的制作,展示作品并进行简单的故障排查。

情感态度价值观目标:1. 学生培养对电子技术和编程的兴趣,激发创新意识和探索精神。

2. 学生通过实践,培养问题解决能力和团队协作能力,增强自信心。

3. 学生通过创作音乐播放器,体会技术对生活的影响,培养社会责任感。

课程性质分析:本课程为实践性强的单片机应用课程,结合了电子技术、编程和音乐知识,旨在培养学生的动手能力、创新思维和综合应用能力。

学生特点分析:假设学生为高中生,具有一定的物理电子知识基础,对编程有一定了解,对音乐有基本的感知能力。

教学要求:课程需注重理论与实践相结合,鼓励学生主动探索和动手实践,强调过程评价和成果评价相结合,确保学生达到预定的学习目标。

二、教学内容1. 单片机基础知识:介绍单片机的组成、工作原理,重点讲解AT89C51单片机的内部结构、引脚功能及其编程特性。

相关教材章节:第一章单片机概述。

2. 音乐播放器原理:讲解音乐播放器的基本原理,包括音符的生成、音调控制、节拍控制等。

相关教材章节:第三章数字信号处理基础。

3. 编程语言与开发环境:学习单片机编程语言(如C语言),熟悉Keil、Proteus等开发工具的使用。

相关教材章节:第二章单片机编程语言与开发环境。

4. 硬件电路设计:学习音乐播放器硬件电路的设计,包括单片机、音频放大器、扬声器等元件的选型和连接。

相关教材章节:第四章单片机外围电路设计。

基于单片机多功能音乐播放器的设计

基于单片机多功能音乐播放器的设计

多功能音乐播放器的设计一、 设计任务与设计原理 1、设计任务(1) 可播放多首音乐,且通过按键来选择播放的音乐 (2) 选择音乐时,音乐名称在LCD 上显示(3) 音乐播放种类跨度要大一些,播放声音要清晰 电路原理图⑴、单片机最小系统电路,主要由:时钟振荡电路、复位电路、电源电路等组 成。

图2-1-2 单片机最小系统电路(2)、矩阵键盘输入电路⑶、LCD12864显示电路B O -------C O —图2-1-3 矩阵键盘输入电路图2-1-4 LCD12864显示电路(4) 、蜂鸣器播放电路POO/ADO P01/AD1 PO.2/AD2 PO3/AD3 PO.4/AD4 P0S/AD5 PO6/AD6 PO7/AD7 P2 <MA0 P2 1/A9 P2 2/A10 P2.J/A11 P2A/A12 P2 WA13 P2 7/A15 P3 CVRX Dpa.irrxoP3.2/IN1O P3.3/INT1 P3 4/TO P3 5fT1 P3.6AVRLCD1C, ! I -m m o -.J1J RV1 iDR?3531-■L - J J B JJZETJD0- JL'JIxTALIRSTPQ QTADO PO HW L DI P0 2/AD2 P0 3/AM P0 4/ACMP0 5/AD5 ro&AD6TO 决MP2 (¥A6 P2 P2 2MT0 1 PSEF4P2MT1 ALEP2.^AT2 EAP2 0M330图2-1-5 蜂鸣器播放电路2整体电路原理图LC01图2-1-6 系统仿真效果图二、软件设计 1、 流程图设计2、完整程序代码整个KEIL工程文件有4个.C文件和1个头文件组成,具体代码如下: (1 ) PlayMusic . c#include <REG52.H> #include "SoundPlay.h" #include<math.h>#define uchar unsigned char #define uint unsigned intsbit WAI_INT0=P3A2; // 复位//水平与垂直偏移uchar H_Offset=0; // uchar V_page_Offset=0; extern uchar Key_Num; extern uchar code Name_Of_Song[]; extern uchar KeyScan(); // 矩阵键盘扫描子程序extern voidLCD12864_Initialization();extern void Display_Word(uchar P2,uchar L2,uchar *M) reentrant; extern void Display_char(ucharP1,uchar L1,uchar *M) reentrant; void delay(uint K); //延时子程序void key_process();// 矩阵键盘按键处理子程序void Delay1ms(uint count){unsigned int i,j;for(i=0;i<count;i++) for(j=0;j<120;j++);}//*****************************Music******************************************************//挥着翅膀的女孩unsigned char code Music_Girl[]={ 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03,0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03,0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03,0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03,0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03,0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03,0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03,0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03, 0x15,0x17, 0x15,0x03,0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E,0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1F,0x03,0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66,0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03,0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03,0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03,0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x18,0x02, 0x18,0x03,0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02, 0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00,0x00,0x00}; //同一首歌unsigned char code Music_Same[]={ 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02, 0x15,0x00,0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02,0x18,0x66, 0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00, 0x17,0x01, 0x19,0x02,0x1B,0x02, 0x1B,0x70, 0x1A,0x03, 0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03, 0x19,0x02, 0x1A,0x02, 0x19,0x0C,0x18,0x0D, 0x17,0x03, 0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C, 0x10,0x02,0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03,0x1B,0x03, 0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02, 0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03,0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70, 0x18,0x03, 0x17,0x02, 0x15,0x03,0x15,0x03, 0x16,0x66, 0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02, 0x10,0x01,0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C, 0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03,0x18,0x66, 0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00,0x00,0x00 };//两只蝴蝶unsigned char code Music_Two[] ={ 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03,0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01,0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D,0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01, 0x17,0x03, 0x16,0x03,0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04, 0x0F,0x01,0x17,0x03, 0x19,0x03, 0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01, 0x16,0x03,0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D,0x15,0x00, 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03,0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03,0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03,0x19,0x03, 0x17,0x03, 0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03, 0x19,0x03, 0x1A,0x03,0x1F,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03,0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D,0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03, 0x1F,0x02,0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x17,0x16, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x0F,0x02, 0x10,0x03, 0x15,0x00, 0x00,0x00 };//死了都要爱unsigned char code Music_Three[]={ 0x17,0x03, 0x1F,0x02, 0x1F,0x03, 0x1F,0x03, 0x1F,0x02,0x20,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x16,0x03,0x16,0x03, 0x17,0x04, 0x17,0x04, 0x17,0x15, 0x18,0x03,0x18,0x04, 0x19,0x0E, 0x19,0x03, 0x1A,0x03, 0x16,0x02,0x16,0x04, 0x17,0x0E, 0x17,0x03, 0x18,0x16, 0x1A,0x04,0x1A,0x04,0x1B,0x03, 0x1A,0x04, 0x1B,0x0E, 0x1B,0x01,0x17,0x18, 0x17,0x03, 0x1F,0x02, 0x1F,0x03, 0x1F,0x03,0x1F,0x02, 0x20,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x03,0x16,0x03, 0x16,0x02, 0x17,0x04, 0x17,0x0E, 0x17,0x15,0x18,0x02, 0x18,0x04, 0x19,0x0E, 0x19,0x03, 0x1A,0x03,0x1F,0x02, 0x1B,0x02, 0x1A,0x15, 0x15,0x02, 0x0D,0x02,0x0E,0x02, 0x0D,0x03, 0x0D,0x03, 0x11,0x03, 0x11,0x03,0x0D,0x03, 0x11,0x03, 0x15,0x04, 0x15,0x0E, 0x1F,0x02,0x10,0x02, 0x10,0x03, 0x0F,0x03, 0x0E,0x66, 0x0E,0x03,0x0C,0x03, 0x0E,0x03, 0x16,0x03, 0x15,0x03, 0x15,0x67,0x11,0x04, 0x11,0x0E, 0x1B,0x02, 0x15,0x02, 0x0D,0x02,0x0E,0x66, 0x0D,0x03, 0x0D,0x03, 0x11,0x03, 0x11,0x03,0x0D,0x03, 0x11,0x03, 0x15,0x04, 0x15,0x0E, 0x15,0x04,0x17,0x03, 0x17,0x04, 0x17,0x03, 0x18,0x03, 0x10,0x02,0x10,0x67, 0x0F,0x03, 0x10,0x00, 0x18,0x0B, 0x18,0x03,0x19,0x03, 0x18,0x03, 0x16,0x03, 0x18,0x03, 0x17,0x03,0x17,0x15, 0x16,0x03, 0x16,0x04, 0x16,0x0E, 0x16,0x04,0x16,0x04, 0x17,0x03, 0x18,0x04, 0x17,0x67, 0x16,0x04,0x15,0x67, 0x15,0x03, 0x15,0x04, 0x15,0x0E, 0x15,0x04,0x15,0x04, 0x17,0x68, 0x17,0x0E, 0x17,0x03, 0x10,0x03,0x15,0x03, 0x17,0x03, 0x18,0x66, 0x18,0x04, 0x19,0x04,0x1A,0x03, 0x19,0x03, 0x18,0x03, 0x18,0x03, 0x18,0x03,0x17,0x04, 0x17,0x0E, 0x17,0x02, 0x16,0x04, 0x15,0x0E,0x15,0x16, 0x18,0x03, 0x18,0x04, 0x19,0x0E, 0x19,0x03,0x1A,0x03, 0x16,0x03, 0x16,0x04, 0x17,0x0E, 0x17,0x03,0x18,0x17, 0x1A,0x03, 0x1B,0x03, 0x1A,0x03, 0x1B,0x16,0x17,0x03, 0x1F,0x02, 0x1F,0x03, 0x1F,0x03, 0x1F,0x66,0x20,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x16,0x03,0x16,0x03, 0x17,0x04, 0x17,0x0E, 0x17,0x7B, 0x18,0x03,0x18,0x04, 0x19,0x0E, 0x19,0x03, 0x1A,0x03, 0x16,0x03,0x16,0x04, 0x17,0x0E, 0x17,0x04, 0x18,0x17, 0x1A,0x04,0x1A,0x04, 0x1B,0x03, 0x1A,0x04, 0x1B,0x72, 0x17,0x04,0x1F,0x02, 0x1F,0x03, 0x1F,0x03, 0x1F,0x66, 0x20,0x03,0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x16,0x03, 0x16,0x03,0x17,0x04, 0x17,0x0E, 0x17,0x67, 0x18,0x03, 0x18,0x04,0x19,0x0E, 0x19,0x03, 0x1A,0x03, 0x1F,0x02, 0x1B,0x02,0x1A,0x14, 0x00,0x00 };unsigned char code Music_End[]={0x00,0x00,0x00,0x00};//***********************************************************************************void main(){P1=0x0f;InitialSound();EX0=1;IT0=1;LCD12864_Initialization();// 液晶初始化函数// 以下显示“环境工程学院张小波”Display_Word(V_page_Offset+4,H_Offset,Name_Of_Song+15*32);Display_Word(V_page_Offset+4,16+H_Offset,Name_Of_Song+16*32);Display_Word(V_page_Offset+4,32+H_Offset,Name_Of_Song+19*32);Display_Word(V_page_Offset+4,48+H_Offset,Name_Of_Song+20*32);Display_Word(V_page_Offset+4,80+H_Offset,Name_Of_Song+21*32);Display_Word(V_page_Offset+4,96+H_Offset,Name_Of_Song+22*32);Display_Word(V_page_Offset+4,112+H_Offset,Name_Of_Song+23*32);while(1){ key_process();}}/* ------- 延时子程序------ */void delay(uint K){uint i,j;for(i=K;i>0;i--) for(j=120;j>0;j--);}/* -------------- 按键处理子程序-------------- */void key_process(){EA=1;KeyScan(); switch(Key_Num){case 13: delay(200);if (Key_Num==13) {//以下显示歌曲名:挥着翅膀的女孩Display_Word(V_page_Offset+2,H_Offset,Name_Of_Song+0*32);Display_Word(V_page_Offset+2,16+H_Offset,Name_Of_Song+1*32);Display_Word(V_page_Offset+2,32+H_Offset,Name_Of_Song+2*32);Display_Word(V_page_Offset+2,48+H_Offset,Name_Of_Song+3*32);Display_Word(V_page_Offset+2,64+H_Offset,Name_Of_Song+4*32);Display_Word(V_page_Offset+2,80+H_Offset,Name_Of_Song+5*32);Display_Word(V_page_Offset+2,96+H_Offset,Name_Of_Song+6*32);Play(Music_Girl,0,2,360);}break;case 2: delay(200);if (Key_Num==2)//以下显示歌曲名:同一首歌Display_Word(V_page_Offset+2,H_Offset,Name_Of_Song+24*32);Display_Word(V_page_Offset+2,16+H_Offset,Name_Of_Song+7*32);Display_Word(V_page_Offset+2,32+H_Offset,Name_Of_Song+8*32);Display_Word(V_page_Offset+2,48+H_Offset,Name_Of_Song+9*32);Display_Word(V_page_Offset+2,64+H_Offset,Name_Of_Song+10*32);Display_Word(V_page_Offset+2,80+H_Offset,Name_Of_Song+24*32);Display_Word(V_page_Offset+2,96+H_Offset,Name_Of_Song+24*32);Play(Music_Same,2,2,500);}//break; case 1: delay(200);if (Key_Num==1) {//以下显示歌曲名:两只蝴蝶Display_Word(V_page_Offset+2,H_Offset,Name_Of_Song+24*32);Display_Word(V_page_Offset+2,16+H_Offset,Name_Of_Song+11*32);Display_Word(V_page_Offset+2,32+H_Offset,Name_Of_Song+12*32);Display_Word(V_page_Offset+2,48+H_Offset,Name_Of_Song+13*32);Display_Word(V_page_Offset+2,64+H_Offset,Name_Of_Song+14*32);Display_Word(V_page_Offset+2,80+H_Offset,Name_Of_Song+24*32);Display_Word(V_page_Offset+2,96+H_Offset,Name_Of_Song+24*32);Play(Music_Two,0,2,360);} //break; case 5: delay(200);if (Key_Num==5) {//以下显示歌曲名:死了都要爱Display_Word(V_page_Offset+2,H_Offset,Name_Of_Song+24*32);Display_Word(V_page_Offset+2,16+H_Offset,Name_Of_Song+25*32);Display_Word(V_page_Offset+2,32+H_Offset,Name_Of_Song+26*32);Display_Word(V_page_Offset+2,48+H_Offset,Name_Of_Song+27*32);Display_Word(V_page_Offset+2,64+H_Offset,Name_Of_Song+28*32);Display_Word(V_page_Offset+2,80+H_Offset,Name_Of_Song+29*32);Display_Word(V_page_Offset+2,96+H_Offset,Name_Of_Song+24*32);Play(Music_Three,10,1,300);}break;/* case 5: delay(200);if (Key_Num==5)Play(Music_Three,0,2,360);} break; */}}void waibuzhongduan_INT0()interrupt 0{uchar i;EA=0;for(i=0;i<8;i++){ Display_Word(V_page_Offset+2,i*16+H_Offset,Name_Of_Song+24*32);}}(2) Keypad.c#include <reg52.H>#define uchar unsigned char#define uint unsigned int//扫描键盘时发送到0-3 列上的扫描码uchar KeyboardScanCode[4]={0xef,0xdf,0xbf,0x7f};uchar Key_Num=16;//---------------------------------------------------//扫描键盘并返回按键在键盘上的位置系列号//------------------------------------------------uchar KeyScan(){uchar Row=0,Col=0,Temp;for(Col=0;Col<4;Col++){P1=KeyboardScanCode[Col];Temp=P1&0x0f;if(Temp!=0x0f){switch(Temp){case 0x0e: Row=0;break;case 0x0d:Row=1;break;case 0x0b:Row=2;break;case 0x07:Row=3;break;}break;}P1=0x0f;return Key_Num=Row*4+Col; // 返回按键位置序号0-15}(3) 12864 显示驱动程序.C//------------------------- LCD_12864.c ------------------------// 名称:12864LCD 显示驱动程序(不带字库)//----------------------------------------------------------------#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define LCD_DB_PORT P0 // 液晶数据线端口DB0-DB7#define LCD_START_ROW 0xc0 // 起始行命令#define LCD_PAGE 0xB8 // 页指令#define LCD_COL 0x40 // 列指令bit Reverse_Display=0;// 是否反相显示(白底黑字/黑底白字) //液晶引脚定义sbit DI=P2A0;sbit RW=P2A1;sbit E=P2A2;sbit CS1=P2A3;sbit CS2=P2A4;sbit RST=P2A5;//------------------------------------------------------------- // 检查LCD 是否忙//------------------------------------------------------------- bit LCD_IS_BUSY(){LCD_DB_PORT=0xFF;RW=1;_nop_();DI=0;E=1;_nop_();E=0;return (bit)(P0&0x80);}//------------------------------------------------------------- // 向LCD 写入一个字节(一般用于发送命令)//------------------------------------------------------------- void Write_Byte_To_LCD(uchar comand){while(LCD_IS_BUSY());LCD_DB_PORT=0xFF;RW=0;_nop_();DI=0;LCD_DB_PORT=comand;E=1;_nop_();E=0;}//-------------------------------------------------------------// 向LCD 写入数据//-------------------------------------------------------------void Write_Data_To_LCD(uchar dat){while(LCD_IS_BUSY());LCD_DB_PORT=0xFF;RW=0;_nop_();DI=1;if(!Reverse_Display) //根据Reverse_Display 决定是否反相显示LCD_DB_PORT=dat;elseLCD_DB_PORT=~dat;E=1;_nop_();E=0;}//-------------------------------------------------------------// 初始化LCD//-------------------------------------------------------------void LCD12864_Initialization(){CS1=1;CS2=1;Write_Byte_To_LCD(0x38);Write_Byte_To_LCD(0x3F);Write_Byte_To_LCD(0x01);Write_Byte_To_LCD(0x06); Write_Byte_To_LCD(LCD_START_ROW);}//-------------------------------------------------------------r 所指的数组中//通用显示函数从第P页第L列显示W个字节数据,具体显示的数据在//-------------------------------------------------------------void LCD_Show(uchar P,uchar L,uchar W,uchar *r) reentrant uchar i;if(L<64){CS1=1;CS2=0;Write_Byte_To_LCD(LCD_PAGE+P);Write_Byte_To_LCD(LCD_COL+L); if(L+W<64){for(i=0;i<W;i++)Write_Data_To_LCD(r[i]);}else{for(i=0;i<64-L;i++)Write_Data_To_LCD(r[i]);CS1=0;CS2=1;Write_Byte_To_LCD(LCD_PAGE+P);Write_Byte_To_LCD(LCD_COL); for(i=64-L;i<W;i++)Write_Data_To_LCD(r[i]);}}else{CS1=0;CS2=1;Write_Byte_To_LCD(LCD_PAGE+P);Write_Byte_To_LCD(LCD_COL+L-64); for(i=0;i<W;i++)Write_Data_To_LCD(r[i]);}}//-------------------------------------------------------------//显示一个8X 16点阵字符//-------------------------------------------------------------void Display_char(uchar P1,uchar L1,uchar *M) reentrant{LCD_Show(P1,L1,8,M);LCD_Show(P1+1,L1,8,M+8);}//-------------------------------------------------------------------//显示一个16 X 16点阵字符(汉字上半部分与下半部分分别处在相邻两页中) // --------------------------------------------------------------------void Display_Word(uchar P2,uchar L2,uchar *M) reentrant{LCD_Show(P2,L2,16,M);LCD_Show(P2+1,L2,16,M+16);}(4) DotMatrix.c// -----------------------------------------------// 与本程序有关的数字和汉字的点阵编码DotMatrix.c// ----------------------------------------------#include <reg51.h>#include <string.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int//年、月、日、星期、时、分、秒等汉字点阵(16X16)uchar code Name_Of_Song[]={/*-- 文字0: 挥--*/0x08,0x08,0x08,0xFF,0x88,0x48,0x16,0xD2,0x3A,0x16,0xD2,0x12,0x12,0x16,0x02,0x00,0x02,0x42,0x81,0x7F,0x00,0x08,0x09,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x08,0x00, /*--文字1: 着--*/0x00,0x44,0x54,0x54,0x55,0x56,0xD4,0x7C,0x54,0x54,0x56,0x55,0x54,0x44,0x44,0x00,0x08,0x08,0x04,0x04,0x02,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0xFF,0x00,0x00,0x00,/*-- 文字2: 翅--*/0x04,0xE4,0x24,0x3F,0x24,0xE4,0x0A,0x32,0x82,0xFE,0x08,0x32,0x82,0xFE,0x00,0x00,0x40,0x21,0x16,0x08,0x16,0x21,0x22,0x49,0x50,0x4F,0x42,0x49,0x50,0x4F,0x40,0x00, /*--文字3: 膀--*/0x00,0xFE,0x12,0x12,0xFE,0x00,0x64,0x24,0x2C,0x75,0xA6,0x34,0x2C,0x64,0x24,0x00,0xC0,0x3F,0x41,0x81,0x7F,0x00,0x81,0x61,0x1F,0x05,0x45,0x85,0x7D,0x01,0x00,0x00, /*--文字4: 的--*/0x00,0xF8,0x8C,0x8B,0x88,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,0x7F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x03,0x26,0x40,0x20,0x1F,0x00,0x00, /*--文字5: 女--*/0x20,0x20,0x20,0x20,0xE0,0x38,0x27,0x20,0x20,0x20,0xE0,0x20,0x20,0x20,0x20,0x00,0x80,0x80,0x40,0x41,0x22,0x22,0x14,0x0C,0x0C,0x0B,0x10,0x30,0xE0,0x40,0x00,0x00, /*--文字6: 孩--*/0x02,0x02,0x02,0xF2,0x8A,0x06,0x44,0x64,0x54,0x4D,0x46,0xC4,0x64,0x04,0x04,0x00,0x01,0x23,0x41,0x3F,0x00,0x48,0x48,0x24,0x24,0x12,0x09,0x0C,0x12,0x61,0x00,0x00, /*--文字7: 同--*/0x00,0xFE,0x02,0x12,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x02,0xFE,0x00,0x00,0x00,0xFF,0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x08,0x1F,0x40,0x80,0x7F,0x00,0x00, /*--文字8: 一--*/0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字9: 首--*/0x04,0x04,0x04,0xE4,0x25,0x26,0x34,0x2C,0x24,0x24,0x26,0xE5,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x7F,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0x00,0x00,/*-- 文字10: 歌--*/ 0x80,0xBA,0xAA,0xAA,0xBA,0x82,0xFE,0xA2,0x90,0x0C,0xEB,0x08,0x28,0x18,0x08,0x00, 0x00,0x1E,0x12,0x12,0x5E,0x80,0x7F,0x40,0x20,0x18,0x07,0x08,0x30,0xE0,0x40,0x00,/*-- 文字11: 两--*/ 0x02,0xF2,0x12,0x12,0x12,0xFE,0x92,0x12,0x12,0xFE,0x12,0x12,0x12,0xFB,0x12,0x00,0x00,0x7F,0x08,0x04,0x03,0x00,0x10,0x09,0x06,0x01,0x01,0x26,0x40,0x3F,0x00,0x00,/*-- 文字12: 只--*/ 0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,0x40,0x20,0x31,0x18,0x0E,0x04,0x00,0x00,0x00,0x02,0x04,0x19,0x70,0x20,0x00,/*-- 文字13: 蝴--*/ 0xF0,0x10,0xFF,0x10,0xF0,0x08,0x88,0xFF,0x88,0x08,0x00,0xFE,0x12,0x12,0xFE,0x00,0x43,0x42,0x3F,0x2A,0x73,0x20,0x0F,0x88,0x4F,0x20,0x18,0x07,0x41,0x81,0x7F,0x00,/*-- 文字14: 蝶--*/ 0x00,0xF8,0x08,0xFF,0x08,0xF8,0x04,0xFE,0x84,0xBF,0xA4,0xA4,0xBF,0x84,0x04,0x00,0x10,0x11,0x11,0x0F,0x09,0x9D,0x4A,0x22,0x1A,0x06,0xFF,0x06,0x0A,0x72,0x22,0x00,/*-- 文字15: 环--*/ 0x00,0x22,0x22,0xFE,0x22,0x22,0x00,0x02,0xC2,0x32,0xFE,0x42,0x82,0x02,0x02,0x00,0x00,0x04,0x04,0x03,0x12,0x0A,0x04,0x03,0x00,0x00,0xFF,0x00,0x00,0x03,0x0E,0x00,/*-- 文字16: 境--*/ 0x20,0x20,0xFE,0x20,0x20,0x00,0x24,0xAC,0xB4,0xA5,0xA6,0xB4,0xAC,0x24,0x00,0x00,0x10,0x30,0x1F,0x08,0x08,0x00,0x80,0x4F,0x3A,0x0A,0x0A,0x7A,0x8F,0x80,0xE0,0x00,/*-- 文字17: 工--*/ 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,/*-- 文字18: 程--*/0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00,/*-- 文字19: 学--*/ 0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,/*-- 文字20: 院--*/ 0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00,/*-- 文字24: --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*-- 文字25: 死--*/0x00,0x02,0xC2,0xB2,0x1E,0x12,0x92,0x72,0x02,0xFE,0x82,0x42,0x42,0x22,0x22,0x00,0x42,0x41,0x20,0x20,0x13,0x0C,0x03,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00,/*-- 文字26: 了--*/0x00,0x02,0x02,0x02,0x02,0x02,0x02,0xF2,0x12,0x0A,0x0A,0x06,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字27: 都--*/0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x24,0x00,0xFE,0x22,0x52,0x8A,0x06,0x00,0x04,0x02,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0xFF,0x08,0x08,0x10,0x0F,0x00, /*-- 文字28: 要--*/0x02,0x02,0xFA,0x4A,0x4A,0xFE,0x4A,0x4A,0x4A,0x7E,0x4A,0x4A,0xFA,0x02,0x02,0x00,0x02,0x82,0x82,0x42,0x4E,0x2B,0x2A,0x12,0x12,0x12,0x2A,0x26,0xC2,0x42,0x02,0x00, /*-- 文字29: 爱--*/0x00,0x40,0xB2,0x96,0x9A,0x92,0xF6,0x9A,0x93,0x91,0x99,0x97,0x91,0x90,0x30,0x00,0x40,0x20,0xA0,0x90,0x4C,0x47,0x2A,0x2A,0x12,0x1A,0x26,0x22,0x40,0xC0,0x40,0x00,};〃0-9等数字点阵(8X 16)uchar code Digits[]={0x00,0x00,0xF0,0xF8,0x08,0x68,0xF8,0xF0,0x00,0x00,0x07,0x0F,0x0B,0x08,0x0F,0x07, //00x00,0x20,0x20,0x30,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00, //10x00,0x30,0x38,0x08,0x88,0xF8,0x70,0x00,0x00,0x0C,0x0E,0x0B,0x09,0x08,0x08,0x00, // 2 0x00,0x30,0x38,0x88,0x88,0xF8,0x70,0x00,0x00,0x06,0x0E,0x08,0x08,0x0F,0x07,0x00, //30x00,0x00,0xF8,0xF8,0x00,0xE0,0xE0,0x00,0x00,0x03,0x03,0x02,0x02,0x0F,0x0F,0x02,//40x00,0xF8,0xF8,0x88,0x88,0x88,0x08,0x00,0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,//50x00,0xC0,0xE0,0x78,0x58,0xC8,0x80,0x00,0x00,0x07,0x0F,0x08,0x08,0x0F,0x07,0x00,//60x00,0x08,0x08,0x88,0xE8,0x78,0x18,0x00,0x00,0x00,0x0E,0x0F,0x01,0x00,0x00,0x00,//70x00,0x70,0xF8,0xC8,0x88,0xF8,0x70,0x00,0x00,0x07,0x0F,0x08,0x09,0x0F,0x07,0x00,//80x00,0xF0,0xF8,0x08,0x08,0xF8,0xF0,0x00,0x00,0x00,0x09,0x0D,0x0F,0x03,0x01,0x00,//9};(5) SOUNDPLAY .H/说明**************************************************************************曲谱存贮格式unsigned char code MusicName{ 音高,音长,音高,音长..... , 0,0}; 末尾:0,0 表示结束(Important)音高由三位数字组成:个位是表示1~7 这七个音符十位是表示音符所在的音区:1-低音,2-中音,3-高音;百位表示这个音符是否要升半音: 0-不升, 1 -升半音。

单片机课程设计报告--简易音乐播放器

单片机课程设计报告--简易音乐播放器

第一章前言伴随着科技的发展和时代的进步,人们对生活质量的要求也越来越高,由以前简单的追求温饱和物质财富转向更高层面的精神追求!而这一切催生了智能仪器的发展,音乐则是人们娱乐生活的重要组成部分,目前市场上出现了许许多多的音乐播放器,而人们对播放器的功能需求也越来越广泛,本文将设计一个基于单片机的音乐播放器,通过对其全面的介绍与分析,让大家了解音乐播放器的原理!第二章: 简易音乐播放器的功能和原理说明音乐播放器,可以通过单片机板子上的数字按键对音乐播放的曲目进行控制,并且通过LED灯将播放的音乐加以区分,在播放音乐的同时点亮LED灯,让人知道现在正在播放的音乐曲目,从而实现简单的音乐播放功能!表1 需求分析功能说明:这次设计是依据单片机技术原理,通过硬件电路设计以及软件的编译而设计的一个简单的音乐播放器,可以通过按键选择播放四首歌曲(歌曲自选,只要将想要播放的歌曲的乐谱写入程序中即可)同时点亮相应的LED灯,并用它来指示当前播放的歌曲序列,只能实现简单的音乐播放功能。

原理说明:这个音乐播放器主要有晶振电路,复位电路,LED电路,按键电路以及扬声器组成。

它利用单片机产生乐曲音符,再把乐曲音符翻译成计算机音乐语言,接着用单片机进行信息处理,再通过蜂鸣器或喇叭放出音乐。

音乐的产生主要是通过单片机的I/O口输出高低不同的脉冲信号来控制扬声器发音。

通常利用单片机的内部定时器0,工作在方式1下,再改变计数初值TH0和TL0来产生不同频率。

当控制歌曲按键按下时,按照预先存放在单片机中的程序,就会自动判断键值,然后启动计数器,按照程序产生一定频率的脉冲,接着通过uln2003芯片驱动扬声器,播放出乐曲。

该硬件电路中用P3.0,P3.1,P3.2,P3.3控制四个按键,“0”,“1”,“2”,“3”分别控制四首音乐。

P1.0,P1.1,P1.2,P1.3控制四个LED灯,它们分别对应四个按键,用来显示正在播放的歌曲,并用P2.3 来控制扬声器,电路为12MHz晶振频率工作,起振电路中C1 和C2为22pf。

课程设计单片机音乐播放器最终定稿

课程设计单片机音乐播放器最终定稿

目录绪论 .................................................................................... - 1 -一、单片机概述................................................................................ - 1 -二、单片机的应用领域 ..................................................................... - 2 -(一)、在智能仪器仪表的应用.............................. - 2 -(二)、在家用电器中的应用................................ - 2 -(三)、在工业控制中的应用................................ - 2 -(四)、在计算机网络和通信领域中的应用.................... - 2 -(五)、单片机在医用设备领域中的应用...................... - 2 -三、单片机的发展趋势 ..................................................................... - 2 -(一)、微型单片化........................................ - 3 -(二)、低功耗CMOS化................................... - 3 -(三)、主流与多品种共存.................................. - 3 -正文 .................................................................................... - 3 -一、设计任务要求 .............................................................................. - 4 -二、硬件电路设计 .............................................................................. - 4 -(一)、确定机型......................................... - 4 -(二)、选择元器件....................................... - 4 -(三)、硬件原理......................................... - 4 -(四)、I/O口 ........................................... - 4 -(五)、定时器/计数器.................................... - 5 -(六)、键盘............................................. - 6 -(七)、显示............................................. - 7 -三、资源分配..................................................................................... - 7 -四、软件设计及流程图 ....................................................................... - 7 -(一)、声音三要素....................................... - 8 -(二)、音符发音原理..................................... - 9 -(三)、单片机产生不同频率脉冲信号的原理................. - 9 -(四)、音符设计........................................ - 11 -(五)、流程图.......................................... - 14 -五、调试过程,存在问题及讨论 ........................................................ - 17 -(一)、系统受到干扰的主要原因和现象..................... - 17 -(二)、系统可靠性设计的分析和方法....................... - 17 -六、课程设计的体会.......................................................................... - 19 -七、参考文献.................................................................................... - 20 -附录:源程序............................................................................... - 21 -曲谱 ............................................................................... - 29 -绪论一、单片机概述单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

单片机课程分析报告之音乐播放器

单片机课程分析报告之音乐播放器

单片机课程设计之音乐播放器学生姓名学号所在学院(三、方案与论证 ......................................................................四、设计内容 ........................................................................(一)系统框图和设计原理图.......................................................(二)软件设计流程图.............................................................五、总结 ............................................................................一、设计功能(一)基本功能1.利用口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,演奏乐.基于单片机的音乐播放器可应用于,,扩音器等很多方面,并可作为很多系统的辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括""、""、""等音阶在内的各种频率声音。

将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋律。

基于这个思想,我设计了一款特殊的"音乐播放器",本播放器可实现播放、暂停、复位等功能。

为了体现乐曲播放过程中的动态效果,增加了只,作随机闪烁以指示旋律的节奏。

由于时间及条件限制,本设计实现了一种简单的音乐播放器,其核心器件采用单片机,本播放器具有电路简单,功能强大,易于拓展等特点。

在此基础上,可以添加按键,显示屏等模块,实现切换歌曲,歌名显示,动感音乐屏等功能。

四、设计内容(一)系统框图和设计原理图图中,为复位键,为键盘电路,可以进行选择曲目。

单片机音乐播放器课程设计总结

单片机音乐播放器课程设计总结
硬件设备
软件问题:编 写高效的程序 代码,优化算 法,提高运行
效率
兼容性问题: 确保播放器能 够兼容多种音 频格式和设备
用户体验问题: 优化用户界面, 提高易用性和
用户体验
经验教训
问题:硬件设计复杂,需要深入了解单片机原理 解决方案:查阅相关资料,请教专业老师 问题:软件编程难度大,需要掌握C语言和单片机编程技巧 解决方案:参加相关培训,实践操作,积累经验
词显示方式
音效调节:调节音效, 如低音、高音、环绕
声等
定时关闭:设置定时 关闭时间,到时间后
自动关闭播放器
音量控制功能
音量调节:通过按键或触摸屏调节音量大小 音量显示:在屏幕上显示当前音量值 音量记忆:保存用户设定的音量值,下次开机自动恢复 音量均衡:实现左右声道音量平衡,提高音质效果
歌曲切换功能
功能描述:用户可以通过按键或触摸屏等方式切换歌曲 实现方法:通过单片机控制音频解码芯片,实现歌曲的切换 技术难点:如何实现歌曲的平滑切换,避免出现声音中断或卡顿 解决方案:采用缓冲技术,提前加载下一首歌曲,实现无缝切换
其他附加功能
定时播放:设置播放时间,到时自动停止 音量调节:根据需要调整音量大小 歌曲切换:支持上一首、下一首、随机播放等功能 歌词显示:支持歌词同步显示,方便用户跟唱
对课程设计的建议
加强实践操作,提高动手能力 增加课程难度,提高挑战性 增加团队合作,提高沟通协作能力 增加课程内容,提高知识面和技能水平
感谢观看
汇报人:
06
课程设计的收获与展望
收获与体会
掌握了单片机的基本原理和编程方法 提高了硬件设计和调试能力 学会了如何将理论知识应用到实际项目中 增强了团队合作和沟通能力 对未来在电子领域的发展有了更清晰的认识和规划

用单片机制作简单音乐播放器代码

用单片机制作简单音乐播放器代码
0xdf; if(k==7) return 0xbf; if(k>=8) return 0x7f; }
} void song3() {
uint temp;
uchar jp;//jp 是简谱 //用于产生各种音调 j=0; while(!RI) {
temp=ysysljj[h]; jp=temp/16; //取数的高 4 位 P1=light(jp); if(jp!=0) {
timeh=cuzhi[jp*2]; timel=cuzhi[jp*2+1]; } else { TR0=0; fm=1;//关蜂鸣器 } delay2(temp%16); //取数的低 4 位 TR0=0; //唱完一个音停 30MS fm=1; P1=0xff; delay(30); TR0=1; h++; if(h==44) h=0; }
write_data(table5[num]); delay(20); } EA=1;//开总中断 EX0=1;//开外部中断 IT0=1;//外部中断 0 下降沿触发方式 EX1=1;//开外部中断 1 IT1=1;//外部中断 1 下降沿触发方式 TH0=0; TL0=0; ET0=1; song3();
ET0=1; song2();
} void song2() {
uint temp;
uchar jp;//jp 是简谱 //用于产生各种音调 j=0; while(!RI) {
temp=wnyhln[k]; jp=temp/16; //取数的高 4 位 P1=light(jp); //LED 灯伴随音调的变化而闪烁 if(jp!=0) {
};
uchar code cuzhi[]={
0xFF,0xFF,//占位 0xFC,0x8E,//中央 C 调 1-7

单片机音乐播放器课程设计报告

单片机音乐播放器课程设计报告

目录一.课程设计任务及要求 (1)二.硬件系统概述 (3)三.软件系统概述 (7)四.安装调试说明 (14)五.总结与体会 (15)六.参考文献 (16)一.课程设计任务及要求1.1 设计任务设计一个具有特定功能的音乐播放器。

该音乐播放器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。

该音乐播放器可以播放多首音乐,曲目选择可以由键盘控制,曲目名称可以显示在显示器上。

1.2 功能要求说明设有四个按键,其中两个能实现多首音乐的选择,另一个能实现开始功能和单曲重播的功能,最后一个能实现复位和关闭歌曲的功能。

设有一位数码管,每选择一首曲子能在数码管上显示当前的曲目(只是数字)。

设有八位二极管,能随歌曲频率闪烁。

1.3 总体方案介绍及工作原理说明1.3.1 总体方案介绍作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括“Do“、“Re“、“Me“--等音阶在内的各种频率声音。

在此设计中我们采用12MHz的晶振,产生的频率信号即音乐信号由P3.7口输出,信号经过放大后由喇叭发出声音。

乐曲中,每一音符对应着确定的频率,我们可以参照给出的各音符频率及其相应的时间常数来编写程序,根据表中所提供的常数,将其16进制代码送入芯片里,可以奏出音符。

音符的节拍我们可以用定时器T0来控制,送入不同的初值,就可以产生不同的定时时间。

便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。

其它节拍与时间的对应关系也可以从两者关系表中得到。

定时器T0工作在定时方式1,改变TH0及TL0,产生不同的音频频率。

要编写的乐谱按要求以音符字节数据表的形式存放在程序中,改变乐曲就是通过改变该数据表的内容来实现的。

主程序的任务是按顺序读取数据表中的字节,根据情况调用音级子程序和音长子程序,启动定时器T0进行工作。

1.3.2 工作原理说明(1)要生产音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间.利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲.(2)利用8051的内部定时器使用其工作在计数器模式MODE1下,改变计数值THO及TLO以产生不同频率的方法.(3)例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次计数956次时将I/O反相,就可得到中音DO (523Hz).计数脉冲值与频率的关系公式如下:N=Fi÷2÷Fr……………………………………………1.1 N: 计算值; Fi: 内部计时一次为1us, 故其频率为1MHz;(4)其计数值的求法如下:T=65536-N=65536-Fi÷2÷Fr ……………………………1.2 例如: 设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。

单片机课程设计-音乐播放器

单片机课程设计-音乐播放器

徐州师范大学科文学院本科生课程设计课程名称:单片机课程实训题目:播放音乐专业班级: 08 电信学生姓名:学生学号:日期: 2011-6-15指导教师:科文学院教务部印制指导教师签字:年月日目录摘要 (II)Abstract (II)1 课题背景(或绪论、概述) (1)1.1 XXXX (1)1.2 XXXX (x)2 设计方案简述 (x)2.1 XXXX (x)2.2 XXXX (x)2.3 XXXX (x)3 详细设计 (x)3.1 XXXX (x)3.1 XXXX (x)4 设计结果及分析 (x)4.1 XXXX (x)4.2 XXXX (x)4.3 XXXX (x)5总结 (x)参考文献 (x)附录主要程序代码 (x)摘要单片机具有优异的性能价格比,并且具备集成度高、体积小、可靠性高、控制功能强、低电压、低功耗等优点。

因此随着单片机技术的发展,单片机正逐步应用到人们生活中的各个方面:1、在智能仪器仪表中的应用:在各类仪器仪表中引入单片机,使仪器仪表智能化,提高测试的自动化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比。

2、在实时过程控制中的应用:用单片机实时进行数据处理和控制,使系统保持最佳工作状态,提高系统的工作效率和产品的质量。

本次课程设计我们就充分利用所学的单片机技术设计制作一个音乐播放器,通过实际单片机线路设计以及汇编语言程序设计巩固所学知识,锻炼动手能力,体验汇编语言程序设计中可能出现的各种问题,并努力解决。

关键词:单片机;扬声器;音符;音乐; I/O接口AbstractSCM has excellent performance to price, and have high level of integration, small size, high reliability and control function is strong, low voltage, low power consumption, etc. So with the development of the single chip microcomputer, microcontroller is gradually applied to people living in all aspects: 1, intelligent instruments in the application of all kinds of instruments in introducing a single-chip microcomputer, make instruments intelligent, improve test automation degree and precision, simplify the instruments of hardware structure, improve its performance to price. 2, in real time the application process control with single-chip computer: real-time data processing and control, make the system to keep the best working state, and improve the system of work efficiency and the quality of the products. In this class, we will make full use of my knowledge and design of the single chip microcomputer design a music player, through the actual line design and assembly language chip program design consolidate knowledge, exercise beginning ability, experience in assembler language programming possible problems, and work hard to solve.Keywords:SCM ;speaker notes ;music; I/O interface1 概述单片机概述单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

音乐播放器单片机课程设计

音乐播放器单片机课程设计

一.概述................................ 错误!未定义书签。

二.系统整体方案设计 ......... 错误!未定义书签。

三.硬件设计 ......................... 错误!未定义书签。

89C51单片机.................... 错误!未定义书签。

图3-1和3-2...................... 错误!未定义书签。

I/O并行口直接驱动LED显示错误!未定义书签。

四.软件设计..................... 错误!未定义书签。

.软件设计............................ 错误!未定义书签。

五.系统调试与仿真 ................ 错误!未定义书签。

软件仿真时期..................... 错误!未定义书签。

系统的仿真调试时期......... 错误!未定义书签。

硬件安装调试..................... 错误!未定义书签。

六.总结 .................................... 错误!未定义书签。

参考文献 ................................. 错误!未定义书签。

附录A:音乐播放器电路设计图错误!未定义书签。

附录B:程序清单 ............. 错误!未定义书签。

一.概述本课题要求以单片机为核心设计一个音乐播放器,完成多曲选择播放操纵、停止操纵、省电模式操纵等功能。

音乐播放器利用单片机的按时器产生乐谱的各类频率方波,信号通过放大后由喇叭发作声音,选取某段音乐使单片机持续播放。

设计3个按键:播放/停止、下一曲、上一曲;4位LED显示器,用来显示所选曲目,该显示器在播放期间为了节省电源,设计为关闭状态,当一歌曲演奏终止,或选曲时显示器才显示曲目信息。

整体的设计思路是如此的。

二.系统整体方案设计本课题要求以单片机为核心设计一个简易音乐播放器,具有自动播放乐曲的功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机期末检测报告学生姓名:***学生学号:********专业班级:自动化12-2班基于MSP430G2的音乐切换器一、内容通过MSP430G2播放自己所设置的歌曲,并通过按键S2切换另一首歌曲二、思路与方法(1)思路:通过老师上课所讲的F6638音乐器播放实例,想利用MSP430G2来进行音乐播放,阅读网上单片机播放音乐例程并加以改编,并试想利用按键S2来进行歌曲的实时切换(2)音乐:通过MSP430蜂鸣器音高音长对照表,将自己喜欢的音乐通过音乐简谱改成相应代码,利用播放函数play_song()进行歌曲播放。

演奏乐曲对于一个音符应该包括两个部分,声调用简单的延时-电平翻转来实现,改变了延时的时间就改变了声调,而时间通过计数比较来实现,当计数值相等时就跳出循环演奏下一个音符。

(3)按键S2:通过中断服务、事件检测、事件处理函数,通过按键S2切换歌曲(4)硬件:无源蜂鸣器、MSP430G2单片机有流程图:三、程序调试(1)遇到的问题与解决方法按键S2切换歌曲开始不能进行实时切换,首先是我将实验是检测按键的程序进行整改加入主程序中while(1),这样只有长按S2键才能播放下一曲。

后来查阅书籍关于MSP430G2中断服务的程序后,调用这些函数,并设置变量i放在两个音乐播放函数中,通过判断i=1或0进行选歌。

开始编曲时候并未按照音高、音长对照表进行编曲,所以导致歌曲无调子,后在搜集到资料后进行整改进行改曲。

开始蜂鸣器声音略小,后发现是正负导线接反所致。

(2)程序段/*********************************************时钟频率务必为8MHz,定时器为8分频*********************************************/#include<msp430g2553.h>typedef unsigned char uchar;#include"music.h"//乐曲1#include"te.h"//乐曲2#define Buzzer BIT3#define Buzzer_Port P2OUT#define Buzzer_DIR P2DIRuchar counter;void Play_Song(void);void Delay_Nms(uchar n);void ss(void);void P1_IODect();void P13_Onclick();static int i=0;/***************主函数****************/void main(void){WDTCTL = WDTPW + WDTHOLD;//关闭看门狗P1DIR |= BIT0;P1OUT |= BIT0;P1REN |= BIT3;P1OUT |=BIT3;P1DIR &=~BIT3;P1IES |= BIT3;P1IE |= BIT3;BCSCTL1=CALBC1_8MHZ; //晶振选择DCO中的8MHzDCOCTL=CALDCO_8MHZ; //选择系统主时钟为8MHz//CCTL0 = CCIE;CCR0 = 7200; //设定拍速TACTL |= TASSEL_2 + ID_3; //TimerA定时器分频要选8分频 Buzzer_DIR |= Buzzer; //设置控制蜂鸣器的IO方向为输出 _EINT(); //打开全局中断//循环演奏歌曲while(1){if (i==0)//按键没按下{Play_Song();}else {ss();}}}/*******************************************函数名称:TimerA_ISR功能:定时器A的中断服务函数********************************************/#pragma vector = TIMER0_A0_VECTOR__interrupt void TimerA_ISR(void){counter++;}/*******************************************函数名称:PORT1_ISR功能:响应p1口的外部中断服务********************************************/#pragma vector =PORT1_VECTOR__interrupt void PORT1_ISR(void){P1_IODect();P1IFG=0;}/*******************************************函数名称:P1_IODect()功能:判断具体引发中断的I/O,并调用相应I/O的中断事件处理函数********************************************/void P1_IODect(){unsigned int Push_Key=0;Push_Key=P1IFG&(~P1DIR);__delay_cycles(10000);if((P1IN&Push_Key)==0){switch(Push_Key){case BIT3:P13_Onclick(); break;default: break;}}}/*******************************************函数名称:P13_Onclick()功能:事件处理函数********************************************/void P13_Onclick(){if(i==0){i=1;}elsei=0;P1OUT ^=BIT0;}/*******************************************函数名称:Delay_Nms功能:延时N个ms的函数参数:n--延时长度返回值:无********************************************/void Delay_Nms(uchar n){uchar i,j;for( i = 0;i < n; i++ ){for( j = 0;j < 3;j++ )_NOP();}}/*******************************************函数名称:Play_Songss********************************************/void Play_Song(void){uchar Temp1,Temp2;//Temp1放音调决定了音调的高低,Temp2放音长决定了某个音的演奏时间uchar addr = 0; //SONG数组中每两个为一组第一字节为音调,第二字节为音长counter = 0; //中断计数器清0while(i==0){Temp1 = songsong[addr++];if ( Temp1 == 0xFF ) //休止符{TACTL &=~MC_1; //停止计数Delay_Nms(100);}else if ( Temp1 == 0x00 ) //歌曲结束符{return;}else{Temp2 = songsong[addr++];TACTL |=MC_1; //开始计数while(1){Buzzer_Port ^= Buzzer;Delay_Nms(Temp1);if ( Temp2 == counter ){counter = 0;break;}}}}}void ss(void){uchar Temp1,Temp2;//Temp1放音调决定了音调的高低,Temp2放音长决定了某个音的演奏时间uchar addr = 0; //SONG数组中每两个为一组第一字节为音调,第二字节为音长counter = 0; //中断计数器清0while(i==1){Temp1 = gg[addr++];if ( Temp1 == 0xFF ) //休止符{TACTL &=~MC_1; //停止计数Delay_Nms(100);}else if ( Temp1 == 0x00 ) //歌曲结束符{return;}else{Temp2 = gg[addr++];TACTL |=MC_1; //开始计数while(1){Buzzer_Port ^= Buzzer;Delay_Nms(Temp1);if ( Temp2 == counter ){counter = 0;break;}}}}}const unsigned char songsong[]= //歌曲1 CCR0=7200,格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,{0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,}; const unsigned char gg[]= //歌曲2 CCR0=7200{ 0x18, 0x30, 0x1C , 0x10, 0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 ,0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C, 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18, 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00 };四、调试结果红灯亮第一首歌:红灯灭第二首歌:结果说明:调试结果,达到了预期通过S2切换歌曲的功能五、总结与体会通过这次的课程设计,我学会了MSP430单片机定时器、中断服务模块、I/O 输入输出系统等。

相关文档
最新文档