单片机音乐盒课程设计报告

合集下载

单片机应用技术课程报告~音乐盒的设计

单片机应用技术课程报告~音乐盒的设计

单片机应用技术课程报告实验名称音乐盒的设计实验时间2020年7月3 日学生姓名实验地点钉钉群线上同组人员专业班级1、实验目的1、能够在Keil软件中查看变量,掌握程序调试的基本方法;2、掌握定时器/计数器的使用和编程方法3、掌握在µVision环境中调试定时器/计数器程序的方法;4、掌握在Proteus环境中,实现定时器/计数器仿真应用。

2、任务设计要求任务要求:利用单片机定时器/计数器设计一个音乐盒。

以51单片机芯片作为控制核心,按键作为输入部分通过K2按键可以选择待播放的几段音乐种的一段,K1按键可播放选定的音乐段,在播放的过程中还可以用暂停,扬声器作为输出设备,数码管显示按键的4个字符,来表示当前所按下的键,设计采用单片机控制的音乐播放器,实现内置音乐播放功能。

3、总体设计方案根据实验任务要求,通过功能分析,设计的系统总体方案如图所示。

并行接口AT89C51单片机电源时钟电路复位电路数码管显示扬声器4、硬件电路设计5、软件程序设计(2)程序清单#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar Song_Index=0,Tone_Index=0;sbit SPK=P3^7; //蜂鸣器sbit K1=P1^0; //播放和停止键uchar code TAB[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x30}; uchar code HT_LTS[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248}; uchar code L0_LIS[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3}; //标准音符对应的延时表uchar code Song[][50]={{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,5,3,2,1,2,1,-1},{3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,5,3,3,2,1,1,-1}, {3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,2,1,3,2,1,1,-1},{1,1,5,5,6,6,5,4,4,3,3,2,2,1,5,5,4,4,3,3,2,5,5,4,4,3,3,2,1,1,5,5,6,6,5,4,4 ,3,3,2,2,1,-1}}; //四段音乐的音符(这些音乐是可以任意编写的,可以自己修改)uchar code2)性能指标测试及结果分析。

单片机音乐盒课程设计

单片机音乐盒课程设计

单片机音乐盒课程设计一、课程目标知识目标:1. 让学生理解单片机的基本原理和编程方法,掌握音乐盒制作的硬件和软件需求。

2. 使学生掌握音乐盒音符的组合和编排,能运用单片机制作个性化的音乐作品。

3. 帮助学生了解声音的产生、传播和接收过程,提高对声学知识的理解和应用能力。

技能目标:1. 培养学生动手实践能力,能独立完成单片机音乐盒的组装和编程。

2. 培养学生创新思维和问题解决能力,能针对实际问题提出解决方案并优化改进。

3. 提高学生团队协作能力,能在小组合作中发挥个人优势,共同完成项目任务。

情感态度价值观目标:1. 培养学生对单片机编程和电子制作的兴趣,激发学习热情和积极性。

2. 培养学生勇于尝试、不断探索的精神,增强克服困难的信心和毅力。

3. 培养学生关注社会、关爱他人的责任感,通过音乐盒的制作,传递美好情感,传播正能量。

课程性质:本课程为实践性强的课程,旨在通过单片机音乐盒的制作,将理论知识与实际应用相结合,提高学生的综合素养。

学生特点:学生具备一定的电子基础知识,对单片机和编程有一定了解,喜欢动手实践,富有创新精神。

教学要求:教师应注重理论与实践相结合,引导学生主动探究,鼓励学生创新思维,关注学生个体差异,提供个性化指导。

通过课程学习,使学生达到预定的学习成果,为后续学习打下坚实基础。

二、教学内容1. 理论知识:- 单片机原理与编程基础:介绍单片机的硬件结构、工作原理,C语言编程基础。

- 声音原理:讲解声音的产生、传播、接收等基本知识,以及音符、音阶和旋律的概念。

- 音频信号处理:介绍音频信号的产生、放大和输出过程,以及如何利用单片机控制音频信号。

2. 实践操作:- 硬件组装:指导学生按照电路图组装单片机音乐盒,包括单片机、扬声器、按键等元件的连接。

- 软件编程:教授学生编写程序,实现音乐盒的基本功能,如播放音符、调整音量、切换曲目等。

- 创新设计:鼓励学生发挥创意,为音乐盒增加新功能,如定时播放、录音等。

单片机的音乐盒设计报告

单片机的音乐盒设计报告

单片机的音乐盒设计报告一、引言音乐盒作为一种能够带来美妙旋律的装置,一直以来都深受人们的喜爱。

随着科技的不断发展,单片机技术的应用使得音乐盒的设计更加多样化和智能化。

本报告将详细介绍基于单片机的音乐盒的设计过程,包括硬件设计、软件编程以及最终的实现效果。

二、设计目标与需求本次设计的目标是制作一个基于单片机的音乐盒,能够播放多首预存的音乐曲目,并且可以通过按键进行曲目选择和控制播放暂停等功能。

具体需求如下:1、能够存储至少三首不同的音乐曲目。

2、具备简单直观的操作界面,通过按键实现曲目切换、播放暂停等功能。

3、具有良好的音质输出,能够清晰地播放音乐。

4、设计成本低,易于实现和维护。

三、硬件设计1、单片机选择选用 STC89C52 单片机作为核心控制器,其具有丰富的 I/O 端口和较高的性价比,能够满足本设计的需求。

2、存储模块使用 EEPROM 芯片(如 AT24C02)来存储音乐曲目数据,以便在掉电情况下仍能保存曲目信息。

3、音频输出模块采用无源蜂鸣器作为音频输出设备,通过单片机的 I/O 端口输出不同频率的方波信号来驱动蜂鸣器发声。

4、按键模块设置四个独立按键,分别用于曲目选择、播放、暂停和停止功能。

5、电源模块采用 5V 直流电源为整个系统供电。

四、软件设计1、编程语言选择使用 C 语言进行编程,具有较高的可读性和可移植性。

2、主程序流程系统初始化,包括单片机端口设置、EEPROM 读取等。

进入按键扫描循环,检测按键操作并执行相应的功能。

根据当前曲目播放状态,输出相应的音频信号。

3、音乐数据存储与读取将音乐曲目数据以特定的格式存储在 EEPROM 中,通过读取相应地址的数据来获取曲目信息。

4、音频信号产生根据不同的音符频率,计算出对应的方波周期,并通过定时器中断来产生相应频率的方波信号,驱动蜂鸣器发声。

五、系统实现与调试1、硬件焊接与组装按照设计原理图,将各个硬件模块焊接在电路板上,并进行组装和连接。

单片机课程设计-简易音乐盒

单片机课程设计-简易音乐盒
图 5:蜂鸣器驱动电路
-5-
音调 1 2 3 4 5 6 7
音调 1 2 3 4 5 6 7
音调 1 2 3 4 5 6 7
河南理工大学本科课程设计报告
表 1:低音区音调频谱
频率(hz)

延时(us)
220
2270
247
2024
277
1805
294
1701
330
1515
370
1351
415
1205
表 2:中音区音调频谱
sbit K1=P1^0; sbit SPK=P2^7;
uchar Song_Index=0; uchar Tone_Index=0;
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code HI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248}; uchar code LO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3}; uchar code SONG[][50]={{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1},
delayMS(300*LEN[Song_Index][Tone_Index]); Tone_Index++; } TR0=0; while(K1==0); } }
-8-
河南理工大学本科课程设计报告
4 Proteus 仿真
点击运行模拟器,按键没有按下时 P2^7 显示低电平 点击按下按钮,P2^7 端口高低电平变换

基于51单片机的音乐盒设计报告

基于51单片机的音乐盒设计报告

摘要本作品利用单片机的IO口对蜂鸣器输送不同频率的信号,让单片机发出不同音调的声音。

以“新年好”曲调为基础以C51为语法编出51音乐盒的程序。

根据电路图焊接了蜂鸣器模块与TX-1C51开发板用杜邦线进行连接。

除了蜂鸣器外接模块外还使用了1602液晶显示模块作为外设连接。

本人对单片机演奏音乐比较有兴趣。

在此,本人将就这方面的知识做一些简介,但愿能对单片机演奏音乐比较有兴趣而又不知其解的朋友能有所启迪。

一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。

因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。

音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。

一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。

因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。

音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。

关键词: 51单片机音乐盒液晶屏幕显示模块蜂鸣器模块 C51目录1 设计任务目的与要求 (1)1.1任务设计目的 (1)1.2任务要求 (1)2 模块及其原理介绍 (2)2.1蜂鸣器模块 (2)2.21602液晶显示模块 (2)3 设计方案 (3)3.1软件设计 (3)3.2硬件设计 (3)4 实验结果与数据分析 (4)4.1测试步骤 (4)4.2实验现象 (4)5 结论与问题讨论 (4)5.1完成设计的要求程度 (4)5.2遇到的问题以及解决办法 (4)5.3存在的不足及改进思路 (4)参考文献 (5)附录 (5)附录一:C51程序 (5)1 设计任务目的与要求1.1任务设计目的本人对单片机演奏音乐比较有兴趣,所以选择51音乐盒的题目。

本设计通过两个模块的制作并与开发板一并使用。

通过本次设计不止熟悉焊接和熟悉各个电子元器件,而且还提高了对外设模块使用单片机编程的技能。

单片机课程设计音乐盒

单片机课程设计音乐盒

单片机课程设计音乐盒一、教学目标本课程旨在通过学习单片机课程设计音乐盒,让学生掌握单片机的基本原理和应用,培养学生动手实践能力和创新思维。

具体的教学目标如下:知识目标:使学生了解单片机的基本结构、工作原理和编程方法;掌握音乐盒的基本电路设计和制作方法。

技能目标:培养学生使用单片机开发工具进行程序设计和调试的能力;训练学生进行音乐盒电路搭建和故障排查的能力。

情感态度价值观目标:激发学生对单片机技术和音乐盒制作的兴趣,培养学生的创新精神和团队合作意识。

