单片机数字音乐盒设计

合集下载

基于单片机的数字式音乐盒设计

基于单片机的数字式音乐盒设计

基于单片机的数字式音乐盒设计数字式音乐盒是一种音乐播放器,它通过数字技术存储和播放音乐。

基于单片机的数字式音乐盒可以使用单片机控制音乐的播放,实现音符和旋律的发声和控制。

本文将介绍如何设计一款基于单片机的数字式音乐盒。

一、音乐盒基本原理音乐盒是通过一个带有齿轮的转子,以弹簧的力量驱动,使得钢片受到磁力响应并发声,从而发出旋律。

数字式音乐盒是通过数字技术将音乐编码为数字信号,并存储在芯片中,通过解码器将数字信号还原为音符和旋律发声。

二、单片机控制电路设计1.芯片选择要设计一个数字式音乐盒,需要先选择一款合适的单片机,常用的有AT89C51、STC89C52等。

这里选择一款性能好且价格适中的STC89C52单片机。

2.存储器选型数字式音乐盒的数字信号需要存储在内存中,为了方便起见,使用一个4Mbit的Flash记忆芯片作为存储器。

3.音频输出电路数字信号需要通过解码器进行还原后才能通过音频输出电路输出。

可以使用一对耳机或者喇叭,同时需要用到音量电位器控制音量。

三、软件程序设计1.数字信号编解码算法的设计,可以使用目前较为流行的MIDI编码格式。

2.音乐信号输入模块设计,可以使用USB接口或SD卡接口。

3.数据接收模块设计,可以使用串行通信或者并行通信。

4.数字信号存储模块设计,使用Flash记忆芯片。

5.控制模块设计,实现单片机控制音乐盒的所有操作。

四、实现效果基于单片机的数字式音乐盒实现较为简单,但是需要注意以下几点:1.考虑使用定时器计算控制音乐的播放时间,保证旋律按照要求执行。

2.使用ADC(模拟-数字转换器)读取音量电位器值,对音量进行控制。

3.在使用USB接口时,需要有电路板,使得USB通信接口稳定,可靠。

基于单片机的数字式音乐盒是一种方便实用的音乐盒,通过数字技术的运用,实现了音乐的存储和播放,可广泛应用于各个领域中。

单片机音乐盒课程设计

单片机音乐盒课程设计

单片机音乐盒课程设计一、课程目标知识目标: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、硬件焊接与组装按照设计原理图,将各个硬件模块焊接在电路板上,并进行组装和连接。

单片机的可控数字音乐盒设计说明

单片机的可控数字音乐盒设计说明

微控制器和音乐盒硬件功能随着当代单片机技术的飞速进步,单片机的功能也越来越强大,包括:(1)单片机集成度高;(2)系统结构简单、使用方便、模块化;(3)单片机可靠性高、处理功能强、速度快;(4) 低电压、低功耗,便于生产便携产品;(5) 强大的控制功能。

本文的设计采用了AT89C51单片机,是一款性价比非常高的单片机。

2.1 AT89C51芯片功能AT89C51 是一款低压、高性能 CMOS 8 位微处理器,具有 4K 字节的闪存可编程可擦除只读存储器。

俗称单片机[ 2 ] 。

如图所示:图 2-1 AT89C51 MCU 引脚图图 2-2 AT89C51 单片机实物图引脚功能[ 3 ] :P0.0-P0.7 :8位开漏双向I/O口;P1.0-P1.7:8位双向I/O口,提供上拉电阻;P2.0-P2.7:8位双向I/O口,带上拉电阻;P3.0-P3.7:引脚为8个带上拉电阻的双向I/O口;P3.0:RXD(串口输入);P3.1:TXD(串行输出口);P3.2:INT0(外部中断0);P3.3:INT1(外部中断1);P3.4:T0(定时器0外部输入);P3.6:WR(外部数据存储器写选通);P3.7:RD(外部数据存储器读选通);EA:当EA保持低电平时,在此期间外部程序存储器(0000H-FFFFH),无论是否有程序存储器。

