数字音乐盒课程设计

合集下载

数字音乐盒的设计讲解

数字音乐盒的设计讲解

单片机与接口技术课程设计(论文) 数字音乐盒的设计院(系)名称电子与信息工程学院专业班级通信121班学号*********学生姓名潘凤麟指导教师高影讲师起止时间:2015.7.4—2015.7.13课程设计(论文)任务及评语院(系):电子与信息工程学院教研室:通信工程摘要单片机是把CPU、存储器和I/O接口集成在一片半导体硅片上的微型计算机。

本次课程设计所设计出的数字音乐盒就是基于单片机的一个系统。

它的的硬件电路部分采用Proteus软件进行设计,以AT89C51单片机作为主芯片,用其I/O口产生不同频率的方波来驱动蜂鸣器发出不同的音调,再配以LCD显示屏和4*4键盘实现必要的显示和控制。

软件部分采用Keil与Proteus进行联合仿真,并用汇编语言来设计程序,把用Keil生成的HEX文件写入到单片机中即可实现设计所要求的功能。

通过Proteus与Keil的联合仿真,该数字音乐盒可播放3首不同的歌曲,并可通过LCD显示屏显示歌曲名称或序号;可通过4*4键盘实现对歌曲的选择,暂停,与播放功能,故仿真结果符合设计要求。

关键词:数字音乐盒;LCD显示屏;键盘目录第1章绪论 (1)1.1 AT89C51简介 (1)1.2 仿真环境简介 (2)1.3本文研究内容 (3)第2章数字音乐盒硬件电路图的设计与分析 (4)2.1 总体设计方案分析 (4)2.2 数字音乐盒部分电路原理说明 (4)2.2.1 蜂鸣器驱动部分电路图与原理说明 (4)2.2.2 LCD显示部分电路图与原理说明 (5)2.2.3 键盘控制部分电路图与原理说明 (6)第3章数字音乐盒的软件设计 (7)3.1 数字音乐盒总体软件程序流程图与分析 (8)3.2 数字音乐盒各子程序的设计与分析 ......................... 错误!未定义书签。

3.2.1 系统初始化子程序设计与分析 (9)3.2.2 LCD显示子程序设计与分析 (10)3.2.3 蜂鸣器频率控制子程序设计与分析 (11)3.2.4 键盘控制子程序设计与分析 (11)第4章仿真结果与分析 (12)4.1 仿真结果 (12)4.2 仿真步骤与结果分析 (13)第5章总结 (16)参考文献 (17)附录Ⅰ (18)附录Ⅱ (19)附录Ⅲ (20)第1章绪论1.1 AT89C51简介所谓单片机,是指把CPU、存储器和I/O接口集成在一片半导体硅片上的微型计算机。

《数字音乐盒》设计报告

《数字音乐盒》设计报告

《数字音乐盒》设计报告
设计目标:
本数字音乐盒旨在提供一种方便、易用的音乐播放体验,让用户可以随时随地享受自己喜欢的音乐。

具体设计要求如下:
1. 支持多种音频格式,如MP3、FLAC等。

2. 采用简洁、直观的用户界面,方便用户操作。

3. 支持多种播放模式,如顺序播放、随机播放等,并且能够记忆用户播放模式。

4. 提供多种音效调节和均衡器设置,使用户可以自由调整音乐效果。

5. 支持歌词显示功能,使用户可以更好地理解音乐。

6. 支持歌曲收藏功能,使用户可以方便地收藏自己的喜爱歌曲。

设计思路与方案:
本数字音乐盒采用嵌入式系统设计,主要硬件部件包括音频芯片、显示屏幕和按键模块,其中音频芯片为核心部件,支持多种音频格式的解码和播放。

用户界面设计上,采用五向导航及确认键来进行操作,主界面分为“音乐播放”和“歌曲收藏”两大模块。

在“音乐播放”模块中,
用户可以选择不同的播放模式,包括顺序播放、随机播放和循环播放。

在播放过程中,用户可以通过前进、后退、暂停等操作来控制音乐播放进程。

同时,也提供了多种音效调节和均衡器设置,用户可以自行选择调整音乐效果。

在播放过程中,歌词会自动显示在屏幕上,方便用户理解歌曲。

在“歌曲收藏”模块中,用户可以收藏自己喜爱的歌曲,方便日后收听。

总结:
本数字音乐盒设计主要针对音乐爱好者,通过简洁、易用的界面设计和多种音效、播放模式等功能的设计,为用户提供了更为便捷、自由的音乐播放体验。

同时,歌曲收藏功能也使用户可以随时查找和收听自己喜爱的歌曲,满足用户对音乐的品质需求。

数字音乐和课程设计

数字音乐和课程设计

数字音乐和课程设计一、教学目标本课程的教学目标是让学生了解和掌握数字音乐的基本概念、技术和应用,提高学生在音乐创作、制作和表演方面的技能,培养学生的创新思维和团队协作能力。

具体目标如下:1.知识目标:学生能够理解数字音乐的基本概念、音乐制作流程和常用数字音乐软件。

2.技能目标:学生能够运用数字音乐软件进行音乐创作、制作和表演,具备基本的音乐制作技能。

3.情感态度价值观目标:学生通过参与数字音乐制作,培养对音乐的热爱和敬业精神,提高创新意识和团队协作能力。

二、教学内容本课程的教学内容主要包括数字音乐的基本概念、音乐制作流程、数字音乐软件使用和音乐创作实践。

具体安排如下:1.数字音乐的基本概念:介绍数字音乐的发展历程、特点和分类。

2.音乐制作流程:讲解音乐制作的各个环节,包括作曲、编曲、录音、混音等。

3.数字音乐软件使用:学习常用数字音乐软件(如FL Studio、AbletonLive等)的基本操作和功能。

4.音乐创作实践:分组进行音乐创作、制作和表演,锻炼学生的实践能力。

三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性。

具体方法如下:1.讲授法:讲解数字音乐的基本概念、音乐制作流程和软件使用方法。

2.讨论法:学生就音乐制作中的问题进行讨论,促进学生思考。

3.案例分析法:分析经典音乐作品,讲解其制作过程和方法。

4.实验法:学生分组进行音乐创作、制作和表演,锻炼实践能力。

四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。

具体如下:1.教材:选用权威、实用的数字音乐教材,为学生提供系统的学习资料。

2.参考书:推荐学生阅读相关音乐制作、音乐理论等方面的书籍,丰富知识体系。