二、教学内容本课程的教学内容主要包括单片机的基本原理、音乐盒的设计与制作、编程与调试等。

具体安排如下:1.单片机的基本原理:介绍单片机的结构、工作原理和编程语言。

2.音乐盒的设计与制作:讲解音乐盒的基本电路设计、元件选型和制作方法。

3.编程与调试:教授如何使用单片机开发工具进行程序设计和调试。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学。

具体方法如下:1.讲授法:讲解单片机的基本原理、音乐盒设计和编程方法。

2.实验法:让学生动手搭建音乐盒电路,进行编程和调试。

3.讨论法:学生进行小组讨论,分享学习心得和经验。

4.案例分析法:分析实际案例,让学生了解单片机在实际应用中的优势和局限。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用权威、实用的单片机和音乐盒制作教材。

2.参考书:提供相关的技术资料和案例分析,丰富学生的知识体系。

3.多媒体资料:制作精美的PPT和教学视频,提高学生的学习兴趣。

4.实验设备:准备单片机开发板、音乐盒电路元件等实验设备,确保学生能动手实践。

五、教学评估本课程的教学评估将采用多元化、全过程的评价方式,以全面、客观、公正地评估学生的学习成果。

具体评估方式如下:1.平时表现:通过观察学生在课堂上的参与程度、提问回答、小组讨论等表现,评估其学习态度和理解能力。

2.作业:布置相关的编程练习和音乐盒制作任务,评估学生的实践能力和创新能力。

单片机课程设计报告-音乐盒

单片机课程设计报告-音乐盒

课程设计报告( 2014—2015 年度第二学期)课程:单片机及嵌入式系统A题目:音乐盒院系:自动化系班级:测控1201学号:************201202030110学生姓名:*********指导教师:**设计周数:一周成绩:日期:2015年6 月11 日一、课程设计内容与要求1.针对所选择的设计题目进行硬件设计,合理选用所需元器件,绘制系统结构框图、硬件接线图,并在实验系统上完成电路的连接和调试。

2.根据所选题目的要求进行程序设计,绘制程序总体流程图并编写源程序上机调试。

3.写出课程设计报告,对整个设计过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识和收获。

二、课程设计正文(1)设计题目:音乐盒(2)设计思想阐述:应用AT89C51单片机,4*4矩阵键盘,蜂鸣器,数码管实现音乐盒功能。

其中以AT89C51芯片为主芯片的控制电路达到如下的设计要求:<A>利用I/O口产生一定频率的方波,驱动蜂鸣器发出不同的音调,从而演奏乐曲(一共四首)。

<B>播放过程中数码管显示歌曲编号(4-7)<C>开机时数码管显示为0,等待按下功能键(按暂停键没有反应)<D>可通过矩阵键盘中的功能键(0-3)选择音乐暂停,播放,上一首,下一首,以及直接按键(4-7)选择所要播放的歌曲<E>播放完当前歌曲后如果没有任何操作则直接播放下一首,实现四首歌曲循环播放(3)系统工作原理介绍:电路设计采用的是51单片机学习板,电路图如下:本设计中用到了AT89C51单片机,4*4键盘,蜂鸣器,2 数码管等硬件电路常用元器件。

<3.1>AT89C51 芯片功能和硬件连接:AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

单片机课程设计音乐盒设计

单片机课程设计音乐盒设计

单片机课程设计音乐盒设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理,理解其在音乐盒设计中的应用。

2. 使学生了解并掌握音乐盒的基本组成部分,如音符、节拍等。

3. 帮助学生理解并运用编程语言,实现对音乐盒乐曲的编程与控制。

技能目标:1. 培养学生动手实践能力,能够独立完成音乐盒硬件电路的搭建。

2. 培养学生运用编程软件进行单片机程序设计的能力,实现音乐盒乐曲的播放与控制。

3. 提高学生的问题解决能力,能够针对音乐盒设计过程中遇到的问题进行调试与优化。

情感态度价值观目标:1. 激发学生对单片机及电子制作的兴趣,培养其创新意识和动手能力。

2. 培养学生团队协作精神,学会与他人共同分析问题、解决问题。

3. 引导学生关注科技发展,认识到所学知识在实际应用中的价值。

分析课程性质、学生特点和教学要求:本课程为单片机课程设计,结合音乐盒设计,旨在让学生在实际操作中掌握单片机原理和应用。

学生为高年级学生,已具备一定的电子基础和编程能力。

教学要求注重实践与理论相结合,培养学生的动手能力和实际应用能力。

二、教学内容1. 理论知识:- 单片机原理及功能特点,对应教材第3章。

- 音乐盒基本构成及工作原理,对应教材第6章。

2. 实践操作:- 硬件电路搭建,包括单片机、扬声器、按键等元件的连接,对应教材第4章。

- 程序设计,使用C语言或汇编语言编写音乐盒乐曲播放程序,对应教材第5章。

3. 教学大纲:- 第一周:学习单片机原理及功能特点,了解音乐盒基本构成及工作原理。

- 第二周:进行硬件电路搭建,学习并掌握相关元件的使用方法。

- 第三周:编写音乐盒乐曲播放程序,学会编程控制单片机播放音乐。

- 第四周:调试与优化,针对音乐盒设计过程中遇到的问题进行解决。

4. 教学内容安排与进度:- 理论与实践相结合,每周安排2课时理论知识学习,2课时实践操作。

- 按照教学大纲,逐步完成音乐盒设计的相关内容。

5. 教材章节及内容列举:- 第3章:单片机原理及功能特点,重点学习单片机的内部结构、工作原理及编程方法。

单片机音乐盒课程设计

单片机音乐盒课程设计

51单片机的电子音乐盒的设计班级:自动化112202H姓名:***学号:************9前言随着科技越来越发达,单片机技术也越来越纯熟,单片机的应用也越来越广泛,可以说几乎很难找到哪个领域没有单片机的踪迹。

如今,单片机在各个领域都起着至关重要的作用[1]。

单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

随着人类社会的发展,人们对于视听方面的享受提出了更高的要求。

而传统的音乐盒大部分是机械型的,体积庞大,而且沉重,发音单调,且不悦耳,不能实现大批量的生产,所以很难满足当代人们的需求。

但是本文设计的数字音乐盒是以单片机为核心元件的数字音乐盒。

单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点。

因此该数字音乐盒也就具有体积小,重量轻,能演奏各种各样的音乐,功能多,外观绚丽多彩,使用非常方便等诸多优点。

而且具有一定的开发价值。

101 设计目的和要求1.1 设计目的(1) 通过设计,查阅相关资料,掌握如何利用单片机设计产品,同时了解与单片机有关的软件模拟器的使用及取字模块软件的使用方法。

(2) 通过本课程设计巩固并扩展单片机课程的基本概念、基本理论、分析方法和实现方法。

结合Proteus和Keil软件等,学习单片机产品的设计方法,有效地将理论和实际紧密结合,培养创新思维和设计能力,增强软件编程实现能力和解决实际问题的能力。

(3) 学习Proteus软件,掌握Proteus中各种芯片的功能以及模拟。

由于Proteus提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养实践精神、创造精神的平台。

单片机音乐盒课程设计

单片机音乐盒课程设计

《单片机数字音乐盒》课程设计报告专业:通信工程班级:0802姓名:彭孟秋指导教师:何小年、刘甫2011 年 6 月18 日目录1、课程设计目的 (2)2、数字音乐盒的设计要求 (2)3、电路工作原理、操作方法 (2)4、电路图 (2)5、程序框图 (3)6、关键程序 (3)7、总结 (12)8、参考书目 (12)数字音乐盒设计课程设计目的单片机原理与应用课程设计是在理论教学与有关的实验完成之后进行的,其目的是培养学生程序设计和实际应用单片机技术的能力。

通过此实践环节,使学生能够校熟练设计常用的各类汇编语言程序,掌握设计调试单片机应用系统基本方法和步骤,能够利用所学的知识设计一个中等难度的单片机应用系统,为后续实践课程奠定基础。

数字音乐盒的设计要求1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒)。

2.采用数码管显示歌曲序号。

3.可通过功能键选择乐曲,暂停,播放。

电路工作原理、操作方法(1)硬件电路中用P1.0~P1.7控制按键,其中P1.0~P1.3扫描行,P1.4~P1.7扫描列。

(2)用P0.0~P0.7,P2.0~P2.7控制LED,其中P0.0~P0.7控制七段码a、b、d、e、f、g,用P2.0~P2.7为数码管位选信号。

(3)用,P2.0~P2.2作为LCD的RS,R/W,E的控制信号。

用P0.0~P0.7作为LCD的D0~D7的控制信号。

(4)用P3.7口控制蜂鸣器。

(5)电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。