请注意,在加密模式 1 中,EA 将被锁定为 RESET;当EA端保持高电平时,这部分程序内存;P3.5:T1(定时器1的外部输入);ALE:访问外部存储器时,地址锁存器使能的输出电平用于锁存地址的状态字节;PSEN:外部程序存储器的选通信号;RST:复位输入;XTAL1:反向振荡放大器的输入,部分时钟工作电路的输入;XTAL2:反相振荡器的输出。

2.2 八音盒的硬件和功能本文设计的数字音乐盒所需硬件为:AT89C51芯片:主控制器;LED灯:灯光闪烁,P1.0-P1.7控制八路LED灯;数码管:音乐序号显示,P0.0-P0.6控制数码管;晶振:为单片机的正常工作提供稳定的时钟信号。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

单片机课程设计-数字音乐盒设计

单片机课程设计-数字音乐盒设计

目录摘要 (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,根据次值为偏移地址找到要选择的音乐的代码的首地址,根据代码产生一定频率的脉冲,驱动蜂鸣器,放出音。

基于单片机的数字式音乐盒设计

6.将数字式音乐盒组装在一个外壳中。
使用数字式音乐盒
在数字式音乐盒被制造完成后,使用也非常容易。只需要按下相应的控制开关,就可以开始播放音频文件。用户可以通过电位器调节音量或者播放音乐列表中的其他曲目。
在使用过程中,要注意数字式音乐盒的电池寿命。如果数字式音乐盒使用的是充电电池,那么必须确保其有足够的充电时间。
设计数字式音乐盒的材料
为了实现数字式音乐盒,需要以下材料:
·单片机芯片(例如STM32F103C8T6)
·数字到模拟转换器(DAC)
·音频输出器件(例如扬声器或耳机)
·控制开关(例如电位器,按钮等)
·电池(为了提供电源)
·音频文件(MP3,WAV等)
将这些材料组合在一起,可以实现数字式音乐盒。其中,单片机芯片是数字式音乐盒的关键部件,可以存储和播放歌曲、音乐片段等。
基于单片机的数字式音乐盒设计
随着新技术的不断涌现,数字式音乐盒成为人们越来越喜欢的玩具。它的外观精美,功能强大,而且价格也比传统音乐盒便宜,极受欢迎。本文将讨论基于单片机的数字式音乐盒设计,以及它的工作原理、材料和使用。
数字式音乐盒的工作原理
数字式音乐盒是使用单片机芯片进行数字信号的处理,通过音频输出器件输出模拟电信号的技术。这些芯片可以储存大量的音频文件,并且可以轻松地播放这些文件,具有极高的音频质量。数字式音乐盒可以播放所有类型的音频文件,比如WAV,MP3,MIDI和WMA等。这些芯片通常由音乐芯片,播放器和控制系统组成。播放器可以读取音频文件,发送给芯片进行处理,控制系统负责控制播放过程,比如触发开关等功能。整个过程非常简单,非常可靠。
最后,数字式音乐盒具有很多优点,比如它可以储存大量的音频文件,具有非常出色的音频质量,价格实惠,易于制造和使用,因此它是一款非常好的数码产品。

单片机音乐盒课程设计

《单片机数字音乐盒》课程设计报告专业:通信工程班级: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. 调试测试:
- 将单片机与电源连接并上电。

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

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

基于单片机数字音乐盒的设计

精心整理单片机实物设计题目:单片机音乐盒设计班级:K0312416-17通过个按1.1设计目标................................................................................................第二章软件设计与分析 .......................................................................................2.1软件设计的组成 ....................................................................................2.2各部分软件分析 ....................................................................................2.2.1延时165MS,即十六分音符子函数.............................................2.2.2延时1MS子函数.........................................................................2.2.3定时器0中断子函数.................................................................精心整理2.2.4播放音乐子函数 .........................................................................2.5定时器1中断子函数 .....................................................................2.6按键扫描子函数.............................................................................2.2.7主函数 ........................................................................................2.3总源程序 ................................................................................................ 第三章软件仿真 ...................................................................................................3.仿真图.......................................................................................................3.1总结第一章工作原理1.1设计目标具体要求是:以单片机为核心,设计一个数字音乐盒:利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从2.2各部分软件分析2.2.1延时165MS,即十六分音符子函数//延时165MS,即十六分音符子函数voiddelay1(uintz){uintx,y;for(x=z;x>0;x--)for(y=19000;y>0;y--); }2.2.2延时1MS子函数2.2.4播放音乐子函数//播放音乐子函数voidsong(){uinttemp;ucharaa;//aa是简谱c=0;while(1){if(count2==0){break;else{TR1=0;BEEP=1;//关蜂鸣器}delay1(temp%16);//取数的低4位TR1=0; //唱完一个音停10MSBEEP=1;delay2(10);TR1=1;c++;}TR1=0;BEEP=1;{num1++;if(num1==1){TR1=0;aa=count2;count2=0;}if(num1==2){num1=0;count2=aa;TR1=1;}write_date('l'); write_com(0x80+3); write_date('c'); write_com(0x80+4); write_date('o'); write_com(0x80+5); write_date('m');write_com(0x80+6);write_date('e');write_com(0x80+7);write_date('');write_com(0x80+8);write_date('t');write_com(0x80+9);IT1=1;//下降沿时触发中断EX0=1;//开外部中断0IT0=1;//下降沿时触发中断count2=0;//唱第一首歌LCD1602_init();while(1)//大循环{song();}}2.3总源程序//最后的0是结束标志ucharcodetable1[]={ //千年之恋0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0 x72,0x82,0x94,0xA8,0x08,//前奏0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,//竹林的灯火到过的沙漠0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,//七色的国度不断飘逸风中0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,//有一种神秘灰色0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,//是你在尽头等我0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,//最美丽的感动会值得0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff//结束标?//睾?};ucharcodetable2[]={ //寂寞沙洲冷0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,//自你走后心憔悴0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,//白色油桐风中纷飞0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,//落花不样夜是0x31,0x81,0x81,0x81,0x61,0x91,0x82,//有花儿伴着蝴蝶0x51,0x51,0x51,0x51,0x31,0x61,0x53,//孤雁可以双飞0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,//夜深人静独徘徊0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0 x52,//当幸福恋人寄来红色分享喜悦0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,//闭上双眼难过头也不敢回0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0 x10,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0 x10,0x2b,0x10,0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0 x20,0x26,0x20,0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0 x20,0x20,0x20,ucharcodetable4[]={0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10, 0x18,0x40,0x1C,0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0 x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0 x20,0x20,0x20,0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0 x2B,0x20,0x30,0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0 x1C,0x20,0x20,0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0 xff,};//简谱音调对应的定时器初值//适合12的晶振ucharcodecuzhi[]={0xff,0xff,//占位0xFC,0x8E,//中央C调1-70xFC,0xED,0xFD,0x43,{uintx,y;for(x=z;x>0;x--)for(y=19000;y>0;y--);}//延时1MS子函数voiddelay2(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}//LCD1602液晶写命令子函数voidwrite_com(ucharcom)delay2(5);//无延时不能正常工作E=0;}//LCD1602液晶初始化子函数voidLCD1602_init()//初始化{delay2(15);//主函数voidmain(){TMOD=0x11;//定时器0工作在方式1 TH1=0;TL1=0;ET1=1;voidt0()interrupt1{num2++;if(num2==5){num2=0;key();}}//定时器1中断子函数voidt1()interrupt3 //用于产生各种音调{TH1=a;TL1=b;write_date('');write_com(0x80+1);write_date('');write_com(0x80+2);write_date('');write_com(0x80+3);write_com(0xc0+8);write_date('');write_com(0xc0+9);write_date('f');write_com(0xc0+10);write_date('l');write_com(0xc0+11);write_date('o');}}voidwb1()interrupt2{TR1=0;if(k2==0){delay2(10);if(k2==0){count2--;c=0;//从头开始唱if(count2==1)}这次设计进一步端了我的学习态度,学会了实事求是,严谨的作风,对自己要严格要求,不能够一知半解,要力求明明白白。

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

单片机数字音乐盒设计摘要:本设计是采用单片机为核心设计的数字音乐播放器。

它可以实现音乐的播放,可以通过功能键来选择乐曲,播放或暂停,上一曲或下一曲,并可以通过LCD屏幕显示正在播放的歌曲的序号,以及播放时间。

开机时有英文欢迎提示字符。

本音乐播放器可以播放十首歌曲。

主控芯片采用AT89C51,采用汇编语言进行编程,编程后利用KEIl C51进行编译,用Proteus软件来仿真。

关键词:数字音乐盒;单片机;智能化Digital Music Box DesignCHENYING Instructor:HUKEYONGAbstract:This design is using microcontroller as the core design of the digital music player . It can play music. It can function keys to select a song, play or pause on one or the next one. and the serial number of the song that is playing, as well as play time can be displayed through the LCD screen. English boot welcome prompt characters. The music player can play ten songs.The master chip is AT89C51, assembly language is programming, programming by KEIl C51 compile,then using Proteus software to simulate.Key words:Digital Music Box, SCM, Intelligent目录1 引言 (1)1.1单片机总体功能简介 (1)2 系统设计 (1)2.1总体设计方案 (1)2.2系统硬件设计 (2)2.3主要元器件介绍 (4)2.3.1 AT89C51单片机 (4)2.3.2 LM016L液晶显示器 (5)2.4 PROTEUS软件介绍 (6)3 软件设计及仿真 (7)3.1程序流程 (7)3.2系统初始化程序设计 (7)3.3音调的确定 (8)3.4项目仿真 (9)总结 (10)参考文献: (10)附录一 (11)附录二 (11)1 引言目前,各种传感器、变送器、控制仪表已经普遍采用单片机应用系统。

它测量、处理、控制功能于一单片机是单片微型机的简称,故又称为微控制器MCU。

通常由单块集成电路芯片组成,内部含有计算机的基本功能部件:中央处理器CPU,存储器和I/O接口电路等。

因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。

1.1 单片机总体功能简介单片机是在工业测控需要背景下而产生的,在一个应用系统中。

按照测控系统的特点和要求,单片机的应用可分为单机应用和多机应用两大类。

我们这次要完成的单片机课程设计就是它的单机应用,下面介绍一下单片机应用领域内的主要内容。

(1)智能产品单片机与传统机械产品相结合,使传统机械产品结构简化,控制智能化,购成新一代机电一体化产品。

目前,利用单片机构成的智能产品已广泛应用于家用电器、办公设备、数控机床、纺织机械、工业设备等行业。

(2)智能仪表目前,各种传感器、变送器、控制仪表已经普遍采用单片机应用系统。

它测量、处理、控制功能于一体,具有各种智能化功能,如存储、数据处理、查找、判断、联网和语音等功能。

单片机构成的智能仪表,能使仪表具有数字化、智能化、多功能化、综合化等优点。

(3)测控技术用于单片机结构的各种工业控制系统中的数据采集系统具有工作稳定可靠、抗干扰能力强的优点。

(4)智能接口在计算机系统,特别是较大型的工业测控系统中,除通用外部设备外,还由许多外部通信、采集、多路分配管理、驱动控制等接口。

这些外部设备与接口如果完全由主机进行管理,势必会造成主机负担过重,运行速度降低,接口的管理水平也不可能提高。

如果用单片机进行接口的控制与管理,单片机与主机可并行加工处理,可以大量降低接口的通信密度,极大的提高了接口控制广利水平。

在一些通用计算机外部设备上,以实现了单片机的键盘管理、打印机控制、硬盘驱动控制等。

2 系统设计2.1 总体设计方案(1)利用AT89C51单片机的I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。

(2)LCD液晶显示歌曲的序号、播放时间,开机时显示英文欢迎字符。

(3)用键盘控制10首歌曲的播放,并设置开机键、暂停键、上一曲、下一曲控制键。

2.2 系统硬件设计硬件功能模块划分:单片机最小系统模块、按键模块、蜂鸣器电路模块、LCD液晶显示屏模块。

系统结构框图如图2.1所示图2.1 数字音乐盒系统结构框图(1)单片机最小系统模块最小系统模块包括单片机、复位电路、晶振电路以及电源电路。

如图2.2所示图2.2 单片机最小系统(2)按键模块选用4X4矩阵键盘,如图2.3所示,1~4端口扫描行,5~8端口扫描列图2.3 按键模块4x4键盘构成与键盘对应功能如图2.4所示(3)蜂鸣器电路模块蜂鸣器电路模块由单片机接口外接两个1K电阻、一个100欧电阻和一个NPN型三极管来驱动扬声器。

其主要任务是输出大信号和大功率,对音频信号有效不失真的进行放大以推动扬声器发出声音。

如图2.5所示2.5 蜂鸣器电路(4)LCD液晶显示屏模块LCD液晶显示屏如图2.6所示,D0~D7为传送数据信息引脚,E为使能信号引脚,而当RS为1,R/W为0时,设定为将数据信息写入LCD的数据暂存区图2.6 LCD液晶显示屏模块2.3 主要元器件介绍2.3.1 AT89C51单片机本系统采用的是51系列的A T89C51单片机。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。

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

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器, 为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

图2.7为A T89C51单片机的管脚图。

图2.7 AT89C51单片机管脚图VCC:正电源端GND:单片机的接地端XTAL1/XTAL2:片内振荡电路输入/输出端,两端跨接晶体或陶瓷谐振器,与单片机内部反相器构成稳定的自激振荡器。

发出的脉冲直接送入片内定的控制部件RESET:复位端EA/VPP:寻址外部ROM控制端/编程电源输入端。

ALE/PROG:地址锁存允许/编程脉冲输入端。

PSEN:寻址外部程序存储器,选通外部EPROM的端口(OE)。

P0.0~P0.7 P1.0~P1.7 P2.0~P2.7:准双向I/O口。

P3.0~P3.7:具有特定的第二功能(准双向I/O口)。

2.3.2 LM016L液晶显示器LM016L液晶模块采用HD44780控制器,HD44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM (CGRAM),地址计数器RAM(AC)。

IR用于寄存指令码,只能写入不能读出,DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据,BF为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,DDTAM用来存储显示的字符,能存储80个字符码,CGROM由8位字符码生成5*7点阵字符160种和5*10点阵字符32种。

图2.8为LM016L液晶显示屏的引脚图图2.8 LM016L 液晶显示屏引脚图VSS:一般接地VCC:接电源(+5V)V0:液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

RS:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

R/W:R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。

E:E(或EN)端为使能(enable)端,下降沿使能。

DB0~DB7:底4位三态、双向数据总线0~6位RS、R/W寄存器选择控制如表2.1所示:2.4 proteus软件介绍Proteus 与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。

因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。

对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。

运行proteus 的ISIS 程序后,进入该仿真软件的主界面。

在工作前,要设置view 菜单下的捕捉对齐和system下的颜色、图形界面大小等项目。

通过工具栏中的p(从库中选择元件命令)命令,在pick devices 窗口中选择电路所需的元件,放置元件并调整其相对位置,元件参数设置,元器件间连线,编写程序;在source 菜单的Definecode generation tools 菜单命令下,选择程序编译的工具、路径、扩展名等项目;在source 菜单的Add/removesource files 命令下,加入单片机硬件电路的对应程序;通过debug 菜单的相应命令仿真程序和电路的运行情况。

Proteus 软件所提供的元件资源Proteus 软件所提供了30 多个元件库,数千种元件。

元件涉及到数字和模拟、交流和直流等。

3 软件设计及仿真3.1程序流程先从主程序开始,接着初始化变量及 LCD 接口,使 LCD进入了开机状态,等待选择按键,包括播放键,暂停键,停止键。

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

如有键按下,则根据读入口的值选择显示值并送至显示值寄存单元,判断键值;启动计数器T0,根据次值为偏移地址找到要选择的音乐的代码的首地址,根据代码产生一定的频率脉冲,驱动蜂鸣器,放出声音;同时启动定时器T1,计算音乐的播放时间,并且启动LCD,在LCD上显示序号和播放时间。

相关文档
最新文档