3.多媒体资料:收集各类数字音乐作品、教学视频等,为学生提供丰富的学习资源。

4.实验设备:配备数字音乐制作所需的计算机、软件和音响设备,确保学生能够进行实际操作。

五、教学评估本课程的评估方式包括平时表现、作业和考试等,旨在全面、客观地评价学生的学习成果。

《数字音乐盒》课程设计

《数字音乐盒》课程设计

《数字音乐盒》课程设计报告专业:通信工程班级:0801姓名:张雨阳指导教师:李晶二零一一年六月二十二日目录1、设计任务和要求 (2)2、总体设计 (2)3、硬件设计 (3)3.1硬件电路 (3)3.2原理说明 (3)4、软件设计 (3)5、仿真、安装和调试 (4)6、收获与体会 (5)参考文献 (6)附件1:元件清单 (7)附件2: 总电路图 (7)附件3:音乐程序 (8)1、设计任务和要求(1)利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演乐曲(内存两首乐曲)。

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

(3)可通过功能键选择乐曲,暂停,播放,上一曲,下一曲。

2、总体设计(1)要产生音频脉冲,只要算出某一音频的周期(1/音频),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲(2)利用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;要产生的频率(3):起记数值的求法如下: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的T6=5536-500000/1047=650593、硬件设计3.1 硬件电路本设计中用到89C51单片机,喇叭,七段显示数码管LED。

数字音乐盒的设计与实现

数字音乐盒的设计与实现
716
86
Fa
1397
43
43
Fa#
370
1351
162
Fa#
740
676
81
Fa#
1480
41
41
So
392
1276
153
So
784
638
77
So
1568
38
38
So#
415
1205
145
So#
831
602
72
So#
1661
36
36
La
440
1136
136
La
880
568
68
La
1760
34
34
La#
附录(关键部分程序清单)
#in elude <reg51.h>
#defi ne ucharu nsig nedchar
#defi neuint un sig nedi nt
#define LEDLen 6
xdataunsignedcharOUTBIT _at_0x8002;//位控制口
xdataunsignedcharOUTSEG _at_0x8004;//段控制口
社,20154பைடு நூலகம்
[2]张仁彦,高正中,黄鹤松.单片机原理及应用.北京:机械工业出版社,
2016.3.
[3]付先成,,高恒强,蔡红娟.单片机原理与C语言程序设计.武汉:华中科技大
学出版社,2015.8.
[4]张校珩.单片机C语言编程100例■北京:中国电力出版社,2014.1.
⑸唐颖■单片机综合设计实例与实验■北京:电子工业出版社,2015.1.

数字音乐盒课程设计

数字音乐盒课程设计

数字音乐盒课程设计一、课程目标知识目标:1. 让学生掌握数字音乐的基础知识,包括音符、音阶、节奏等概念;2. 培养学生运用电子设备进行音乐创作的能力,了解数字音乐盒的基本原理;3. 让学生了解不同音乐风格的特点,拓展音乐视野。

技能目标:1. 培养学生运用音乐软件进行创作、编辑和播放数字音乐的能力;2. 提高学生团队协作能力,学会与他人共同完成音乐作品;3. 培养学生创新思维,能够独立设计并制作具有个人特色的数字音乐作品。

情感态度价值观目标:1. 培养学生对音乐的热爱和兴趣,激发他们积极参与音乐活动的热情;2. 培养学生尊重他人作品,树立正确的版权意识;3. 通过音乐创作,培养学生审美观念,提高审美情趣。

分析课程性质、学生特点和教学要求,本课程目标旨在让五年级学生在掌握音乐基础知识的基础上,运用现代科技手段创作音乐作品。

课程将帮助学生将所学知识应用于实际操作中,培养他们的创新精神和团队协作能力,同时提高音乐素养,为今后的音乐学习打下坚实基础。

二、教学内容1. 数字音乐基础知识:音符、音阶、节奏、拍子等基本概念的学习,使学生能够理解音乐的基本元素。

- 教材章节:第一章《音乐的基础知识》- 内容列举:音符的识别、音阶的构成、节奏的练习。

2. 数字音乐创作:运用音乐软件(如GarageBand)进行音乐创作,了解数字音乐盒的工作原理。

- 教材章节:第二章《数字音乐创作》- 内容列举:音乐软件的介绍与操作、音色的选择与搭配、简单旋律的创作。

3. 音乐风格学习:学习不同音乐风格的特点,分析经典作品,培养学生音乐鉴赏能力。

- 教材章节:第三章《音乐风格》- 内容列举:流行音乐、古典音乐、民族音乐等风格的学习与鉴赏。

4. 团队协作与创作实践:分组进行音乐创作,培养学生团队协作能力和创新思维。

- 教材章节:第四章《音乐创作实践》- 内容列举:团队协作流程、音乐创作方法、作品展示与评价。

5. 音乐作品展示与评价:展示学生创作的数字音乐作品,进行自评、互评和教师评价,提高学生的审美观念。

8086音乐盒课程设计

8086音乐盒课程设计

8086音乐盒课程设计一、课程目标知识目标:1. 学生能理解8086音乐盒的基本工作原理和组成结构。

2. 学生掌握使用8086处理器编程,控制音乐盒播放不同旋律的方法。

3. 学生了解音乐盒中音符与频率的关系,能运用此关系创作简单旋律。

技能目标:1. 学生能够运用汇编语言编写程序,实现音乐盒的基本控制功能。

2. 学生通过实践操作,培养动手能力和问题解决能力,提升编程技巧。

3. 学生学会运用逻辑思维和算法设计,实现对音乐盒旋律的精确控制。

情感态度价值观目标:1. 学生培养对计算机硬件和编程的兴趣,激发探索精神。

2. 学生在团队协作中,学会沟通与分享,培养合作精神。

3. 学生通过创作音乐盒旋律,培养审美情趣,提高人文素养。

本课程针对高中年级学生,结合学科特点,将理论知识与实践操作相结合,旨在提高学生的编程技能、动手能力和创新意识。

课程目标具体明确,可衡量,以便于学生和教师在教学过程中有针对性地进行评估和调整。

通过本课程的学习,学生将能够掌握8086音乐盒的相关知识,提升编程技能,并在创作过程中培养良好的情感态度价值观。