电路图程序框图关键程序Soundplay:#include <reg52.h>#include "Music.h"#include "SoundPlay.h"#include "lcd.h"#define SYSTEM_OSC 12000000 //定义晶振频率12000000HZ#define SOUND_SPACE 4/5 //定义普通音符演奏的长度分率,//每4分音符间隔sbit BeepIO = P2^0; //定义输出管脚unsigned char codeduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//duan code 0~9unsigned int code FreTab[12] ={ 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始频率表unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 };//1~7在频率表中的位置unsigned char code LengthTab[7]= { 1,2,4,8,16,32,64 };unsigned char Sound_Temp_TH0,Sound_Temp_TL0; //音符定时器初值暂存unsigned char Sound_Temp_TH1,Sound_Temp_TL1; //音长定时器初值暂存//******************************************************************* #define MaxNo 3 //定义歌曲数目unsigned char code *Sound;unsigned char code * codeMusic[MaxNo]={Music_4,Music_8,Music_7,Music_6,Music_5,Music_9,Music_3 ,Music_2,Music_1};signed char FlagNo=0;static unsigned char KeyScan(void);static void Beep(void);bit RunStop = 1;//1表示运行sbit KeyB =P3^2; // 上一首sbit KeyF =P3^3; //下一首sbit KeyT =P3^5; //暂停extern void Delay1ms(unsigned int);void InitialSound(void){BeepIO = 0;Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256; // 计算TL1应装入的初值(10ms的初装值)Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256; // 计算TH1应装入的初值TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TMOD |= 0x11; //两个定时器都工作在方式1ET0 = 1;ET1 = 0;TR0 = 0;TR1 = 0;EA = 1;FlagNo = 0;Sound = Music[FlagNo];P1 = duan[FlagNo+1];}void BeepTimer0(void) interrupt 1 //音符发生中断{BeepIO = !BeepIO;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0;}//*******************************************************************void Play(unsigned char Signature,unsigned Octachord,unsigned int Speed) {unsigned int NewFreTab[12]; //新的频率表unsigned char i,j;unsigned intPoint,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;#ifdef USE_LCDlcd_init();lcd_write_string(0,"MusicPlayer");#endifAgain :Delay1ms(600);for(i=0;i<12;i++) // 根据调号及升降八度来生成新的频率表{j = i + Signature;if(j > 11){j = j-12;NewFreTab[i] = FreTab[j]*2;}elseNewFreTab[i] = FreTab[j];if(Octachord == 1)NewFreTab[i]>>=2;else if(Octachord == 3)NewFreTab[i]<<=2;}SoundLength = 0;while(Sound[SoundLength] != 0x00) //计算歌曲长度{SoundLength+=2;}Point = 0;Tone = Sound[Point];Length = Sound[Point+1]; // 读出第一个音符和它时时值LDiv0 = 12000/Speed; // 算出1分音符的长度(几个10ms) LDiv4 = LDiv0/4; // 算出4分音符的长度LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最长间隔标准TR0 = 0;TR1 = 1;while(Point < SoundLength){if(KeyScan())goto Again; /*more keyscan for speed*/SL=Tone%10; //计算出音符SM=Tone/10%10; //计算出高低音SH=Tone/100; //计算出是否升半CurrentFre = NewFreTab[SignTab[SL-1]+SH]; //查出对应音符的频率if(KeyScan())goto Again; /*more keyscan for speed*/ if(SL!=0){if (SM==1) CurrentFre >>= 2; //低音if (SM==3) CurrentFre <<= 2; //高音Temp_T =65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数器初值Sound_Temp_TH0 = Temp_T/256;Sound_Temp_TL0 = Temp_T%256;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0 + 12; //加12是对中断延时的补偿}if(KeyScan())goto Again; /*more keyscan for speed*/ SLen=LengthTab[Length%10]; //算出是几分音符XG=Length/10%10; //算出音符类型(0普通1连音2顿音)FD=Length/100;LDiv=LDiv0/SLen; //算出连音音符演奏的长度(多少个10ms)if (FD==1)LDiv=LDiv+LDiv/2;if(XG!=1)if(XG==0) //算出普通音符的演奏长度if (SLen<=4)LDiv1=LDiv-LDiv4;elseLDiv1=LDiv*SOUND_SPACE;elseLDiv1=LDiv/2; //算出顿音的演奏长度elseLDiv1=LDiv;if(SL==0) LDiv1=0;LDiv2=LDiv-LDiv1; //算出不发音的长度if(KeyScan())goto Again; /*more keyscan for speed*/ if (SL!=0){TR0=1;for(i=LDiv1;i>0;i--) //发规定长度的音{while(TF1==0);TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0;if(KeyScan())goto Again; /*more keyscan for speed*/}}if(KeyScan())goto Again; /*more keyscan for speed*/if(LDiv2!=0){TR0=0; BeepIO=0;for(i=LDiv2;i>0;i--) //音符间的间隔{while(TF1==0);TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0;if(KeyScan())goto Again; /*more keyscan for speed*/}}Point+=2;Tone=Sound[Point];Length=Sound[Point+1];if(KeyScan())goto Again; /*more keyscan for speed*/#ifdef USE_LCDlcd_write_char(12,FlagNo+49);#endif}BeepIO = 0;FlagNo ++;if (FlagNo == MaxNo)FlagNo =0;Sound = Music[FlagNo];P1 = duan[FlagNo+1];}/**************************************************************功能:键盘扫描函数入参: viod KeyF 下一首KeyB 上一首KeyT 暂停返回: unsigned char1 需跳转 0 不跳转***************************************************************/ static unsigned char KeyScan(void){unsigned char Cont;if (KeyF == 0){ //前进Delay1ms(5);if (KeyF == 0){while(KeyF == 0){EA = 0;FlagNo ++;if (FlagNo == MaxNo)FlagNo =0;P1 = duan[FlagNo+1];Beep();Delay1ms(600); //是长按EA = 1;}if (FlagNo == MaxNo)FlagNo =0;Sound = Music[FlagNo];P1= duan[FlagNo+1]; //刷显示while(KeyF == 0);return 1;}}if (KeyB == 0){ //后退Delay1ms(5);if (KeyB == 0){while(KeyB == 0){EA = 0;FlagNo --;if (FlagNo == -1)FlagNo =MaxNo-1;P1 = duan[FlagNo+1];//刷显示Beep();Delay1ms(600); //是长按EA = 1;}if (FlagNo == -1)FlagNo =MaxNo-1;Sound = Music[FlagNo];P1 = duan[FlagNo+1];while(KeyB == 0);return 1;}}if (KeyT == 0){ //暂停Delay1ms(20);Cont = 0;EA = 0;TR0 = 0;TR1 = 0;if (KeyT == 0){RunStop = ~RunStop;while(KeyT == 0); //等待第一次释放Beep();if (!RunStop){ //是暂停则关中断和定时器EA = 0;TR0 = 0;TR1 = 0;while(KeyT == 0); //检测第二次按键并等待它释放(若有的话) while (KeyT){ //第二次释放了等待第三次按下P1 = duan[Cont++%10]; //第三次未按下则暂停数秒0~9Delay1ms(100);} //此处暂停直到再次有按键低电平EA = 1; //重开定时器和中断TR0 = 1;TR1 = 1;Sound = Music[FlagNo];P1 = duan[FlagNo+1]; //恢复原来的显示}}EA = 1;TR0 = 1;TR1 = 1;return 0;}return 0;}void Beep(void){unsigned char i;for(i = 0;i < 200 ;i ++){BeepIO = ~BeepIO;Delay1ms(1);}}Playmusic:#include <REG52.H>#include "Music.h"#include "SoundPlay.h"void Delay1ms(unsigned int count){unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}main(){InitialSound();while(1){Play(0,3,380);Delay1ms(500);}}Music:#include "Music.h"//*****************************Music******************************** //挥着翅膀的女孩unsigned char code Music_1[]={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_2[]={0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03,0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x020x15,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_3[] ={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 };总结1.本学期学习单片机的时间只有十几周时间,对单片机的硬件设计,软件设计掌握的深度不够,但通过此次课程设计,却改变了很多,首先对于硬件电路的工作原理有了进一步的学习,同样就有了进一步的认识;其次软件方面,在程序的设计,程序的调试方面都学到了很多东西,这是第一次编写单片机的大程序,很有成就感。

单片机八音盒课程设计

单片机八音盒课程设计

单片机八音盒课程设计一、课程目标知识目标:1. 理解单片机的基本原理和结构,掌握八音盒的制作原理;2. 学会使用单片机编程控制八音盒演奏指定曲目;3. 了解八音盒中音调、音色和节奏的基本知识,并能运用到实际操作中。

技能目标:1. 培养学生动手实践能力,能够独立完成单片机八音盒的组装和调试;2. 提高学生编程能力,熟练掌握C语言在单片机编程中的应用;3. 培养学生团队协作和问题解决能力,能够在小组合作中共同完成八音盒的制作。

情感态度价值观目标:1. 激发学生对单片机及电子制作的兴趣,培养创新意识和探索精神;2. 培养学生良好的学习习惯,严谨的科学态度和积极的合作精神;3. 引导学生关注科技发展,认识单片机在现实生活中的应用,提高社会责任感。

课程性质:本课程为实践性课程,结合理论知识,强调动手操作和实际应用。

学生特点:本课程针对具有一定电子基础知识和编程能力的初中生,学生对新鲜事物充满好奇,喜欢动手实践。

教学要求:教师需注重理论与实践相结合,引导学生主动参与,鼓励学生提问和思考,关注学生个体差异,提供个性化指导。

通过课程学习,使学生能够达到预定的学习成果。

二、教学内容1. 理论知识:- 单片机原理及结构介绍,重点理解内部组成和功能;- C语言基础,包括数据类型、运算符、控制结构等;- 音频信号处理,音调、音色和节奏的基础知识。

2. 实践操作:- 八音盒工作原理学习,理解音阶与频率的关系;- 单片机编程,编写程序控制八音盒演奏指定曲目;- 八音盒组装与调试,熟悉电路连接,排查并解决问题。

3. 教学大纲:- 第一阶段:单片机原理与结构学习,C语言基础训练;- 第二阶段:音频信号处理知识学习,八音盒工作原理掌握;- 第三阶段:单片机编程实践,分组进行八音盒设计与制作;- 第四阶段:作品调试与展示,评价与反馈。

4. 教材章节:- 《单片机原理与应用》第3章,介绍单片机结构与原理;- 《C语言程序设计》第1-3章,C语言基础知识;- 《电子制作实践》第5章,音频信号处理及八音盒制作。

单片机课程设计音乐盒

单片机课程设计音乐盒

单片机课程设计音乐盒一、课程目标知识目标:1. 理解单片机的基本原理,掌握其编程方法;2. 学习音乐盒的基础知识,了解音符、节奏与旋律的关系;3. 掌握单片机控制音乐盒的硬件连接和程序设计。

技能目标:1. 能够运用所学知识,设计并实现一个功能齐全的音乐盒;2. 培养学生动手实践能力,提高问题解决和团队协作能力;3. 培养学生创新思维,能够对音乐盒进行优化和拓展。

情感态度价值观目标:1. 培养学生对单片机及电子制作的兴趣,激发学习热情;2. 培养学生严谨的科学态度,注重实践与理论相结合;3. 培养学生良好的团队合作精神,学会尊重他人,分享成果。

