下面的程序怎么理解,数组是怎么得到的
#include "reg51.h"
unsigned char Count;
sbit FMQ =P3^5 ; //蜂鸣器控制脚
unsigned char code SONG[] ={
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,
0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,
0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x80,0x2b,0x20,
0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,
0x39,0x10,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,
0x26,0x80,0x26,0x20,0x2b,0x10,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,0x20,0x26,0x20,0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,
0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x1c,0x20,
0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,
0x10,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,
0x10,0x2b,0x10,0x2b,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,
0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,
0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,
0x20,0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,
0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,};
void Time0_Init() //定时器0初始化函数
{
TMOD = 0x01; //工作模式选择
IE = 0x82; //中断设置
TH0 = 0xD8; //装初值
TL0 = 0xEF; //12MZ晶振,10ms
}
void Time0_Int() interrupt 1 //定时器0中断子函数
{
TH0 = 0xD8;
TL0 = 0xEF;
Count++; //长度加1
}
void Play_Song(unsigned char i)
{
unsigned char Temp1,Temp2;
unsigned int Addr;
Count = 0; //中断计数器清0
Addr = i * 217;
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)
{
FMQ = ~FMQ;
Delay_xMs(Temp1);
if ( Temp2 == Count )
{
Count = 0;
break;
}
}
}
}
}
谢谢你,我已经自己编出来了,恩,你说的问题确实是延时定义有问题。
单片机蜂鸣器播放音乐加开关程序怎么设置
2、配置蜂鸣器:根据蜂鸣器连接的引脚,配置引脚模式为输出模式。3、编写音乐播放程序:使用单片机的蜂鸣器播放音乐,需要编写相应的音乐播放程序。可以使用现成的音乐库函数或者自行编写音乐解码程序。4、添加开关控制程序:为了实现开关控制,需要在程序中添加开关输入的读取和处理逻辑。
stm32f4标准库开发——蜂鸣器音乐
蜂鸣器分为有源和无源两种,有源蜂鸣器通电就能发声,而无源蜂鸣器则需要高低电平切换来发声。通过控制蜂鸣器的频率和发声时间,可以组合出简单的音乐。发出音乐的关键在于定时us延时与蜂鸣器的配合。本实验通过实现定时延时,结合有源蜂鸣器,成功演奏出《一闪一闪亮晶晶》。实验电路中,PF8连接到蜂鸣器。在实现...
怎样用stc89c52单片机控制蜂鸣器发出音乐的c语言程序?
include\\r\\n#include\\r\\n\/\/本例采用89C52,晶振为11.0592MHZ\\r\\n\/\/关于如何编制音乐代码,其实十分简单,各位可以看以下代码.\\r\\n\/\/频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;\\r\\n\/\/所以拿出谱子,试探编吧!\\r\\nsbitBeep=P1^5;\\r\\n\\r\\nunsignedcharn=0;\/\/n为节拍常数变...
单片机播放音乐的工作原理
总的来说,单片机播放音乐的工作原理是将音乐信息转化为数字信号,通过编程控制单片机的定时器和I\/O端口来输出特定频率和持续时间的方波信号,驱动扬声器或蜂鸣器发出声音。这种方法可以灵活地播放各种音乐旋律,广泛应用于各种电子产品中,如手机、电子琴、游戏机等。
使用51单片机蜂鸣器播放音乐 求keil程序
\/\/11代表低音哆 21代表高音哆 1代表中音哆 \/\/12代表低音来 22代表高音来 2代表中音来,是不是翻译乐谱很方便 include<reg52.h> sbit SPK = P3^7; \/\/P3.7外接扬声器,可以改成你所说的P1^5 define uint unsigned int;define uchar unsigned char;uint x,y;uint i,j,k;\/\/以下是根据...
求51单片机蜂鸣器程序
51单片机,编写延时程序,控制蜂鸣器发声:很简单的#include<reg52.h>#define uchar unsigned char#define uint unsigned int sbit fengmingqi=P0^0; \/\/声明IO口void delay(uint x)\/\/延时子函数{ uint i,j;for(i=x;i>0;i--)for(j=50;j>0;j--);}void main(void){while(1) \/\/循环{...
用单片机控制蜂鸣器放音乐
看起来数组应该是音乐数据,其中包括四种数据,就是休止符(每个100毫秒)、歌曲结束符、音阶(给出的是蜂鸣器的震荡周期)、一个音阶持续的时间长度。如果你的晶振是12MHz,按照定时器中断给Count加一来看,音阶持续的时间应该是以10毫秒为单位。Play_Song函数要求给出参数i,我的看法是这个i是指要播放第...
如何使用51单片机的蜂鸣器来播放某些歌曲?
要准确奏出一首曲子,必须准确地控制乐曲节奏,即一音符的持续时间。音符的节拍我们可以用定时器T0来控制,送入不同的初值,就可以产生不同的定时时间。便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。其实就是一个控制单片机节拍的问题,如果想要51的具体程序,网上很多,没找到可以给我留言,我给...
用89C51单片机和蜂鸣器播放“ 生日快乐”歌的C程序 12M晶振
1、写入头文件。2、加入宏定义。3、位定义 给出蜂鸣器变量 beep,接口是P2^3。sbit beep = P2^3;。4、设计延迟函数:void delay(uint z){uint x,y;for(x = z; x > 0; x--)for(y = 60; y > 0 ; y--);} 。5、设计主函数。6、加入循环效果,蜂鸣器。beep = ~beep中: ~按...
单片机设计如何利用定时器产生乐曲
电磁线圈、磁铁、振动膜片及外壳等组成。接通电源 后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振 动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。你可以到网上下载51单片机蜂鸣器音乐简谱转换工具,网上这个东西很多的可以自己去搜索下载,希望我的回答对你有帮助!