二、教学内容1. 8086音乐盒硬件组成及工作原理- 8086处理器基础知识- 音乐盒硬件结构及功能- 音符与频率的关系2. 汇编语言编程基础- 汇编语言指令系统- 程序结构及编写规范- 常用寄存器及功能3. 音乐盒编程控制- 软件编程控制硬件原理- 音乐盒播放旋律的编程方法- 实例分析与操作演示4. 实践操作与作品创作- 编程练习:控制音乐盒播放指定旋律- 创作实践:自主设计音乐盒旋律- 团队协作:分组讨论、展示与评价教学内容根据课程目标,结合教材相关章节,制定详细的教学大纲。

教学安排注重科学性和系统性,从基础知识到实践操作,逐步引导学生掌握8086音乐盒的相关知识。

在教学过程中,教师需关注学生个体差异,合理安排教学进度,确保学生能够扎实掌握所学内容。

同时,通过实践操作和作品创作,培养学生动手能力、创新意识和团队协作精神。

数字逻辑课程设计音乐盒

数字逻辑课程设计音乐盒

数字逻辑课程设计音乐盒一、教学目标本课程旨在通过音乐盒的制作,让学生掌握数字逻辑的基本原理和技能,培养学生的创新意识和动手能力。

具体目标如下:1.知识目标:使学生了解音乐盒的工作原理,理解数字逻辑的基本概念和电路组成。

2.技能目标:培养学生运用数字逻辑设计简单电路的能力,以及使用相关工具和软件进行编程和调试的能力。

3.情感态度价值观目标:培养学生对科技创新的热爱,增强团队协作意识,提高问题解决能力。

二、教学内容教学内容主要包括音乐盒的工作原理、数字逻辑基本电路、编程与调试等。

具体安排如下:1.音乐盒的工作原理:介绍音乐盒的基本结构和工作原理,使学生了解音乐盒是如何产生音乐的。

2.数字逻辑基本电路:讲解数字逻辑电路的组成、功能和应用,包括编码器、译码器、触发器等。

3.编程与调试:教授如何使用相关工具和软件进行编程,让学生动手实践,调试并优化电路。

三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。

1.讲授法:用于讲解音乐盒的工作原理和数字逻辑基本电路。

2.讨论法:在课堂上学生进行讨论,分享学习心得和解决问题的方法。

3.案例分析法:分析具体案例,使学生更好地理解数字逻辑电路在实际应用中的作用。

4.实验法:让学生动手制作音乐盒,培养实际操作能力和团队协作精神。

四、教学资源教学资源包括教材、参考书、多媒体资料和实验设备等。

1.教材:选用权威、实用的教材,为学生提供系统的数字逻辑知识。

2.参考书:提供丰富的参考资料,帮助学生拓展知识面。

3.多媒体资料:制作精美的课件和视频,直观地展示音乐盒的制作过程。

4.实验设备:提供充足的实验设备,确保每个学生都能动手实践。

五、教学评估本课程的评估方式包括平时表现、作业和考试等,以全面客观地评价学生的学习成果。

1.平时表现:评估学生在课堂上的参与度、提问和回答问题的表现,以及团队合作和沟通能力。

2.作业:布置适量的作业,评估学生的理解和应用能力,以及对数字逻辑电路的掌握程度。

单片机音乐盒课程设计

单片机音乐盒课程设计

《单片机数字音乐盒》课程设计报告专业:通信工程班级: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. 材料准备:
- 单片机:选择一种合适的单片机,如Arduino或者STM32等。

- 扬声器:选择一种合适的扬声器,可以是小型的音箱或者
蜂鸣器等。

- 按键:选择一组适量的按键,用于控制音乐的播放、暂停、切换等功能。

- 电源:准备一块适量的电源供电给单片机。

2. 程序设计:
- 编写单片机的控制程序,包括初始化单片机和音频模块、
判断按键输入、控制音乐的播放等功能。

- 将音乐转化为单片机可识别的数据,可以将音乐文件先转
化为.wav格式,再通过程序将.wav文件转化为单片机可以播
放的数据格式。

3. 连接电路:
- 将单片机与扬声器连接起来,通过合适的音频线连接扬声
器的输入端和单片机的输出端。

- 连接按键到单片机的输入口,使单片机可以接收到按键的
输入信号。

4. 调试测试:
- 将单片机与电源连接并上电。

- 通过按键测试音乐的播放、暂停和切换等功能。

- 如果出现问题,可以通过调试程序和检查电路连接等方式进行故障排除。

数字音乐盒的设计

数字音乐盒的设计

单片机与接口技术课程设计(论文) 数字音乐盒的设计院(系)名称电子与信息工程学院专业班级通信121班学号120405003学生姓名潘凤麟指导教师高影讲师起止时间:2015.7.4—2015.7.13课程设计(论文)任务及评语院(系):电子与信息工程学院教研室:通信工程摘要单片机是把CPU、存储器和I/O接口集成在一片半导体硅片上的微型计算机。

本次课程设计所设计出的数字音乐盒就是基于单片机的一个系统。

它的的硬件电路部分采用Proteus软件进行设计,以AT89C51单片机作为主芯片,用其I/O口产生不同频率的方波来驱动蜂鸣器发出不同的音调,再配以LCD显示屏和4*4键盘实现必要的显示和控制。

软件部分采用Keil与Proteus进行联合仿真,并用汇编语言来设计程序,把用Keil生成的HEX文件写入到单片机中即可实现设计所要求的功能。

通过Proteus与Keil的联合仿真,该数字音乐盒可播放3首不同的歌曲,并可通过LCD显示屏显示歌曲名称或序号;可通过4*4键盘实现对歌曲的选择,暂停,与播放功能,故仿真结果符合设计要求。

关键词:数字音乐盒;LCD显示屏;键盘目录第1章绪论 (1)1.1 AT89C51简介 (1)1.2 仿真环境简介 (2)1.3本文研究内容 (3)第2章数字音乐盒硬件电路图的设计与分析 (4)2.1 总体设计方案分析 (4)2.2 数字音乐盒部分电路原理说明 (4)2.2.1 蜂鸣器驱动部分电路图与原理说明 (4)2.2.2 LCD显示部分电路图与原理说明 (5)2.2.3 键盘控制部分电路图与原理说明 (6)第3章数字音乐盒的软件设计 (7)3.1 数字音乐盒总体软件程序流程图与分析 (8)3.2 数字音乐盒各子程序的设计与分析 (8)3.2.1 系统初始化子程序设计与分析 (9)3.2.2 LCD显示子程序设计与分析 (10)3.2.3 蜂鸣器频率控制子程序设计与分析 (11)3.2.4 键盘控制子程序设计与分析 (11)第4章仿真结果与分析 (12)4.1 仿真结果 (12)4.2 仿真步骤与结果分析 (13)第5章总结 (16)参考文献 (17)附录Ⅰ (18)附录Ⅱ (19)附录Ⅲ (20)第1章绪论1.1 AT89C51简介所谓单片机,是指把CPU、存储器和I/O接口集成在一片半导体硅片上的微型计算机。