分析课程性质、学生特点和教学要求:本课程为单片机课程设计,结合音乐盒的制作,旨在让学生在实际操作中掌握单片机知识。

学生处于中学阶段,具有一定的电子基础和编程能力,对新鲜事物充满好奇。

教学要求注重实践性、实用性和创新性,培养学生综合运用所学知识解决实际问题的能力。

课程目标分解为具体学习成果:1. 学生能够独立完成单片机音乐盒的硬件连接和程序设计;2. 学生能够编写出不少于两种旋律的音乐盒程序;3. 学生能够在课程结束后,进行作品展示,分享创作过程和心得体会。

二、教学内容根据课程目标,本章节教学内容主要包括以下几部分:1. 单片机基础原理:回顾并巩固单片机的工作原理、内部结构、编程语言等基础知识,涉及教材第1章内容。

2. 音乐盒知识:学习音乐盒的基本原理,包括音符、节奏、旋律的构成,涉及教材第3章内容。

a. 音符与频率的关系b. 节奏与时间的控制c. 旋律的组合与编排3. 硬件连接与编程设计:a. 学习并掌握单片机与音乐盒硬件的连接方法,涉及教材第2章内容;b. 学习并编写音乐盒程序,实现不同旋律的播放,涉及教材第4章内容。

4. 实践操作与作品制作:a. 指导学生进行单片机音乐盒的硬件连接和调试;b. 协助学生编写音乐盒程序,实现功能要求;c. 组织学生进行作品展示和评价,分享创作经验。

单片机原理课程设计报告——音乐盒

单片机原理课程设计报告——音乐盒

单片机原理课程设计报告题目:音乐盒的设计班级:自动093学号:××××××姓名:×××成绩:指导教师:×××北京工商大学计算机与信息工程学院2012.6课程设计任务书摘要第一章绪论1.1课程设计目的1.2课程设计任务1.3课程设计要求1.4课程设计意义第二章设计原理2.1基本原理简述2.2设计方案第三章音乐播放器的硬件电路3.1 AT89C51单片机3.2 单片机CPU结构3.3引脚介绍3.4 电路连线第四章软件编程设计4.1编程方案第五章心得体会第一章绪论1.1课程设计目的应用单片机,利用它的原理组成一个音乐播放器。

本课程设计是主干实践课。

课程的任务在于提高学生综合运用所学知识理论、分析解决问题的能力。

1.2课程设计任务1)以单片机为核心部件组成一个音乐播放器;2)利用单片机的定时器产生乐谱的各种频率方波,由蜂鸣器发出声音;3)定义按键,能相应的播放出歌曲;1.3课程设计要求能用键盘选择不同的歌曲,至少两首以上,并写出课程设计报告。

1.4课程设计的意义通过自己动手设计单片及组成的器件,在软件及硬件上进一步了解单片机的原理,深入了解了单片机C51语言的实际应用,能更深地理解课堂上所学的内容,巩固C语言程序编写,体会作为一名设计人员所需要具备的各种能力,学会理论知识联系实际,提高我们发现问题,分析问题,解决问题和实践动手的能力。

第二章设计原理及总体方案选择2.1 设计原理音调的确定不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。

把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。

单片机音乐盒的课程设计

单片机音乐盒的课程设计

单片机音乐盒的课程设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理,理解音乐盒制作的硬件组成和工作原理。

2. 使学生了解并掌握音乐盒编程的基础知识,包括音符、节拍和旋律的表示方法。

3. 让学生掌握音乐盒电路的搭建方法,了解相关电子元器件的功能和连接方式。

技能目标:1. 培养学生动手操作能力,能独立完成音乐盒硬件电路的搭建。

2. 培养学生编程能力,使其能编写简单的音乐程序,实现对音乐盒的控制。

3. 培养学生解决问题的能力,能针对音乐盒制作过程中遇到的问题进行分析和调试。

情感态度价值观目标:1. 培养学生对单片机及电子制作的兴趣,激发学生探究科学的热情。

2. 培养学生团队合作精神,使学生学会与他人合作共同完成任务。

3. 培养学生创新思维,鼓励学生发挥想象,设计独特的音乐作品。

分析课程性质、学生特点和教学要求,本课程目标旨在让学生在掌握单片机基础知识的基础上,通过动手实践,培养其编程和电子制作能力。

课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果,并为后续的教学设计和评估提供依据。

二、教学内容1. 理论知识:- 单片机原理:介绍单片机的基本概念、结构及其工作原理。

- 音乐知识:讲解音符、节拍、旋律等基本音乐概念及其在编程中的表示方法。

- 电子元器件:介绍常用的电子元器件(如电阻、电容、二极管等)及其在音乐盒电路中的应用。

2. 实践操作:- 音乐盒硬件搭建:指导学生按照电路图搭建音乐盒硬件,包括单片机、扬声器、电子元器件的连接。

- 编程控制:教授学生使用编程软件,编写音乐程序,实现对音乐盒的控制。

- 调试与优化:教授学生如何对音乐盒进行调试,包括查找故障、优化程序等。

3. 教学大纲:- 第一阶段:单片机原理及音乐知识学习,占总课时1/4。

- 第二阶段:电子元器件认知及音乐盒硬件搭建,占总课时1/4。

- 第三阶段:编程控制与调试优化,占总课时1/2。

4. 教材章节:- 单片机原理与编程:《单片机原理与应用》第1章、第2章。

单片机音乐盒报告

单片机音乐盒报告

音乐盒设计1.系统功能的确定音乐盒可以发出怡人的音乐旋律,能给生活增加不少的乐趣。

用51系列单片机设计一个音乐盒的基本功能如下:1)利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。

2)用七段数码管显示当前播放的歌曲序号。

3)通过对单片机的电路控制并结合按键功能实现播放,暂停,停止,上一曲,下一曲,音阶和节拍的配合实现歌曲(共三首歌)演奏。

2.方案论证各种方案如下所示:2.1方案一:用四个按键控制音乐的播放。

3个按键选择3首不同的音乐播放,另一个按键控制音乐的停止。

按下播放键,用一点简单的控制之后,才开始播放音乐。

比如,用定时器控制,亮灯倒计时10秒然后触发音乐播放。

2.2方案二:用4*4小键盘来实现音乐的选择播放,1~A按键控制播放10首音乐,C~F按键分别实现欢迎页面、上一首、下一首、停止播放。

2.3方案三:为了充分利用实验板的功能,进一步扩充音乐盒的功能。

设计用七段显示数码管LED显示播放时歌曲序号。

设置三个键,一个按键控制开机、播放、暂停音乐,另外两个按键分别实现上一首、下一首。

各方案的论证如下:1)在方案1中,共用了4个按键,其中3个按键控制播放3首音乐,另一个键控制音乐播放的停止。

但是只能选择3首音乐,不能显示是哪首歌局限性太强。

2)在方案2中,由于个人所学知识有限、实践经验太少等原因,可以实现了歌曲的播放、开机画面、停止,未能实现歌曲的上一首、下一首选择播放。

考虑到实验的复杂度和时间上的局限,本次课程设计使用了方案三。

本次设计是一个基于AT89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。

该音乐盒主要由按键电路、复位电路、时钟电路、蜂鸣器以及显示电路组成。

使用一个按键来控制开始,播放和暂停。

利用两个按键分别切换上一曲和下一曲来演奏出不同的乐曲,共三首音乐,蜂鸣器发出某个音调,与之相对应的LED亮起。

单片机课程设计音乐盒

单片机课程设计音乐盒

微机原理课程设计题目:数字音乐盒姓名:学号:指导老师 :目录一、任务与要求 (3)二、硬件设计 (3)三、软件设计 (3)四、调试 (24)五、收获和体会 (25)六、参考文献 (25)单片机课程设计实验报告一、任务及要求课程设计题目:数字音乐盒课程设计要求:1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒)2.采用LCD显示信息3.开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称) 4.可通过功能键选择乐曲,暂停,播放。

5.选作容:显示乐曲播放时间或剩余时间二、硬件设计硬件电路:本设计中用到了98C51单片机,4*4键盘,蜂鸣器,16*2 LCD,七段显示数码管LED。

(硬件电路原理图附于后页)原理说明:当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。

同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。

也可在LED显示歌曲号。

(1)硬件电路中用P1.0~P1.7控制按键,其中P1.0~P1.3扫描行,P1.4~P1.7扫描列。

(2)用P0.0~P0.7,P2.0~P2.7控制LED,其中P0.0~P0.7控制七段码a,b,c,d,e,f,g,用P2.0~P2.7为数码管位选信号。

(3)用,P2.0~P2.2作为LCD的RS,R/W,E的控制信号。

用P0.0~P0.7作为LCD的D0~D7的控制信号。

(4)用P3.7口控制蜂鸣器(J2,J4断开,J3短接)。

(5)电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。

三、软件设计本程序可以实现课程设计的基本要求和附加功能,并可以通过按键播放七歌曲。

