单片机蜂鸣器奏乐实验大全代码

合集下载

从零开始学单片机(八)蜂鸣器唱歌

从零开始学单片机(八)蜂鸣器唱歌

1,2,2, 1,2,2, 5,2,2, 5,2,2, 6,2,2, 6,2,2, 5,2,4, 4,2,2, 4,2,2, 3,2,2, 3,2,2, 2,2,2, 2,2,2, 1,2,4, 5,2,2, 5,2,2, 4,2,2, 4,2,2, 3,2,2, 3,2,2, 2,2,4, 5,2,2, 5,2,2, 4,2,2, 4,2,2, 3,2,2, 3,2,2, 2,2,4, 1,2,2, 1,2,2, 5,2,2, 5,2,2, 6,2,2, 6,2,2, 5,2,4, 4,2,2, 4,2,2, 3,2,2, 3,2,2, 2,2,2, 2,2,2, 1,2,4 }; //定时器计时初值,高八位,代表不同音符的频率 code unsigned char FREQH[]={ 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC, 0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ;
delay(duration); }
{ unsigned int i; unsigned char j=80; for(i=0; i while(j--); TR0=0; } void song() { TH0 = byteTH0; TL0 = byteT0L; TR0 = 1;
ET0=1; while(1) { step=0; while(step<126) { index = music[step] + 7 * music[step+1] - 1; byteTH0 = FREQH[index]; byteT0L = FREQL[index]; duration = music[step+2]; step += 3; song();

蜂鸣器类代码

蜂鸣器类代码

蜂鸣器类代码/*标题:蜂鸣器的使⽤电路:P1.0⼝接P11*/#include "sys.h"//包含延时函数头⽂件#include <reg52.h>#include "beep1.h"sbit beez = P2^1;//位声明,P2端⼝的第⼀位为蜂鸣器所⽤void beep1() //⾮空函数+函数名{while(1) //while死循环{beez = 1; //赋⾼电平delays(100); //调⽤延时函数beez = 0; //赋低电平delays(100); //同上}}//----------------------------------------------/*if not defined的简写为ifndef,c语⾔在对程序进⾏编译时,会先根据预处理命令进⾏“预处理”。

C语⾔编译系统包括预处理,编译和链接等部分。

*/#ifndef _BEEP1_H_ //先测试函数是否被宏定义过#define _BEEP1_H_void beep1(); //如果程序没有被定义过,定义函数//并编译程序段beep1#endif//终⽌if,条件指⽰符#endif的最主要⽬的是//防⽌头⽂件的重复包含和编译。

/*标题:蜂鸣器发出不同的⾳调电路:p2.1⼝接P11*/#include <reg52.h>#include "sys.h"#include "beep2.h"sbit beez = P2^1;void beep2(){int i;while(1){for(i = 0;i<1000;i++){beez = 0;delays(100);beez = 1;delays(100);}for(i = 0;i<1000;i++){beez = 0;delays(200);beez = 1;delays(200);}for(i = 0;i<1000;i++){beez = 0;delays(50);beez = 1;delays(50);}for(i = 0;i<1000;i++){beez = 0;delays(150);beez = 1;delays(150);}}}//----------------------------------------------#ifndef _BEEP2_H_#define _BEEP2_H_void beep2();#endif/*标题:蜂鸣器播放⾳乐电路:p2.1⼝接P11*/#include <reg52.h>#include "beep3.h"#include "sys.h"//⼋⽉桂花unsigned char code music_code[] ={0x18, 0x30, 0x1C , 0x10, //格式为:频率常数、节拍常数、频率常数、节拍常数0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00};unsigned char* pin;//频率unsigned char* pai;//节拍sbit beez = P2^1;void beep3(){int i,j;play://为goto所⽤,当程序执⾏到goto play时,重回此 pin = music_code;pai = pin+1;beez = 0;while(1){if(pin == 0x00)//if条件函数{//遇到结束符goto play;}if(pai == 0xff){//遇到休⽌符,等待⼀段时间delays(200000);}for(i=0;i<(*pai)*10;i++)//for嵌套{for(j=0;j<(*pin);j++){beez = ~beez;}}pin += 2;pai += 2;}}//------------------------------------------------#ifndef _BEEP3_H_#define _BEEP3_H_void beep3();#endif。

51单片机实现蜂鸣器警车、救护车、消防车声

51单片机实现蜂鸣器警车、救护车、消防车声

/*-----------------------------------------------
名称:喇叭
论坛:
编写:shifang
日期:2009.5
修改:无
内容:模救护车发声
------------------------------------------------*/
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
main()
{
unsigned char i;
Init_Timer0(); //初始化定时器
while(1)
{ቤተ መጻሕፍቲ ባይዱ
frq=0;
for(i=0;i<60;i++)//播放1s左右一种频率
{
DelayMs(10);
}
frq=100;
for(i=0;i<60;i++)//播放1s左右另外一种频率
{
DelayMs(10);
//TH0=0x00;//给定初值
//TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
/*------------------------------------------------
主函数

基于单片机的蜂鸣器控制

基于单片机的蜂鸣器控制

蜂 鸣 器
分类:
无源交流蜂鸣器
直流有源蜂鸣器 内部带震荡源,通电工作 交流无源蜂鸣器 没有震荡源
方波脉冲驱动
ห้องสมุดไป่ตู้
符号:BZ
• 脉冲就是高低电平的切换,如下方波脉 冲:
• 用单片机的I/O口实现一种这样高低电平 的方波,驱动蜂鸣器发音。
二、硬件电路
三、流程图
开始 蜂鸣器高电平
延时5ms 蜂鸣器低电平
char j; for(i;i>0;i--) for(j=200;j>0;j--); }
蜂鸣器
复习回顾:
void Delay(unsigned int i) ?
void Delay(unsigned int i) {
char j; for(i;i>0;i--) for(j=200;j>0;j--); }
一、蜂鸣器
• 蜂鸣器是一种一体化结构的电子讯响器, 采用直流电压供电,广泛应用于计算机、 打印机、复印机、报警器、电子玩具、 汽车电子设备、电话机、定时器等电子 产品中作发声器件。
延时5ms 结束
四、程序
#include <reg51.h> sbit Beep = P1^5 ; void Delay(unsigned int i); void main() {
Beep= 1; Delay(5); Beep= 0; Delay(5); }
void Delay(unsigned int i) {

单片机教程实战2_蜂鸣器唱歌

单片机教程实战2_蜂鸣器唱歌

单片机教程实战2 蜂鸣器唱歌发布: 2009-11-04 09:01 | 作者: 平凡 | 来源: 网络 | 查看: 189次利用单片机(或单板机)奏乐大概是无线电爱好者感兴趣的问题之一。

本文从单片机的基本发间实验出发,谈谈音乐程序的设计原理,并给出具体实例,以供参考。

单片机的基本发音实验我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。

例如,要产生200HZ的音频信号,按图1接入喇叭(若属临时实验,也可将喇叭直接接在P1口线上),实验程序为:其中子程序DEL为延时子程序,当R3为1时,延时时间约为20us,R3中存放延时常数,对200HZ音频,其周期为1/200秒,即5ms。

这样,当P1.4的高电平或低电平的持续时间为2.5ms,即R3的时间常数取2500/20=125(7DH)时,就能发出200HZ 的音调。

将上述程序键入学习机,并不断修改R3的常数可以感到音调的变化。

乐曲中,每一音符对应着确定的频率,表1给出C调时各音符频率及其相应的时间常数。

读者可以根据表1所提供的常数,将其16进制代码送入R3,反复练习体会。

根据表1可以奏出音符。

仅这还不够,要准确奏出一首曲子,必须准确地控制乐曲节奏,即一音符的持续时间。

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

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

其它节拍与时间的对应关系见表2。

但时,由于T0的最大定时时间只能为131毫秒,因此不可能直接用改变T0的时间初值来实现不同节拍。

我们可以用T0来产生10毫秒的时间基准,然后设置一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。

表2中也给出了各种节拍所对应的时间常数。

单片机按键控制蜂鸣器发声程序

单片机按键控制蜂鸣器发声程序

#include<reg52.h>typedef unsigned char uint8;typedef unsigned int uint16;uint8 Count,i;sbit Speak =P1^2; //蜂鸣器器控制脚sbit key1 =P3^2;//按键控制引脚sbit key2 =P3^3;sbit key3 =P3^4;/*以下数组是音符编码*/uint8 code SONG[] ={ 0xff,0x39,0x30,0x33,0x30,0xff,0x30,0x30,0x00,};void Time0_Init()//定时器T0方式1,定时10ms{TMOD = 0x01;IE = 0x82;TH0 = 0xDC;TL0 = 0x00;}void Time0_Int() interrupt 1{TH0 = 0xDC;TL0 = 0x00;Count++;}void delay (uint8 k)//按键防抖延时{uint8 j;while((k--)!=0){for(j=0;j<125;j++){;}}}void Delay_xMs(uint8 x)//发声延时{uint8 i,j;for(i=0; i<x; i++){for(j=0; j<3; j++);}}void Play_Song(uint8 i)//蜂鸣器发声函数{uint8 Temp1,Temp2;uint8 Addr;Count = 0; //中断计数器清0 Addr = i *3;while(1){Temp1 = SONG[Addr++];if (Temp1 == 0xFF) //休止符{TR0 = 0;Delay_xMs(100);}else if (Temp1 == 0x00) //歌曲结束符{return;}else{Temp2 = SONG[Addr++];TR0 = 1;while(1){Speak = ~Speak;Delay_xMs(Temp1);if(Temp2 == Count){Count = 0;break;}}}}}void keyscan (void)//按键切换声音函数{if(key1==0){delay(10);if(key1==0){i=0;}}if(key2==0){delay(10);if(key2==0){i=1;}}if(key3==0){delay(10);if(key3==0){i=2;}}}void Main(){Time0_Init();//定时器0中断初始化while(1){keyscan ();Play_Song(i);}}【本文档内容可以自由复制内容或自由编辑修改内容期待你的好评和关注,我们将会做得更好】。

蜂鸣器程序

单片机蜂鸣器实验C 程序:#include "reg51.h"#define uchar unsigned char#define uint unsigned intsbit FM=P2A3;void delay ( uchar x){uint y;for (; x > 0 x-- )for( y=500 y>0;y--);}void main(){ FM=0;while(1){delay(20);FM=1;delay(20);FM=0;}} 因为单片机的IO 口驱动能力不够让蜂鸣器发出声音,所以我们通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,你要是输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音单片机驱动蜂鸣器原理与设计蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。

蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。

接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。

多谐振荡器由晶体管或集成电路构成,当接通电源后( 1.5~15V 直流工作电压),多谐振荡器起振, 输出1.5〜2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。

下面是电磁式蜂鸣器的外形图片及结构图。

电磁式蜂鸣器实物图:一、电磁式蜂鸣器驱动原理蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO 引脚输出的电流较小,单片机输出的TTL 电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。

单片机驱动蜂鸣器原理与编程

蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。

蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。

接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。

多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。

下面是电磁式蜂鸣器的外形图片及结构图。

电磁式蜂鸣器实物图:电磁式蜂鸣器结构示意图:图 1 图 2 电磁式蜂鸣器内部构成:1. 防水贴纸2. 线轴3. 线圈4. 磁铁5. 底座6. 引脚7. 外壳8. 铁芯9. 封胶10. 小铁片11. 振动膜12. 电路板一、电磁式蜂鸣器驱动原理蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。

S51增强型单片机实验板通过一个三极管C8550来放大驱动蜂鸣器,原理图见下面图3:S51增强型单片机实验板蜂鸣器驱动原理图:图 3如图所示,蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B经过限流电阻R1后由单片机的P3.7引脚控制,当P3.7输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P3.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。

因此,我们可以通过程序控制P3.7脚的电平来使蜂鸣器发出声音和关闭。

程序中改变单片机P3.7引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。

关于单片机的一些小实验_05 蜂鸣器控制实验

*函数名称:main()
*功能:利用P1.3输出高低电平来控制蜂鸣器蜂鸣。
*********************************************************************************************/
void main (void)
{
while(1) //死循环
sbit P1_3 = P1 ^ 3; //定义位变量
#define BEEP_ON() (P1_3=0) //定义"BEEP_ON()"为P1.3输出低电平,控制蜂鸣器蜂鸣
#define BEEP_OFF() (P1_3=1) //定义"BEEP_OFF()"为P1.3输出高电平,控制蜂鸣器不蜂鸣
/*与编译器无关的数据类型定义*/
/********************************************************************************************/
typedef unsigned char uint8; //无符号8位整型变量
/********************************************************************************************
*功能:利用P1.3输出高低电平来控制蜂鸣器蜂鸣。
*硬件条件:1.CPU型号:AT89S52
* 2.晶振:12.000MHz
typedef signed char int8; //有符号8位整型变量
typedef unsigned short uint16; //无符号16位整型变量

基于单片机的蜂鸣器唱歌设计(附图)

蜂鸣器是一种一体化结构的电子讯响器�主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型�他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。

单片机上面使用的蜂鸣器一般都是无源电磁式的蜂鸣器�如下图所示�。

它由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。

接通电源后�振荡器产生的音频信号电流通过电磁线圈�使电磁线圈产生磁场�振动膜片在电磁线圈和磁铁的相互作用下�周期性地振动发声。

蜂鸣器发声原理是电流通过电磁线圈�使电磁线圈产生磁场来驱动振动膜发声的�因此需要一定的电流才能驱动它�单片机IO引脚输出的电流较小�单片机输出的TTL电平基本上驱动不了蜂鸣器�因此需要增加一个电流放大的电路。

单片机与蜂鸣器连接如图二所示。

图中�蜂鸣器的正极接到VCC��5V�电源上面�蜂鸣器的负极接到三极管的发射极E�三极管的基级B经过限流电阻R1后由单片机的P3.7引脚控制�当P3.7输出高电平时�三极管T1截止�没有电流流过线圈�蜂鸣器不发声�当P3.7输出低电平时�三极管导通�这样蜂鸣器的电流形成回路�发出声音。

因此�我们可以通过程序控制P3.7脚的电平来使蜂鸣器发出声音和关闭。

程序中改变单片机P3.7引脚输出波形的频率�就可以调整控制蜂鸣器音调�产生各种不同音色、音调的声音。

另外�改变P3.7输出电平的高低电平占空比�则可以控制蜂鸣器的声音大小�这些我们都可以通过编程实验来验证。

下面就是一个能够发出音乐的单片机程序�示例中所播放的音乐是《两只老虎》。

SPK EQU P3.7 ;位定义ORG 0000H ;伪指令�指定程序从0000H开始存放LJMP START ;程序跳转至START处执行ORG 0030H ;伪指令�指定程序从0030H开始存放START: MOV SP,#60H ;堆栈初始化MOV R3,#00H ;给R3赋值NEXT:MOV A,R3MOV DPTR,#TABLE ;查歌曲表MOVC A,@A+DPTRJZ START ;为00则循环播放此歌MOV R7,A ;R7/R2保存连续相邻的表数据INC R3MOV A,R3MOVC A,@A+DPTRMOV R2,AACALL SONGINC R3SJMP NEXT;==============================;=========歌曲播放子程序==========;==============================SONG:MOV A,R2 ;取出节拍RL AJNZ KEEP ;A不等于零则跳MOV A,#01H ;A等于零则赋值为1KEEP:MOV R2,A ;REPEAT:ACALL EIGHTH ;调用1/8拍延时程序DJNZ R2,REPEAT ;RET;===============================;=======产生1/8拍延时子程序=======;===============================EIGHTH:MOV A,R7 ;查表取出延时参数,保存到R4MOV DPTR,#DELAY_TMOVC A,@A+DPTRMOV R4,AMOV A,R7 ;查表取出1/8拍周期数,保存到R5 MOV DPTR,#S_PARAMOVC A,@A+DPTRMOV R5,ANEXTCYC:ACALL SOUNDDJNZ R5,NEXTCYCRET;==============================;===========发声子程序===========;==============================SOUND:SETB SPKACALL SDELAYCLR SPKACALL SDELAYRET;==============================;===========延时子程序===========;==============================SDELAY:MOV A,R4 ;延时值在R4内MOV R0,AXL2:MOV R1,#03HDL1:NOPDJNZ R1,DL1DJNZ R0,XL2RET;==============================;===========1/8拍周期表==========;==============================S_PARA:DS 1DHDB 15H,16H,00DB 19H,00H,1CH,00H,1FH,21H,00H,25HDB 00H,29H,2CH,00H,31H,34H,37H,00HDB 3EH,41H,00H,49H,00H,52H,57H,00HDB 62H;==============================;===========延时参数表===========;==============================DELAY_T:DS 1DHDB 7EH,77H,00HDB 6AH,00H,5EH,00H,54H,4FH,00H,46HDB 00H,3FH,3BH,00H,35H,32H,2FH,00HDB 2AH,27H,00H,23H,00H,1FH,1DH,0C0HDB 1AH;==============================;============歌曲表=============;==============================TABLE:DW 2504H,2704H,2904H,2504HDW 2504H,2704H,2904H,2504HDW 2904H,2A04H,2C08HDW 2904H,2A04H,2C08HDW 2C02H,2E02H,2C02H,2A02H,2904H,2504HDW 2C02H,2E02H,2C02H,2A02H,2904H,2504HDW 2904H,2004H,2508HDW 2904H,2004H,2508HDW 0000HEND童鞋们可能发现了�数据表TABLE里面的数据才是歌曲数据。

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

ORG 0000H
LJMP START
ORG 000BH
INC 20H ;中断服务,中断计数器加1
MOV TH0,#0D8H
MOV TL0,#0EFH ;12M晶振,形成10毫秒中断
RETI
START:
MOV SP,#50H
MOV TH0,#0D8H
MOV TL0,#0EFH
MOV TMOD,#01H
MOV IE,#82H
MUSIC0:
NOP
MOV DPTR,#DAT ;表头地址送DPTR
MOV 20H,#00H ;中断计数器清0
MUSIC1:
NOP
CLR A
MOVC A,@A+DPTR ;查表取代码
JZ END0 ;是00H,则结束
CJNE A,#0FFH,MUSIC5
LJMP MUSIC3
MUSIC5:NOP
MOV R6,A
INC DPTR
MOV A,#0
MOVC A,@A+DPTR
MOV R7,A
SETB TR0
MUSIC2:NOP
CPL
MOV A,R6
MOV R3,A
LCALL DEL
MOV A,R7
CJNE A,20H,MUSIC2
MOV 20H,#00H
INC DPTR
LJMP MUSIC1
MUSIC3:NOP
CLR TR0
MOV R2,#0DH
MUSIC4:NOP
MOV R2,#0FFH
LCALL DEL
DJNZ R2,MUSIC4
INC DPTR
LJMP MUSIC1
END0:NOP
MOV R2,#0FFH
MUSIC6:MOV R3,#00H
LJMP MUSIC0
DEL:NOP
DEL3:MOV R4,#02H
DEL4:NOP
DJNZ R4,DEL4
NOP
DJNZ R3,DEL3
RET
NOP
DAT:
DB 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 , 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 , 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 , 40H
DB 18H, 80H, 00H
END

相关文档
最新文档