数字音乐盒的课程设计

数字音乐盒的课程设计

数字音乐盒的设计摘要传统音乐盒,多是机械型的,体积笨重,发音单调,水、灰尘等外在因素,容易使内部金属发音条变形,从而造成发音跑调。

另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。

本设计是一个基于AT89C51系列单片机的音乐盒。

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

使用四个按键控制音乐盒,其中两个按键用来控制歌曲的播放、暂停,另两个用来控制液晶上歌曲次序的变化,本音乐盒共有三首歌曲。

播放歌曲时,相应歌曲对应相应数码管上歌曲次序及歌名的显示。

关键词:AT89C51,蜂鸣器,LCD液晶显示,音乐盒目录1 绪论...................................................................1.1课题描述..........................................................................................................................1.2基本工作原理及框图......................................................................................................2 相关芯片及硬件电路设计.................................................2.1AT89C51芯片 .................................................................................................................2.1.1 AT89C51的功能特性..............................................2.1.2 AT89C51的主要性能参数..........................................2.2时钟电路 ............................................................................................................................2.3复位电路..........................................................................................................................2.4按键电路..........................................................................................................................2.5蜂鸣器电路......................................................................................................................2.6显示电路..........................................................................................................................2.6.1 线段的显示......................................................2.6.2 字符的显示......................................................2.7总体电路..........................................................................................................................3 系统软件设计...........................................................3.1程序主要流程..................................................................................................................3.2程序设计..........................................................................................................................4 系统软件仿真........................................................... 总结.................................................................. 致谢.................................................................. 参考文献..................................................................1 绪论1.1 课题描述随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。

数字音乐盒课程设计

数字音乐盒课程设计

基于单片机多功能数字音乐盒《单片机原理及应用》课程设计任务书一、目的意义《单片机原理及应用》是高校工程专业的一门专业基础课,该门课程具有很强的实践性。

通过课程的学习,使学生掌握基本概念、基本理论和基本技能,为今后从事相应的生产设计和科研工作打下一定的基础。

因此,除课程的理论教学和实验教学外,课程设计也是一个必要和重要的实践教学环节。

通过课程设计,进一步培养学生理论联系实际的能力,学会正确地分析工程实际问题,善于查阅参考文献,准确地选择相应的数据、参数,具备全面地解决实际问题的素质,同时课程设计也为今后的毕业设计打下基础。

二、设计时间、地点、班级时间:第16、17周(二周)地点:三教433 、426班级:09电气99人三、设计内容(二十)基于单片机的多功能数字音乐盒的设计1、功能描述用A T89S52单片机的I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。

共有4乐曲,每首乐曲都由相应的按键控制,并且有开关键、暂停键、上一曲以及下一曲控制键。

按键输入电路的设计复位电路的设计;时钟电路的设计显示电路及驱动电路的设计;扫描模式的选择设计系统主程序及子程序的设计;元件及元件参数的选择前言:本设计是以AT89C51芯片的电路为基础,外部加上放音设备,以此来实现音乐演奏控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。

用户可以按照自己的喜好选择音乐并将其转化成机器码存入单片机的存储器中。

对于不同型号的单片机只需要相应的改变一下地址即可。

该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大的单片机和音乐爱好者提供了很好的借鉴。

1、设计原理及相关说明设计原理:通过按键给单片机的P2口输入低电平,进而利用程序来判断是否执行某一播放功能。

而利用单片机的定时器0中断来控制播放乐曲。

2.1芯片AT89C51的介绍AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM)的低电压,高性能CMOS 8位微处理器,俗称单片机。

数字音乐盒

数字音乐盒

单片机课程设计-数字音乐盒作者:杜斐斐/王薄单片机课程设计实验报告课程设计题目:数字音乐盒课程设计要求:1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒)2.采用LCD显示信息3.开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)4.可通过功能键选择乐曲,暂停,播放。

5.选作内容:显示乐曲播放时间或剩余时间硬件电路:本设计中用到了89C51单片机,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口控制蜂鸣器。