实验程序如下:RS BIT P2.0 ;定义液晶显示端口标号RW BIT P2.1E BIT P2.2;********************************************L50MS EQU 60HL1MS EQU 61HL250MS EQU 62HSEC EQU 65HMIN EQU 64HHOU EQU 63H;*******************************************ORG 0000hLJMP mainORG 000BHLJMP TT0ORG 001BHLJMP T1INTorg 1000hmain:;-----------------------;液晶初始化MOV SP,#70HMOV P0,#01H ;清屏CALL ENABLEMOV P0,#38H ;8位,2行显示LCALL ENABLEMOV P0,#0FH ;屏显on,光标on,闪烁onLCALL ENABLEMOV P0,#06H ;计数地址加1,显示幕onLCALL ENABLE;-------------------------------存初始化LCALL INITIL;-------------------------------key1: LCALL keyLCALL moddLJMP key1;---------------------键盘扫描key: nopnoplcall ksjnz k1 ;有按键转到K1lcall kaijilcall SOPxn: ljmp keyk1: lcall moddlcall moddlcall ksjnz k2ljmp keyk2: mov R2,#0feh ;读键盘mov R4,#00hk3: mov A,R2mov P1,Amov A,P1ACC.4,L1 ;为1跳转,第一行无按键mov a,#00hljmp lkL1: jb acc.5,L2mov a,#04hljmp lkL2: jb acc.6,L3mov a,#08hljmp lkL3: jb acc.7,next1mov a,#0ch;------------------------------------------------------- lk: add a,R4push acck4: lcall delay1 ;若同时有其他按键,则等待lcall ksjnz k4;-------------------------------------------------------- mov r3,#07hclr amov r0,#30hmov r1,#31hmm1: mov a,r1mov r0,ainc r0inc r1djnz r3,mm1pop accmov r0,aRET;------------------------------------------------------ next1: inc R4 ;------列扫描mov a,R2JNB acc.3,n2ljmp n1n2: ljmp keyn1: rl amov R2,aljmp k3;----------------------------------------------ks: mov a,#0f0h ;判断P1口mov P1,anopnopmov a,P1cpl aanl a,#0f0hRET;-------------------------------------------------- DELAY1:SETB RS0dl: mov R5,#0ahdl2: mov R6,#63dl3: nopnopdjnz R6,dl3djnz R5,dl2CLR RS0RET;--------------------------------------------------- ;30H-37H初值为零;---------------------------------------------------- initil:mov r3,#08hmov r0,#30hm1: mov r0,#00hinc r0djnz r3,m1RET;---------------------------------------------------- ;显示;--------------------------------------------------- modd:MOV P0,#8EHCALL ENABLEmov A,37Hmov DPTR,#TABLE3MOVC A,A+DPTRCALL WRITE2RET;-------------------------------------------------- ;开机提示字;------------------------------------------------- kaiji: mov a,37hcjne a,#0fh,DFFMOV P0,#80H ;设光标地址CALL ENABLEMOV DPTR,#TABLE1;写数据CALL WRITE1DFF: RET;----------------------------------------------;按键值播放歌曲;---------------------------------------------- SOP: mov a,37hcjne a,#01h,A11LCALL MODDMOV 52H,#HIGH TABLE10MOV 53H,#LOW TABLE10LCALL INITILE2lcall MAIN0A11: CJNE A,#02H,A22LCALL MODDMOV 52H,#HIGH TABLE20MOV 53H,#LOW TABLE20LCALL INITILE2lcall MAIN0A22: CJNE A,#03H,A33LCALL MODDMOV 52H,#HIGH TABLE30MOV 53H,#LOW TABLE30LCALL INITILE2lcall MAIN0A33: CJNE A,#04H,A44LCALL MODDMOV 52H,#HIGH TABLE40MOV 53H,#LOW TABLE40LCALL INITILE2lcall MAIN0A44: CJNE A,#05H,A55LCALL MODDMOV 52H,#HIGH TABLE50MOV 53H,#LOW TABLE50LCALL INITILE2lcall MAIN0A55: CJNE A,#06H,A66LCALL MODDMOV 52H,#HIGH TABLE60MOV 53H,#LOW TABLE60LCALL INITILE2lcall MAIN0A66: CJNE A,#07H,A77LCALL MODDMOV 52H,#HIGH TABLE70MOV 53H,#LOW TABLE70LCALL INITILE2lcall MAIN0A77: CJNE A,#08H,A88LCALL MODDMOV 52H,#HIGH TABLE80MOV 53H,#LOW TABLE80LCALL INITILE2lcall MAIN0A88: CJNE A,#09H,A99LCALL MODDMOV 52H,#HIGH TABLE90MOV 53H,#LOW TABLE90LCALL INITILE2lcall MAIN0A99: CJNE A,#0AH,AAALCALL MODDMOV 52H,#HIGH TABLE100MOV 53H,#LOW TABLE100LCALL INITILE2lcall MAIN0AAA: RET;******************************************INITILE2:MOV L50MS,#20MOV L1MS,#00HMOV L250MS,#00HMOV SEC,#00HMOV MIN,#00HMOV HOU,#00HMOV A,HOUMOV B,#10DIV ABADD A,#30H ;将BCD吗转化为ASIIC码MOV P0,#0C8H ;显示小时十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0,#0C9H ;显示小时个位CALL ENABLECALL WRITE2MOV A,#3AHMOV P0,#0DH ;显示冒号CALL ENABLECALL WRITE2MOV A,MINMOV B,#10DIV ABADD A,#30HMOV P0,#0CBH ;显示分十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0,#0CCH ;显示分个位CALL ENABLECALL WRITE2MOV A,#3AHMOV P0,#0CDH ;显示冒号CALL ENABLECALL WRITE2MOV A,SECMOV B,#10DIV ABADD A,#30HMOV P0,#0CEH ;显示秒十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0,#0CFH ;显示秒个位CALL ENABLECALL WRITE2MOV P0,#0C0H ;设光标地址CALL ENABLEMOV DPTR,#TABLE2;写数据CALL WRITE1RET;*********************************************写指令ENABLE: CLR RSCLR RWCLR ELCALL DELAYSETB ERET;**********************************************写数据WRITE1: MOV R1,#00HA1: MOV A,R1MOVC A,A+DPTRCALL WRITE2INC R1CJNE A,#0FEH,A1 ;未到字符串末尾继续RETWRITE2: MOV P0,ASETB RSCLR RWCLR ECALL DELAYSETB ERET;********************************************** DELAY: MOV R4,#05D1: MOV R5,#0FFHDJNZ R5,$DJNZ R4,D1RET;----------------------------------------------TAB: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0a1h,86h,8ehTAB1: db 89h,86h,0c7h,0c7h,0c0hTAB2: db 0c6h,88h,0c0hTABLE1: DB 'WELCOM HERE',0FEHTABLE2: DB 'DFF WB ',0FEHTABLE4: DB 'CAU',0FEHTABLE3: DB 30H,31H,32H,33hDB 34H,35H,36H,37HDB 38h,39H,41H,42HDB 43H,44H,45H,46H;-------------------------------------------------------------------- ;播放歌曲程序;--------------------------------------------------------------------MAIN0: MOV TMOD,#11HMOV IE,#8aH;MOV TH1, #3cH;MOV TL1, #0b0Hlcall ksjnz TTM12MOV 40H,#00H;---------------------------------------------------------NEXT20: MOV A,40HMOV DPH,52HMOV DPL,53HMOVC A,A+DPTRMOV R2,AJZ STOPANL A,#0FHMOV R1,AMOV A,R2SWAP AANL A,#0FHJNZ SINGCLR TR0JMP W1;----------------------------------------------------------SING: DEC AMOV 22H,ARL AMOV DPTR,#TABLE00MOVC A,A+DPTRMOV TH0,AMOV 21H,AMOV A,22HRL AINC AMOVC A,A+DPTRMOV TL0,AMOV 20H,ASETB TR0SETB TR1W1: LCALL DELAY30INC 40HLCALL KS ;------有键跳出JNZ STOPLJMP NEXT20;----------------------------------------------------------- STOP: CLR TR0CLR TR1LJMP MAIN0;---------------------------------------------------------- TTM12: LCALL K2MOV A,37HCJNE A,#0EH,TTM13CLR TR1LCALL DELAY1TTM120: LCALL KSLCALL DELAY1JZ TTM120LCALL K2MOV A,37HCJNE A,#0EH,TTM120SETB TR1LJMP NEXT20TTM13: CJNE A,#0CH,TTM14MOV A,52HINC AMOV 52H,AMOV A,53HINC AMOV 53H,AMOV A,36HINC AMOV 37H,ALJMP TTM2TTM14: CJNE A,#0DH,TTM2MOV A,52HDEC AMOV 52H,AMOV A,53HDEC AMOV 53H,AMOV A,36HDEC AMOV 37H,A;------------------------------------------------------ TTM2: RET;***************************************************;定时器中断子程序0;***************************************************TT0: PUSH ACCPUSH PSWMOV TL0,20HMOV TH0,21HCPL P3.7POP PSWPOP ACCRETI;***************************************************;定时器中断子程序1;***************************************************T1INT:MOV TH1, #3cHMOV TL1, #0b0HDJNZ L50MS,X4MOV L50MS,#20;****************---每秒种时钟刷新秒显示一次SECSET:MOV A,SECMOV B,#10DIV ABADD A,#30HMOV P0,#0CEH ;显示秒十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0,#0CFH ;显示秒个位CALL ENABLECALL WRITE2MOV A,SECINC AMOV SEC,AXRL A,#60X4: JNZ OUTMINSET: MOV SEC,#00H;*************************************每分钟刷新分显示一次MOV A,MININC AMOV MIN,AMOV B,#10DIV ABADD A,#30HMOV P0,#0CBH ;显示分十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0,#0CCH ;显示分个位CALL ENABLECALL WRITE2MOV A,MINMOV B,#3MUL ABMOV B,#100DIV ABMOV R2,AMOV A,#10XCH A,BDIV ABMOV A,MINXRL A,#60JNZ OUTHOUSET:MOV MIN,#00H;**************************************每小时刷新小时显示一次MOV A,HOUMOV B,#10DIV ABADD A,#30H ;将BCD吗转化为ASIIC码MOV P0,#0C8H ;显示小时十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0,#0C9H ;显示小时个位CALL ENABLECALL WRITE2MOV A,HOUINC AMOV HOU,AXRL A,#10JNZ OUTSJMP OVERFLOWOUT: RETI;*************************************溢出处理OVERFLOW:MOV L50MS,#20MOV L1MS,#00HMOV L250MS,#00HMOV SEC,#00HMOV MIN,#00HMOV HOU,#00HRETI;-------------------------------------------------------------------- DELAY30:MOV R7,#2W2: MOV R4,#125W3: MOV R3,#248DJNZ R3,$DJNZ R4,W3DJNZ R7,W2DJNZ R1,DELAY30RET;-------------------------------------------------------------------- TABLE00:DW 64580,64684,64777,64820DW 64898,64968,65030,64260DW 64400,64524,65058,63835,64021;--------------------------------------------------------------------;第一首《精忠报国》;-------------------------------------------------------------------- TABLE10:DB66H,52H,36H,22H,12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22HDB 32H,52H,22H,42H,38H,66H,52H,36H,22H,12H,22H,22H,32H,98HDB24H,22H,32H,54H,52H,32H,92H,12H,92H,82H,98H,66H,52H,36H,22HDB12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22H,32H,52H,22H,42H,38HDB66H,52H,36H,22H,12H,22H,22H,32H,98H,24H,22H,32H,54H,52H,32HDB 22H,12H,92H,82H,98H,14H,24H,34H,44H,64H,0B4H,64H,32H,52HDB62H,0B2H,62H,52H,38H,24H,22H,32H,54H,52H,62H,52H,32H,32H,22H,38HDB64H,0B4H,64H,32H,52H,62H,0B2H,62H,52H,38H,22H,22H,22H,32H,52H,52HDB 52H,62H,7FH,74H,04H,58H,6FHDB 00;-------------------------------------------------------------------- ;第二首《月亮代表我的心》;-------------------------------------------------------------------- TABLE20:DB 02H,82HDB 16H,32H,54H,02H,52HDB 0A6H,32H,54H,02H,52HDB 64H,74H,0B6H,64HDB 52H,5CH,32H,22HDB 16H,12H,14H,32H,22HDB 16H,12H,14H,22H,32HDB 26H,12H,94H,22H,32HDB 2CHDB 32H,52HDB 36H,22H,14H,54HDB 0ACH,92H,0A2HDB 96H,0A2H,96H,82HDB 3CH,54HDB 36H,22H,14H,54HDB 0ACH,92H,0A2HDB 16H,12H,14H,22H,32HDB 2CH,02H,82HDB 16H,32H,56H,12HDB 0A6H,32H,56H,52HDB 66H,72H,0B6H,62HDB 62H,52H,58H,32H,22HDB 16H,12H,14H,32H,22HDB 16H,12H,14H,22H,32HDB 26H,92H,0A4H,12H,22HDB 1CHDB 00;------------------------------------------------------------------- ;第三首《看我七十二变》;------------------------------------------------------------------- TABLE30:DB 0d4H,84H,94H,82H,92HDB 12H,22H,82H,92H,02H,92H,82H,0d2HDB 82H,92H,14H,84H,02H,0d1H,0d1HDB 0c2H,0d2H,84H,0d2H,0d2H,82H,82HDB 84H,82H,82H,94H,82H,0d2HDB 82H,82H,82H,92H,02H,82H,82H,0d2HDB 0c4H,84H,0d4H,92H,0d2HDB 82H,0d2H,82H,92H,98HDB 04H,94H,88HDB 04H,94H,88HDB 04H,94H,88HDB 04H,94H,88H,04HDB 32H,32H,22H,12H,02H,92H,12H,92HDB 32H,32H,22H,12H,02H,92H,12H,92HDB 32H,32H,22H,12H,02H,92H,12H,22HDB 54H,44H,34H,12H,22HDB 34H,22H,12H,02H,92H,12H,92HDB 32H,32H,22H,12H,02H,92H,12H,92HDB 32H,32H,22H,12H,02H,92H,12H,22HDB 54H,44H,32H,22H,12H,92HDB 00;--------------------------------------------------------------------;第四首《同一首歌》;-------------------------------------------------------------------- TABLE40:DB 88h,14h,24h,36H,42H,34H,14H,28H,14H,94HDB 1fH,88H,14H,24H,34H,32H,42H,54H,14HDB 46H,32H,54H,22H,32H,32H,22H,2CH,38H,54H,74HDB 76H,62H,68H,54H,52H,62H,74H,62H,52H,3fHDB 46H,42H,54H,64H,54H,42H,32H,28H,0a4H,0a2HDB 92H,84H,94H,1fH,0b8H,68H,46H,52H,68HDB 74H,72H,72H,74H,62H,52H,3fH,0b8H,68HDB 46H,52H,68H,64H,62H,62H,64H,42H,32H,2fHDB 58H,14H,24H,36H,42H,34H,12H,12H,26H,22H,24H,22H,12HDB94H,9cH,0a8H,0a6H,92H,84H,64H,54H,22H,22H,46H,42H,44H,32H,22H,5fHDB 00;-------------------------------------------------------------------- ;第五首《大海》;-------------------------------------------------------------------- TABLE50:DB82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24HDB22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32HDB 22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,94H,1cHDB82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24HDB22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32HDB22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,22H,12H,1cH,32H,52HDB 62H,64H,62H,64H,0b2H,62H,52H,54H,62H,54H,32H,22HDB12H,14H,12H,14H,24H,3cH,32H,22H,12H,14H,12H,14H,0b2H,62H,52H,54H,62H,54H,32H,52HDB66H,0b2H,0b4H,62H,52H,5cH,32H,52H,62H,64H,62H,64H,0b2H,62H,52H,54HDB62H,54H,32H,22H,12H,14H,12H,14H,54H,3cH,32H,22H,12H,14H,12H,14H,22H,32HDB 52H,54H,32H,54H,32H,52H,6fH,04H,02H,92H,32H,24H,12H,1fHDB 00;-------------------------------------------------------------------- ;第六首《两只蝴蝶》;--------------------------------------------------------------------TABLE60:DB32H,22H,38H,02H,22H,32H,22H,18H,04H,92H,12H,24H,22H,32H,22H,12H,92H,92H,88H,04H,32H,22HDB38H,02H,22H,32H,22H,18H,04H,92H,12H,24H,22H,32H,22H,21H,92H,12H,28H,04H,32H,22HDB38H,02H,22H,32H,22H,18H,04H,92H,12H,24H,22H,32H,22H,12H,92H,91H,11H,88HDB04H,32H,52H,58H,02H,52H,62H,52H,38H,04H,22H,22H,24H,22H,32H,22H,12H,92H,92HDB12H,12H,1cH,08H,02H,52H,52H,62H,0b2H,72H,72H,62H,32H,22H,22H,22HDB38H,02H,32H,32H,52H,64H,64H,02H,92H,32H,22H,28H,04H,32H,52H,52H,32H,54H,02H,0b4H,72HDB62H,72H,34H,02H,62H,62H,72H,62H,52H,32H,22H,02H,32H,22H,32HDB 58H,02H,52H,52H,62H,0b2H,72H,72H,62H,32H,22H,22H,22HDB38H,02H,32H,32H,52H,64H,64H,02H,92H,32H,22H,28H,04H,32H,52H,52H,32H,54H,02H,0b4H,72HDB62H,72H,34H,02H,62H,62H,72H,62H,52H,32H,22H,02H,84H,92H,1cHDB 00;--------------------------------------------------------------------;第七首<<世上只有妈妈好>>;-------------------------------------------------------------------- TABLE70:DB66H,52H,34H,54H,0B4H,62H,52H,68H,34H,52H,62H,54H,34H,12H,92H,52H,32H,28HDB26H,32H,54H,52H,62H,34H,24H,18H,56H,32H,22H,12H,92H,12H,8FHDB66H,52H,34H,54H,0B4H,62H,52H,68H,34H,52H,62H,54H,34H,12H,92H,52H,32H,28HDB26H,32H,54H,52H,62H,34H,24H,18H,56H,32H,22H,12H,92H,12H,8FHDB66H,52H,34H,54H,0B4H,62H,52H,68H,34H,52H,62H,54H,34H,12H,92H,52H,32H,28HDB26H,32H,54H,52H,62H,34H,24H,18H,56H,32H,22H,12H,92H,12H,8FHDB 00;-------------------------------------------------------------------- ;第八首歌《彩云追月》;-------------------------------------------------------------------- TABLE80:DB86H,92H,12H,22H,32H,52H,68H,63H,52H,34H,62H,0B2H,0B2H,62H,51H,61H,51H,31H,54HDB62H,0B2H,0B2H,62H,52H,32H,52H,52H,51H,61H,51H,31H,34H,52H,62H,74H,32H,52H,52H,32H,21H,31H,21H,11H,24HDB32H,52H,52H,32H,22H,12H,24H,32H,52H,52H,32H,62H,52H,61H,51H,31H,21H,21H,31H,21H,11H,1CHDB21H,31H,22H,23H,31H,21H,18H,02H,0B2H,0BCH,0B4H,72H,61H,51H,72H,61H,71H,61H,51H,61H,71H,61H,6FHDB86H,94H,12H,22H,32H,52H,64H,62H,51H,31H,52H,21H,31H,21H,33H,62H,0B2H,0B2H,62H,51H,61H,51H,31H,54HDB62H,0B2H,72H,61H,51H,51H,61H,51H,31H,54H,61H,0B2H,72H,61H,51H,51H,61H,51H,31H,32H,21H,11H,32H,51H,61H,54HDB02H,32H,24H,32H,52H,52H,32H,22H,31H,21H,11H,24H,32H,52H,62H,0B2H,72H,61H,51H,61H,51H,31H,32H,52H,52H,32H,62HDB51H,31H,31H,21H,11H,91H,23H,31H,21H,1CH,12H,24H,32H,62H,51H,31H,34H,0B4H,72H,61H,51H,63H,71H,64HDB0B2H,54H,72H,62H,71H,61H,54H,61H,51H,31H,21H,34H,73H,61H,54H,22H,32H,52H,22H,36H,52H,62H,61H,31H,32H,21H,11H,21H,11H,91H,81HDB94H,52H,62H,52H,42H,32H,22H,32H,52H,0B4H,74H,64H,52H,61H,51H,41H,5CH,02H,52H,0B4H,74H,63H,51H,61H,51H,31H,21HDB 00;-------------------------------------------------------------------- ;第九首<<十年>>;--------------------------------------------------------------------TABLE90:DB02H,11H,21H,32H,32H,22H,32H,21H,11H,0A1H,91H,92H,0D1H,91H,83H,91H,0A2H,91H,81H,94H,11H,0A1H,91H,0A1H,98H,03H,81H,0A1H,0A1H,91H,0A1HDB98H,04H,02H,11H,21H,32H,32H,22H,32H,21H,31H,51H,11H,13H,31H,22H,22H,21H,11H,0A1H,11H,13H,11H,11H,0A1H,91H,0A1HDB11H,93H,94H,03H,81H,11H,0A1H,91H,81H,92H,0A1H,91H,94H,08H,03H,81H,32H,21H,11H,22H,31H,21H,21H,83HDB01H,11H,91H,0A1H,11H,61H,51H,11H,34H,01H,31H,21H,31H,48H,23H,31H,32H,42H,38H,03H,11H,21H,52H,31HDB33H,31H,31H,41H,51H,61H,23H,21H,21H,41H,31H,21H,13H,0D1H,0D1H,21H,11H,0A1H,11H,91H,92H,91H,11H,0A1H,91HDB0A1H,31H,31H,22H,0A1H,11H,14H,01H,11H,21H,31H,63H,31H,42H,51H,31H,31H,22H,11H,21H,52H,31H,33H,31H,31H,41HDB51H,61H,23H,21H,21H,41H,31H,21H,13H,0D1H,0D1H,21H,11H,0A1H,11H,91H,92H,91H,11H,0A1H,91HDB0A2H,41H,31H,22H,31H,21H,12H,12H,11H,11H,21H,31H,63H,51H,32H,11H,21H,26H,11H,0A1H,18HDB 00;-------------------------------------------------------------------- ;第十首<<你的爱给了谁>>;-------------------------------------------------------------------- TABLE100:DB02H,91H,0A1H,16H,21H,11H,0A6H,81H,0A1H,9CH,02H,91H,0A1H,16H,21H,31H,24H,21H,0A1H,11H,0A1HDB9CH,02H,11H,21H,36H,32H,24H,21H,0A1H,11H,0A1H,9CH,02H,91H,0A1H,14H,11H,11H,21H,11H,0A4H,04H,04H,02H,0A1H,11H,0A1H,93H,92HDB02H,61H,71H,0B4H,0B2H,0B1H,0B1H,76H,0B1H,71H,6CH,02H,61H,71H,0B6H,0B1H,0B1H,76H,0B1H,71H,6CH,02H,51H,61H,56H,61H,51H,54H,51H,0B1H,71H,0B1HDB 72H,62H,68H,02H,61H,51H,66H,62H,58H,0CH,02H,51H,41H,5FHDB02H,91H,0A1H,16H,21H,11H,0A6H,81H,0A1H,9CH,02H,91H,0A1H,16H,21H,31H,24H,21H,0A1H,11H,0A1HDB9CH,02H,11H,21H,36H,32H,24H,21H,0A1H,11H,0A1H,9CH,02H,91H,0A1H,14H,11H,11H,21H,11H,0A4H,04H,04H,02H,0A1H,11H,0A1H,93H,92HDB02H,61H,71H,0B4H,0B2H,0B1H,0B1H,76H,0B1H,71H,6CH,02H,61H,71H,0B6H,0B1H,0B1H,76H,0B1H,71H,6CH,02H,51H,61H,56H,61H,51H,54H,51H,0B1H,71H,0B1HDB 66H,62H,54H,0B2H,71H,61H,6CHDB 00END实验控制流程图如下:使用说明:键盘如下:按键功能说明:1~A:十首歌曲C:上一首歌曲D:下一首歌曲E:歌曲暂停F:开机画面四、调试程序调试中出现的问题及解决的办法:1.有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发行是因为程序中有的指令书写得不规导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。

