51单片机演奏音乐“祝你生日快乐”

合集下载

51单片机蜂鸣器播放单音节音乐

51单片机蜂鸣器播放单音节音乐
// 3_ 2_ 3 1
0xFD,0x23,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF,
// 1_ 3_ 2 .5
0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFA,0x68,0xFF,
{
for (i =0; i < 363; i++)
{;}
}
}
*名称:Init()
*功能:设置计数器0工作方式,16位计数,溢出中断方式
**********************************************************************************/
void Init()
{
TMOD = 0x01; //定时器0处于计时方式,16位
*名称:Count1(void) interrupt 1
*功能:设置计时器0溢出中断,每中断一次改变P2_3引脚电平
*********************************************************************************/
void Count1(void) interrupt 1
void main()
{
uchar time;
Init();
TH0 = high;
TL0 = low;
while (1)
{
if (music[ptr] != 0xFF && music[ptr] != 0x00)//判断是否是正常音符
{
TR0 = 0;
P2_3 = 1;

第12个试验:单片机唱歌---“祝你平安”

第12个试验:单片机唱歌---“祝你平安”

第12个试验:单片机唱歌---“祝你平安”下面是他的asm 源程序和hex 程序(asm 程序可以用配套光盘的uvw51e编辑后得到hex,当然下面的hex 也可以直接复制到记事本后存为txt,直接烧入芯片。

注意XP 套件支持文本烧写方式。

倚天版套件必须汇编。

配套光盘里已经有汇编好的HEX,可以直接使用。

)ORG 0000HLJMP STARTORG 000BHINC 20H ;中断服务,中断计数器加1MOV TH0,#0D8HMOV TL0,#0EFH ;12M 晶振,形成10 毫秒中断RETISTART:MOV SP,#50HMOV TH0,#0D8HMOV TL0,#0EFHMOV TMOD,#01HMOV IE,#82HMUSIC0:NOPMOV DPTR,#DAT ;表头地址送DPTRMOV 20H,#00H ;中断计数器清0MOV B,#00H ;表序号清0MUSIC1:NOPCLR AMOVC A,@A+DPTR ;查表取代码JZ END0 ;是00H,则结束CJNE A,#0FFH,MUSIC5LJMP MUSIC3MUSIC5:NOPMOV R6,AINC DPTRMOV A,BMOVC A,@A+DPTR ;取节拍代码送R7MOV R7,ASETB TR0 ; 启动计数MUSIC2:NOPCPL P3.3MOV A,R6MOV R3,ALCALL DELMOV A,R7CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7 否?;不等,则继续循环MOV 20H,#00H ;等于,则取下一代码INC DPTR; INC BLJMP MUSIC1MUSIC3:NOPCLR TR0 ;休止100 毫秒MOV R2,#0DHMUSIC4:NOPMOV R3,#0FFHLCALL DELDJNZ R2,MUSIC4INC DPTRLJMP MUSIC1END0:NOPMOV R2,#64H ;歌曲结束,延时1 秒后继续MUSIC6:MOV R3,#00HLCALL DELDJNZ R2,MUSIC6LJMP MUSIC0DEL:NOPDEL3:MOV R4,#02HDEL4:NOPDJNZ R4,DEL4NOPDJNZ R3,DEL3RETNOPDAT:db26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20hdb。

单片机课程设计生日歌

单片机课程设计生日歌

单片机课程设计生日歌一、教学目标本课程旨在让学生了解和掌握单片机的基本原理和应用,通过制作生日歌项目,培养学生的实际操作能力和创新思维。

具体目标如下:1.知识目标:使学生掌握单片机的基本结构、工作原理和编程方法;了解单片机在实际应用中的重要性。

2.技能目标:培养学生具备单片机的组装、调试和编程能力;学会使用相关软件和实验设备。

3.情感态度价值观目标:培养学生对科技创新的热爱,提高他们的团队协作和沟通能力,增强他们的责任感和使命感。

二、教学内容本课程的教学内容主要包括单片机的基本原理、编程语言、应用实例等。

具体安排如下:1.单片机概述:介绍单片机的定义、发展历程和分类;讲解单片机的基本结构和主要性能指标。

2.单片机编程基础:学习单片机的编程语言,如C语言和汇编语言;掌握单片机的基本指令集和编程技巧。

3.单片机应用实例:分析常见的单片机应用案例,如温度传感器、电机控制等;讲解如何将单片机应用于实际项目中。

4.生日歌项目实践:引导学生分组完成单片机控制的生日歌项目,包括电路设计、编程、调试等环节。

三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解单片机的基本原理、编程方法和应用实例,使学生掌握相关知识。

2.实验法:安排实验环节,让学生亲自动手操作,培养其实际操作能力和创新能力。

3.案例分析法:分析具体的单片机应用案例,让学生了解单片机在实际项目中的应用。

4.讨论法:学生分组讨论,鼓励他们提出问题、分享心得,提高团队协作和沟通能力。

四、教学资源为了支持本课程的教学内容和教学方法,我们将准备以下教学资源:1.教材:选择合适的单片机教材,为学生提供系统性的知识学习。

2.参考书:提供相关的参考书籍,丰富学生的知识体系。

3.多媒体资料:制作课件、视频等多媒体资料,生动形象地展示单片机的原理和应用。

4.实验设备:准备单片机实验板、编程器、实验器件等,为学生提供实践操作的机会。

五、教学评估为了全面、客观地评估学生的学习成果,本课程将采用以下评估方式:1.平时表现:评估学生在课堂上的参与程度、提问回答等情况,以考察其对单片机知识的掌握和运用能力。

基于51单片机简易电子琴

基于51单片机简易电子琴

1 课题背景单片微型计算机室大规模集成电路技术发展的产物,属于第四代电子计算机它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。

他的应用必定导致传统的控制技术从根本上发生变革。

因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

它在现代音乐扮演重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。

本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。

以单片机作为主控核心,与键盘扬声器等模块组成核心主控制模块,在主控模块上设有8个按键,和一个复位按键。

主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴硬件的组成。

利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏要表达的音符。

并且分别从原理图,主要芯片,个模块原理及各莫奎的程序的调试来详细阐述。

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,构成我们想演奏的那首曲目。

当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系编写正确就可以达到我们想要的曲目。

2 任务要求与总体设计方案2.1 设计任务与要求利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出7个不同的音调,而且有一个按键可以自动播放歌曲,要求按键按下时发声,松开延时一小段时间,中间再按别的键则发另外一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,然后单片机的定时器启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。

如果在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。

前面的发音停止,转到后按的键的发音程序。

51单片机音乐流水灯程序

51单片机音乐流水灯程序

#include <reg52."h>sbitspeaker = P1^6;sbitkey1=P1^5;sbitkey2=P1^7;unsigned char kk=0;unsigned long t3;unsigned char timer0h, timer0l, time,n;codecharled[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0x55,0xaa,0x00,0x5 5,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00}; //灯亮数组//--------------------------------------//单片机晶振采用11."0592MHz//频率-半周期数据表高八位本软件共保存了四个八度的28个频率数据code unsigned char FREQH[] = {0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,//低音0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,//高音2345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};//超高音//频率-半周期数据表低八位code unsigned char FREQL[] = {0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,//低音0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,//高音2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};//超高音//--------------------------------------//世上只有妈妈好数据表要想演奏不同的乐曲,只需要修改这个数据表codeint shengrikuaile[] = {5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,//生日快乐5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4,0,0,0};code int tonghua[]={5,1,2, 5,2,2, 4,2,2,3,2,4, 3,2,2, 4,2,1, 3,2,1, 3,2,4, 3,2,2, 4,2,2,3,2,2, 4,2,2, 3,2,2, 2,2,1, 1,2,1, 1,2,2, 1,2,2, 3,2,2, 5,2,2,6,2,4, 6,2,2, 6,2,1, 5,2,1, 5,2,2, 2,2,2, 2,2,2, 4,2,2,3,2,8, 1,2,2, 3,2,2, 5,2,2,6,2,4, 6,2,2, 6,2,1, 5,2,1, 2,2,2, 2,2,2, 4,2,2,3,2,2, 4,2,2, 3,2,2, 2,2,1, 1,2,1, 1,2,4, 2,2,2, 3,2,2,6,1,4, 6,1,2, 1,2,2, 1,2,2, 7,1,2, 7,1,2, 1,2,1, 1,2,16,0,0,0};//童话//一个音符有三个数字。

单片机音乐播放器应用 实现简单的音乐播放功能

单片机音乐播放器应用 实现简单的音乐播放功能

单片机音乐播放器应用实现简单的音乐播放功能单片机音乐播放器应用音乐是人们生活中不可或缺的一部分,而在现代科技的不断发展下,单片机音乐播放器应用已经成为许多人追求的目标。

本文将介绍如何实现一个简单的单片机音乐播放器功能,让您能够轻松享受音乐的魅力。

一、硬件准备在开始之前,我们需要准备一些硬件设备,以确保音乐播放器能够正常工作。

首先,我们需要一块单片机开发板,例如STC89C52,这是一款常用的单片机开发板;其次,我们需要一个音频解码模块,例如DFPlayer Mini,他可以轻松解码并播放存储卡上的音乐文件;最后,我们还需要一个音箱或者耳机,用于输出音乐。

二、软件编程1. 搭建开发环境首先,我们需要安装MIDE-51集成开发环境,它是STC89C52单片机所使用的开发工具。

安装完成后,可以通过打开MIDE-51来创建一个新的工程。

2. 编写代码首先,我们需要在代码中包含一些必要的库文件,以便使用一些功能函数。

例如,我们可以通过以下代码片段引入DFPlayer Mini音频库文件:```c#include <DFPlayer_Mini_Mp3.h>```接下来,我们可以通过定义一些常量或变量来控制音乐的播放,例如:```cconst int playButton = 2; // 播放按钮连接到单片机的2号引脚const int nextButton = 3; // 下一首按钮连接到单片机的3号引脚const int previousButton = 4; // 上一首按钮连接到单片机的4号引脚```然后,我们可以在主循环中不断检测按钮的状态,并根据按钮的状态来控制音乐的播放:```cvoid loop() {if (digitalRead(playButton) == HIGH) { // 如果播放按钮被按下DFPlayer_Mini_Mp3.play(); // 播放音乐}if (digitalRead(nextButton) == HIGH) { // 如果下一首按钮被按下 DFPlayer_Mini_Mp3.next(); // 播放下一首音乐}if (digitalRead(previousButton) == HIGH) { // 如果上一首按钮被按下DFPlayer_Mini_Mp3.previous(); // 播放上一首音乐}}```通过上述代码,我们可以实现简单的音乐播放功能。

基于51单片机音乐播放器设计

基于51单片机音乐播放器设计音乐播放器是一种可以播放音频文件的设备,广泛应用于日常生活中。

本文将基于51单片机设计一个简单的音乐播放器。

一、设计目标本音乐播放器设计的主要目标是实现以下功能:1.支持播放多种格式的音频文件,如MP3、WAV等;2.支持音量调节和音频文件选择功能;3.具备简单的界面和易于理解的操作方式;4.能够适应不同的音频文件大小和音乐时长。

二、硬件设计2. 存储器:选择外接Flash存储器作为音频文件的存放介质,具备较大的存储容量和较高的读写速度,能够满足音频文件的多样性需求。

3.音频解码芯片:选择支持MP3和WAV格式音频解码的芯片,能够将音频文件翻译成能够被音频输出部分播放的信号。

4.音频输出部分:选择合适的音频输出部分,如耳机接口或喇叭接口,将解码后的音频信号输出为声音。

三、软件设计1.系统初始化:在开机时进行系统初始化,包括对主控芯片、存储器和音频解码芯片的初始化。

2.文件系统管理:设计一个简单的文件系统,能够以目录结构的形式管理存储器中的音频文件。

3.音频解码:根据选择的音频文件格式,进行相应的解码操作,将解码后的音频数据传输给音频输出部分。

4.播放控制:实现音量调节和音频文件选择功能,能够暂停、播放、停止等操作。

5.用户界面:设计一个简单直观的用户界面,通过按键或显示屏等方式进行操作反馈和信息显示。

四、系统流程1.开机初始化:对主控芯片、存储器和音频解码芯片进行初始化。

2.文件系统管理:读取存储器中的文件目录,生成文件列表供用户选择。

3.用户操作:用户通过按键或其他方式进行音量调节和音频文件选择操作。

4.音频解码:根据用户选择的音频文件,进行相应的解码操作。

5.播放控制:根据用户的操作,进行音频的暂停、播放、停止等操作。

6.操作反馈:在用户界面上显示操作反馈和信息。

五、总结本文基于51单片机设计了一个简单的音乐播放器,实现了支持多种格式音频文件的播放、音量调节和文件选择功能,并提供了简单的用户界面。

单片机课程设计生日歌

单片机课程设计生日歌一、课程目标知识目标:1. 让学生理解单片机的基本工作原理,掌握单片机编程的基础知识。

2. 使学生掌握利用单片机实现音乐播放的基本方法,了解音符与频率的关系。

3. 帮助学生掌握单片机I/O口的控制方法,实现LED灯的闪烁。

技能目标:1. 培养学生动手操作单片机的能力,学会编写简单的程序代码。

2. 培养学生分析问题、解决问题的能力,能够将理论知识应用于实际项目中。

3. 提高学生的团队协作能力,学会在项目过程中相互沟通、共同解决问题。

情感态度价值观目标:1. 培养学生对单片机及电子技术的兴趣,激发学习热情。

2. 培养学生的创新精神,敢于尝试新方法,勇于挑战困难。

3. 引导学生认识到科技在生活中的重要作用,增强社会责任感。

课程性质:本课程为实践性较强的课程,以项目为导向,结合理论知识,培养学生的动手操作能力和实际应用能力。

学生特点:学生处于高中阶段,具有一定的物理、数学基础,对电子技术有一定了解,但实践经验不足。

教学要求:结合学生特点,课程设计应注重理论与实践相结合,充分调动学生的积极性,注重培养动手操作能力和团队协作能力。

通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高解决问题的能力。

在教学过程中,注重评估学生的学习成果,确保课程目标的实现。

二、教学内容1. 理论知识:- 单片机原理及结构:介绍单片机的基本组成,如CPU、内存、I/O口等。

- 编程基础:讲解单片机编程的基本语法,如指令、数据类型、函数等。

- 音符与频率:分析音符与频率的关系,介绍如何通过编程实现音乐播放。

2. 实践操作:- 单片机编程软件使用:指导学生使用编程软件,如Keil、Proteus等。

- 生日歌程序编写:根据音符与频率关系,编写生日歌程序代码。

- LED灯控制:实现单片机I/O口控制LED灯闪烁,与生日歌节奏同步。

3. 教学大纲:- 第一周:单片机原理及结构,编程基础学习。

- 第二周:音符与频率关系学习,编程软件使用。

51单片机汇编语言音乐程序

51单片机汇编语言音乐程序51单片机汇编语言音乐程序 01两只老虎NEXT BIT 10H 定义标志位ORG 0000HJMP MAINORG 000BHJMP TONEORG 001BHJMP BEATORG 0100HMAIN MOV TMOD11HMOV TH0R2MOV TL0R3MOV TH13CHMOV TL10B0HMOV R400HMOV DPTRTABYD MOV AR4 取音调数据MOVC AADPTRMOV R2AXRL A00HJNZ JP 直接取节拍CALL PD 判断指针是否溢出 MOV AR4MOVC AADPTRMOV R3AXRL A0FFHJZ JPMOV AR2XRL A0FFHJNZ MAINJP INC R4 取节拍数据CALL PDMOV AR4MOVC AADPTRMOV R5ASETB EASETB ET0SETB ET1SETB TR0SETB TR1SETB NEXTJB NEXTINC R4CALL PDJMP YDCJNE A00HL1INC DPHL1 RET音调产生子程序TONE CPL P20MOV TH0R2MOV TL0R3RETI节拍产生子程序BEAT DJNZ R5L2MOV TH13CHMOV TL10B0HL3 RETIL2 CLR TR0CLR TR1CLR NEXTJMP L3两只老虎音符表TAB DB 0FBH0F9H08H0FCH066H08H0FCH0C7H08H0FBH0F9H08H DB 0FBH0F9H08H0FCH066H08H0FCH0C7H08H0FBH0F9H08H DB 0FCH0C7H08H0FCH0F3H08H0FDH4AH10H0FCH0C7H08H DB 0FCH0F3H08H0FDH4AH08H0FDH4AH04H0FDH95H04HDB 0FDH4AH04H0FCH0F3H04H0FCH0C7H08H0FBH0F9H08H DB 0FDH4AH04H0FDH95H04H0FDH4AH04H0FCH0F3H04HDB 0FCH0C7H08H0FBH0F9H08H0FCH66H08H0FAH93H08H DB 0FBH0F9H08H00H08H0FCH66H04H0FAH93H08HDB 0FBH0F9H08H00H10H0FFH0FFHEND02祝你平安ORG 0000HLJMP STARTORG 000BHINC 20H 中断服务中断计数器加1MOV TH00D8HMOV TL00EFH 12M晶振形成10毫秒中断RETISTARTMOV SP50HMOV TH00D8HMOV TL00EFHMOV TMOD01HMOV IE82HMUSIC0NOPMOV DPTRDAT 表头地址送DPTRMOV 20H00H 中断计数器清0MOV B00H 表序号清0MUSIC1NOPCLR AMOVC AADPTR 查表取代码JZ END0 是00H则结束CJNE A0FFHMUSIC5LJMP MUSIC3MUSIC5NOPMOV R6AINC DPTRMOV ABMOVC AADPTR 取节拍代码送R7MOV R7ASETB TR0 启动计数MUSIC2NOPCPL P33MOV AR6MOV R3ALCALL DELMOV AR7CJNE A20HMUSIC2 中断计数器 20H R7否不等则继续循环MOV 20H00H 等于则取下一代码INC DPTRINC BLJMP MUSIC1MUSIC3NOPCLR TR0 休止100毫秒MOV R20DHMUSIC4NOPMOV R30FFHLCALL DELDJNZ R2MUSIC4INC DPTRLJMP MUSIC1END0NOPMOV R264H 歌曲结束延时1秒后继续MUSIC6MOV R300HLCALL DELDJNZ R2MUSIC6LJMP MUSIC0DELNOPDEL3MOV R402HDEL4NOPDJNZ R4DEL4NOPDJNZ R3DEL3RETNOPDATdb 26h20h20h20h20h20h26h10h20h10h20h80h26h20h30h20h db 30h20h39h10h30h10h30h80h26h20h20h20h20h20h1ch20h db 20h80h2bh20h26h20h20h20h2bh10h26h10h2bh80h26h20h db 30h20h30h20h39h10h26h10h26h60h40h10h39h10h26h20h db 30h20h30h20h39h10h26h10h26h80h26h20h2bh10h2bh10h db 2bh20h30h10h39h10h26h10h2bh10h2bh20h2bh40h40h20h db 20h10h20h10h2bh10h26h30h30h80h18h20h18h20h26h20h db 20h20h20h40h26h20h2bh20h30h20h30h20h1ch20h20h20h db 20h80h1ch20h1ch20h1ch20h30h20h30h60h39h10h30h10h db 20h20h2bh10h26h10h2bh10h26h10h26h10h2bh10h2bh80h db 18h20h18h20h26h20h20h20h20h60h26h10h2bh20h30h20h db 30h20h1ch20h20h20h20h80h26h20h30h10h30h10h30h20h db 39h20h26h10h2bh10h2bh20h2bh40h40h10h40h10h20h10h db 20h10h2bh10h26h30h30h80h00HEND03生日歌ORG 0000HJMP STARTORG 000BHJMP TIM0ORG 0030HSTARTMOV TMOD01HMOV IE82H START0MOV 30H00H NEXT MOV A30HMOV DPTRTABLEMOVC AADPTRMOV R2AJZ END0ANL A0FHMOV R5AMOV AR2SWAP AANL A0FHJNZ SINGCLR TR0JMP D1SING DEC AMOV 22HARL AMOV DPTRTABLE1MOVC AADPTRMOV TH0AMOV 21HAMOV A22HRL AINC AMOVC AADPTRMOV TL0AMOV 20HASETB TR0D1 CALL DELAYINC 30HJMP NEXTEND0 CLR TR0JMP START0 TIM0 PUSH ACCPUSH PSWMOV TH021HMOV TL020HCPL P37POP PSWPOP ACCRETIDELAY MOV R702D2 MOV R4187D3 MOV R3248DJNZ R3DJNZ R4D3DJNZ R7D2DJNZ R5DELAYRETTABLE1DW 64260644006452464580DW 64684647776482064898DW 64968650306505865110DW 651576517865217 TABLEDB 82H01H81H94H84HDB 0B4H0A4H04HDB 82H01H81H94H84HDB 0C4H0B4H04HDB 82H01H81H0F4H0D4HDB 0B4H0A4H94HDB 0E2H01H0E1H0D4H0B4HDB 0C4H0B4H04HDB 82H01H81H94H84HDB 0B4H0A4H04HDB 82H01H81H94H84HDB 0C4H0B4H04HDB 82H01H81H0F4H0D4HDB 0B4H0A4H94HDB 0E2H01H0E1H0D4H0B4HDB 0C4H0B4H04HDB 00HEND04八月桂花香ORG 0000HLJMP STARTORG 000BHINC 20H 中断服务中断计数器加1 MOV TH00D8HMOV TL00EFH 12M晶振形成10毫秒中断RETISTARTMOV SP50HMOV TH00D8HMOV TL00EFHMOV TMOD01HMOV IE82HMUSIC0NOPMOV DPTRDAT 表头地址送DPTRMOV 20H00H 中断计数器清0MUSIC1NOPCLR A A清零MOVC AADPTR 查表取代码JZ END0 是00H则结束CJNE A0FFHMUSIC5 如果是休止符往下执行LJMP MUSIC3MUSIC5NOPMOV R6A R6 18H音符的频率INC DPTR DPTR加一MOV A0MOVC AADPTR 取节拍代码送R7MOV R7A R7 30H音符发音的时间SETB TR0 启动计数MUSIC2NOPCPL P23 P23是音乐输出引脚MOV AR6MOV R3A 籖3 R6 18HLCALL DELMOV AR7CJNE A20HMUSIC2 中断计数器 20H R7否不等则继续循环MOV 20H00H 等于则取下一代码INC DPTRLJMP MUSIC1MUSIC3NOP 休止100毫秒CLR TR0MOV R20DH R2 13MUSIC4NOPMOV R30FFH R3 255LCALL DELDJNZ R2MUSIC4INC DPTRLJMP MUSIC1END0NOPMOV R20FFH 歌曲结束延时1秒后继续MUSIC6MOV R300HLCALL DELDJNZ R2MUSIC6LJMP MUSIC0DELNOPDEL3MOV R402HDEL4NOPDJNZ R4DEL4NOPDJNZ R3DEL3RETNOPDATDB 18H 30H 1CH 10H DB 20H 40H 1CH 10H DB 18H 10H 20H 10H DB 1CH 10H 18H 40H DB 1CH 20H 20H 20H DB 1CH 20H 18H 20H DB 20H 80H 0FFH 20H DB 30H 1CH 10H 18H DB 20H 15H 20H 1CH DB 20H 20H 20H 26H DB 40H 20H 20H 2BH DB 20H 26H 20H 20H DB 20H 30H 80H 0FFH DB 20H 20H 1CH 10H DB 18H 10H 20H 20H DB 26H 20H 2BH 20H DB 30H 20H 2BH 40H DB 20H 20H 1CH 10H DB 18H 10H 20H 20H DB 26H 20H 2BH 20H DB 30H 20H 2BH 40H DB 20H 30H 1CH 10HDB 18H 20H 15H 20H DB 1CH 20H 20H 20H DB 26H 40H 20H 20H DB 2BH 20H 26H 20H DB 20H 20H 30H 80H DB 20H 30H 1CH 10H DB 20H 10H 1CH 10H DB 20H 20H 26H 20H DB 2BH 20H 30H 20H DB 2BH 40H 20H 15H DB 1FH 05H 20H 10H DB 1CH 10H 20H 20H DB 26H 20H 2BH 20H DB 30H 20H 2BH 40H DB 20H 30H 1CH 10H DB 18H 20H 15H 20H DB 1CH 20H 20H 20H DB 26H 40H 20H 20H DB 2BH 20H 26H 20H DB 20H 20H 30H 30H DB 20H 30H 1CH 10H DB 18H 40H 1CH 20H DB 20H 20H 26H 40H DB 13H 60H 18H 20H DB 15H 40H 13H 40HDB 18H 80H 00Hend05兰花草SPK EQU P33 蜂鸣器所在端口ORG 0000HJMP STARTSTARTMOV R300HNEXTMOV AR3MOV DPTRTABLEMOVC AADPTRJZ STARTMOV R7AINC R3MOV AR3MOVC AADPTRMOV R2AACALL SONGINC R3SJMP NEXT歌曲播放子程序SONGMOV AR2 取出节拍RL AJNZ KEEPMOV A01HKEEPMOV R2AREPEATACALL EIGHTHDJNZ R2REPEATRET产生18拍延时子程序EIGHTHMOV AR7 查表取出廷时参数保存到R4MOV DPTRDELAY_TMOVC AADPTRMOV R4AMOV AR7 查表取出18拍周期数保存到R5 MOV DPTRS_PARAMOVC AADPTRMOV R5ANEXTCYCACALL SOUNDDJNZ R5NEXTCYCRET发声子程序SOUNDSETB SPKACALL SDELAYCLR SPKACALL SDELAYRET延时子程序SDELAYMOV AR4 廷时值在R4内MOV R0AXL2MOV R103HDL1NOPDJNZ R1DL1DJNZ R0XL2RET18拍周期表S_PARADS 1DHDB 15H16H00DB 19H00H1CH00H1FH21H00H25HDB 00H29H2CH00H31H34H37H00HDB 3EH41H00H49H00H52H57H00HDB 62H延时参数表DELAY_TDS 1DHDB 7EH77H00HDB 6AH00H5EH00H54H4FH00H46HDB 00H3FH3BH00H35H32H2FH00HDB 2AH27H00H23H00H1FH1DH0C0HDB 1AH歌曲表TABLEDW 2202H2902H2902H2902H2906H2702H 我从山中来DW 2502H2702H2502H2402H2208H 带着兰花草DW 2E02H2E02H2E02H2E02H2E06H2C02H 种在小园中DW 2902H2C02H2D02H2A02H2908H 祈祷花开早DW 2902H2E02H2E02H2C02H2906H2702H 一日看三回DW 2502H2702H2502H2402H2206H1D02H 看得花时过DW 1D02H2502H2502H2402H2206H2902H 兰花却依然DW 2702H2502H2402H2002H2208H 苞也无一个DW 0000HEND。

51单片机音乐盒程序

51单⽚机⾳乐盒程序#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longcode unsigned char gao[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ;code unsigned char di[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};uchar data gepu[55]; //必须要指明长度uchar data time[55];uchar a;//中间变量把ram数组的值赋给它,传递给定时器中断//第⼀⾸:⽣⽇歌uchar code gepu1[]={5,0,5,6,5,8,7, 5,0,5,6,5,9,8, 5,0,5,12,10,8,7,6, 11,0,11,10,8,9,8,8};//30uchar code time1[]={2,0,2,4,4,4,6, 2,0,2,4,4,4,6, 2,0,2,4,4,4,4,6, 2,0,2,4,4,4,4,4 };//第⼆⾸:两只⽼虎 //⼤于14是指低⾳uchar code gepu2[]={1,2,3,1, 1,2,3,1, 3,4,5,0, 3,4,5,0, 5,6,5,4,3,1, 5,6,5,4,3,1, 2,19,1,0, 2,19,1,0};//36uchar code time2[]={4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, 3,1,3,1,4,4, 3,1,3,1,4,4, 4,4,4,4, 4,4,4,4};////第三⾸:多年以前uchar code gepu3[]={1,0,1,2,3,0,3,4, 5,6,5,3, 5,4,3,2, 4,3,2,1,0, 1,0,1,2,3,0,3,4, 5,6,5,3, 5,4,3,2,3,2,1,0};//41uchar code time3[]={4,0,2,2,4,0,2,2, 4,2,2,8, 4,2,2,8, 4,2,2,8,0, 4,0,2,2,4,0,2,2, 4,2,2,8, 4,2,2,4,2,2,10,1};//第四⾸:⼩步舞曲uchar code gepu4[]={5,1,2,3,4,5,1,0,1, 6,4,5,6,7,8,1,0,1, 4,5,4,3,2,3, 4,3,2,1,2, 3,2,1,21,1};//34uchar code time4[]={4,2,2,2,2,4,4,0,4, 4,2,2,2,2,4,4,0,4, 4,2,2,2,2,4, 2,2,2,2,4, 2,2,2,2,10};//第五⾸:字母歌uchar code gepu5[]={1,0,1,5,0,5,6,0,6,5, 4,0,4,3,0,3,2,0,2,1, 5,0,5,4,3,0,3,2, 5,0,5,4,0,4,3,0,3,2, 1,3,5,6,8,5, 4,0,4,3,0,3,2,0,2,1,0};//55 uchar code time5[]={2,0,2,2,0,2,2,0,2,4, 2,0,2,2,0,2,2,0,2,4, 2,0,2,4,2,0,2,4, 2,0,2,2,0,2,2,0,2,4, 2,2,4,2,2,4, 2,0,2,2,0,2,2,0,2,4,1}; uchar i,s;sbit led1=P3^3;sbit led2=P3^4;sbit led3=P3^5;sbit led4=P3^6;sbit led5=P3^7;sbit buzzer=P1^0;sbit key1=P2^0;//开始停⽌sbit key2=P2^1;//上⼀⾸sbit key3=P2^2;//下⼀⾸void delay(uchar t);void delayms(uchar t);void main(){uchar flag=0;uchar k=5;uchar stop;TMOD=0X01;EA=1;ET0=1;while(1){while(key2==0 || key3==0 || flag==0) {flag=1;if(key3==0){k++;delay(5);if(k>5)k=k%5;}if(key2==0){k--;delay(5);if(k==0)k=5;}switch(k%5){case 0:{P3=0x7f;s=30;for(i=0;i<s;i++){gepu[i]=gepu1[i];time[i]=time1[i];}break;}case 1:{P3=0xbf;s=36;for(i=0;i<s;i++){gepu[i]=gepu2[i];time[i]=time2[i];}break;}case 2:{P3=0xdf;s=41;for(i=0;i<s;i++){gepu[i]=gepu3[i];time[i]=time3[i];}break;}case 3:{P3=0xef;s=34;for(i=0;i<s;i++){gepu[i]=gepu4[i];time[i]=time4[i];}break;}case 4:{s=55;for(i=0;i<s;i++){gepu[i]=gepu5[i];time[i]=time5[i];}break;}}}while(key2!=0 && key3!=0){for(i=0;i<s;i++){TR0=1;a=gepu[i];///////////////////////////P0=(~gepu[i]);////////////////////////////if(time[i]>0)delay(time[i]);elsedelayms(1);if(key1==0){delay(5);stop++;}if(stop%2==0)TR0=1;elseTR0=0;while(stop%2){if(key1==0){delay(5);stop++;}}if(key2==0 || key3==0){TR0=0;break;}}}}}void dingshi0() interrupt 1 using 0 {if(a<15){TH0=gao[a+6];TL0=di[a+6];}else{TH0=gao[a-14-1];TL0=di[a-14-1];}buzzer=0;elsebuzzer=~buzzer;}void delay(uchar t) {uint i;while(t--){for(i = 0; i < 10001; i++); }}void delayms(uchar t) {uchar t1; uint t2;for(t1=0;t1<t;t1++){for(t2=0;t2<800;t2++) {;}}}。

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

R7,A ;r7=30H 音符发音的时间 TR0 ;启动计数
;不等,则继续循环
MOV INC LJMP
20H,#00H DPTR MUSIC1
;等于,则取下一代码
MUSIC3: NOP CLR MOV TR0 ;休止 100 毫秒 R2,#0DH
MUSIC4: NOP MOV LCALL DJNZ INC LJMP END0: NOP R2,#64H ;歌曲结束,延时 1 秒后继续 R3,#0FFH DEL R2,MUSIC4 DPTR MUSIC1
MOV
MUSIC6: MOV LCALL DJNZ LJMP DEL: NOP DEL3: DEL4: MOV NOP DEL
R3,#00H
R2,MUSIC6 MUSIC0
R4,#02H
DJNZ NOP DJNZ RET MUSIC_DAT:
R4,DEL4
R3,DEL3
; 猪你生日快乐曲谱 DB 3FH,10H DB 0FFH DB 3FH, DB DB DB DB 0FFH DB DB DB DB 3FH, 10H 20H, 30H, 3FH, 40H 20H 10H 39H, 30H, 20H, 10H 20H, 33H, 3FH, 40H 20H
TH0,#0bbH ;d8 TL0,#0EFH ;12M 晶振,形成 10 毫秒中断
TH0,#0D8H TL0,#0EFH TMOD,#01H IE,#82H
MUSIC1: NOP
CLR MOVC JZ
A A,@A+DPTR E来自D0 ;查表取代码;是 00H,则结束
CPL P1.7 CPL P1.6 CJNE LJMP MUSIC5: NOP MOV INC MOV MOVC MOV SETB MUSIC2: NOP CPL MOV MOV LCALL MOV CJNE P2.3 ;音乐输出的管脚 A,R6 R3,A DEL A,R7 A,20H,MUSIC2 ;中断计数器(20H)=R7 否? R6,A DPTR A,B A,@A+DPTR ;取节拍代码送 R7 ;r6=18H 音符的频率 A,#0FFH,MUSIC5 MUSIC3 ;是休止符则继续执行
3FH,
39H, 2BH, 3FH, 20H, 10H
DB 0FFH DB 3FH, 10H 26H, 33H, 20H 10H
DB 20H, DB 30H, db 39H,
20H, 20H, 30H
DB 23H, DB 0FFh DB 23H, DB 26H,
10H
10H 20H, 30H, 20H, 2BH
DB 20H, 30H, 40H DB 00H end--
51 单片机演奏音乐“祝你生日快乐”
;祝你生日快乐 ORG LJMP ORG INC MOV MOV RETI START: INITIAL:MOV MOV MOV MOV MOV CPL P1.6 MUSIC0: NOP MOV MOV MOV DPTR,#MUSIC_DAT ;表头地址送 DPTR 20H,#00H B,#00H ;中断计数器清 0 ;表序号清 0 SP,#50H 0000H START 000BH 20H ;中断服务,中断计数器加 1
相关文档
最新文档