(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,闪烁on lCALL ENABLEMOV P0,#06H ;计数地址加1,显示幕on lCALL 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,P1JB ACC.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,anopmov 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,#8EHlCALL ENABLEmov A,37Hmov DPTR,#TABLE3MOVC A,@A+DPTRlCALL WRITE2RET;-------------------------------------------------- ;开机提示字;-------------------------------------------------mov a,37hcjne a,#0fh,DFFMOV P0,#80H ;设光标地址lCALL ENABLEMOV DPTR,#TABLE1;写数据lCALL 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:DBWELCOM HERE,0FEHTABLE2:DBDFF 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,AINC 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,SECDIV ABADD A,#30HMOV P0,#0CEH ;显示秒十位lCALL ENABLElCALL WRITE2MOV A,BADD A,#30HMOV P0,#0CFH ;显示秒个位lCALL ENABLElCALL 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 ;显示分十位lCALL ENABLElCALL WRITE2MOV A,BADD A,#30HMOV P0,#0CCH ;显示分个位lCALL ENABLElCALL WRITE2MOV A,MINMOV B,#3MUL ABMOV B,#100DIV ABMOV R2,AMOV A,#10XCH A,BDIV ABMOV A,MINJNZ 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:DB 66H,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,98HDB 24H,22H,32H,54H,52H,32H,92H,12H,92H,82H,98H,66H,52H,36H,22HDB 12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22H,32H,52H,22H,42H,38H DB 66H,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,52HDB 62H,0B2H,62H,52H,38H,24H,22H,32H,54H,52H,62H,52H,32H,32H,22H,38H DB 64H,0B4H,64H,32H,52H,62H,0B2H,62H,52H,38H,22H,22H,22H,32H,52H,52H DB 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,74H DB 76H,62H,68H,54H,52H,62H,74H,62H,52H,3fHDB 46H,42H,54H,64H,54H,42H,32H,28H,0a4H,0a2H DB 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,12HDB 94H,9cH,0a8H,0a6H,92H,84H,64H,54H,22H,22H,46H,42H,44H,32H,22H,5fHDB 00;--------------------------------------------------------------------;第五首《大海》;--------------------------------------------------------------------TABLE50:DB 82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24HDB 22H,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,1cHDB 82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24HDB 22H,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,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,52 HDB 66H,0b2H,0b4H,62H,52H,5cH,32H,52H,62H,64H,62H,64H,0b2H,62H,52H,54HDB 62H,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,22H DB 38H,02H,22H,32H,22H,18H,04H,92H,12H,24H,22H,32H,22H,12H,92H,91H,11H,88HDB 04H,32H,52H,58H,02H,52H,62H,52H,38H,04H,22H,22H,24H,22H,32H,22H,12H,92H,92H DB 12H,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,0b4 H,72HDB 62H,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,0b4 H,72HDB 62H,72H,34H,02H,62H,62H,72H,62H,52H,32H,22H,02H,84H,92H,1cHDB 00;--------------------------------------------------------------------;第七首<<世上只有妈妈好>>;--------------------------------------------------------------------TABLE70:DB 66H,52H,34H,54H,0B4H,62H,52H,68H,34H,52H,62H,54H,34H,12H,92H,52H,32H,28H DB 26H,32H,54H,52H,62H,34H,24H,18H,56H,32H,22H,12H,92H,12H,8FHDB 66H,52H,34H,54H,0B4H,62H,52H,68H,34H,52H,62H,54H,34H,12H,92H,52H,32H,28H DB 26H,32H,54H,52H,62H,34H,24H,18H,56H,32H,22H,12H,92H,12H,8FHDB 66H,52H,34H,54H,0B4H,62H,52H,68H,34H,52H,62H,54H,34H,12H,92H,52H,32H,28H DB 26H,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,54H DB62H,0B2H,0B2H,62H,52H,32H,52H,52H,51H,61H,51H,31H,34H,52H,62H,74H,32H,52H,52H,3 2H,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,5 1H,61H,51H,31H,54HDB62H,0B2H,72H,61H,51H,51H,61H,51H,31H,54H,61H,0B2H,72H,61H,51H,51H,61H,51H,31H,3 2H,21H,11H,32H,51H,61H,54HDB02H,32H,24H,32H,52H,52H,32H,22H,31H,21H,11H,24H,32H,52H,62H,0B2H,72H,61H,51H,61 H,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,61 H,51H,63H,71H,64HDB0B2H,54H,72H,62H,71H,61H,54H,61H,51H,31H,21H,34H,73H,61H,54H,22H,32H,52H,22H,36 H,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,0B 4H,74H,63H,51H,61H,51H,31H,21H;--------------------------------------------------------------------;第九首<<十年>>;--------------------------------------------------------------------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,0A1 H,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,2 2H,31H,21H,21H,83HDB01H,11H,91H,0A1H,11H,61H,51H,11H,34H,01H,31H,21H,31H,48H,23H,31H,32H,42H,38H,03 H,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,2 1H,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,0A 1H,18HDB 00;--------------------------------------------------------------------;第十首<<你的爱给了谁>>;--------------------------------------------------------------------TABLE100:DB02H,91H,0A1H,16H,21H,11H,0A6H,81H,0A1H,9CH,02H,91H,0A1H,16H,21H,31H,24H,21H,0 A1H,11H,0A1HDB9CH,02H,11H,21H,36H,32H,24H,21H,0A1H,11H,0A1H,9CH,02H,91H,0A1H,14H,11H,11H,21 H,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,7 6H,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,5FH02H,91H,0A1H,16H,21H,11H,0A6H,81H,0A1H,9CH,02H,91H,0A1H,16H,21H,31H,24H,21H,0 A1H,11H,0A1HDB9CH,02H,11H,21H,36H,32H,24H,21H,0A1H,11H,0A1H,9CH,02H,91H,0A1H,14H,11H,11H,21 H,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,7 6H,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返回指令一定要按正确格式书写或在两行指令间最好不要留空行。

数电音乐盒课程设计

数电音乐盒课程设计

数电音乐盒课程设计一、课程目标知识目标:1. 学生能够理解数字电子电路的基本原理,掌握基本逻辑门的功能与应用。

2. 学生能够运用所学知识,设计简单的数字电路,实现对音乐盒节奏的控制。

3. 学生了解音乐盒的基本构造,掌握音阶与节奏的相关知识。

技能目标:1. 学生具备运用数字电路设计工具进行电路设计和分析的能力。

2. 学生能够通过小组合作,完成音乐盒的设计、搭建和调试。

3. 学生掌握基本编程思维,能利用数字电路实现音乐盒节奏的编程。

情感态度价值观目标:1. 培养学生热爱科学、探索未知的精神,增强对电子技术的兴趣。

2. 培养学生的团队协作意识,提高沟通与表达能力。

3. 增强学生的环保意识,培养节能环保的观念。

课程性质:本课程为实践性课程,以项目式学习为主,结合理论教学,引导学生动手实践。

学生特点:六年级学生具有一定的逻辑思维能力和动手操作能力,对新鲜事物充满好奇心,善于合作交流。

教学要求:教师需关注学生的个体差异,提供个性化的指导与帮助,确保每位学生都能在课程中取得实际成果。

通过课程学习,使学生将理论知识与实际操作相结合,提高解决问题的能力。

二、教学内容本课程依据课程目标,结合教材内容,组织以下教学安排:1. 数字电子电路基本原理:讲解逻辑门、触发器等基本概念,对应教材第3章内容。

- 逻辑门功能与应用- 触发器的种类及其工作原理2. 音乐盒基本构造与音阶知识:介绍音乐盒的构造,音阶与节奏的基础知识,对应教材第5章内容。

- 音乐盒的构造与发声原理- 音阶与节奏的基本概念3. 数字电路设计与编程:教授如何利用数字电路设计工具进行电路设计,以及编程实现音乐盒节奏控制,对应教材第6章内容。

- 数字电路设计工具的使用- 简单编程思维与方法4. 实践项目:设计并搭建音乐盒,对应教材第8章综合实践项目。

- 音乐盒电路设计- 音乐盒编程与调试- 小组合作与展示教学内容安排与进度:第1-2周:数字电子电路基本原理学习第3-4周:音乐盒基本构造与音阶知识学习第5-6周:数字电路设计与编程学习第7-8周:实践项目设计与实施教学内容科学系统,注重理论与实践相结合,通过分阶段教学,使学生逐步掌握课程知识,为后续学习打下坚实基础。

数字音乐盒的设计与实现

数字音乐盒的设计与实现

数字音乐盒的设计与实现课程设计报告课程设计名称:微机系统综合课程设计课程设计题目:数字音乐盒的设计与实现1 总体设计方案1.1 题目介绍与要求本次课程设计的任务是运用伟福Lab8000试验箱和keil软件设计并实现一个数字音乐盒,要求采用I/O产生一定频率的方波,从而驱动蜂鸣器发出不同的音调,演奏乐曲;并且需要采用七段数码管显示当前播放的歌曲序号和播放时间;还得通过数字键盘直接选择乐曲,控制选择上一曲和下一曲音乐,具有暂停和播放控制功能。

1.2设计思路1.2.1音调的产生频率的高低决定了音调的高低。

音乐的十二平均率规定:每两个八度音(如简谱中的中音1和高音1)之间的频率相差一倍。

在两个八度音之间又分为十二个半音。

另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E 到F之间为半音,其余为全音。

由此可以计算出简谱中从低音1到高音1之间每个音名对应的频率,所有不同频率的信号都是从同一个基准频率分频得到的。

要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。

利用51单片机的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。

此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。

例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将I/O反相,就可得到中音DO(523Hz)。

计数脉冲值与频率的关系公式如下:N=Fi/2/FrN:计算值;Fi:内部计时一次为1us,故其频率为1MHz;其计数值的求法如下:初值T=65536?NC调各音符频率与计数值T的对照表如表1.1所示。

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

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

目录摘要 (I)Abstract (II)第一章设计方案的对比 (1)第二章总体方案设计 (2)2.1 原理简介 (2)2.2 方案设计思想 (2)第三章方案实现 (3)3.1、音频脉冲的产生 (3)3.2.音乐节拍的生成 (4)3.3.建立音乐的步骤 (4)第四章硬件设计 (5)4.1 硬件电路 (5)4.1.1、AT89C51的工作特性 (5)4.2 原理说明 (6)4.3 电路各模块说明 (6)4.3.1 键盘系统 (6)4.3.2 放大电路 (7)4.3.3 时钟电路 (8)4.3.4 复位电路 (8)5.3.5 显示电路 (9)第五章软件设计 (10)5.1 主模块的设计 (10)第六章仿真、安装和调试 (12)总结 (13)致谢 (14)参考文献 (14)附录 (15)附录一:音乐程序 (15)附录二:基于单片机的数字音乐盒总电路图 (32)摘要本设计是基于单片机的数字音乐盒设计,由单片机AT89C51芯片和LCD显示器为核心,辅以必要的电路,构成的一个单片机电子数字音乐盒。

要求利用I/O 口产生一定频率的方波,驱动蜂鸣器,发出不同的音调并采用LCD显示信息,从而演奏乐曲(最少三首乐曲,每首不少于30秒),开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称),可通过功能键选择乐曲,暂停,播放。