单片机音乐盒课程设计报告

单片机音乐盒课程设计报告

.机电高等专科学校课程设计报告书课程名称:单片机课题名称:电子音乐盒专业:自动控制系班级:计控111**:111413144**:思璐2013 年 01月01日目录1.设计目的…………………………………………..错误!未定义书签。

2.设计要求和设计指标错误!未定义书签。

3.设计容错误!未定义书签。

3.1硬件局部错误!未定义书签。

3.1.1 …错误!未定义书签。

3.2 软件局部错误!未定义书签。

4.本设计改良建议错误!未定义书签。

5.总结〔感想和心得等〕错误!未定义书签。

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

附录错误!未定义书签。

1.设计目的通过学习单片机课程,对单片机的硬件设计,软件设计掌握有了不少了解,学习了protel 99 SE 和keil软件,锻炼了自己的编程能力,对单片机硬件和软件的设计都有了进一步的认识和提高。

为以后的学习也打下了很好的根底。

2.设计要求和设计指标(1)利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演乐曲(存两首乐曲)。

(2) 可通过功能键选择乐曲,播放不同音乐。

(3)要产生音频脉冲,只要算出*一音频的周期(1/音频),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲(4)利用8051的部定时器使其工作在计数器模式MODE1下,改变记数值TH0及TL0以产生不同频率的方法。