本设计采用4*4键盘,用Protel99来画系统硬件图,采用汇编语言进行编程,编程后利用KEIL C51来进行编译,再生成的HEX文件装入芯片中,采用proteus软件来仿真,检验功能得以正常实现。

该音乐盒的设计可以通过按键选择不同的曲目,播放和暂停,并通过LCD显示歌曲号及播放时间。

本设计键盘采用动态扫描方式。

每次扫描一行键盘,送此行低电平,读输入口的状态值,判断有没有键按下。

若有键按下,根据读入口的值选择显示值并送至显示值寄存单元,判断键值,启动计数器T0,根据次值为偏移地址找到要选择的音乐的代码的首地址,根据代码产生一定频率的脉冲,驱动蜂鸣器,放出音。

活动4制作数字音乐盒

活动4制作数字音乐盒
活动4制作数字音乐盒
教学目标:
1、学会制作数字音乐盒。
2、熟悉文件夹的新建和文件的复制。
课时安排
1课时
教学重点:学会制作数字音乐盒。教学难点:Fra bibliotek会制作数字音乐盒。
教学过程:
一、激趣导入
二、教学新课
1、在E盘新建“丁丁音乐盒”。
2、选歌。单击地址栏的下拉列表中的E盘,双击打开“声音文件”。按下ctrl键,逐一单击要选的歌名,单击工具栏的“复制”按钮。
5、播放音乐。
三、做一做
新建一个秘书的音乐文件夹,复制并播放自己喜欢的音乐。
四、评一评
五、小结
教后反思:
3、复制到“丁丁音乐盒”文件夹中。单击地址栏的下拉按钮,单击选择下拉列表中的盘,双击打开“醒醒音乐盒”文件夹。单击工具梯形中的“粘贴”按钮,就把选好的音乐文件复制进来。
4、把“丁丁音乐盒”文件中的音乐添加到播放列表。关闭“丁丁音乐盒”文件夹,回到E盘。指针指向“丁丁音乐盒”文件夹,击右键,在快捷菜单中单击“添加到播放列表”,则弹出“添加到播放列表”对话框。单击“新建”按钮,输入“丁丁”,单击“确定”,媒体播放器就自动出现,播放列表中就是选中的歌曲。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于单片机多功能数字音乐盒《单片机原理及应用》课程设计任务书一、目的意义《单片机原理及应用》是高校工程专业的一门专业基础课,该门课程具有很强的实践性。

通过课程的学习,使学生掌握基本概念、基本理论和基本技能,为今后从事相应的生产设计和科研工作打下一定的基础。

因此,除课程的理论教学和实验教学外,课程设计也是一个必要和重要的实践教学环节。

通过课程设计,进一步培养学生理论联系实际的能力,学会正确地分析工程实际问题,善于查阅参考文献,准确地选择相应的数据、参数,具备全面地解决实际问题的素质,同时课程设计也为今后的毕业设计打下基础。

二、设计时间、地点、班级时间:第16、17周(二周)地点:三教433 、426班级:09电气99人三、设计内容(二十)基于单片机的多功能数字音乐盒的设计1、功能描述用A T89S52单片机的I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。

共有4乐曲,每首乐曲都由相应的按键控制,并且有开关键、暂停键、上一曲以及下一曲控制键。

按键输入电路的设计复位电路的设计;时钟电路的设计显示电路及驱动电路的设计;扫描模式的选择设计系统主程序及子程序的设计;元件及元件参数的选择前言:本设计是以AT89C51芯片的电路为基础,外部加上放音设备,以此来实现音乐演奏控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。

用户可以按照自己的喜好选择音乐并将其转化成机器码存入单片机的存储器中。

对于不同型号的单片机只需要相应的改变一下地址即可。

该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大的单片机和音乐爱好者提供了很好的借鉴。