例如频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时956/1=956在每记数9次时将I/O口反相,就可得到中音D0(523HZ)。

记数脉冲值与频率的关系公式如下:N=Fi/2/Fr N:记数值Fi:部计时一次为1微秒.故其频率为1MHZFr;要产生的频率(5):起记数值的求法如下:T=65536-N=65536-Fi/2/Fr例如:设K=65536,F=1000000=Fi=1MHZ,求低音D0〔523HZ〕,高音的D0〔1046HZ〕的记数值。

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

机电高等专科学校课程设计报告书课程名称:单片机课题名称:电子音乐盒专业:自动控制系班级:计控111学号:111413144姓名:思璐2013 年01月01日目录1.设计目的…………………………………………..错误!未定义书签。

2.设计要求和设计指标错误!未定义书签。

3.设计容错误!未定义书签。

3.1硬件部分错误!未定义书签。

3.1.1 …错误!未定义书签。

3.2 软件部分错误!未定义书签。

4.本设计改进建议错误!未定义书签。

5.总结(感想和心得等)错误!未定义书签。

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

附录错误!未定义书签。

1.设计目的通过学习单片机课程,对单片机的硬件设计,软件设计掌握有了不少了解,学习了protel 99 SE 和keil软件,锻炼了自己的编程能力,对单片机硬件和软件的设计都有了进一步的认识和提高。

为以后的学习也打下了很好的基础。

2.设计要求和设计指标(1)利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演乐曲(存两首乐曲)。

(2) 可通过功能键选择乐曲,播放不同音乐。

(3)要产生音频脉冲,只要算出某一音频的周期(1/音频),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲(4)利用8051的部定时器使其工作在计数器模式MODE1下,改变记数值TH0及TL0以产生不同频率的方法。

例如频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时956/1=956在每记数9次时将I/O口反相,就可得到中音D0(523HZ)。

记数脉冲值与频率的关系公式如下:N=Fi/2/Fr N:记数值Fi:部计时一次为1微秒.故其频率为1MHZFr;要产生的频率(5):起记数值的求法如下:T=65536-N=65536-Fi/2/Fr例如:设K=65536,F=1000000=Fi=1MHZ,求低音D0(523HZ),高音的D0(1046HZ)的记数值。

T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr低音D0的T=65536-500000/262=63627中音D0的T=65536-500000/523=64580低音D0的T=65536-500000/1047=650593.设计容3.1 硬件部分本设计中用到89C51单片机,蜂鸣器,独立式按键。

(硬件电路原理图如图1所示)3.11 原理说明当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。

(1)硬件电路中用K1, K2, K3, K4分别接P0.0, P0.1, P0.2, P0.3作为对应歌曲按键。

(2)用P1.0口接蜂鸣器。

(3)电路为12MHZ晶振频率工作。

音乐盒原理图3.2.软件部分本程序可以实现课程设计的基本要求,并可以通过按键播放两首歌曲,程序流程图如下:4.本设计改进建议(1)有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。

(2)程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无常运行的现象。

当用JNZ指令时,跳转围比较少,这时要用一个标号中转。

(3)编程时要注意,在程序开始时,要写入各定时器中断的入口地址。

(4)编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。

5.收获与体会(1)学习单片机的课时不多,对单片机的硬件设计,软件设计掌握的深度不够,但通过此次课程设计,明显的改善了,首先对于硬件电路的工作原理有了进一步的学习,同时有了一个提升;软件方面,在程序的设计,程序的调试方面都有了很大的进步。

(3) 通过这次课程设计,我体会到了成功的喜悦,听着自己设计的程序下载到单片机中播放出音乐,心理非常自豪。

这次的课程设计在一定程度上改变了我学习单片机这门课程的态度,从最初的认为学它没有什么实际意义,到如今爱上单片机学习,并希望能将理论运用到实践,设计出更好更完整的系统。

我明白了一个人要想做好一件事,就必须具备自信心,耐心,还要有毅力,要胆大心细,要勇于尝试,要手脑并用,最后才能交出一份令人满意的答卷。