1、设计原理及相关说明设计原理:通过按键给单片机的P2口输入低电平,进而利用程序来判断是否执行某一播放功能。

而利用单片机的定时器0中断来控制播放乐曲。

2.1芯片AT89C51的介绍AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM)的低电压,高性能CMOS 8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

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

由于将多功能8位CPU 和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

外形及引脚排列如图2.1所示图3.2 AT89C51引脚排列图XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732 P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427 U1AT89C522.2 时钟振荡电路、复位电路利用12MHZ的晶振做外部时钟;AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。

这个放大器与作为反馈元件的片外石英晶体(陶瓷)谐振器一起构成自然振荡器。

外接石英晶体及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。

对外接电容C1,C2虽然没有什么严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。

如果使用石英晶体,我们推荐电容使用30PF±10PF(而如果使用陶瓷振荡器建议选择40PF±10PF)。

用2.3控制电路:键盘接口电路如图,本次设计中,按键有7个.键分别接于7根I/O线(P2口),各按键在实物连接上相互独立,彼此的工作状态互不影响,STC单片机自带上拉电阻因此无需外接上拉电阻,用查询法完成按键功能。

2.4蜂鸣器电路:利用PNP管(9012)放大驱动。

基极接10K 欧姆的电阻,发射极接蜂鸣器,集电极接电源。

3系统软件设计程序设计流程图如图7所示设计流程图依据所写源程序所绘制,所用代号均为源程序中所使用,源程序可参照源程序清单。

仿真调试及操作说明调试步骤调试分为硬件调试和软件调试。

硬件调试主要是检查硬件电路是否有短路、断路和虚焊等,首先接上电源,电源的指示灯亮了之后,检测一下单片机的电源脚有没有电源输入,如果有这说明焊接无误,然后可以用万用表检查各个元器件的管脚之间的焊接,检查过程中需要细心和耐心。

硬件调试无误后,进行软件调试。

软件调试可以针对子程序调试,测试其是否正常工作。

5.2 性能分析将程序烧入单片机后,在proteus软件中进行仿真。

通过仿真和实物测试发现,按下按键时,存在一定的延时,不能立刻反应,按下按键时,必须有足够的时间。

附录:总图方针; 实物图:程序文件:#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit BEEP = P1^4; //蜂鸣器sbit k0=P2^0;sbit k1=P2^1;sbit k2=P2^2;sbit k3=P2^3;sbit k4=P2^4;sbit k5=P2^5;sbit k6=P2^6;uint code Tone_Delay_Table[] = { 64021,64103,64260,64400,64524,64580,64684,64777, 64820,64898,64968,65030,65058,65110,65157,65178 };uchar code Song1_Tone[]={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,0xff};uchar code Song1_Time[]={2,2,2,2,2,3,4,2,2,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,2,2,2,5,2,2,2,2,2,2,5,2,2,2,2,2,2,5,0xf f};uchar code Song2_Tone[]={1,2,3,1,1,2,3,1,3,4,5,3,4,5, 5,6,5,4,3,1, 5,6,5,4,3,1 ,1,5,1,0xff};uchar code Song2_Time[]={2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,0xff}; uchar code Song3_Tone [] ={ 1,3,3,3,3,5,4,2,5,3,7,6,5,5,7,4,4,3,6,7,2,1,0xFF};uchar code Song3_Time [] ={ 2,1,1,2,1,1,1,2,1,1,3,2,1,1,2,4,1,1,2,1,1,1,0xFF};uchar code Song4_Tone [] ={ 8,9,2,3,7,6,2,3,10,11,1,2,3,1,2,3,3,4,5,6,5,3,5,6,5,3,5,3,2,1,1,2,3,0xFF};uchar code Song4_Time [] ={ 3,6,7,2,4,5,8,1,2,2,5,5,1,9,1,1,1,1,6,1,1,2,4,1,1,2,1,1,1,1,1,2,2,1,0xFF};uchar Song_Index = 0, Tone_Index = 0; //音乐片段索引,音符索引uchar *Song_Tone_Pointer, *Song_Time_Pointer; //音符指针,延时指针uchar i = 0; uchar j=0,k=0,m=0; //从当前数组中取音符的位置void DelayMS(uint ms) //延时{uchar t;while(ms--) for (t = 0; t < 120; t++);}void play0() //按键产生的INT0{ ET0=1;TR0 = 0;k0=1;Song_Index = ( Song_Index + 1) % 4; //切换到下一音乐switch (Song_Index){case 0: Song_Tone_Pointer = Song1_Tone;Song_Time_Pointer = Song1_Time;break;case 1: Song_Tone_Pointer = Song2_Tone;Song_Time_Pointer = Song2_Time;break;case 2: Song_Tone_Pointer = Song3_Tone;Song_Time_Pointer = Song3_Time;break;case 3: Song_Tone_Pointer = Song4_Tone;Song_Time_Pointer = Song4_Time;break;}//从下一段音乐的第0个音符开始i = 0;while (k0==1&&k1==1&&k2==1&&k3==1&&k4==1&&k5==1&&k6==1) {Tone_Index = Song_Tone_Pointer[i];if ( Tone_Index == 0xFF ){i = 0;DelayMS(2000); //每段音乐播放结束后停顿一段时间continue; //继续播放}TR0 = 1;DelayMS( Song_Time_Pointer[ Tone_Index] * 240);TR0 = 0;i++;}return;}void play1(){ ET0=1;TR0 = 0;k1=1;Song_Index = ( Song_Index + 3) % 4; //切换到上一段音乐switch (Song_Index){case 0: Song_Tone_Pointer = Song1_Tone;Song_Time_Pointer = Song1_Time;break;case 1: Song_Tone_Pointer = Song2_Tone;Song_Time_Pointer = Song2_Time;break;case 2: Song_Tone_Pointer = Song3_Tone;Song_Time_Pointer = Song3_Time;break;case 3: Song_Tone_Pointer = Song4_Tone;Song_Time_Pointer = Song4_Time;break;}i = 0; //从上一段音乐的第0个音符开始while (k0==1&&k1==1&&k2==1&&k3==1&&k4==1&&k5==1&&k6==1){Tone_Index = Song_Tone_Pointer[i];if ( Tone_Index == 0xFF ){i = 0;DelayMS(2000); //每段音乐播放结束后停顿一段时间continue; //继续播放}TR0 = 1;DelayMS( Song_Time_Pointer[ Tone_Index] * 240);TR0 = 0;i++;}return;}void play2(){m=!m;TR0 = 0;k2=1;if(m==0){ j=1;TR0=0;ET0=0;}if(m==1){ ET0=1;k=1;if(j==1) //播放被暂停的音乐{switch (Song_Index){case 0: Song_Tone_Pointer = Song1_Tone;Song_Time_Pointer = Song1_Time;break;case 1: Song_Tone_Pointer = Song2_Tone;Song_Time_Pointer = Song2_Time;break;case 2: Song_Tone_Pointer = Song3_Tone;Song_Time_Pointer = Song3_Time;break;case 3: Song_Tone_Pointer = Song4_Tone;Song_Time_Pointer = Song4_Time;break;}//从本一段音乐的第i个音符开始while (k0==1&&k1==1&&k2==1&&k3==1&&k4==1&&k5==1&&k6==1) {Tone_Index = Song_Tone_Pointer[i];if ( Tone_Index == 0xFF ){i = 0;DelayMS(2000); //每段音乐播放结束后停顿一段时间Song_Index = ( Song_Index + 1) % 4; //播放下一首音乐switch (Song_Index){case 0: Song_Tone_Pointer = Song1_Tone;Song_Time_Pointer = Song1_Time;break;case 1: Song_Tone_Pointer = Song2_Tone;Song_Time_Pointer = Song2_Time;break;case 2: Song_Tone_Pointer = Song3_Tone;Song_Time_Pointer = Song3_Time;break;case 3: Song_Tone_Pointer = Song4_Tone;Song_Time_Pointer = Song4_Time;break;}continue;}TR0 = 1;DelayMS( Song_Time_Pointer[ Tone_Index] * 240);TR0 = 0;i++;}}if (j==0){ j=1;Song_Tone_Pointer = Song1_Tone; //开始播放音乐Song_Time_Pointer = Song1_Time;i = 0;while (k0==1&&k1==1&&k2==1&&k3==1&&k4==1&&k5==1&&k6==1) {Tone_Index = Song_Tone_Pointer[i];if ( Tone_Index == 0xFF ){i = 0;DelayMS(2000); //每段音乐播放结束后停顿一段时间Song_Index = ( Song_Index + 1) % 4; //播放下一段音乐switch (Song_Index){case 0: Song_Tone_Pointer = Song1_Tone;Song_Time_Pointer = Song1_Time;break;case 1: Song_Tone_Pointer = Song2_Tone;Song_Time_Pointer = Song2_Time;break;case 2: Song_Tone_Pointer = Song3_Tone;Song_Time_Pointer = Song3_Time;break;case 3: Song_Tone_Pointer = Song4_Tone;Song_Time_Pointer = Song4_Time;break;}continue;}TR0 = 1;DelayMS( Song_Time_Pointer[ Tone_Index] * 240);TR0 = 0;i++;}}}return;}void play3(){ ET0=1;TR0 = 0;k3=1;//切换到第一段音乐Song_Tone_Pointer = Song1_Tone;Song_Time_Pointer = Song1_Time;Song_Index=0;//从第一段音乐的第0个音符开始i = 0;while (k0==1&&k1==1&&k2==1&&k3==1&&k4==1&&k5==1&&k6==1) {Tone_Index = Song_Tone_Pointer[i];if ( Tone_Index == 0xFF ){i = 0;DelayMS(2000); //每段音乐播放结束后停顿一段时间continue; //继续播放}TR0 = 1;DelayMS( Song_Time_Pointer[ Tone_Index] * 240);TR0 = 0;i++;}return;}void play4(){ET0=1;TR0 = 0;k4=1;Song_Tone_Pointer = Song2_Tone; //切换到第二段音乐Song_Time_Pointer = Song2_Time;Song_Index=1 ;i=0;//从第二段音乐的第0个音符开始while (k0==1&&k1==1&&k2==1&&k3==1&&k4==1&&k5==1&&k6==1) {Tone_Index = Song_Tone_Pointer[i];if ( Tone_Index == 0xFF ){i = 0;DelayMS(2000); //每段音乐播放结束后停顿一段时间continue; //继续播放}TR0 = 1;DelayMS( Song_Time_Pointer[ Tone_Index] * 240);TR0 = 0;i++;}return;}void play5(){ET0=1;TR0 = 0;k5=1;Song_Tone_Pointer = Song3_Tone; //切换到第三段音乐Song_Time_Pointer = Song3_Time;Song_Index=2;//从第三段音乐的第0个音符开始i = 0;while (k0==1&&k1==1&&k2==1&&k3==1&&k4==1&&k5==1&&k6==1) {Tone_Index = Song_Tone_Pointer[i];if ( Tone_Index == 0xFF ){i = 0;DelayMS(2000); //每段音乐播放结束后停顿一段时间continue; //继续播放}TR0 = 1;DelayMS( Song_Time_Pointer[ Tone_Index] * 240);TR0 = 0;i++;}return;}void play6(){ET0=1;TR0 = 0;k6=1;Song_Tone_Pointer = Song4_Tone; //切换到第四段音乐Song_Time_Pointer = Song4_Time;Song_Index=3;//从第四段音乐的第0个音符开始i = 0;while (k0==1&&k1==1&&k2==1&&k3==1&&k4==1&&k5==1&&k6==1){Tone_Index = Song_Tone_Pointer[i];if ( Tone_Index == 0xFF ){i = 0;DelayMS(2000); //每段音乐播放结束后停顿一段时间continue; //继续播放}TR0 = 1;DelayMS( Song_Time_Pointer[ Tone_Index] * 240);TR0 = 0;i++;}return;}void Timer0_Play_Music() interrupt 1 // T0 定时器控制播放{TH0 = Tone_Delay_Table[ Tone_Index ] / 256;TL0 = Tone_Delay_Table[ Tone_Index ] % 256;BEEP = ~BEEP;}void main() // 主程序{TMOD = 0x01;IE = 0x82; //许可INTO 和TO 中断TR0 = 0;while(1){if(k0==0&&k==1) { DelayMS(2000); play0();m=1;}if(k1==0&&k==1) { DelayMS(2000); play1();m=1;}if(k2==0) { DelayMS(2000); play2();}if(k3==0&&k==1) { DelayMS(2000); play3();m=1;}if(k4==0&&k==1) { DelayMS(2000); play4();m=1;}if(k5==0&&k==1) { DelayMS(2000); play5();m=1;}if(k6==0&&k==1) { DelayMS(2000); play6();m=1;}}}。

相关文档
最新文档