6. 主要参考文献[1] 单片机原理及应用清华大学[2] Protel 99 SE 印刷电路板设计教程机械工业[3]王为青,程国钢.单片机Keil Cx51应用开发技术[M].:人民邮电,2007.02[4] 阎石.数字电子技术基础[M].:高等教育,1998.12,第4版[5] 邓元庆.数字电路与逻辑设计[M].:电子工业,2001附件1:元件清单附件2:音乐程序K1 EQU P0.0 ;定义引脚K2 EQU P0.1K3 EQU P0.2K4 EQU P0.3SPK EQU P1.0 ;定义蜂鸣器引脚ORG 0000HLJMP MAINORG 001BHLJMP T1SERORG 0030HMAIN: JNB K1,G1JNB K2,G2JNB K3,G3JNB K4,G4LJMP MAING1: LCALL GQ1G2: LCALL GQ2G3: LCALL GQ3G4: LCALL GQ4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GQ1:MOV SP,#30HMOV TMOD,#10H ;设T1工作方式1MOV IE,#88H ;允许中断LOOP1: MOV 40H,#00H ;简谱码指针清0LOOP2: MOV A, 40H ;简谱码指针放入AMOV DPTR, #TABLE1MOVC A,A+DPTR ;到表格TABLE1中取简谱码MOV R1,A ;取到的简谱码暂存于R1JZ FINISH ;简谱码是00H(结束码),转移ANL A,#0FH ;不是00H,取低4位(节拍码)MOV R2,A ;将节拍码存入R2中MOV A,R1 ;将取到的简谱码再放入ASWAP A ;高低4位交换ANL A,#0FH ;取低4位(唱名码)JNZ SING ;唱名码不是00H,转移CLR TR1 ;唱名码是00H,则不发音SJMP WY ;转移至WYSING: DEC A ;唱名码减1MOV 50H,A ;唱名码存入50HRL A ;乘2MOV DPTR, #TABLE2MOVC A,A+DPTR ;到表格TABLE2取计数值高8位MOV TH1, A ;计数值高8位存入TH1MOV 51H, A ;计数值高8位存入51HMOV A, 50H ;将取到的唱名码再放入ARL A ;乘2INC A ;唱名码加1MOVC A,A+DPTR ;到表格TABLE2取计数值低8位MOV TL1, A ;计数值低8位存入TL1MOV 52H, A ;计数值低8位存入52HSETB TR1 ;启动T1WY: LCALL DELAY ;调用基本单位时间(1/4拍)INC 40H ;简谱码指针加1SJMP LOOP2 ;取下一个简谱码FINISH: CLR TR1 ;停止T1LJMP MAIN ;重复播放T1SER: PUSH ACC ;将A的值暂存于堆栈PUSH PSW ;将PSW的值暂存于堆栈MOV TL1, 52H ;重置定时器初值MOV TH1, 51HCPL SPK ;将SPK取反POP PSW ;至堆栈取回PSW值POP ACC ;至堆栈取回A值RETI ;返回主程序TABLE1: DB 84H,62H,82H,0B6H,02H ;简谱码表DB 94H,0B4H,86H,02HDB 84H,42H,52H,64H,52H,42HDB 58H,04H,04HDB 84H,62H,82H,0B6H,0A2HDB 94H,0B4H,86H,02HDB 84H,52H,62H,76H,32HDB 48H,04H,04HDB 94H,0B4H,0B6H,02HDB 0A4H,92H,0A2H,0B6H,02HDB 92H,0A2H,0B2H,92H,92H,82H,62H,42HDB 58H,04H,04HDB 84H,62H,82H,0B6H,0A2HDB 94H,0B4H,86H,02HDB 84H,52H,62H,76H,32HDB 48H,04H,04HDB 00H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GQ2:MOV SP,#30HMOV TMOD,#10H ;设T1工作方式1MOV IE,#88H ;允许中断LOOP12: MOV 40H,#00H ;简谱码指针清0LOOP22: MOV A, 40H ;简谱码指针放入AMOV DPTR, #TAB2MOVC A,A+DPTR ;到表格TAB2中取简谱码MOV R1,A ;取到的简谱码暂存于R1JZ FINISH2 ;简谱码是00H(结束码),转移ANL A,#0FH ;不是00H,取低4位(节拍码)MOV R2,A ;将节拍码存入R2中MOV A,R1 ;将取到的简谱码再放入ASWAP A ;高低4位交换ANL A,#0FH ;取低4位(唱名码)JNZ SING2 ;唱名码不是00H,转移CLR TR1 ;唱名码是00H,则不发音SJMP WY2 ;转移至WY2SING2: DEC A ;唱名码减1MOV 50H,A ;唱名码存入50HRL A ;乘2MOV DPTR, #TABLE2MOVC A,A+DPTR ;到表格TABLE2取计数值高8位MOV TH1, A ;计数值高8位存入TH1MOV 51H, A ;计数值高8位存入51HMOV A, 50H ;将取到的唱名码再放入ARL A ;乘2INC A ;唱名码加1MOVC A,A+DPTR ;到表格TABLE2取计数值低8位MOV TL1, A ;计数值低8位存入TL1MOV 52H, A ;计数值低8位存入52HSETB TR1 ;启动T1WY2: LCALL DELAY ;调用基本单位时间(1/4拍) INC 40H ;简谱码指针加1SJMP LOOP22 ;取下一个简谱码FINISH2: CLR TR1 ;停止T1LJMP MAINTAB2: DB 64H,62H,52H,64H,04H ;简谱码表DB 62H,82H,62H,52H,64H,04HDB 44H,42H,52H,62H,82H,64HDB 54H,52H,42H,54H,04HDB 66H,81H,61H,92H,86HDB 92H,82H,82H,62H,86H,12HDB 64H,52H,52H,84H,62H,52HDB 54H,52H,42H,54H,04HDB 64H,62H,52H,64H,04HDB 62H,82H,62H,52H,64H,04HDB 44H,42H,52H,62H,82H,64HDB 54H,52H,42H,54H,04HDB 66H,81H,61H,92H,86HDB 92H,82H,82H,62H,84H,04HDB 02H,62H,52H,62H,84H,62H,52HDB 52H,46H,44H,04HDB 42H,52HDB 64H,62H,82H,94H,92H,0D2HDB 0D2H,0C2H,0B2H,92H,84H,04HDB 92H,82H,62H,52H,44H,22H,42HDB 54H,52H,42H,54H,42H,52HDB 64H,62H,82H,94H,92H,0D2HDB 0C2H,0B2H,0B2H,0C2H,0B4H,04HDB 84H,82H,62H,0A2H,0B2H,42H,52HDB 64H,04H,54H,04HDB 44H,04H,04H,04HDB 00H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GQ3:MOV SP,#30HMOV TMOD,#10H ;设T1工作方式1MOV IE,#88H ;允许中断LOOP13: MOV 40H,#00H ;简谱码指针清0LOOP23: MOV A, 40H ;简谱码指针放入AMOV DPTR, #TAB3MOVC A,A+DPTR ;到表格TAB3中取简谱码MOV R1,A ;取到的简谱码暂存于R1JZ FINISH3 ;简谱码是00H(结束码),转移ANL A,#0FH ;不是00H,取低4位(节拍码)MOV R2,A ;将节拍码存入R2中MOV A,R1 ;将取到的简谱码再放入ASWAP A ;高低4位交换ANL A,#0FH ;取低4位(唱名码)JNZ SING3 ;唱名码不是00H,转移CLR TR1 ;唱名码是00H,则不发音SJMP WY3 ;转移至WY3SING3: DEC A ;唱名码减1MOV 50H,A ;唱名码存入50HRL A ;乘2MOV DPTR, #TABLE2MOVC A,A+DPTR ;到表格TABLE2取计数值高8位MOV TH1, A ;计数值高8位存入TH1MOV 51H, A ;计数值高8位存入51HMOV A, 50H ;将取到的唱名码再放入ARL A ;乘2INC A ;唱名码加1MOVC A,A+DPTR ;到表格TABLE2取计数值低8位MOV TL1, A ;计数值低8位存入TL1MOV 52H, A ;计数值低8位存入52HSETB TR1 ;启动T1WY3: LCALL DELAY ;调用基本单位时间(1/4拍)INC 40H ;简谱码指针加1SJMP LOOP23 ;取下一个简谱码FINISH3: CLR TR1 ;停止T1LJMP MAINTAB3: DB 82H,62H,64H ;简谱码表DB 72H,52H,54HDB 42H,52H,62H,72HDB 82H,82H,84HDB 82H,62H,64HDB 72H,52H,54HDB 42H,62H,82H,82HDB 64H,04HDB 52H,52H,52H,52HDB 52H,62H,74HDB 62H,62H,62H,62HDB 62H,72H,84HDB 82H,62H,64HDB 72H,52H,54HDB 42H,62H,82H,82HDB 44H,04HDB 00H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GQ4:MOV SP,#30HMOV TMOD,#10H ;设T1工作方式1MOV IE,#88H ;允许中断LOOP14: MOV 40H,#00H ;简谱码指针清0LOOP24: MOV A, 40H ;简谱码指针放入AMOV DPTR, #TAB4MOVC A,A+DPTR ;到表格TAB4中取简谱码MOV R1,A ;取到的简谱码暂存于R1JZ FINISH4 ;简谱码是00H(结束码),转移ANL A,#0FH ;不是00H,取低4位(节拍码)MOV R2,A ;将节拍码存入R2中MOV A,R1 ;将取到的简谱码再放入ASWAP A ;高低4位交换ANL A,#0FH ;取低4位(唱名码)JNZ SING4 ;唱名码不是00H,转移CLR TR1 ;唱名码是00H,则不发音SJMP WY4 ;转移至WY4SING4: DEC A ;唱名码减1MOV 50H,A ;唱名码存入50HRL A ;乘2MOV DPTR, #TABLE2MOVC A,A+DPTR ;到表格TABLE2取计数值高8位MOV TH1, A ;计数值高8位存入TH1MOV 51H, A ;计数值高8位存入51HMOV A, 50H ;将取到的唱名码再放入ARL A ;乘2INC A ;唱名码加1MOVC A,A+DPTR ;到表格TABLE2取计数值低8位MOV TL1, A ;计数值低8位存入TL1MOV 52H, A ;计数值低8位存入52HSETB TR1 ;启动T1WY4: LCALL DELAY ;调用基本单位时间(1/4拍) INC 40H ;简谱码指针加1SJMP LOOP24 ;取下一个简谱码FINISH4: CLR TR1 ;停止T1LJMP MAINTAB4: DB 42H,42H,44H,14H ;简谱码表DB 62H,62H,64H,44HDB 42H,62H,84H,84HDB 72H,62H,54H,04HDB 52H,62H,74H,74HDB 62H,52H,64H,44HDB 42H,62H,54H,14HDB 32H,52H,44H,04HDBDBDBDBDBDBDBDBDB 00HTABLE2: DW 0FD82H,0FDC8H,0FE06H ;唱名码表DW 0FE22H,0FE56H,0FE85HDW 0FE9AH,0FEB2H,0FEE4HDW 0FF03H,0FF11H,0FF2BHDW 0FF42H,0FF4DH,0FF61HDELAY: MOV R4,#250 ;延时187ms的循环次数LP1: MOV R5,#0 ;延时0.935ms的循环次数DJNZ R5,$DJNZ R4,LP1DJNZ R2,DELAY ;节拍数未到,转移RETEND ;程序结束。

相关文档
最新文档